I have been reviewing some books from  Packt Publishing lately, and I’m now expecting a copy of PHP 5 E-commerce Development in a few days.  I have been looking forward to for a while, as I will be working on a similar project in the near future. Here is the lowdown:

Php 5 eCommerce Development Book Cover

Php 5 eCommerce Development Book Cover

This book will show you how to create your own PHP framework that can be extended and used with ease, particularly for e-commerce sites. Using this framework you will be able to display and manage products, customize products, create wish-lists, make recommendations to customers based on previous purchases, send email notifications when certain products are in stock, rate the products online, and much more.

You can check out the sample chapter Enhancing the User Experience now.

This article is a result of my experiences with streaming MP3 streams with AS3 on a ATOM-based device. After playing a stream for a given period of time the Flash Player kept crashing for no apparent reason. After some investigation I found a memory leak within my streaming application, and after further investigation I was able to narrow it down to the Sound class in AS3 (with good help from this blog post by Madarco). I quote:

“While you listen to an mp3 in streaming mode: snd.loadSound(url, true), flash will keep in memory the music played.”.

Now, when you have a continuous stream this means trouble. The memory used by the stream will not be released until the stream is closed.

Based on the info provided in Madarco’s post I spent some time working on a solution that would satisfy my needs. I ended up with an approach that initiates a second stream once the first has a buffer of a given size. Once the limit is reached I initiate the second stream at zero volume, then use GreenSock’s VolumePlugin tween to cross-fade the two streams. Once this is done, I free the memory reserved by the first stream and swap the references.

A complete working implementation can be found at PasteBin. For the sake of demonstration I’m swapping streams after 500kb, but this is clearly not an ideal limit for real world usage. This can also be tweaked to take the amount of used memory and / or time played instead of just looking at the buffer size when deciding when to swap streams. I still have quite some testing ahead before I feel comfortable using this, but it’s a good start. Hope this can help others faced with the same problem.

Book review: Papervision 3D Essentials (follow link to buy)
ISBN 1847195725
ISBN 13 978-1-847195-72-2
Publisher: Packt Publishing
Author: Paul Tondeur and Jeff Winder.
This review here is long overdue, but since work got a bit hectic, and I spent some time moving it got pushed back.

Papervision3D Essentials Cover

Papervision3D Essentials Cover

Short version: If you want to get started with Papervision 3D, get this book. It’s a well written, great introduction for people new to Papervision3D, as well as a good reference for more experienced developers. It covers everything from basics to filters, effects and performance topics.

Longer version: Before I started reading this book I had never used Pv3D except looking at some neat demos. I had some experience with OpenGL from way-back, so the basic 3d concepts were not new to me.  As I got started I found that most of what I knew from general 3d graphics development was covered pretty well in the first few chapters. From the basic building blocks, to coordinate systems and primitives. The book starts out with a chapter dedicated to setting up authoring tools for compiling the code created during the book. Both Flash CS3/CS4 and Flex/Flash Builder is covered. After that it deals briefly with some core AS3 concepts before moving on to fundamental 3D subjects. Everything is explained really well, and as the book progresses trough the rest of the chapters it details subjects as drawing primitives, adding materials, setting up cameras and loading external models, then going on with particle systems, external models, filters and effects. A chapter is also dedicated to performance optimization. The book offers a number of good examples, also available on-line.

The authors are clearly very comfortable with the subjects they are covering, and discussing pretty much every topic in a language that makes it easy to follow, also for less experienced developers. In my opinion this is a very well written book that I would not hesitate to recommend to beginning developers as well as experienced.