<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Soulwire</title>
	<atom:link href="http://blog.soulwire.co.uk/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.soulwire.co.uk</link>
	<description>Art + Technology</description>
	<lastBuildDate>Mon, 21 Mar 2011 22:27:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Introducing Springboard</title>
		<link>http://blog.soulwire.co.uk/laboratory/javascript/springboard-javascript-css-html-template</link>
		<comments>http://blog.soulwire.co.uk/laboratory/javascript/springboard-javascript-css-html-template#comments</comments>
		<pubDate>Mon, 21 Mar 2011 22:27:20 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Transmissions]]></category>
		<category><![CDATA[Utilities]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1312</guid>
		<description><![CDATA[I love HTML5 Boilerplate and use it a lot as a basis for web projects. Sometimes however, I find it still does a little bit too much for my needs and I end up removing a lot before I can get started. Most importantly for me though, it still currently doesn&#8217;t support building with Google [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/javascript/what-the-fuck-is-my-mashup' rel='bookmark' title='Permanent Link: What The Fuck Is My Mashup?'>What The Fuck Is My Mashup?</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/managing-runtime-loaded-dynamic-assets' rel='bookmark' title='Permanent Link: Hello Dynamic Sprite'>Hello Dynamic Sprite</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/perlin-noise-flow-field' rel='bookmark' title='Permanent Link: Perlin Noise Flow Field'>Perlin Noise Flow Field</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.soulwire.co.uk/wp-content/uploads/2011/03/springboard.jpg" alt="Springboard is an ultra minimal JavaScript / CSS and HTML project springboard." title="Springboard" width="710" height="250" class="size-full wp-image-1316" /></p>
<p>I love <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://html5boilerplate.com/"  target="_blank">HTML5 Boilerplate</a> and use it a lot as a basis for web projects. Sometimes however, I find it still does a little bit too much for my needs and I end up removing a lot before I can get started.</p>
<p>Most importantly for me though, it still currently doesn&#8217;t support building with <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/closure/compiler/"  target="_blank">Google Closure Compiler</a> which I tend to use both for it&#8217;s advanced code optimisations and for <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://calendar.perfplanet.com/2010/coding-better-object-oriented-javascript-with-closure-compiler/" >coding better Object-Oriented JavaScript</a> (not to mention generating JavaScript documentation from the very same comments I write for the compiler).</p>
<h2>So What&#8217;s Springboard Then?</h2>
<p><a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire/Springboard"  target="_blank"><strong>Springboard</strong></a> is an <em>ultra minimal</em> JavaScript / CSS and HTML project template (or <em>springboard</em>).</p>
<p>It features a very useful <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://ant.apache.org/"  target="_blank">ANT</a> build file which, among other things, can:</p>
<ul>
<li>Refactor template files to match your project&#8217;s namespace so you&#8217;re ready to code in seconds</li>
<li>Combine JavaScript and CSS libraries to reduce HTTP requests</li>
<li>Compile JavaScript using the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/closure/compiler/"  target="_blank">Google Closure Compiler</a> <em>(simple or advanced)</em></li>
<li>Minify CSS using the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://developer.yahoo.com/yui/compressor/"  target="_blank">YUI Compressor</a></li>
<li>Generate JavaScript documentation using the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/jsdoc-toolkit/"  target="_blank">JSDoc Toolkit</a></li>
<li>Sanitize HTML and inject variables at compile time</li>
</ul>
<p>Also included is a simple JavaScript <strong>Model-View-Controller</strong> (MVC) template (based on <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.alexatnet.com/content/model-view-controller-mvc-javascript"  target="_blank">Alex Netkachov&#8217;s</a>) which can optionally be used as a basis for your project.</p>
<p>Hopefully No fluff &#8211; just the very basics you need to get a project or experiment started.</p>
<p><a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire/Springboard"  target="_blank">Check out Springboard on github</a><span id="more-1312"></span></p>
<h2>Quick Setup</h2>
<p>To get started, first clone the repository:</p>
<pre>
cd /your/workspace
git clone git@github.com:soulwire/Springboard.git YourProjectName
</pre>
<p>Run the <strong>setup</strong> task and enter your project&#8217;s namespace when prompted:</p>
<pre>
cd YourProjectName
ant setup
Enter the full project namespace for this project: com.domain.project
</pre>
<p>This will refactor the project template to match your namespace. You&#8217;ll then be given the option to delete the GIT metadata and disconnect from the Springboard repository&#8230;</p>
<p>You can build your project with the default ANT task, <strong>build</strong></p>
<pre>
ant build
</pre>
<p>And when you&#8217;re ready, generate documentation using the <strong>jsdoc</strong> task</p>
<pre>
ant jsdoc
</pre>
<p>You should also have a look at the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire/Springboard/blob/master/build.properties"  target="_blank">build.properties</a> file as here you can add your credentials and tweak the various build settings to your taste.</p>
<h2>A Quick Note About Blocks</h2>
<p>Springbard uses HTML comment blocks to figure out how it should build the project. There are different types of blocks you can use:</p>
<ul>
<li><strong>CSS:LIB</strong> &raquo; Third party CSS files (combined and minified)</li>
<li><strong>CSS:SRC</strong> &raquo; Your project&#8217;s styles (combined and minified)</li>
<li><strong>JS:LIB</strong> &raquo; JavaScript dependancies (combined but otherwise left untouched)</li>
<li><strong>JS:SRC</strong> &raquo;  JavaScript source files (combined and compiled)</li>
</ul>
<p>Any linked JavaScript or CSS resources outside of these tags will simply be cloned into the build directory and left untouched for flexibility.</p>
<p>Springboard will look at all of your pages when it builds and combine all files in all blocks of the same type. There is then a generic <strong>document ready</strong> handler, which initialises scripts for a page based on the id tag of it&#8217;s body. This is best illustrated in this <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire/Springboard/blob/master/src/js/namespace.project.App.js" >example</a>.</p>
<h2>A Quick Note About Externs</h2>
<p>If you&#8217;ve used the Closure Compiler before, you&#8217;ll be familiar with <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/closure/compiler/docs/api-tutorial3.html#externs"  target="_blank">Externs</a>. Externs tell the compiler not to refactor certain methods and properties, because doing so may break your code if they reference a third party library or code not being compiled. Springboard currently ships with an externs file supporting JQuery 1.5, just to get you going. You can easily generate more for your favorite libraries using <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.dotnetwise.com/Code/Externs/index.html"  target="_blank">this great tool</a> by <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://blog.dotnetwise.com/2009/11/closure-compiler-externs-extractor.html"  target="_blank">Laurentiu Macovei</a> or others like it.</p>
<h2>What Springboard Doesn&#8217;t Do</h2>
<p>The primary intention of Springboard is to provide a simple but powerful project template and build file, which integrates with the Closure Compiler as well as doing the basics which you would expect; such as file concatenation and CSS minification. It&#8217;s intended to be extremely light and minimal, allowing you to take the project kernel forward in whichever way you need; whether it&#8217;s a large site build or a quick JavaScript experiment. I would imagine that future updates will strip it back and optimise it even further, as opposed to adding features.</p>
<p>So to be clear, it is in no way intended as a replacement for the amazing projects out there such as HTML5 Boilerplate; simply an option if you need less rather than more in certain situations.</p>
<p><strong>Now <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire/Springboard"  target="_blanl">fork off</a> and start making nice things&#8230;</strong></p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/javascript/what-the-fuck-is-my-mashup' rel='bookmark' title='Permanent Link: What The Fuck Is My Mashup?'>What The Fuck Is My Mashup?</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/managing-runtime-loaded-dynamic-assets' rel='bookmark' title='Permanent Link: Hello Dynamic Sprite'>Hello Dynamic Sprite</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/perlin-noise-flow-field' rel='bookmark' title='Permanent Link: Perlin Noise Flow Field'>Perlin Noise Flow Field</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/javascript/springboard-javascript-css-html-template/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Noise-Reactive Particle Sphere</title>
		<link>http://blog.soulwire.co.uk/laboratory/cinder/noise-reactive-particle-sphere</link>
		<comments>http://blog.soulwire.co.uk/laboratory/cinder/noise-reactive-particle-sphere#comments</comments>
		<pubDate>Wed, 23 Feb 2011 11:01:06 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Cinder]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Experiments]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[Geometry]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1289</guid>
		<description><![CDATA[Music is Ybe 76 by Subheim I&#8217;ve been trying to find more time lately to experiment with C++ and get more familiar with the OpenGL API and to achieve this have been using the excellent Cinder library. I&#8217;m a complete C++ novice and, coming from a Flash background, it&#8217;s immediately apparent how much of the [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/actionscript3-dynamic-sound-visualisation' rel='bookmark' title='Permanent Link: AS3 Music Visualisation'>AS3 Music Visualisation</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/perlin-noise-flow-field' rel='bookmark' title='Permanent Link: Perlin Noise Flow Field'>Perlin Noise Flow Field</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/20266917?title=0&amp;byline=0&amp;portrait=0&amp;color=29cad4" width="710" height="399" frameborder="0"></iframe></p>
<p><em>Music is <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.last.fm/music/Subheim/_/Ybe+76"  target="_blank">Ybe 76</a> by <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.subheim.com/"  target="_blank">Subheim</a></em></p>
<p>I&#8217;ve been trying to find more time lately to experiment with C++ and get more familiar with the OpenGL API and to achieve this have been using the excellent <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://libcinder.org/"  target="_blank">Cinder</a> library. I&#8217;m a complete C++ novice and, coming from a Flash background, it&#8217;s immediately apparent how much of the hard work had been done for you in higher level languages like AS3. Learning about pointers, memory allocation and fumbling your way around undescriptive compile errors is bit of an eye opener, although thankfully libraries like <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://libcinder.org/"  target="_blank">Cinder</a> and <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.openframeworks.cc/"  target="_blank">OpenFrameworks</a> help take a lot of the pain out of the transition and ultimately function as very exciting and inspiring tools to work with.<span id="more-1289"></span></p>
<p>Up until now I&#8217;ve been keeping most of these experiments to myself (although some crop up on my <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.flickr.com/photos/soulwire/sets/"  target="_blank">Flickr stream</a> from time to time), but I&#8217;ve decided to start sharing the processes when I can &#8211; so that you can tell me what I&#8217;m doing wrong and teach me the right way! Or, if you&#8217;re like me and are used to languages like AS3, JavaScript and Processing / Java, but are wanting to take your creative coding into other environments; maybe you can learn a little bit from what I&#8217;ve been trying.</p>
<p>Either way, the Noise Sphere experiment, though not particularly original; made me realise that the processes involved spanned many of the key aspects of programming that I&#8217;m both interested in but also keen to learn much more about.</p>
<p>The plan is to release a series of relatively quick tutorials, taking you through the process of creating the sketch you can see in the video above (and far beyond, into OpenGL shaders etc) and in doing so cover roughly the following topics:</p>
<ul>
<li>Setting up Cinder</li>
<li>Geometry: Vectors &amp; Matrices</li>
<li>Movement &amp; Dynamics</li>
<li>Procedural Mesh Generation</li>
<li>OpenGL: GLSL, Vertex &amp; Fragment Shaders</li>
</ul>
<p>I&#8217;m certainly not claiming to be an expert in these topics, in fact in some I&#8217;m only just getting started. But my hope is that I can share my discoveries as they happen and pass on knowledge I&#8217;ve picked up from the community, in case it helps other developers travelling along similar trajectories to myself. I&#8217;ve found a lot of amazing resources for learning, but have often felt that some of them would benefit from being translated for interactive developers such as myself, who come from more of a creative than technical background.</p>
<p>Pester me if part one isn&#8217;t out soon!</p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/actionscript3-dynamic-sound-visualisation' rel='bookmark' title='Permanent Link: AS3 Music Visualisation'>AS3 Music Visualisation</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/perlin-noise-flow-field' rel='bookmark' title='Permanent Link: Perlin Noise Flow Field'>Perlin Noise Flow Field</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/cinder/noise-reactive-particle-sphere/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>What The Fuck Is My Mashup?</title>
		<link>http://blog.soulwire.co.uk/laboratory/javascript/what-the-fuck-is-my-mashup</link>
		<comments>http://blog.soulwire.co.uk/laboratory/javascript/what-the-fuck-is-my-mashup#comments</comments>
		<pubDate>Mon, 07 Feb 2011 16:56:46 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Miscellany]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1279</guid>
		<description><![CDATA[The fruits of a Sunday hangover; What The Fuck Is My Mashup? is an idea generator for ridiculous (but sometimes plausible) mashups. Inspired by What The Fuck Should I Make For Dinner by Zach Golden, WTFIMM is a simple JavaScript based randomiser that takes a series of templates and a corpus of words and turns [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/javascript/springboard-javascript-css-html-template' rel='bookmark' title='Permanent Link: Introducing Springboard'>Introducing Springboard</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-bitmapdata-glitch-generator' rel='bookmark' title='Permanent Link: Smack My Glitch Up'>Smack My Glitch Up</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.soulwire.co.uk/wp-content/uploads/2011/02/wtfimm.jpg" alt="What The Fuck Is My Mashup" title="What The Fuck Is My Mashup" width="710" height="360" /></p>
<p>The fruits of a Sunday hangover; <a href="http://whatthefuckismymashup.com/"  title="What The Fuck Is My Mashup" target="_blank">What The Fuck Is My Mashup?</a> is an idea generator for ridiculous (but sometimes plausible) <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)"  target="_blank">mashups</a>.<span id="more-1279"></span></p>
<p>Inspired by <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.whatthefuckshouldimakefordinner.com/" >What The Fuck Should I Make For Dinner</a> by <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.zachgolden.com/"  target="_blank">Zach Golden</a>, <strong>WTFIMM</strong> is a simple JavaScript based randomiser that takes a series of templates and a corpus of words and turns them into concepts that utilise the latest technologies, APIs and social media platforms.</p>
<p>I&#8217;ve abstracted the code into a simple framework which I&#8217;ve called the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire/WTFEngine"  target="_blank">WTF Engine</a>, that allows you to create a generator for any subject.</p>
<p>Here are a few of my favourite generative mashups so far:</p>
<ul>
<li>Blackberry application that generates poetry based on Yelp data</li>
<li>Platform for building Wii controlled, memcached dashboard widgets for Open Frameworks enabled devices</li>
<li>Windows optimised GMail configurator for social microblogging</li>
<li>Podcast that generates poetry based on Google Earth data</li>
<li>Scalable, PHP based Feedburner API explorer with a hand tracking front-end</li>
<li>Feature detecting blogging platform for Lingo, Haxe and AS3</li>
<li>Pascal based kiosk to replace data visualisations and hook into GMail via Twitter and Google Maps</li>
<li>Multi-touch, open source Digg microblogging utility powered by Slashdot and the Google Gears C# API</li>
<li>Platform for building dynamic, Wii controlled iPad applications for MATLAB enabled devices</li>
<li>Python based Del.icio.us and GitHub mashup, designed for generative gaming</li>
<li>Objective C interpreter for creating dynamic microblogging experiences in JavaScript</li>
<li>Scalable, Wii controlled GitHub shopping utility powered by Foursquare &#038; the Yahoo Pipes API</li>
<li>Ajax based platform for rapidly developing kiosks based on Google Gears data</li>
<li>Perl based platform for rapidly developing art installations based on GitHub data</li>
</ul>
<p>The <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire/WTFEngine"  target="_blank">WTF Engine code</a> and this particular implementation is available in my <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire"  target="_blank">GitHub repository</a>.</p>
<p>Have fun, and if for any bizarre reason you make one of them, let me know!</p>
<p><a href="http://whatthefuckismymashup.com/"  target="_blank" title="What The Fuck Is My Mashup">http://whatthefuckismymashup.com/</a></p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/javascript/springboard-javascript-css-html-template' rel='bookmark' title='Permanent Link: Introducing Springboard'>Introducing Springboard</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-bitmapdata-glitch-generator' rel='bookmark' title='Permanent Link: Smack My Glitch Up'>Smack My Glitch Up</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/javascript/what-the-fuck-is-my-mashup/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Simple Flash GUI Tool</title>
		<link>http://blog.soulwire.co.uk/code/actionscript-3/simple-flash-prototype-gui-tool</link>
		<comments>http://blog.soulwire.co.uk/code/actionscript-3/simple-flash-prototype-gui-tool#comments</comments>
		<pubDate>Wed, 19 Jan 2011 17:32:24 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Interface]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1242</guid>
		<description><![CDATA[Update: Keith himself has been working on a similar idea and has released MinimalConfigurator. Keith Peter&#8217;s Minimal Components are an excellent tool for any Flash developer when it comes to adding realtime configuration to a SWF. I find myself using them a lot in my demos and prototypes but for sketches with many editable parameters [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/open-source/as3-drag-drop-shuffle-grid-menu' rel='bookmark' title='Permanent Link: AS3 Shuffle Grid Class'>AS3 Shuffle Grid Class</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/as3-group94-style-scrolling-menu' rel='bookmark' title='Permanent Link: AS3 Group94 Menu'>AS3 Group94 Menu</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2011/01/SimpleGUIDemo.swf" rel="lightbox;width=850;height=550;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2011/01/simplegui.jpg" alt="Simple AS3 GUI" title="Simple AS3 GUI"/></a></p>
<blockquote><p>Update: Keith himself has been working on a similar idea and has released <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.bit-101.com/blog/?p=2961/"  target="_blank">MinimalConfigurator</a>.</p></blockquote>
<p>Keith Peter&#8217;s <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.minimalcomps.com/"  target="_blank">Minimal Components</a> are an excellent tool for any Flash developer when it comes to adding realtime configuration to a SWF. I find myself using them a lot in my demos and prototypes but for sketches with many editable parameters it&#8217;s still a hassle writing boilerplate code to set up and arrange the components, as well as adding the appropriate event handlers.</p>
<p>Inspired by GUI tools for OpenFrameworks such as <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/memo/msalibs/tree/master/ofxSimpleGuiToo"  target="_blank">ofxSimpleGuiToo</a> and <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.roxlu.com/of/ofxtweakbar"  target="_blank">ofxTweakbar</a>, and <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.sojamo.de/libraries/controlP5/"  target="_blank">ControlP5</a> for Processing; I thought it was time to have an equally fast and easy to use GUI tool for Flash AS3 projects.<span id="more-1242"></span></p>
<h3>Introducing SimpleGUI</h3>
<p>SimpleGUI is a single Class utility designed for AS3 projects where a developer needs to quickly add UI controls for variables or functions to a sketch. Properties can be controlled with just one line of code using a variety of components from the fantastic <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.minimalcomps.com/"  target="_blank">Minimal Comps</a> set, as well as custom components written for SimpleGUI such as the <strong>FileChooser</strong>.</p>
<p>SimpleGUI Currently exposes the following methods, as well as an open <strong>addControl</strong> method where any Class definition can be passed:</p>
<ul>
<li><strong>addColumn</strong>: Starts a new column of components</li>
<li><strong>addGroup</strong>: Starts a new group of components</li>
<li><strong>addLabel</strong>: Adds a TextField for labels or instructions</li>
<li><strong>addToggle</strong>: Adds a CheckBox for Boolean values</li>
<li><strong>addButton</strong>: Adds a PushButton for triggering callbacks</li>
<li><strong>addSlider</strong>: Creates a slider for numerical values</li>
<li><strong>addRange</strong>: Creates a range slider for two numerical values</li>
<li><strong>addStepper</strong>: An alternative component to the slider for numbers</li>
<li><strong>addColour</strong>: Adds a colour picker for integers</li>
<li><strong>addComboBox</strong>: Adds a ComboBox box for any object</li>
<li><strong>addFileChooser</strong>: Allow the user to load in data</li>
<li><strong>addSaveButton</strong>: This triggers the save method for generating code</li>
</ul>
<p>Other features include:</p>
<ul>
<li><strong>HotKey</strong>: Assign a hot key for showing / hiding the GUI</li>
<li><strong>Context Menu</strong>: Toggle the GUI from a context menu item</li>
<li><strong>Message</strong>: Pulse a message to the user in the toolbar</li>
<li><strong>Show Toggle</strong>: Display a toggle when the GUI is hidden</li>
<li><strong>Save Settings</strong>: Generate AS3 code to commit your current values</li>
<ul>
<h3>Using SimpleGUI</h3>
<p>Each method takes an optional parameter called <strong>options</strong>, which is simply a dynamic Object from which you can pass values for any parameter the corresponding component has, as well as <strong>callback</strong> and <strong>callbackParams</strong> properties for triggering methods each time the component changes.</p>
<p>For example, to create a Slider for controlling a Number, set it&#8217;s width, execute a callback and display a custom label, you would write:</p>
<pre>
_gui.addSlider("myNumber", 0, 100, {label:"My Number", width:200, callback:onNumberChanged});
</pre>
<p>Although you can pass custom labels to each component, omitting this parameter will simply cause the variable name to be parsed and used as the label. For example, a variable called <em>&#8216;myNumber&#8217;</em> will generate the label <em>&#8216;My Number&#8217;</em>.</p>
<p>SimpleGUI also supports nested properties, to any depth, using normal dot syntax. So you could control a particle&#8217;s position by writing:</p>
<pre>
_gui.addSlider("myParticle.position.x", 0, 1000);
</pre>
<p>Here is the code for the <a href="http://blog.soulwire.co.uk/wp-content/uploads/2011/01/SimpleGUIDemo.swf" rel="lightbox;width=850;height=550;" >demo</a> above. <em>Only 27 lines of code to control the whole sketch.</em></p>
<pre>
_gui = new SimpleGUI(this, "Example GUI", "C");

_gui.addGroup("General Settings");
_gui.addColour("backgroundColour");
_gui.addButton("Randomise Circle Position", {callback:positionCircle, width:160});
_gui.addSaveButton();

_gui.addColumn("Noise Options");
_gui.addSlider("noiseBase.x", 10, 200);
_gui.addSlider("noiseBase.y", 10, 200);
_gui.addSlider("noiseSeed", 1, 1000);
_gui.addSlider("noiseOctaves", 1, 4);
_gui.addSlider("turbulence.x", -10, 10);
_gui.addSlider("turbulence.y", -10, 10);

_gui.addGroup("Wave Options");
_gui.addStepper("waveCount", 1, 20);
_gui.addStepper("waveSteps", 2, MAX_WAVE_STEPS);
_gui.addSlider("amplitude", 0, 200);
_gui.addColour("waveColour");

_gui.addColumn("Circle Options");
_gui.addRange("minCircleSize", "maxCircleSize", 10, 120, {label:"Circle Size Range"});
_gui.addSlider("rotationSpeed", -10, 10);
_gui.addComboBox("circle.blendMode", [

	{label:"Normal",	data:BlendMode.NORMAL},
	{label:"Darken",	data:BlendMode.DARKEN},
	{label:"Overlay",	data:BlendMode.OVERLAY},
	{label:"Difference",	data:BlendMode.DIFFERENCE},

]);

_gui.addFileChooser("Circle Texture", textureFileRef, textureLoaded, [
	new FileFilter("Image Files", "*.jpg;*.jpeg;*.png")
]);

_gui.addToggle("animateCircle");

_gui.addColumn("Instructions:");
_gui.addLabel("Press 'C' to toggle GUI");
_gui.addLabel("Press 'S' to copy setup code to clipboard");

_gui.show();
</pre>
<p>So, SimpelGUI is really just a timesaver for developers looking to quickly prototype something in Flash, or for releasing demos with controls. The actual hard work has been done by <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.bit-101.com/"  target="_blank">Keith</a> in building and maintaining his deservedly popular <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/hhttp://www.minimalcomps.com/"  target="_blank">Minimal Comps</a>.</p>
<p>You can browse the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://github.com/soulwire/SoulwireAS3Framework/blob/master/src/uk/co/soulwire/gui/SimpleGUI.as/"  target="_blank">source code</a> or download the <strong>SimpleGUI</strong> class below. SimpleGUI is part of the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire/SoulwireAS3Framework"  target="_blank" title="Soulwire AS3 Framework">Soulwire AS3 Framework</a>.</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=SimpleGUI.zip" class="download" title="SimpleGUI: AS3 utility class for easily creating GUIs for prototypes and demos"  rel="nofollow"><strong>Download:</strong> SimpleGUI</a>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/open-source/as3-drag-drop-shuffle-grid-menu' rel='bookmark' title='Permanent Link: AS3 Shuffle Grid Class'>AS3 Shuffle Grid Class</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/as3-group94-style-scrolling-menu' rel='bookmark' title='Permanent Link: AS3 Group94 Menu'>AS3 Group94 Menu</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/code/actionscript-3/simple-flash-prototype-gui-tool/feed</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>Carols in Code</title>
		<link>http://blog.soulwire.co.uk/notes/programming/carols-in-code</link>
		<comments>http://blog.soulwire.co.uk/notes/programming/carols-in-code#comments</comments>
		<pubDate>Fri, 24 Dec 2010 14:39:48 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Miscellany]]></category>
		<category><![CDATA[Notes]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1216</guid>
		<description><![CDATA[I caught wind of the #CarolsInCode Twitter meme last night. Similar to the #SongsInCode meme, programmers have been merrily expressing famous Christmas carols or songs in code form; either by using the lyrics themselves or expressing the songs structure / message. Here are my contributions: you.push(new Christmas(State.MERRY, Size.LITTLE)); you.getOrgan("heart").setDensity(0.0); you.troubles.setVisible(false); My take on GrumpyWookie&#8216;s tweet: [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I caught wind of the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://twitter.com/search/%23carolsincode"  target="_blank">#CarolsInCode</a> Twitter meme last night. Similar to the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://songsincodedb.com/"  target="_blank">#SongsInCode</a> meme, programmers have been merrily expressing famous Christmas carols or songs in code form; either by using the lyrics themselves or expressing the songs structure / message.</p>
<p>Here are my contributions:</p>
<p><span id="more-1216"></span></p>
<pre>you.push(new Christmas(State.MERRY, Size.LITTLE));
you.getOrgan("heart").setDensity(0.0);
you.troubles.setVisible(false);</pre>
<p>My take on <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://twitter.com/GrumpyWookie"  target="_blank">GrumpyWookie</a>&#8216;s tweet:</p>
<pre>if(weather == "frightful") {
	fire.setState("delightful");
	us.velocity.set(0,0,0);
	for(i=0;i< 3;++i) {
		weather.snow();
	}
}</pre>
<p>This was picked up by <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://twitter.com/simon_watkins"  target="_blank">simon_watkins</a> who later added some logic:</p>
<pre>for each(Angel angel in angels) {
	angel.addEventListener(AudioEvent.SING, hark);
}</pre>
<p>Technically, this would see them ascending into space, but you get the idea!</p>
<pre>Vec3 v;
for each(King k in kings) {
	v = star.position - k.position;
	v.normalise();
	v.scale(k.maxSpeed);
	k.position += v;
}</pre>
<p>What Christmas would be complete with out a bit of Wham! (that's rhetorical).</p>
<pre>heart = you.hearts.pop();
for each(Person someone in world) {
	if(someone.isSpecial()) {
		someone.push(heart);
		return;
	}
}</pre>
<p>And if you thought all this Christmas cheer was unbefitting of an Atheist, here's my take on this one:</p>
<pre>try {
	God.getInstance().rest(merryGentleman);
} catch(TheologyError error) {
	log("God not found");
	Christmas.abort();
}</pre>
<p>I'm not sure whether anyone is archiving these, as they did with <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://songsincodedb.com/"  target="_blank">SongsInCode</a> but for now you can see more <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.retroprogramming.com/2010/12/carolsincode-top-five-countdown.html"  target="_blank">here</a>, <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.weedoorsbanging.com/archives/carols-in-code.html"  target="_blank">here</a> and of course <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://twitter.com/search/%23carolsincode"  target="_blank">here</a>.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/notes/programming/carols-in-code/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AS3 Particle Node Sequencer</title>
		<link>http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer</link>
		<comments>http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer#comments</comments>
		<pubDate>Sat, 09 Oct 2010 12:31:40 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Autonomous]]></category>
		<category><![CDATA[Biology]]></category>
		<category><![CDATA[Experiments]]></category>
		<category><![CDATA[Flash Player 10]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1177</guid>
		<description><![CDATA[An experimental particle based audio sequencer, created in Flash using Tonfall; the new open source AS3 audio engine produced by Andre Michelle


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/2d-cellular-automata' rel='bookmark' title='Permanent Link: 2D Cellular Automata'>2D Cellular Automata</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/10/tonfall-sequencer.swf" rel="lightbox;width=900;height=620;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2010/10/tonfall-sequencer.jpg" alt="Tonfall Sequencer" title="Tonfall Sequencer"/></a></p>
<p>(You can <strong>drag</strong> each node and switch off the <em>wander</em> behaviour to create your own compositions).</p>
<p>At <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://flashonthebeach.com/"  target="_blank">Flash on the Beach</a> this year, I had the privilege of seeing <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.andre-michelle.com/"  target="_blank">Andre Michelle</a> speak. It was great to hear him explain some of his fantastic work behind <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.audiotool.com/"  target="_blank">audiotool</a> and to see and hear some more of his audio experiments.<span id="more-1177"></span></p>
<p>He also introduced <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/tonfall/"  target="_blank">Tonfall</a>, which is an open source AS3 framework designed to get people started with Audio programming in Flash. From the horses mouth; &#8220;Tonfall introduces only a vague design of an audio engine and is rather focussed on readability and simplicity than performance optimizations&#8221;.</p>
<p>I know that I&#8217;m not alone in feeling inspired by what Andre has done for the Flash platform, particularly when it comes to audio, yet lack the knowledge he has invested so much time and hard work in acquiring. The fact that he&#8217;s now sharing it with the ret of us for free was more than enough impetus to have a crack at it myself.</p>
<p>So this is my first test with the framework, which although not extensively documented (at the time of writing), was quite easy to pick up and get going with.</p>
<p>This <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/10/synthesiser.swf" rel="lightbox;width=900;height=650;" >sequencer</a> is based around physical nodes, which connect to produce a variety of tones. There are two types of node, a <em>neuron</em> and a <em>receptor</em>, which are connected by <em>synapses</em> (apologies for the trite analogies). Neurons fire periodically, and if within a certain proximity of a receptor, this message is sent at a fixed speed along the bridging synapse. When the message arrives, the receptor is activated and responds by queuing it&#8217;s individual tone within the audio engine. Each receptor owns a randomly assigned note, and each neuron a randomly assigned octave; therefor a receptor will play it&#8217;s note in several different octaves depending on which neuron causes it to fire.</p>
<p>The download includes the builds of <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/tonfall/"  target="_blank">Tonfall</a> by Andre Michelle and <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.minimalcomps.com/"  target="_blank">Minimal Comps</a> by Keith Peters that I&#8217;m using.</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=ParticleSequencer.zip" class="download" title="Particle Sequencer: AS3 Particle Audio Sequencer built with Tonfall Audio Engine"  rel="nofollow"><strong>Download:</strong> Particle Sequencer</a>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/2d-cellular-automata' rel='bookmark' title='Permanent Link: 2D Cellular Automata'>2D Cellular Automata</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer/feed</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
		<item>
		<title>Recursive Polygon Subdivision</title>
		<link>http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision</link>
		<comments>http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision#comments</comments>
		<pubDate>Thu, 27 May 2010 12:51:48 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1131</guid>
		<description><![CDATA[This is a little algorithm I sketched in my moleskin on the train and for once had the free time to build. The idea is to split a convex polygon between two line segments, creating two new polygons. Each shape is pushed into a queue ready to be subdivided itself. Despite the simplicity of the [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/2d-cellular-automata' rel='bookmark' title='Permanent Link: 2D Cellular Automata'>2D Cellular Automata</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/SD001.swf"  rel="lightbox;width=900;height=650;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/SD001_001.jpg" alt="Recursive Subdivision" title="Recursive Subdivision" width="710" height="360" class="alignnone size-medium wp-image-1134" /></a></p>
<p>This is a little algorithm I sketched in my <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.moleskine.co.uk/products/"  target="_blank">moleskin</a> on the train and for once had the free time to build. The idea is to split a convex polygon between two line segments, creating two new polygons. Each shape is pushed into a queue ready to be subdivided itself. Despite the simplicity of the algorithm, the results are quite nice and with certain configurations often far removed from what I would have expected &#8211; surprise is always good.<span id="more-1131"></span></p>
<h3>The Subdivide Algorithm</h3>
<p>Here are the basic steps used to create the <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/SD001.swf"  rel="lightbox;width=900;height=650;" >sketch</a> above:</p>
<ul>
<li>Create the first polygon</li>
<li>Pick two adjacent vertices at random</li>
<li>Use linear interpolation to find a point between them <em>(P1)</em></li>
<li>You now have a point on one line segment connecting the two vertices</li>
<li>Choose another line segment from the polygon</li>
<li>Find a point along this line segment <em>(P2)</em></li>
<li>Build a new polygon by moving clockwise from <em>P1</em> to <em>P2</em></li>
<li>Build a second polygon by moving clockwise from <em>P2</em> back to <em>P1</em></li>
<li>Splice the original polygon from the list and insert the two new ones</li>
<li>Choose a polygon from the list and <em>(&uarr;repeat)</em></li>
</ul>
<p>Very simple, but you can start to have fun with each of these steps to produce different results. Here are some of the variations which can be created with the <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/SD001.swf"  rel="lightbox;width=900;height=650;" >demo</a>.</p>
<ul>
<li>Choose line segments to cut at random</li>
<li>Always subdivide between the two longest line segments</li>
<li>Always interpolate (choose points) half way along segments</li>
<li>Choose points at random positions along line segments</li>
<li>Only mark some polygons eligible for subdivision</li>
<li>Vary the minimum area of divisible polygons</li>
</ul>
<h3>Source Code</h3>
<p>The <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/soulwire/source/browse/trunk/projects/Subdivide/SD001/src/geom/Polygon.as"  target="_blank">Polygon</a> class is a DisplayObject (it extends Sprite) and implements it&#8217;s own draw method. I&#8217;ve had a lot of fun filling the shapes with textures, but kept it minimal for the example. One technique which I found worked well was to choose two vertices and compute the angle between them. From this I created a transformation matrix to use with <em>Graphics.beginBitmapFill</em>, giving the sketch a more 3 dimensional feel as if the collection of polygons was a 3D mesh with textures mapped to it. I&#8217;ll put these examples on Flickr soon.</p>
<p>If you&#8217;re interested in the source code, it&#8217;s available in my <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/soulwire/"  target="_blank">code repository</a> or you can download the archive below (for the demo GUI, I am using <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://minimalcomps.com/"  target="_blank">minimal comps</a> courtesy of Keith Peters and for image encoding, Ian McLean&#8217;s <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.auricom.com/devote/an-asynchronous-vector-optimized-jpeg-encoder"  target="_blank">asynchronous JPEG encoder</a> &#8211; thanks guys :).</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=Subdivision.zip" class="download" title="Recursive Subdivision: Recursive Polygon Subdivision demo and source code"  rel="nofollow"><strong>Download:</strong> Recursive Subdivision</a>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/2d-cellular-automata' rel='bookmark' title='Permanent Link: 2D Cellular Automata'>2D Cellular Automata</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Hello Dynamic Sprite</title>
		<link>http://blog.soulwire.co.uk/code/actionscript-3/managing-runtime-loaded-dynamic-assets</link>
		<comments>http://blog.soulwire.co.uk/code/actionscript-3/managing-runtime-loaded-dynamic-assets#comments</comments>
		<pubDate>Fri, 21 May 2010 16:56:04 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Utilities]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1080</guid>
		<description><![CDATA[If you are building a multilingual application (or any application that requires dynamic, runtime loaded assets), swapping and managing assets can easily become tedious and messy. Recently, for projects requiring special characters (such as Chinese, Arabic, Japanese and Hindi) and where dynamic or input text is not required, we have been creating library SWFs for [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/open-source/two-sided-planes-in-flash-player-10' rel='bookmark' title='Permanent Link: Double Sided 3D Plane in FP10'>Double Sided 3D Plane in FP10</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/DynamicSpriteExample.swf?v=2" rel="lightbox;width=800;height=550;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/dynamic-sprite-demo.jpg" alt="DynamicSprite Demo Application" title="DynamicSprite Demo Application" width="710" height="360" class="size-medium wp-image-1092" /></a></p>
<p>If you are building a multilingual application (or any application that requires dynamic, runtime loaded assets), swapping and managing assets can easily become tedious and messy.</p>
<p>Recently, for projects requiring special characters (such as Chinese, Arabic, Japanese and Hindi) and where dynamic or input text is not required, we have been creating library SWFs for each language and using static textfields to populate content. This saves file size, as unnecessary characters are not embedded, and it eases the process of including different character sets (and even fonts) for each language. It also means that we can include text in the same runtime loaded library as general display assets.<span id="more-1080"></span></p>
<h3>Introducing DynamicSprite</h3>
<p>Using this process, a language specific library SWF is loaded at startup, or at runtime when the users selects a language, and once complete all dynamic assets are updated accordingly. This can get very messy for two reasons. Firstly, it means that each individual asset has to be destroyed and tidied up to release memory before it is replaced. Secondly, if you have a complex application architecture, you will end up dispatching a ton of events and implementing countless methods within every view or component, in order to rollout the update to each desired DisplayObject.</p>
<p>This is where <strong>DynamicSprite</strong> comes in handy. Using DynamicSprite you can effortlessly update any amount of DisplayObjects from any amount of library SWFs at runtime, whilst keeping the SWF loading logic centralised in your proxy or loader class. No events, no asset update APIs in your views and no cleaning up after yourself.</p>
<blockquote><p>Bored? Skip straight to the <a href="#example">examples</a> and download</p></blockquote>
<h3>How It Works</h3>
<p>The concept is very simple. Each instance of DynamicSprite is registered globally at a class level, you need only call a static update method once and all DynamicSprite instances will update themselves automatically. Each instance of DynamicSprite is given a class definition, which can be set or changed at runtime if desired. When a new library is loaded, it will look inside the SWFs <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/system/ApplicationDomain.html"  target="_blank">applicationDomain</a> and if it finds a matching asset, update itself and destroy any existing instances of that asset it might own. You can also create DynamicSprite instances at runtime anytime after an asset library has been loaded &#8211; they will check previously loaded libraries for their class definition when created. This works with any display asset, <strong>Sprites</strong>, <strong>MovieClips</strong>, <strong>Bitmaps</strong> (etc)  &#8211; <strong>BitmapDatas</strong> are also detected and destroyed during the cleanup process.</p>
<p>Furthermore, you can load any amount of libraries per language, at different times if necessary &#8211; DynamicSprites will <em>only update themselves when applicable</em>, making it easy to manage your language specific libraries and even individual libraries per language if you choose to (each type of library has it&#8217;s own ID).</p>
<p>A DynamicSprite instance will also dispatch an event (named <strong>DynamicSprite.INSTANCE_UPDATED</strong>) when it has changed it&#8217;s asset. You can listen for this event if you need to respond to new asset dimensions. You can also listen for two events on the class itself (through a static, encapsulated EventDispatcher) which are dispatched when a library is added or updated but before all instances have changed (<strong>DynamicSprite.LIBRARY_UPDATE_START</strong>) and when all instances have finished updating themselves (if necessary) from the added / updated library SWF (<strong>DynamicSprite.LIBRARY_UPDATE_COMPLETE</strong>).</p>
<h3>Example Implementation<a name="example">&nbsp;</a></h3>
<p>Here is a simple example of how to use DynamicSprite. Although this example only loads one SWF (the code for the multi SWF example is included in the download), it demonstrates how DynamicSprite can also be useful for single language applications where you still choose to load your assets at runtime.</p>
<pre>
public function SimpleExample()
{
	// Create a DynamicSprite instance and provide a class definition for it's asset
	var example : DynamicSprite = new DynamicSprite("assets.example.HelloWorld");
	addChild(example);

	// Load a library SWF
	var loader : Loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
	loader.load(new URLRequest("assets_en.swf"));
}

private function onLoadComplete(event : Event) : void
{
	// Call the static update method once to update all DynamicSprites
	DynamicSprite.update("example", LoaderInfo(event.target).content);
}
</pre>
<p>Another advantage of DynamicSprite is that you need not worry about synchronising loading with the update process. Any existing DynamicSprite instance will be updated if required when a library is loaded, however you can also create new instances after a required library has been loaded (useful for highly dynamic content) and any loaded libraries will be searched for matching assets upon creation. This snippet demonstrates this feature.</p>
<pre>
public function SimpleExample()
{
	// Load a library SWF
	var loader : Loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
	loader.load(new URLRequest("assets_en.swf"));
}

private function onLoadComplete(event : Event) : void
{
	// Register this library
	DynamicSprite.update("example", LoaderInfo(event.target).content);

	// Creating a DynamicSprite after a library is loaded still works fine
	var example : DynamicSprite = new DynamicSprite("assets.example.HelloWorld");
	addChild(example);
}
</pre>
<h3>Download DynamicSprite</h3>
<p>You can download the DynamicSprite class and the demo below. Also check my code <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/soulwire/source/browse/trunk/projects/DynamicSprite/src/uk/co/soulwire/display/DynamicSprite.as"  title="Soulwire SVN repository" target="_blank">repository</a> for updates. If you find any bugs or have any suggestions please leave them in the comments.</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=DynamicSprite.zip" class="download" title="DynamicSprite: DynamicSprite is a utility class for easily managing runtime loaded assets"  rel="nofollow"><strong>Download:</strong> DynamicSprite</a>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/open-source/two-sided-planes-in-flash-player-10' rel='bookmark' title='Permanent Link: Double Sided 3D Plane in FP10'>Double Sided 3D Plane in FP10</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/code/actionscript-3/managing-runtime-loaded-dynamic-assets/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ASE (Adobe Swatch Exchange) Encoder</title>
		<link>http://blog.soulwire.co.uk/code/actionscript-3/as3-ase-adobe-swatch-exchange-encoder</link>
		<comments>http://blog.soulwire.co.uk/code/actionscript-3/as3-ase-adobe-swatch-exchange-encoder#comments</comments>
		<pubDate>Tue, 30 Mar 2010 14:00:52 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[ASE]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Colour]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1061</guid>
		<description><![CDATA[The Adobe Swatch Exchange (ASE) is a useful file format for importing colour schemes into applications in the Creative Suite (Photoshop, Illustrator etc). I&#8217;ve been optimising the BitmapData colour palette algorithm (coming shortly in another post) and for the demo thought that it would be nice to give you the option to save the extracted [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/actionscript-3/extract-average-colours-from-bitmapdata' rel='bookmark' title='Permanent Link: BitmapData Average Colours'>BitmapData Average Colours</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/colourutils-bitmapdata-extract-colour-palette' rel='bookmark' title='Permanent Link: BitmapData Colour Palette'>BitmapData Colour Palette</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-bitmapdata-glitch-generator' rel='bookmark' title='Permanent Link: Smack My Glitch Up'>Smack My Glitch Up</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/03/aseencoder-demo.swf" rel="lightbox;width=800;height=450;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2010/03/aseencoder-710x399.jpg" alt="AS3 ASE Adobe Swatch Exchange Encoder Demo" title="AS3 ASE Adobe Swatch Exchange Encoder Demo" width="710" height="399" class="alignnone size-medium wp-image-1073" /></a></p>
<p>The <strong>Adobe Swatch Exchange (ASE)</strong> is a useful file format for importing colour schemes into applications in the Creative Suite (Photoshop, Illustrator etc).<span id="more-1061"></span></p>
<p>I&#8217;ve been optimising the <a href="http://blog.soulwire.co.uk/code/actionscript-3/colourutils-bitmapdata-extract-colour-palette" >BitmapData colour palette algorithm</a> (coming shortly in another post) and for the demo thought that it would be nice to give you the option to save the extracted color palette (a feature that people have been requesting in the comments). I added an option for saving a TXT file containing the hexadecimal and RGB colour values, but thought it would be nice to offer the choice of downloading the palette in <strong>ASE format</strong> so you can quickly incorporate the colour scheme in your artwork or designs, one of the nice features of <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://kuler.adobe.com/" >Kuler</a>.</p>
<p>So the first step was to open up and existing ASE file (created by Photoshop) in a hex editor (I use <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.suavetech.com/0xed/0xed.html" >0xED</a> which is an excellent and free editor for OS X). Looking at the bytes of the file showed that it was evidently a quite simple format and wouldn&#8217;t be difficult to reverse engineer. I also found the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.selapa.net/couleurs/fileformats.php#adobe_ase" >ASE file format specification</a> and a <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.colourlovers.com/web/blog/2007/11/08/color-palettes-in-adobe-swatch-exchange-ase" >PHP implementation</a> over at <strong>Colour Lovers</strong>, both of which were quite helpful.</p>
<p>This AS3 code will take an Array of colours (adding Vectors to the &lt;pre&gt; tag seems to cause problems, though my local source code does use a Vector of uints) and encode the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/ByteArray.html" >ByteArray</a> of an ASE file, ready to save using <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/FileReference.html" >FileReference</a> of <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/filesystem/FileStream.html" >FileStream</a> in AIR&#8230;</p>
<pre>
const FILE_SIGNATURE : String = "ASEF";

function encode ( pixels : Array ):ByteArray
{
	var swatch : ByteArray = new ByteArray();
	var ase : ByteArray = new ByteArray();
	var hex:String;
	var pix:uint;

	ase.writeUTFBytes (FILE_SIGNATURE);// header
	ase.writeInt (0x10000);// version
	ase.writeInt (pixels.length * 2);// blocks

	for (var i : int = 0; i < pixels.length; ++i)
	{
		pix = pixels[i];
		swatch.length = 0;

		// start of group

		ase.writeShort (0xC001);
		ase.writeInt (0);
		ase.writeShort (1);

		// swatch name

		hex = pix.toString(16);
		while (hex.length < 6) hex = "0" + hex;

		swatch.writeShort ((hex = "#" + hex).length + 1);
		for (var n : int = 0; n < hex.length; ++n) swatch.writeShort (hex.charCodeAt(n));
		swatch.writeShort (0);

		// colours

		swatch.writeUTFBytes ("RGB ");
		swatch.writeFloat ((pix >> 16 &#038; 0xFF) / 255);
		swatch.writeFloat ((pix >> 8 &#038; 0xFF) / 255);
		swatch.writeFloat ((pix &#038; 0xFF) / 255);
		swatch.writeShort (2);

		// write swatch

		ase.writeInt (swatch.length);
		ase.writeBytes (swatch);
	}

	return ase;
}
</pre>
<p>I&#8217;ll put the full code in <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/soulwire/" >my repository</a> along with the improved <em>ColourUtils</em> Class which prompted the <strong>ASEEncoder</strong>, though for now you can just copy and paste this snippet and <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/03/aseencoder-demo.swf" rel="lightbox;width=800;height=450;" >play with the demo</a> above to save the top colour schemes from Colour Lovers as ASE files, which you can then import into Adobe Creative Suite applications.</p>
<p>Here is an example of how to encode a palette and then save it to the file system:</p>
<pre>
var colours : Array = [0xFF0000, 0x00FF00, 0x0000FF];
var aseFile : ByteArray = encode( colours );
var fileRef : FileReference = new FileReference();
fileRef.save( aseFile, "swatch.ase" );
</pre>
<p>The AS3 ASEEncoder currently only encodes swatches as RGB, though saving CMYK should only be a matter of converting the colour space and then changing the swatch declaration.</p>
<p>Going in the other direction, it would be nice to provide a method to decode existing ASE files into a Vector of uints, something which I&#8217;ll look at once the new ColourUtils is online.</p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/actionscript-3/extract-average-colours-from-bitmapdata' rel='bookmark' title='Permanent Link: BitmapData Average Colours'>BitmapData Average Colours</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/colourutils-bitmapdata-extract-colour-palette' rel='bookmark' title='Permanent Link: BitmapData Colour Palette'>BitmapData Colour Palette</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-bitmapdata-glitch-generator' rel='bookmark' title='Permanent Link: Smack My Glitch Up'>Smack My Glitch Up</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/code/actionscript-3/as3-ase-adobe-swatch-exchange-encoder/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Generative Prints for Ishihara</title>
		<link>http://blog.soulwire.co.uk/art-design/illustration/generative-illustrations-for-ishihara</link>
		<comments>http://blog.soulwire.co.uk/art-design/illustration/generative-illustrations-for-ishihara#comments</comments>
		<pubDate>Fri, 12 Feb 2010 00:28:10 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[Illustration]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Sketchbook]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Drawing]]></category>
		<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1042</guid>
		<description><![CDATA[These are some old prints that I made for an exhibition called Ishihara, back in 2008. They&#8217;re created using a tool I built called Rotator, which degrades vector drawings as they are printed to a bitmap, whilst following the path of a random wander. I found them on an old hard drive and thought I&#8217;d [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
<li><a href='http://blog.soulwire.co.uk/art-design/illustration/illustrated-iching-hexagrams' rel='bookmark' title='Permanent Link: Illustrated IChing'>Illustrated IChing</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-1043" title="Ishihara Drawing 1" src="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara-cover.jpg" alt="Ishihara Drawing 1" width="710" height="360" /></p>
<p>These are some old prints that I made for an exhibition called <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.facebook.com/group.php?gid=35280706927" >Ishihara</a>, back in 2008. They&#8217;re created using a tool I built called <em>Rotator</em>, which degrades vector drawings as they are printed to a bitmap, whilst following the path of a random wander. I found them on an old hard drive and thought I&#8217;d share.<span id="more-1042"></span></p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara001.jpg"  rel="shadowbox[post-1042];player=img;"><img class="alignnone size-medium wp-image-1044" title="Ishihara Rotator Print 001" src="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara001-710x471.jpg" alt="Ishihara Rotator Print 001" width="710" height="471" /></a></p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara002.jpg"  rel="shadowbox[post-1042];player=img;"><img class="alignnone size-medium wp-image-1044" title="Ishihara Rotator Print 002" src="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara002-710x471.jpg" alt="Ishihara Rotator Print 002" width="710" height="471" /></a></p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara003.jpg"  rel="shadowbox[post-1042];player=img;"><img class="alignnone size-medium wp-image-1044" title="Ishihara Rotator Print 003" src="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara003-710x471.jpg" alt="Ishihara Rotator Print 003" width="710" height="471" /></a></p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara004.jpg"  rel="shadowbox[post-1042];player=img;"><img class="alignnone size-medium wp-image-1044" title="Ishihara Rotator Print 004" src="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara004-710x471.jpg" alt="Ishihara Rotator Print 004" width="710" height="471" /></a></p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara005.jpg"  rel="shadowbox[post-1042];player=img;"><img class="alignnone size-medium wp-image-1044" title="Ishihara Rotator Print 005" src="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara005-710x471.jpg" alt="Ishihara Rotator Print 005" width="710" height="471" /></a></p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara006.jpg"  rel="shadowbox[post-1042];player=img;"><img class="alignnone size-medium wp-image-1044" title="Ishihara Rotator Print 006" src="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/ishihara006-710x471.jpg" alt="Ishihara Rotator Print 006" width="710" height="471" /></a></p>
<p>On reflection, the morphing shapes mixed with simple line drawings remind me of James Paterson&#8217;s work over at <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.presstube.com" >presstube</a> or Victor Taba&#8217;s <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.victortaba.com/" >animations</a> (but not as good as either). I&#8217;ll see if the hard drive has the Rotator AIR app these were made with on there somewhere too, it could be fun to play around with adding some colour and using more complicated vectors.</p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
<li><a href='http://blog.soulwire.co.uk/art-design/illustration/illustrated-iching-hexagrams' rel='bookmark' title='Permanent Link: Illustrated IChing'>Illustrated IChing</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/art-design/illustration/generative-illustrations-for-ishihara/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>

