August 27th, 2008

This is going to take longer to explain than it did to build (literally 10 minutes, and 8 of those were spent googling for the image). Click above to see it in action.
Richard Lord was guest speaker at our Flash Brighton user group last night, presenting his Flint particle system. I think every creative coder has found themselves toying with particle effects at some point (do check out my generative stuff) but Rich’s system takes all the heavy lifting from the coding and just leaves the fun part. And it can create some really authentic looking smoke, in very few lines of code.
The movie above is my riff on a very old David Lynch photograph from his “Nudes and Smoke” collection (see here). A lot of Lynch’s “still” art work involves incorporating moving parts into paintings and sculpture, so I hope he would approve of this subtle animation.
Rich will be introducing Flint to a wider audience at FOTB08 next month.
Posted in as3, flash, fotb, generative, innovation, particles | 6 Comments »
August 22nd, 2008
The simplest ideas are always the best. I did a project a few months back with the very talented Paul Lloyd of FourTwo.net. We built a little Flash carousel component in AS3 for a corporate client. And it came out pretty well.
The data that runs it all came from a remotely hosted XML, so rather than use a fixed set of cards, a whole new application could be created just by pointing it at another XML. Which is what I have done here - making some of my blog posts look pretty.

Now here’s the cool bit - if instead of using a fixed URL I tell the swf file to read the path to the XML from the QueryString, it becomes reusable by anyone. Even you. Here’s an example:
This is the url of the carousel: http://actionscripter.co.uk/projects/carousel/
Create a new XML, and upload it somewhere, eg.
http://www.zenbullets.com/portfolio.xml
… then give the URL of the new XML to the carousel …
http://…/carousel/?http://www.zenbullets.com/portfolio.xml
… and, wahay, we have a slick looking carousel showcasing a selection from my portfolio.
The structure of the XML should be self explanatory, so feel free to try it. Except when you try it with your own URL it doesn’t work. Why is that?
There’s one more thing you need: you have to give permission for the Flash file to use data from your domain. Flash Player has very tight security features, and won’t let swfs grab data from other domains, unless that domain has said it’s okay by putting a crossdomain.xml file on the top level. This applies both to the URL of the XML and the URLs of any images specified inside that XML. For more info, see here. The crossdomain.xml I used for the example above is here, if you copy this and put it at the top level of the domain where you placed your XML/images it should do the trick.
Posted in as3, blogging, development, flash, javascript | No Comments »
May 27th, 2008

There’s lots of fun to be had with Moo mini-cards, and I’ve been getting good feedback on the batch of fractal cards I made recently, which were created by taking snapshots of one of my flash experiments. The magic behind this was so simple I may as well share it with you. All you need to create your own set is the Flex/AIR app I created, which you can download here, and a Flickr account. This is how it works:
You give the app the path to your swf, and hit enter. It then runs a function to start a timed loop, as follows:
private var _saveDir:File;
private var _timer:Timer;
private var _counter:int;
private function startSnapshot(url:String, time:Number = 5):void {
// loadedSwf is the name of the mx:Image that will contain the swf
loadedSwf.source = url;
// create a directory to store our snapshots
var dirName:String = "snapshots";
_saveDir = File.desktopDirectory.resolvePath(dirName);
var x:Number = 1;
while (_saveDir.exists) {
_saveDir = File.desktopDirectory.resolvePath(dirName + String(x++));
}
_saveDir.createDirectory();
// start loop
_counter = 1;
_timer = new Timer(time * 1000);
_timer.addEventListener(TimerEvent.TIMER, snapLoop);
_timer.start();
}
Then, while the swf plays, the timer loop fires this function every few seconds to take a snapshot:
private function snapLoop(e:TimerEvent):void {
// create a new BitmapData object based on the size of the loaded swf
var BMPData:BitmapData = new BitmapData(loadedSwf.width, loadedSwf.height, true, 0xFFFFFF);
// take a snapshot of the swf, and store it in the BitmapData object
BMPData.draw(loadedSwf);
// encode it as a jpg
var jpgEncoder:JPEGEncoder = new JPEGEncoder(80);
var jpgBytes:ByteArray = jpgEncoder.encode(BMPData);
// save it
var ourFile:File = _saveDir.resolvePath("snap" + _counter++ + ".jpg");
var fileStream:FileStream = new FileStream();
fileStream.open(ourFile, FileMode.WRITE);
fileStream.writeBytes(jpgBytes, 0, jpgBytes.length);
fileStream.close();
}
Note that the BitmapData snap may give unexpected results with transparent swfs, so it is best used with swfs that have a solid background.
Once you have a folder full of snapshots, upload these to Flickr. For this example I pointed the app at a local version of my favourite fractal experiment swf, to produce this set of images.
To turn these into mini-cards, the final step is to use Moo’s Flickr import option. Point it at the Flickr set you have created, pay your money, and in 10 days or so a pack of groovy cards pop through the postbox. Simple.
Posted in AIR, as3, flash, flex, flickr, generative, mashups, print | 3 Comments »
April 24th, 2008
A message to clients with big ideas (and big money) - this is what we can do with Flash these days:

(c/o the mighty mrdoob)
Posted in 3D, as3, flash, gaming, innovation, papervision | No Comments »
April 18th, 2008
The portfolio has just received a long overdue update, with some recent projects added to it, one of which being (slightly prematurely) the CD-Rom I am currently finishing off for Natural England, which I put together using Flex3 and AIR. I mention this because in the process of doing this project I have come to realise that I now owe Adobe a small apology.
A year ago O’Reilly books generously sent me a review copy of their Apollo For Adobe Flex Developers Pocket Guide. Apollo, or AIR as it has since been re-christened, was only at alpha stage when the book was released, and was full of bugs. I had spent a lot of time hacking away at both that and the documentation-less Flash 9 Alpha that had been released not long before. With AIR, even with the help from some of the development team, I couldn’t get even the most basic of applications to run. Because of my frustration (and because I thought I was oh-so big and clever) I wrote a deeply sarcastic review of the book for Blogcritics.
So this is my apology. I made my peace with Flash 9 and ActionScript 3.0 some time ago, and now, since AIR finally got it’s first 1.0 official release last month, I have had a complete u-turn in my opinion of that too. AIR is an utter delight to work with. And with Flex reaching version 3 to coincide with the release, they go together like Peters And Lee. Harmonious.
Posted in AIR, as3, development, flash, flex, usability | No Comments »