<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://www.milkisevil.com/blog/wp-atom.php">
	<title type="text">milkisevil.blog</title>
	<subtitle type="text">portfolio and thoughts of a creative technologist</subtitle>

	<updated>2011-12-23T16:11:40Z</updated>

	<link rel="alternate" type="text/html" href="http://www.milkisevil.com/blog" />
	<id>http://www.milkisevil.com/blog/feed/atom/</id>
	

	<generator uri="http://wordpress.org/" version="3.2.1">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/milkisevil" /><feedburner:info uri="milkisevil" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[FlashTracer for Firefox 4+]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/hoarIRUVqSM/" />
		<id>http://www.milkisevil.com/blog/?p=601</id>
		<updated>2011-12-23T16:11:40Z</updated>
		<published>2011-12-23T16:11:40Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Tips" /><category scheme="http://www.milkisevil.com/blog" term="add-on" /><category scheme="http://www.milkisevil.com/blog" term="compatibility" /><category scheme="http://www.milkisevil.com/blog" term="firefox" /><category scheme="http://www.milkisevil.com/blog" term="flash" /><category scheme="http://www.milkisevil.com/blog" term="flashtracer" />		<summary type="html"><![CDATA[I&#8217;ve been using Alessandro Crugnola&#8217;s FlashTracer Firefox Add-on for years, and have become pretty accustomed to it&#8217;s neat vertical sidebar integration. I wasn&#8217;t particularly happy to see that the familiar interface had (subtly) changed when he introduced FBTracer aka FlashTracer for Firebug (pretty sure that&#8217;s just me being fussy though!). The original FlashTracer is apparently [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2011/flashtracer-for-firefox-4/"><![CDATA[<p>I&#8217;ve been using Alessandro Crugnola&#8217;s <a href="http://www.sephiroth.it/firefox/flashtracer/">FlashTracer</a> Firefox Add-on for years, and have become pretty accustomed to it&#8217;s neat vertical sidebar integration. I wasn&#8217;t particularly happy to see that the familiar interface had (subtly) changed when he introduced <a href="http://blog.sephiroth.it/firefox-extensions/flash-tracer-for-firebug/">FBTracer aka FlashTracer for Firebug</a> (pretty sure that&#8217;s just me being fussy though!).</p>
<p>The original FlashTracer is apparently only compatible up to Firefox 3.x, so to get it to work with Firefox 4+, simply do the following:</p>
<ol>
<li>Download the .xpi</li>
<li>Unzip it (it&#8217;s just a .zip file with a .xpi extension)</li>
<li>Open install.rdf and change em:maxVersion=&#8221;3.9&#8243; to em:maxVersion=&#8221;20&#8243; &#8211; this will keep Firefox from complaining up until the release of Firefox 20 (which at this rate, we&#8217;re probably only a couple of weeks away from!)</li>
<li>You may want to increase the version number to 2.4 (em:version=&#8221;2.4&#8243;), to prevent confusion</li>
<li>Zip all of the files back up, change the file extension to .xpi</li>
<li>Drag the .xpi file onto Firefox 4+, and it should install</li>
</ol>
<p>I&#8217;ve installed it with Firefox 9.1 and the only incompatibility (that I&#8217;ve noticed so far) is that you can&#8217;t change the font from the default serif. Not bothered :)</p>
<div id="attachment_602" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.milkisevil.com/blog/wp-content/uploads/2011/12/flashtracer-firefox-9.jpg" rel="lightbox[601]"><img src="http://www.milkisevil.com/blog/wp-content/uploads/2011/12/flashtracer-firefox-9-300x179.jpg" alt="Old skool FlashTracer running perfectly well in Firefox 9" title="Old skool FlashTracer running perfectly well in Firefox 9" width="450" height="269" class="size-medium wp-image-602" /></a><p class="wp-caption-text">Old skool FlashTracer running perfectly well in Firefox 9</p></div>
<p>By the way, this minor hack works for making any Firefox Add-on compatible with a more recent version of Firefox. But of course, if the actual Add-on source code itself is not compatible with a recent Firefox version, it might crash, mess up your Firefox profile, brick your computer, automatically slaughter all wild foxes in your local area, etc, which of course, <del datetime="2011-12-23T15:25:13+00:00">I couldn&#8217;t care less about</del> I&#8217;m not responsible for :)</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2011/flashtracer-for-firefox-4/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2011/flashtracer-for-firefox-4/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2011/flashtracer-for-firefox-4/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Diesel Island FW11]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/G4ss6wig5HE/" />
		<id>http://www.milkisevil.com/blog/?p=573</id>
		<updated>2011-11-03T18:40:32Z</updated>
		<published>2011-10-21T09:46:42Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="html5" /><category scheme="http://www.milkisevil.com/blog" term="robotlegs" /><category scheme="http://www.milkisevil.com/blog" term="santo" /><category scheme="http://www.milkisevil.com/blog" term="Stinkdigital" />		<summary type="html"><![CDATA[Diesel Island FW11 is an interactive video showcase of the clothing Diesel would like you to be wearing as the year draws to a close. It&#8217;s predominantly an HTML5 video powered site, but seeing as the awesome &#60;video&#62; tag isn&#8217;t supported by some not-so-awesome browsers (looking at you IE8), the wide web world turns to [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2011/diesel-island-fw11/"><![CDATA[<p>Diesel Island FW11 is an interactive video showcase of the clothing Diesel would like you to be wearing as the year draws to a close. </p>
<div><a href="http://www.thefwa.com/site/diesel-island-aw11" target="_blank" class="fwa520"><img src="/blog/wp-content/uploads/2011/10/DayTopRight.png" class="plain" /></a><iframe src="http://player.vimeo.com/video/30814888?byline=0&amp;portrait=0&amp;color=ff0000" width="520" height="293" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></div>
<p><span id="more-573"></span></p>
<p>It&#8217;s predominantly an HTML5 video powered site, but seeing as the awesome &lt;video&gt; tag isn&#8217;t supported by some not-so-awesome browsers (looking at you IE8), the wide web world turns to the much hated Flash Player to save the day! Apparently only 61.75%* of internet users will be able to experience the HTML5 Video version, so there&#8217;s no getting rid of Flash just yet, even for sites such as this, that would be more suited to HTML5. </p>
<p>On the whole, this was a fairly quick job: creating a custom video player that would interact with the CSS/HTML/Javascript overlays. </p>
<p>Kudos to <a href="http://twitter.com/ihart" target="_blank">@ihart</a> and <a href="http://twitter.com/jjenzz" target="_blank">@jjenzz</a> for painstakingly crafting the HTML5 version to work across browsers including Safari on iPad. Via <a href="http://stinkdigital.com" target="_blank">Stinkdigital</a> and <a href="http://www.santo.net" target="_blank">Santo London</a>. </p>
<p>* Source: <a href="http://caniuse.com/video" target="_blank">caniuse.com</a>, September 2011.</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2011/diesel-island-fw11/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2011/diesel-island-fw11/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2011/diesel-island-fw11/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Hugo Just Different &#8211; Kino]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/LyBcQlxgELU/" />
		<id>http://www.milkisevil.com/blog/?p=544</id>
		<updated>2011-11-16T07:31:58Z</updated>
		<published>2011-09-26T10:31:24Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="blast radius" /><category scheme="http://www.milkisevil.com/blog" term="robotlegs" /><category scheme="http://www.milkisevil.com/blog" term="Stinkdigital" />		<summary type="html"><![CDATA[Kino for Hugo Just Different is all about seeing things differently. An interactive film directed by Marco Brambilla allows people to explore five different scenes through the shades of Theatrical, Performance and Story, simply by tilting their heads from side to side. The webcam monitors the tilt position of the head, which in turn invokes [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2011/hugo-just-different-kino/"><![CDATA[<p><a href="http://www.youtube.com/hugobosstv" target="_blank">Kino</a> for Hugo Just Different  is all about seeing things differently. An interactive film directed by Marco Brambilla allows people to explore five different scenes through the shades of Theatrical, Performance and Story, simply by tilting their heads from side to side. The webcam monitors the tilt position of the head, which in turn invokes seamless transitions from one intricately gorgeous environment to another.</p>
<div><a href="http://www.thefwa.com/site/hugo-kino" target="_blank" class="fwa520"><img src="/blog/wp-content/uploads/2011/10/DayTopRight.png" class="plain" /></a><iframe src="http://player.vimeo.com/video/29561057?byline=0&amp;portrait=0&amp;color=ff0000" width="520" height="293" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></div>
<p><span id="more-544"></span></p>
<p>My role on this project was to lead the Flash Development from the prototyping stage through to delivery. Various prototypes were created whilst exploring how best to implement the webcam head tracking:</p>
<ul>
<li><a href="http://www.libspark.org/wiki/mash/Marilena" target="_blank">OpenCV Marilena</a> &#8211; This wasn&#8217;t used as it wasn&#8217;t as performant as I&#8217;d hoped, but mostly because it is only good at face detection when the face is in the usual upright orientation. Tilt the head and OpenCV will lose you. Maybe this could have been solved by writing a lower-level Haar Cascade descriptor file (the fontal face descriptor file alone is 26,161 lines of XML!), but before even contemplating digging that deep, it was definitely worth exploring a couple of other techniques.</li>
<li>Motion detection &#8211; Based on frame differencing and blob detection, this would let Flash Player know if the user has moved their head and where to. Not a bad method, but we found that this really required people to move their head from one side (of the camera&#8217;s image) to the other, all too much work for the user. We really wanted something a little simpler, ie. the relatively low in effort action of the tilting the head.</li>
<li>Frame Matching &#8211; this is the process of caching three calibration images, and comparing the current webcam input with them. Using the threshold frame differencing technique, it was possible to work out quite accurately which of the three calibration images the webcam input most closely matched. This worked really well and was what made it into the final cut.</li>
</ul>
<p>The other challenge came in the form of video synchronisation, something Flash Player is not good at. Simply creating three instances of NetStream and starting playback at the same time will eventually result in time shifting between the videos. The solution was to use a single MP4 file stacked vertically with each video frame along with DisplayObject.scrollRect to define the visible area. Three videos each 960&#215;540 would result in one video of 960&#215;1620. It&#8217;s worth noting that the MainConcept H.264 encoder has greater restrictions when it comes to encoding videos of non standard dimensions. In which case the Sorenson H.264 encoder provides more flexibility.</p>
<div id="attachment_546" class="wp-caption aligncenter" style="width: 187px"><a href="http://www.milkisevil.com/blog/wp-content/uploads/2011/09/hugo-just-different-kino-train-station.jpg" rel="lightbox[544]"><img src="http://www.milkisevil.com/blog/wp-content/uploads/2011/09/hugo-just-different-kino-train-station-177x300.jpg" alt="" title="Three videos stacked vertically in a single MP4 file allow for perfect synchronisation during playback in Flash Player" width="177" height="300" class="size-medium wp-image-546" /></a><p class="wp-caption-text">Three videos stacked vertically in a single MP4 file</p></div>
<p>Thanks to <a title="Stinkdigital" href="http://stinkdigital.com/" target="_blank">Stinkdigital</a> (via <a href="http://www.blastradius.com/" target="_blank">Blast Radius</a>) for getting me on board such an awesome project :)</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2011/hugo-just-different-kino/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2011/hugo-just-different-kino/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2011/hugo-just-different-kino/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[CompareTheMeerkat.com &#8211; Meerkovo]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/5e0elpv3UF8/" />
		<id>http://www.milkisevil.com/blog/?p=504</id>
		<updated>2011-09-25T17:06:20Z</updated>
		<published>2011-02-03T14:11:51Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="robotlegs" /><category scheme="http://www.milkisevil.com/blog" term="the mill" /><category scheme="http://www.milkisevil.com/blog" term="vccp" />		<summary type="html"><![CDATA[Everyone&#8217;s favourite Meerkat, Aleksandr Orlov, is back and this time he&#8217;s with a bunch of his friends &#8211; the whole village of Meerkovo, in fact. Meerkovo.com allows fans to engage and interact with one of the richest back stories in recent UK advertising. My main role on the project was to lead the code architecture [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2011/comparethemeerkat-com-meerkovo/"><![CDATA[<p>Everyone&#8217;s favourite Meerkat, Aleksandr Orlov, is back and this time he&#8217;s with a bunch of his friends &#8211; the whole village of Meerkovo, in fact. <a href="http://meerkovo.comparethemarket.com/meerkovo" target="_blank">Meerkovo.com</a> allows fans to engage and interact with one of the richest back stories in recent UK advertising.</p>
<div id="attachment_505" class="wp-caption alignnone" style="width: 553px"><a href="http://meerkovo.comparethemarket.com/meerkovo" target="_blank"><img class="size-full wp-image-505" title="Visit Meerkovo" src="http://www.milkisevil.com/blog/wp-content/uploads/2011/02/meerkovo-mansion.jpg" alt="Aleksandr's Mansion" width="543" height="279" /></a><p class="wp-caption-text">Aleksandr welcomes you to his Mansion. Feel free to explore all of his meerkat oddities via the comfort of your own komputamabob. Simples!</p></div>
<p><span id="more-504"></span></p>
<p>My main role on the project was to lead the code architecture and build the shell, whilst ensuring that the work of the other Flash Developers would come together seamlessly. And as per usual, all of this under a very, very tight phase one deadline. Stay tuned as subsequent phases on this long-term project will see the addition of new shops and games.</p>
<div id="attachment_505" class="wp-caption alignnone" style="width: 553px"><a href="http://meerkovo.comparethemarket.com/meerkovo" target="_blank"><img class="alignnone size-full wp-image-508" title="Visit Meerkovo" src="http://www.milkisevil.com/blog/wp-content/uploads/2011/02/meerkovo-map.jpg" alt="" width="543" height="279" /></a><p class="wp-caption-text">Navigate your way through the village of Meerkovo via the map (zoom in and be sure not to miss the quirky detail... </p></div>
<p><br/><br />
Fans would be driven to the website via this supporting TV Commercial.<br />
<div id="attachment_505" class="wp-caption alignnone" style="width: 553px"><iframe class="alignnone size-full wp-image-508" title="YouTube video player" width="543" height="335" src="http://www.youtube.com/embed/bG8OuftpraA" frameborder="0" allowfullscreen></iframe><p class="wp-caption-text">"There is daaark cloud over Meerkovo!"</p></div></p>
<p>The website work was carried out at <a href="http://www.themill.com" target="_blank">The Mill</a> (in conjunction with <a href="http://www.vccp.com/" target="_blank">VCCP</a>), already famed for their high-end broadcast VFX skills, they&#8217;re now venturing into the world of digital.</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2011/comparethemeerkat-com-meerkovo/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2011/comparethemeerkat-com-meerkovo/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2011/comparethemeerkat-com-meerkovo/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Tips for building AIR for Android Mobile Apps]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/RGix0o8rnbI/" />
		<id>http://www.milkisevil.com/blog/?p=485</id>
		<updated>2010-11-12T11:57:21Z</updated>
		<published>2010-11-12T11:57:21Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Actionscript 3" /><category scheme="http://www.milkisevil.com/blog" term="air" /><category scheme="http://www.milkisevil.com/blog" term="android" /><category scheme="http://www.milkisevil.com/blog" term="as3" />		<summary type="html"><![CDATA[There were a lot of learnings in building CrossTweet for Android. Here are a few tips I&#8217;d like to share with you. Maintaining a Single Unified Codebase With the help of conditional compilation, I&#8217;ve managed to keep a single unified codebase with separate ANT deployments. One example of where conditional compilation came in useful was [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/tips-for-building-air-for-android-mobile-apps/"><![CDATA[<p>There were a lot of learnings in building <a href="http://www.milkisevil.com/blog/2010/new-air-for-android-mobile-app/">CrossTweet for Android</a>. Here are a few tips I&#8217;d like to share with you.</p>
<p><img src="http://www.milkisevil.com/blog/wp-content/uploads/2010/11/air-for-android.png" alt="Adobe AIR for Android" title="Adobe AIR for Android" width="500" height="199" class="alignnone size-full wp-image-494" /></p>
<p><span id="more-485"></span></p>
<h3>Maintaining a Single Unified Codebase</h3>
<p>With the help of conditional compilation, I&#8217;ve managed to keep a single unified codebase with separate ANT deployments. One example of where conditional compilation came in useful was when providing functionality to close the mobile app, something you wouldn&#8217;t do with the web app running in Flash Player.</p>
<div class="codecolorer-container actionscript3 vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900; font-style: italic;">// Stop the compiler choking on NativeApplication when compiling for web using playerglobal.swc</span><br />
CONFIG<span style="color: #000066; font-weight: bold;">::</span>ANDROID<br />
<span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>desktop<span style="color: #000066; font-weight: bold;">.</span>NativeApplication<span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">close</span><span style="color: #000000;">&#40;</span> event<span style="color: #000066; font-weight: bold;">:</span>ErrorViewEvent <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; CONFIG<span style="color: #000066; font-weight: bold;">::</span>ANDROID<br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Only do this if compiling using AIR for Android using (airglobal.swc)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NativeApplication<span style="color: #000066; font-weight: bold;">.</span>nativeApplication<span style="color: #000066; font-weight: bold;">.</span>exit<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #009900; font-style: italic;">// Don't forget to set the value of CONFIG::ANDROID when compiling, see the ANT build.xml</span></div></td></tr></tbody></table></div>
<p>Another example was when forcing the mobile app to automatically go fullscreen on startup, something which would produce errors if attempted within Flash Player.</p>
<div class="codecolorer-container actionscript3 vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0033ff; font-weight: bold;">if</span><span style="color: #000000;">&#40;</span>CONFIG<span style="color: #000066; font-weight: bold;">::</span>ANDROID<span style="color: #000000;">&#41;</span> <span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">displayState</span> = StageDisplayState<span style="color: #000066; font-weight: bold;">.</span>FULL_SCREEN<span style="color: #000066; font-weight: bold;">;</span></div></td></tr></tbody></table></div>
<p>Of course, keeping a entirely unified codebase can have it&#8217;s advantages, but may not be the best approach for every web &#038; mobile app pairing. On a larger project, I&#8217;d probably lean towards unified models and controllers, but with separate views, something easily achieved with the <a href="http://stackoverflow.com/questions/130794/what-is-dependency-injection" target="_blank">dependency injection</a> that a framework like <a href="http://www.robotlegs.org/" target="_blank">Robotlegs</a> provides.</p>
<p><br/><br/></p>
<h3>Application Manifest</h3>
<p>If you&#8217;re familiar with building desktop AIR applications, you will have created an AIR application manifest before. AIR for Android also requires a very similar manifest file, but with the addition of config which will be inserted into the native Android application manifest (native Android apps have their own manifest too and when using AIR for Android, they are effectively combined for convenience). It is here that you will need to request the <a href="http://developer.android.com/reference/android/Manifest.permission.html" target="_blank">specific permissions</a> your app will require.</p>
<div class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">&lt;!-- CrossTweet only requires the internet access permission --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uses-permission</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;android.permission.INTERNET&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></div></td></tr></tbody></table></div>
<p>Be wary of setting the <a href="http://developer.android.com/guide/topics/manifest/uses-configuration-element.html" target="_blank">&#8220;uses-configuration&#8221;</a> elements, they are entirely necessary if you are targeting your app at a specific type of device running Android, but if you have one set accidentally (like I originally did) your app will simply not appear in the Market via an unsupported device. It goes without saying, that I would like to see an option on Android Market to show unsupported apps with accompanying warning messages as to exactly why they&#8217;re not supported on your device!</p>
<div class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">&lt;!-- I didn't realise this basically meant tracker ball, I originally thought a touchscreen could be classed as a five way nav! With this set, my app wouldn't appear in the Market on a Desire HD, where it would appear on a standard Desire - doh! --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uses-configuration</span> <span style="color: #000066;">android:reqFiveWayNav</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span></div></td></tr></tbody></table></div>
<p>By way of example, here is the full &#8220;CrossTweet-app.xml&#8221; file with additions for Android.</p>
<div class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span> <span style="color: #000066;">standalone</span>=<span style="color: #ff0000;">&quot;no&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;application</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://ns.adobe.com/air/application/2.5&quot;</span> <span style="color: #000066;">minimumPatchLevel</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #808080; font-style: italic;">&lt;!-- AIR Application Descriptor File. See http://www.adobe.com/go/learn_air_1.0_application_descriptor_en. --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.bluebarracuda.CrossTweet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>CrossTweet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- A string value of the format &lt;0-999&gt;.&lt;0-999&gt;.&lt;0-999&gt; that represents application version which can be used to check for application upgrade. </span><br />
<span style="color: #808080; font-style: italic;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.</span><br />
<span style="color: #808080; font-style: italic;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; An updated version of application must have a versionNumber value higher than the previous version. Required for namespace &gt;= 2.5 . --&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;versionNumber<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>0.2.2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/versionNumber<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- A string value (such as &quot;v1&quot;, &quot;2.5&quot;, or &quot;Alpha 1&quot;) that represents the version of the application, as it should be shown to users. Optional. --&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;versionLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>v0.2.2 Beta<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/versionLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filename<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>CrossTweet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/filename<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text</span> <span style="color: #000066;">xml:lang</span>=<span style="color: #ff0000;">&quot;en&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>What is CrossTweet?<br />
&nbsp;<br />
The large horizontal words running across the middle make up a tweet, recently sent out into the digital ether by Blue Barracuda or anyone else enjoying a life #LivingDigital.<br />
The vertical tweets are from people across the globe, simply tweeting about their everyday life.<br />
&nbsp;<br />
The moment the two intersect is where we live. That's the place where #LivingDigital becomes core to our outlook on life as a whole.<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;copyright<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Copyright 2010, Blue Barracuda<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/copyright<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;supportedProfiles<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>mobileDevice<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/supportedProfiles<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;initialWindow<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>CrossTweet.swf<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/content<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>CrossTweet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;systemChrome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>standard<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/systemChrome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;transparent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/transparent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;visible<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/visible<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;minimizable<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/minimizable<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;maximizable<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/maximizable<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;resizable<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/resizable<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;width<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>800<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/width<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;height<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>480<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/height<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;x<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>150<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/x<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;y<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>150<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/y<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;minSize<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>800 480<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/minSize<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;maxSize<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>800 480<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/maxSize<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;autoOrients<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/autoOrients<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;renderMode<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>cpu<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/renderMode<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/initialWindow<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;installFolder<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Blue Barracuda/CrossTweet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/installFolder<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;programMenuFolder<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Blue Barracuda/CrossTweet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/programMenuFolder<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;customUpdateUI<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/customUpdateUI<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;allowBrowserInvocation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/allowBrowserInvocation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;icon<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image36x36<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>icons/icon36.png<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image36x36<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image48x48<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>icons/icon48.png<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image48x48<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image72x72<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>icons/icon72.png<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image72x72<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/icon<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;android<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;manifestAdditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">&lt;![CDATA[</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;manifest android:installLocation=&quot;auto&quot;&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;!-- Added for Internet and debugging support --&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot;/&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;supports-screens android:normalScreens=&quot;true&quot;/&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;uses-feature android:required=&quot;true&quot; android:name=&quot;android.hardware.touchscreen.multitouch&quot;/&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;application android:enabled=&quot;true&quot;&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;activity android:excludeFromRecents=&quot;false&quot;&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;intent-filter&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;action android:name=&quot;android.intent.action.MAIN&quot;/&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;category android:name=&quot;android.intent.category.LAUNCHER&quot;/&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/intent-filter&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/activity&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/application&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/manifest&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/manifestAdditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/android<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/application<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p><br/><br/></p>
<h3>ANT Buildfile</h3>
<p>The central hub of the entire project has to be the ANT buildfile (build.xml), it neatly brings all deployments together and will be your best friend whilst testing/deploying/testing/etc.</p>
<p><img src="http://www.milkisevil.com/blog/wp-content/uploads/2010/11/crosstweet-air-android-ant-tasks.png" alt="" title="AIR for Android ANT tasks" width="276" height="284" class="alignnone size-full wp-image-456" /></p>
<p>This ANT buildfile will compile a SWF for the web as well as a SWF and APK for Android. It will create a self-signed certificate and if you have your device correctly connected to your computer, there are also tasks that will install, launch and even uninstall the app onto/from your device &#8211; c&#8217;mon, what more could you ask for?!! Don&#8217;t forget you&#8217;ll require the Flex SDK 4.1 and the latest Android 2.2 SDK at your disposal.</p>
<div class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<br />
<span style="color: #808080; font-style: italic;">&lt;!-- </span><br />
<span style="color: #808080; font-style: italic;">************************************************************</span><br />
<br />
<span style="color: #808080; font-style: italic;">&nbsp; &nbsp; ANT buildfile for unified codebase AIR for Android </span><br />
<span style="color: #808080; font-style: italic;">&nbsp; &nbsp; and Flash Player deployments.</span><br />
<span style="color: #808080; font-style: italic;">&nbsp; &nbsp; </span><br />
<span style="color: #808080; font-style: italic;">&nbsp; &nbsp; Author: &nbsp; &nbsp; &nbsp; &nbsp; Philip Bulley</span><br />
<span style="color: #808080; font-style: italic;">&nbsp; &nbsp; Last updated: &nbsp; 4th November 2010</span><br />
<span style="color: #808080; font-style: italic;">&nbsp; &nbsp; </span><br />
<span style="color: #808080; font-style: italic;">************************************************************</span><br />
<span style="color: #808080; font-style: italic;">--&gt;</span><br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">default</span>=<span style="color: #ff0000;">&quot;1) Compile SWF Web&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;CrossTweet&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- Path to Flex and Android SDKs --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;sdk_dir&quot;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;C:\Program Files\flex_sdk_4.1.0.16076&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;android_sdk_dir&quot;</span> &nbsp; &nbsp;<span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;C:\Program Files\android-sdk-windows&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;mxmlc&quot;</span> &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${sdk_dir}/lib/mxmlc.jar&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;adl&quot;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${sdk_dir}/bin/adl.exe&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;adt&quot;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${sdk_dir}/lib/adt.jar&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;adb&quot;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${android_sdk_dir}/tools/adb.exe&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;sdk_lib_dir&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${sdk_dir}\frameworks\libs&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- Project properties --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_name&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;CrossTweet&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_id&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;com.yourcompany.CrossTweet&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- must match the id in the application descriptor --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_root_dir&quot;</span> &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;assets_dir_name&quot;</span> &nbsp; &nbsp;<span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;asset&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- Certificate properties --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;cert_name&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;CrossTweetCert&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;cert_pw&quot;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;INSERT_PASSWORD_HERE&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;org_name&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Blue Barracuda&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;org_unit&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Creative&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;country&quot;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;GB&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;key_type&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;2048-RSA&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;cert_validity&quot;</span>&nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;25&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;cert_path&quot;</span> &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/${assets_dir_name}/certificate&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;cert_file&quot;</span> &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${cert_path}/${cert_name}.p12&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- Project paths and filenames --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;swf_filename&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_name}.swf&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;android_filename&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_name}.apk&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_descriptor_filename&quot;</span>&nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_name}-app.xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;main_class&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/src/Main.as&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;bin_dir&quot;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/bin&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;bin_debug_dir&quot;</span> &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/bin&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- note using single bin + bin-debug dir, change if you like --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;bin_android_dir&quot;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/bin-android&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;bin_debug_android_dir&quot;</span>&nbsp; &nbsp; &nbsp; <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/bin-android&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- note using single bin + bin-debug dir, change if you like --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;assets_dir&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/${assets_dir_name}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;lib_dir&quot;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/lib&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- Compile SWF to build-directory for packaging --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;1) Compile SWF Web&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${mxmlc}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-debug=false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;+flexlib=${sdk_dir}/frameworks&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">'-static-link-runtime-shared-libraries=true'</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">'-target-player=10.0'</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-file-specs=${main_class}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-output=${bin_dir}/${swf_filename}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">'-define+=CONFIG::ANDROID,false'</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/as3corelib.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/CasaLib_1.3.0.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/greensock.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/Library.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/MouseManager.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/robotlegs-framework-v1.1.2.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;1a) Compile SWF Android&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${mxmlc}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-debug=false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;+flexlib=${sdk_dir}/frameworks&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;+configname=air&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-file-specs=${main_class}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-output=${bin_android_dir}/${swf_filename}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">'-define+=CONFIG::ANDROID,true'</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/as3corelib.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/CasaLib_1.3.0.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/greensock.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/Library.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/MouseManager.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/robotlegs-framework-v1.1.2.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- Compile SWF to debug directory and copy assets to it --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;2) Compile SWF Web (Debug)&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${mxmlc}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-debug=true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;+flexlib=${sdk_dir}/frameworks&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">'-static-link-runtime-shared-libraries=true'</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">'-target-player=10.0'</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-file-specs=${main_class}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-output=${bin_debug_dir}/${swf_filename}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">'-define+=CONFIG::ANDROID,false'</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/as3corelib.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/CasaLib_1.3.0.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/greensock.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/Library.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/MouseManager.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path+=${lib_dir}/robotlegs-framework-v1.1.2.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;2a) Compile SWF Android (Debug)&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${mxmlc}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-debug=true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;+flexlib=${sdk_dir}/frameworks&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;+configname=air&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-file-specs=${main_class}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-output=${bin_debug_android_dir}/${swf_filename}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">'-define+=CONFIG::ANDROID,true'</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/as3corelib.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/CasaLib_1.3.0.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/greensock.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/Library.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path=${lib_dir}/MouseManager.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-library-path+=${lib_dir}/robotlegs-framework-v1.1.2.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- Show application without packaging --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;3) Test Android App&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;2a) Compile SWF Android (Debug)&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;${adl}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${bin_debug_android_dir}/${app_descriptor_filename}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${bin_debug_android_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- Packaging the application to an air-file &amp; save it in the publish directory --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;4) Package Android App&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;1a) Compile SWF Android&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${adt}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-package&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-target&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;apk&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-storetype&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;pkcs12&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-keystore&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${cert_file}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-storepass&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${cert_pw}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${bin_android_dir}/${android_filename}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${bin_android_dir}/${app_descriptor_filename}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-C&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${bin_android_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${swf_filename}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${bin_android_dir}/icons&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;4a) Install Android App on Device&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;4) Package Android App&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${adt}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-installApp&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-platform&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;android&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-platformsdk&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${android_sdk_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-package&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${bin_android_dir}/${android_filename}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;4b) Launch Android App on Device&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${adt}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-launchApp&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-platform&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;android&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-platformsdk&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${android_sdk_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-appid&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_id}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;4c) Uninstall Android App from Device&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${adt}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-uninstallApp&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-platform&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;android&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-platformsdk&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${android_sdk_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-appid&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_id}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- Creating a digital ID certificate --&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;5) Create New Certificate&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${adt}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-certificate&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-cn&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${cert_name}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-ou&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${org_unit}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-o&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${org_name}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-validityPeriod&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${cert_validity}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-c&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${country}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${key_type}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${cert_file}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${cert_pw}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;6) List devices attached&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;${adb}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;devices&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;echo</span> <span style="color: #000066;">message</span>=<span style="color: #ff0000;">&quot;echo test ${org_name}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>Another very useful reference is the <a href="http://help.adobe.com/en_US/air/build/air_buildingapps.pdf" target="_blank">Building ADOBE® AIR® Applications</a> PDF guide. It will give you more insight on how you can configure your application, as well as recommended icon sizes, and much more.</p>
<p>Good luck, and if you make an AIR for Android app, I&#8217;d love to know about it.</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/tips-for-building-air-for-android-mobile-apps/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/tips-for-building-air-for-android-mobile-apps/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/tips-for-building-air-for-android-mobile-apps/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[New AIR for Android mobile app]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/HwIaNJKTXc0/" />
		<id>http://www.milkisevil.com/blog/?p=442</id>
		<updated>2011-09-25T17:06:52Z</updated>
		<published>2010-11-12T11:46:44Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Personal Projects" /><category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="air" /><category scheme="http://www.milkisevil.com/blog" term="android" /><category scheme="http://www.milkisevil.com/blog" term="blue barracuda" /><category scheme="http://www.milkisevil.com/blog" term="mobile" /><category scheme="http://www.milkisevil.com/blog" term="robotlegs" /><category scheme="http://www.milkisevil.com/blog" term="twitter api" />		<summary type="html"><![CDATA[When Adobe were preaching about seamless deployment across devices, they weren&#8217;t telling porky pies. Presenting CrossTweet for Android: Part of the motivation behind building CrossTweet was the upcoming release of Adobe AIR for Android. A key goal was to provide seamless deployment across web and mobile by employing interaction techniques ubiquitous to mouse and touchscreen [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/new-air-for-android-mobile-app/"><![CDATA[<p>When Adobe were preaching about <a href="http://www.openscreenproject.org/" target="_blank">seamless deployment across devices</a>, they weren&#8217;t telling porky pies. Presenting CrossTweet for Android:</p>
<p><iframe src="http://player.vimeo.com/video/16750076?byline=0&amp;portrait=0&amp;color=ff0000" width="520" height="390" frameborder="0"></iframe></p>
<p>Part of the motivation behind building <a href="http://www.milkisevil.com/blog/2010/crosstweet-where-digital-and-everyday-life-intersect/">CrossTweet</a> was the upcoming release of Adobe AIR for Android. A key goal was to provide seamless deployment across web and mobile by employing interaction techniques ubiquitous to mouse and touchscreen input. Which is why if you&#8217;ve seen <a href="http://crosstweet.bluebarracuda.com/" target="_blank">CrossTweet on the web</a> already, you may have noticed that the prev/next navigation had been inspired by the &#8220;drag to reload&#8221; functionality of twitter and other apps on the iPhone.</p>
<p>Point your phone&#8217;s QR code reader at the lovely pattern below, and give the app a test drive.</p>
<p><img src="http://www.milkisevil.com/blog/wp-content/uploads/2010/11/crosstweet-android-market-qrcode-small.png" alt="" title="crosstweet-android-market-qrcode-small" width="195" height="195" class="alignnone size-full wp-image-486" /></p>
<p>For insight and tips on how this was built, see my <a href="http://www.milkisevil.com/blog/2010/tips-for-building-air-for-android-mobile-apps/">Tips for building AIR for Android Mobile Apps</a> post.</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/new-air-for-android-mobile-app/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/new-air-for-android-mobile-app/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/new-air-for-android-mobile-app/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[CrossTweet: Where digital and everyday life intersect]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/cwhW9ul_fmM/" />
		<id>http://www.milkisevil.com/blog/?p=405</id>
		<updated>2010-11-11T14:39:36Z</updated>
		<published>2010-11-11T14:24:28Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Personal Projects" /><category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="blue barracuda" /><category scheme="http://www.milkisevil.com/blog" term="regular expression" /><category scheme="http://www.milkisevil.com/blog" term="robotlegs" /><category scheme="http://www.milkisevil.com/blog" term="twitter api" />		<summary type="html"><![CDATA[During my last few days working at Blue Barracuda, I managed to find a little R&#38;D time. The result of which has been an experimental interactive data visualisation piece known as CrossTweet. The large horizontal words running across the middle make up a single tweet. These tweets will be pulled in directly from anybody currently [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/crosstweet-where-digital-and-everyday-life-intersect/"><![CDATA[<p>During my last few days working at Blue Barracuda, I managed to find a little R&amp;D time. The result of which has been an experimental interactive data visualisation piece known as <a href="http://crosstweet.bluebarracuda.com/" target="_blank">CrossTweet</a>.</p>
<p><a href="http://www.milkisevil.com/blog/wp-content/uploads/2010/11/crosstweet-codefu.png" rel="lightbox[405]"><img class="alignnone size-full wp-image-421" title="A tweet from BBHLabs crossed with everyday life" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/11/crosstweet-codefu.png" alt="CrossTweet" width="520" height="273" /></a></p>
<p><span id="more-405"></span></p>
<p>The large horizontal words running across the middle make up a single tweet. These tweets will be pulled in directly from anybody currently featured in the <a href="http://twitter.com/BlueBarracudaUK/livingdigital" target="_blank">@BlueBarracudaUK/livingdigital</a> twitter list &#8211; a twitter list collating digital agencies and individuals who regularly tweet on topics related to the digital industry.</p>
<p>The vertical tweets are from random people across the globe, simply tweeting about their everyday lives. Each vertical tweet intersects the main tweet at a common word, providing an often interesting juxtaposition between the digital industry and those who consume it.</p>
<div id="attachment_423" class="wp-caption alignnone" style="width: 232px"><a href="http://www.milkisevil.com/blog/wp-content/uploads/2010/11/crosstweet-please-curry-puffs.png" rel="lightbox[405]"><img class="size-full wp-image-423" title="Example of a single CrossTweet" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/11/crosstweet-please-curry-puffs.png" alt="Example of a single CrossTweet" width="222" height="407" /></a><p class="wp-caption-text">The beauty of random: Sardine Curry Puffs? What?</p></div>
<p>Behind the scenes we have Actionscript retrieving the <a href="http://twitter.com/BlueBarracudaUK/livingdigital" target="_blank">@BlueBarracudaUK/livingdigital</a> twitter list (via the <a href="http://twiterlist2rss.appspot.com/" target="_blank">twiterlist2rss</a> proxy, as Twitter don&#8217;t currently offer syndication feeds for lists). After which, the feed is broken down into individual word chunks, with each chunk forming the basis of a new search submitted to the <a href="http://dev.twitter.com/doc/get/search" target="_blank">Twitter Search API</a>.</p>
<p>A few regular expressions help lubricate the process of preparing the data before sending to the search API, as well as displaying them correctly once returned. For example, punctuation is not submitted in searches as it could severely limit the results we get back; on the flipside Twitter will sometimes return results with unexpected punctuation spliced in, which could otherwise make the process of intersecting tweets problematic.</p>
<p>Here are a few useful regular expressions used (made easy to write with the help of the awesome <a href="http://www.regexr.com" target="_blank">regexr</a>):</p>
<div class="codecolorer-container actionscript3 vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0033ff; font-weight: bold;">public</span> static const REGEX_CONTAINS_URL&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=regexp%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:regexp.html"><span style="color: #004993;">RegExp</span></a> = <span style="color: #009966; font-style: italic;">/((https?|ftp|file):\/\/+)?(([a-z0-9]+\.)+[a-z]{2,6}(\b|\/|\:))([a-z0-9\?\/~%&amp;amp;$+\-:;=@_.,#]+[a-z0-9\/~$+\-_])?/gi</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">public</span> static const REGEX_IS_URL&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=regexp%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:regexp.html"><span style="color: #004993;">RegExp</span></a> = <span style="color: #009966; font-style: italic;">/^((https?|ftp|file):\/\/+)?(([a-z0-9]+\.)+[a-z]{2,6}(\b|\/|\:))([a-z0-9\?\/~%&amp;amp;$+\-:;=@_.,#]+[a-z0-9\/~$+\-_])?$/gi</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">public</span> static const REGEX_HOST&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=regexp%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:regexp.html"><span style="color: #004993;">RegExp</span></a> = <span style="color: #009966; font-style: italic;">/([a-z0-9-]+\.)+[a-z]{2,6}(\b|\/|:)/gi</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">public</span> static const TWITTER_USERNAME&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=regexp%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:regexp.html"><span style="color: #004993;">RegExp</span></a> = <span style="color: #009966; font-style: italic;">/@[a-z0-9_]+/gi</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">public</span> static const TWITTER_HASHTAG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=regexp%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:regexp.html"><span style="color: #004993;">RegExp</span></a> = <span style="color: #009966; font-style: italic;">/#[a-z0-9]+/gi</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">public</span> static const NON_PUNCTUATION &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=regexp%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:regexp.html"><span style="color: #004993;">RegExp</span></a> = <span style="color: #009966; font-style: italic;">/[a-zA-Z0-9 ]/gi</span><span style="color: #000066; font-weight: bold;">;</span></div></td></tr></tbody></table></div>
<p>On the whole, the original idea was to create something more of a novelty that could possibly grow into being useful and informative. Hopefully, it&#8217;s currently at a stage that would make <a href="http://www.informationisbeautiful.net/" target="_blank">David McCandless</a> smile.</p>
<p>Thanks to <a href="http://twitter.com/monicaalaya" target="_blank">@monicaalaya</a> for her help with design, and to <a href="http://twitter.com/isomadotnet">@isomadotnet</a> for playing that round of idea tennis that gave birth to this.</p>
<p>You can have a <a href="http://crosstweet.bluebarracuda.com/" target="_blank">play with CrossTweet here</a>.</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/crosstweet-where-digital-and-everyday-life-intersect/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/crosstweet-where-digital-and-everyday-life-intersect/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/crosstweet-where-digital-and-everyday-life-intersect/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Flash On The Beach 2010]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/6nIbc9ncWG0/" />
		<id>http://www.milkisevil.com/blog/?p=384</id>
		<updated>2010-10-02T15:15:43Z</updated>
		<published>2010-10-02T15:15:43Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Uncategorized" />		<summary type="html"><![CDATA[NOTE: This article was first posted on the Blue Barracuda blog. Flash On The Beach 2010 opening titles by Nando Costa I’d like to extend my sympathies to the residents of Brighton. Not only has this week seen hoards of drunken students returning to the city (it’s Freshers&#8217; Week!), but also the annual geek onslaught [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/flash-on-the-beach-2010/"><![CDATA[<p>NOTE: This article was first posted on the <a href="http://blog.bluebarracuda.com/2010/10/01/flash-on-the-beach-2010/" target="_blank">Blue Barracuda blog</a>.</p>
<p><iframe src="http://player.vimeo.com/video/15271355?title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff" width="550" height="309" frameborder="0"></iframe><br />
<em>Flash On The Beach 2010 opening titles by <a href="http://www.nandocosta.com/">Nando Costa</a></em></p>
<p>I’d like to extend my sympathies to the residents of Brighton. Not only has this week seen hoards of drunken students returning to the city (it’s Freshers&#8217; Week!), but also the annual geek onslaught that is <a href="http://www.flashonthebeach.com">Flash On The Beach</a>! To the unacquainted, it’s a 3-day conference featuring some of the world’s most prolific talent to have successfully combined the (all too often) polar opposites of ‘creative’ and ‘developer’.</p>
<p><span id="more-384"></span></p>
<p>There’s so much to talk about (although I’ll leave out <a href="http://www.milkisevil.com/blog/wp-content/uploads/2010/10/blowjobgate-twitter.jpg" rel="lightbox[384]">#blowjobgate</a>!) including a couple of advancements for the Flash Platform. Most notably, during the Adobe keynote, <a href="http://twitter.com/thibault_imbert">@thibault_imbert</a> demonstrated  <a href="http://en.wikipedia.org/wiki/Graphics_processing_unit">GPU</a>-based video rendering, where in a live demo, he showed full HD 1080p video playback dropping from ~50% CPU usage down to 6% after the new feature had been activated. What’s more, this was on a Mac, the platform where Flash video playback has long been criticized for being less than acceptable due to Apple not having done <a href="http://www.tuaw.com/2010/04/22/apple-throws-adobe-a-bone-on-the-mac/">this</a> sooner.</p>
<p>Also announced was incremental compilation in the Flash IDE (a feature that Flash Developers have enjoyed for a while when compiling using mxmlc and fcsh). Meaning that when a SWF is published, only the elements that have been changed since the last publish will require re-compilation. This will be of huge benefit to Flash Animators with FLAs containing assets of a large file size (ie. embedded audio/video/large bitmaps) as re-publishing will become to be lightning fast.</p>
<p>We definitely saw an emphasis on producing content for mobile this year, and rightly so, as Laura Jordan Bambach (<a href="http://twitter.com/laurajaybee">@laurajaybee</a>) pointed out: Mobile internet access is rapidly overtaking fixed line access, a trend particularly prevalent amongst those in developing countries along with the youngest and the poorest demographics. Sounds fairly obvious right? Obviously not, as we, the content creators <a href="http://www.narrowdesign.com/future/">have so far clearly demonstrated</a>!</p>
<p>Mike Chambers (<a href="http://twitter.com/mesh">@mesh</a>) went into technical specifics by divulging his knowledge of <a href="http://labs.adobe.com/technologies/air2/android/">AIR 2.5 (beta) for Android</a> (and coming soon to iPhone, hopefully). Top tips included:</p>
<ul>
<li>Using “cacheAsBitmap” and the new “cacheAsBitmapMatrix” to force the player to composite      display objects on the device’s GPU for significant performance      increases.</li>
<li>Using      CTextureUploadTracking on iOS to visually show where display objects are      being uploaded/re-uploaded to the GPU (reminds me of “Show Redraw Regions”      in the Flash Player debug version). A very useful feature, although not      yet available on Android.</li>
<li>Using      traditional optimization techniques such as <a href="http://en.wikipedia.org/wiki/Object_pool_pattern">Object Pooling</a>; avoiding MouseEvent.MOUSE_MOVE; and using MouseEvent instead of TouchEvent    where possible.</li>
</ul>
<p>Mike also pointed out Thibault Imbert’s paper on <a href="http://www.bytearray.org/?p=1363">Optimizing Performance for the Adobe Flash Platform</a> which I’m sure will make for a great read.</p>
<p>There was, of course a lighter side to the conference, with top inspirational presentations from Brendan Dawes (<a href="http://twitter.com/brendandawes">@brendandawes</a>), <a href="http://levitated.net/">Jared Tarbell</a> and an outright mentalist session by <a href="http://www.cyriak.co.uk/">Cyriak Harris</a> (<a href="http://twitter.com/CyriakHarris">@CyriakHarris</a>) – the gifted madman behind those <a href="http://www.youtube.com/watch?v=FavUpD_IjVY">cows &amp; cows &amp; cows</a>!</p>
<p>But of course, that’s only scratching the surface of what was a memorable (after all that £1 beer, I’d say ‘hazy’ is a more appropriate term) three days. For more in-depth coverage, I can only recommend the <a href="http://www.flashmagazine.com">FlashMagazine.com</a> reports: <a href="http://www.flashmagazine.com/community/detail/flash_on_the_beach_2010_-_day_1/">Day 1</a> | <a href="http://www.flashmagazine.com/community/detail/flash_on_the_beach_2010_-_day_21/">Day 2</a> | <a href="http://www.flashmagazine.com/community/detail/flash_on_the_beach_2010_-_day_3/">Day 3</a> | <a href="http://www.flashmagazine.com/community/detail/famous_for_3_minutes/">Elevator Pitch</a>.</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/flash-on-the-beach-2010/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/flash-on-the-beach-2010/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/flash-on-the-beach-2010/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Regex to find non-weak referenced addEventListener()]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/hsZu1yv28ZU/" />
		<id>http://www.milkisevil.com/blog/?p=364</id>
		<updated>2010-09-20T11:31:43Z</updated>
		<published>2010-09-20T11:31:43Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Actionscript 3" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="regular expression" /><category scheme="http://www.milkisevil.com/blog" term="resource management" />		<summary type="html"><![CDATA[It&#8217;s always advisable to use weakly referenced event listeners in AS3. If you need to recap on why, check out Grant Skinner&#8217;s blog post. But in practice, if you&#8217;re &#8216;coding at the speed of thought&#8217;, or if you&#8217;ve inherited someone else&#8217;s code base, you may end up with some calls to addEventListener() which don&#8217;t use [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/regex-to-find-non-weak-referenced-addeventlistener/"><![CDATA[<p>It&#8217;s always advisable to use weakly referenced event listeners in AS3. If you need to recap on why, check out <a title="AS3: Weakly Referenced Listeners" href="http://www.gskinner.com/blog/archives/2006/07/as3_weakly_refe.html" target="_blank">Grant Skinner&#8217;s blog post</a>. But in practice, if you&#8217;re &#8216;coding at the speed of thought&#8217;, or if you&#8217;ve inherited someone else&#8217;s code base, you may end up with some calls to addEventListener() which don&#8217;t use a weak reference.</p>
<p>The following regular expression will find all occurrences of addEventListener() that don&#8217;t use a weak reference:</p>
<div class="codecolorer-container actionscript3 vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span> <span style="color: #000066; font-weight: bold;">*</span><span style="color: #000000;">&#41;</span>\<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>a<span style="color: #000066; font-weight: bold;">-</span>zA<span style="color: #000066; font-weight: bold;">-</span>Z<span style="color: #000066; font-weight: bold;">.</span>_ <span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">*,</span><span style="color: #000000;">&#91;</span>a<span style="color: #000066; font-weight: bold;">-</span>zA<span style="color: #000066; font-weight: bold;">-</span>Z<span style="color: #000066; font-weight: bold;">.</span>_ <span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">*</span>\<span style="color: #000000;">&#41;</span></div></td></tr></tbody></table></div>
<p>Using this with your code editor&#8217;s &#8220;Find in Files&#8230;&#8221; feature (ensure you check the &#8220;Use Regular Expression&#8221; option) will track down each offending code snippet, which you can then manually amend should you decide that using a weak reference is suitable.</p>
<div id="attachment_365" class="wp-caption alignnone" style="width: 480px"><a href="http://www.milkisevil.com/blog/wp-content/uploads/2010/09/fdt-search-regex-weak-ref.jpg" rel="lightbox[364]"><img class="size-full wp-image-365" title="FDT search regex to find non-weak referenced addEventListener code" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/09/fdt-search-regex-weak-ref.jpg" alt="FDT search regex to find non-weak referenced addEventListener code" width="470" height="433" /></a><p class="wp-caption-text">Example of using the regular expression in the FDT &quot;File Search&quot; dialogue</p></div>
<p>Just make sure that you&#8217;re not relying on the reference created by addEventListener() to prevent the garbage collector from devouring your object for dinner. Generally, using a weak reference is fine when adding an event listener to a class scoped object, but not to an object locally defined within your current method.</p>
<p>Feel free to test/demo/fork it at <a href="http://regexr.com?2s5fc" target="_blank">http://regexr.com?2s5fc</a></p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/regex-to-find-non-weak-referenced-addeventlistener/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/regex-to-find-non-weak-referenced-addeventlistener/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/regex-to-find-non-weak-referenced-addeventlistener/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[The Girl Who Played With Fire]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/9TbSfsX8v-8/" />
		<id>http://www.milkisevil.com/blog/?p=321</id>
		<updated>2010-10-19T10:08:30Z</updated>
		<published>2010-08-21T11:06:19Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Facebook Development" /><category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="blue barracuda" /><category scheme="http://www.milkisevil.com/blog" term="facebook api" /><category scheme="http://www.milkisevil.com/blog" term="puremvc" />		<summary type="html"><![CDATA[I&#8217;ve got Facebook games coming out of my ears right about now! This one is to accompany the new movie &#8216;The Girl Who Played With Fire&#8217; &#8211; out in cinemas later this month. If you&#8217;ve read any of the Millennium Trilogy books, you&#8217;ll know that the story&#8217;s protagonist, Lisbeth Salander (aka &#8216;The Wasp&#8217;), has the [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/the-girl-who-played-with-fire/"><![CDATA[<p>I&#8217;ve got Facebook games coming out of my ears right about now! This one is to accompany the new movie &#8216;The Girl Who Played With Fire&#8217; &#8211; out in cinemas later this month.</p>
<div id="attachment_322" class="wp-caption alignnone" style="width: 516px"><a href="http://playwithfire.findanyfilm.com/" target="_blank"><img class="size-full wp-image-322   " title="Play: The Girl Who Played With Fire" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/08/the-girl-who-played-with-fire.png" alt="Play: The Girl Who Played With Fire" width="506" height="430" /></a><p class="wp-caption-text">Ooh! Looks like I got one right =)</p></div>
<p><span id="more-321"></span></p>
<p>If you&#8217;ve read any of the Millennium Trilogy books, you&#8217;ll know that the story&#8217;s protagonist, Lisbeth Salander (aka &#8216;The Wasp&#8217;), has the unnatural talent of knowing other people&#8217;s darkest secrets (we won&#8217;t mention that she&#8217;s a pesky computer hacker!). Now, through the magic of social gaming, Salander is out to test <em>your </em>knowledge of the people around you.</p>
<p>Behind the scenes, the game basically data mines the Facebook profiles of your friends (sounds menacing huh!), then builds questions based on that data. If you&#8217;re anything like me, you&#8217;ll be surprised at how <em>little </em>you actually know about your nearest and dearest.</p>
<p>Satisfy your inner stalker, go <a title="Play now!" href="http://playwithfire.findanyfilm.com/" target="_blank">Play With Fire</a> and you might even be slapped in the face with an instant win prize! Whoop!</p>
<div id="attachment_324" class="wp-caption alignnone" style="width: 572px"><a href="http://playwithfire.findanyfilm.com/"><img class="size-full wp-image-324  " title="the-girl-who-played-with-fire-facebook-post" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/08/the-girl-who-played-with-fire-facebook-post.png" alt="" width="562" height="151" /></a><p class="wp-caption-text">Make sure you tell ALL your friends about your win! After all, modesty is so Web 1.0.</p></div>
<p>Thanks to <a title="Robert Turrall" href="http://twitter.com/robert_t" target="_blank">@robert_t</a> for helping out on this insanely tight deadline &#8211; cheers dude!</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/the-girl-who-played-with-fire/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/the-girl-who-played-with-fire/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/the-girl-who-played-with-fire/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Pizza Hut &#8211; Hungry For &#8216;A-Team&#8217; Action]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/LC65rtzso6Q/" />
		<id>http://www.milkisevil.com/blog/?p=277</id>
		<updated>2010-09-18T20:32:21Z</updated>
		<published>2010-08-09T20:36:16Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Facebook Development" /><category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="blue barracuda" /><category scheme="http://www.milkisevil.com/blog" term="facebook api" /><category scheme="http://www.milkisevil.com/blog" term="game" /><category scheme="http://www.milkisevil.com/blog" term="puremvc" />		<summary type="html"><![CDATA[Hot on the heels of &#8216;Pass It Around Pizza&#8217; comes &#8216;Hungry For Action&#8217;; the second social game for Pizza Hut UK. Supporting the release of the new A-Team movie, the premise is simple; smack the living daylights out of as many soldiers as possible. Again, gameplay is Bishi Bashi-style fast-paced, and curiously addictive. Taking a cue [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/pizza-hut-hungry-for-a-team-action/"><![CDATA[<p>Hot on the heels of <a title="Read about Pass It Around Pizza" href="http://www.milkisevil.com/blog/2010/pass-it-around-pizza/" target="_blank">&#8216;Pass It Around Pizza&#8217;</a> comes <a title="Play Hungry For Action" href="http://apps.facebook.com/hungry-for-action/" target="_blank">&#8216;Hungry For Action&#8217;</a>; the second social game for Pizza Hut UK. Supporting the release of the new A-Team movie, the premise is simple; smack the living daylights out of as many soldiers as possible.</p>
<div id="attachment_280" class="wp-caption alignnone" style="width: 534px"><a href="http://apps.facebook.com/hungry-for-action/"><img class="size-full wp-image-280        " title="Beating off a bunch of yankee soldiers your thing? Give us a click!" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/08/pizza-hut-hungry-for-action.jpg" alt="" width="524" height="403" /></a><p class="wp-caption-text">We were originally going to create a brash tank-based game, until we realised that&#39;d probably turn more women (being a large wedge of our target demographic) off than John McCririck&#39;s sweaty wackers on a humid summer&#39;s evening.</p></div>
<p><span id="more-277"></span></p>
<p>Again, gameplay is <a title="Watch a Bishi-Bashi special video" href="http://www.youtube.com/watch?v=-azMAkQeAgg">Bishi Bashi</a>-style fast-paced, and curiously addictive. Taking a cue from games like <a title="Any excuse to post 'Fat DDR Kid'" href="http://www.youtube.com/watch?v=789QXWMVy_c" target="_blank">Dance Dance Revolution</a>, you&#8217;ll need to keep rhythm (but unlike DDR, you won&#8217;t necessarily look like a <a title="Just in case you didn't happen to see my previous link to 'Fat DDR Kid'" href="http://www.youtube.com/watch?v=789QXWMVy_c" target="_blank">twat</a>).</p>
<p>Following the success of <a title="Read about Pass It Around Pizza" href="http://www.milkisevil.com/blog/2010/pass-it-around-pizza/" target="_blank">Pass It Around Pizza&#8217;s</a> virtual pizza slices, your A-Team characters can receive virtual pizza deliveries. These contain sharable slices which ultimately lead to prizes.</p>
<div id="attachment_289" class="wp-caption alignnone" style="width: 520px"><a href="http://apps.facebook.com/hungry-for-action/"><img class="size-full wp-image-289   " title="Hannibal has a pizza delivery" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/08/pizza-hut-hungry-for-action-delivery.jpg" alt="" width="510" height="119" /></a><p class="wp-caption-text">Hungry Hannibal loved it when a pizza delivery order came together - uh.</p></div>
<p>So think you can kick some military ass? <a title="Play Hungry For Action" href="http://apps.facebook.com/hungry-for-action/">Get to it soldier</a>.</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/pizza-hut-hungry-for-a-team-action/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/pizza-hut-hungry-for-a-team-action/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/pizza-hut-hungry-for-a-team-action/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[AS3 Vector shuffle / randomize]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/2nmPUZPy1es/" />
		<id>http://www.milkisevil.com/blog/?p=263</id>
		<updated>2010-09-01T13:14:38Z</updated>
		<published>2010-07-20T20:03:20Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Actionscript 3" /><category scheme="http://www.milkisevil.com/blog" term="as3" />		<summary type="html"><![CDATA[UPDATE: Please see comments below for a shuffle technique using the efficient Fisher-Yates algorithm. Whilst working on an AS3 project, I figured I needed to shuffle the order of a Vector. A quick Google search looking for a code snippet that will shuffle the order of an Array will produce many results (although I&#8217;d most [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/as3-vector-shuffle-randomize/"><![CDATA[<p><strong>UPDATE: Please see comments below for a shuffle technique using the efficient <a href="http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle" target="_blank">Fisher-Yates</a> algorithm.</strong></p>
<p>Whilst working on an AS3 project, I figured I needed to shuffle the order of a Vector. A quick Google search looking for a code snippet that will shuffle the order of an Array will produce many results (although I&#8217;d most likely use the nicely packaged <a href="http://as3.casalib.org/docs/org_casalib_util_AlignUtil.html" target="_blank">CasaLib&#8217;s ArrayUtil.randomize()</a>). But the same is not true (at least as of writing) for shuffling the order of a Vector.</p>
<p>So this post is for anyone stumbling on in from Google, requiring a quick &#8220;I can&#8217;t be bothered to think about it&#8221; solution:</p>
<div class="codecolorer-container actionscript3 vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339966; font-weight: bold;">function</span> shuffleVector<span style="color: #000000;">&#40;</span> a<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=object%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:object.html"><span style="color: #004993;">Object</span></a><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">b</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=object%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:object.html"><span style="color: #004993;">Object</span></a> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=int%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:int.html"><span style="color: #004993;">int</span></a><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> <a href="http://www.google.com/search?q=math%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:math.html"><span style="color: #004993;">Math</span></a><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">floor</span><span style="color: #000000;">&#40;</span> <a href="http://www.google.com/search?q=math%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:math.html"><span style="color: #004993;">Math</span></a><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">random</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">3</span> <span style="color: #000066; font-weight: bold;">-</span> <span style="color: #000000; font-weight:bold;">1</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #009900; font-style: italic;">// Some quick timeline code to test it</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> v<span style="color: #000066; font-weight: bold;">:</span>Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>String<span style="color: #000066; font-weight: bold;">&gt;</span> = <span style="color: #0033ff; font-weight: bold;">new</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>String<span style="color: #000066; font-weight: bold;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
v<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">push</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">'one'</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">'two'</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">'three'</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">'four'</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span> v <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> &nbsp; &nbsp;<span style="color: #009900; font-style: italic;">// Original</span><br />
v<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">sort</span><span style="color: #000000;">&#40;</span> shuffleVector <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span> v <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> &nbsp; &nbsp;<span style="color: #009900; font-style: italic;">// Shuffled</span></div></td></tr></tbody></table></div>
<p>Just to note, Array.sort() has never won any awards for code execution speed, so it&#8217;s likely that Vector.sort() won&#8217;t either.</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/as3-vector-shuffle-randomize/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/as3-vector-shuffle-randomize/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/as3-vector-shuffle-randomize/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Wagamama Keepy-Uppy]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/-9qnz6g-pZ4/" />
		<id>http://www.milkisevil.com/blog/?p=246</id>
		<updated>2010-09-18T20:33:46Z</updated>
		<published>2010-06-29T22:05:06Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="blue barracuda" /><category scheme="http://www.milkisevil.com/blog" term="box2dflash" /><category scheme="http://www.milkisevil.com/blog" term="game" /><category scheme="http://www.milkisevil.com/blog" term="puremvc" />		<summary type="html"><![CDATA[In the spirit of the World Cup 2010, Wagamama wanted to challenge their loyal fans, old and new, to a classic game of football keepy-uppy — but not without a twist. Long gone are the days of using the tried and tested boot to keep a football blissfully bouncing in the air; this is about [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/wagamama-keepy-uppy/"><![CDATA[<div>
<p>In the spirit of the World Cup 2010, Wagamama wanted to challenge their loyal fans, old and new, to a classic game of football keepy-uppy — but not without a twist.</p>
<div id="attachment_247" class="wp-caption alignnone" style="width: 560px"><a href="http://wagamamasta-staging.bluebarracuda.com/frontend_staging.php/keepy_uppy" target="_blank"><img class="size-full wp-image-247  " title="wagamama-keepy-uppy-game" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/06/wagamama-keepy-uppy-game.png" alt="" width="550" height="424" /></a><p class="wp-caption-text">Hit it, spin it, whack it against the wall — most importantly, keep it up!*</p></div>
<p><span id="more-246"></span></p>
<p>Long gone are the days of using the tried and tested boot to keep a football blissfully bouncing in the air; this is about wielding chopsticks to keep up a gyoza. Genius?! Fortunately with the help of <a title="Box2DFlash is a free 2D physics engine for Flash. It's a popular choice for making games and toys in." href="http://www.box2dflash.org/" target="_blank">Box2Dflash</a>, this actually makes for a really playable game of skill.</p>
<p>Sadly the budget didn&#8217;t quite stretch to true Facebook integration. But fear not; you needn&#8217;t send a telegram if score-based, peer-group boasting is your thing (we sneakily hijacked the standard &#8220;facebook.com/sharer.php&#8221; functionality).</p>
<p>I know what you&#8217;re thinking&#8230; that you&#8217;d be some kind of &#8216;gyoza grandmaster&#8217; at this game? Well then, less talk more action please! <a title="Play the Wagamama Keepy-uppy game!" href="http://wagamamasta-staging.bluebarracuda.com/frontend_staging.php/keepy_uppy" target="_blank">Play the game*.</a></p>
<p><em>* The campaign has now ended and the game is no longer live, however you can play it on the Blue Barracuda </em><a href="http://wagamamasta-staging.bluebarracuda.com/frontend_staging.php/keepy_uppy" target="_blank"><em>staging site</em></a><em>.</em></p>
</div>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/wagamama-keepy-uppy/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/wagamama-keepy-uppy/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/wagamama-keepy-uppy/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Beware of the facebook UID &#8220;as Number&#8221;]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/i7HDjaZw5mo/" />
		<id>http://www.milkisevil.com/blog/?p=200</id>
		<updated>2010-09-18T20:36:04Z</updated>
		<published>2010-06-15T23:12:33Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Actionscript 3" /><category scheme="http://www.milkisevil.com/blog" term="Facebook Development" /><category scheme="http://www.milkisevil.com/blog" term="facebook api" />		<summary type="html"><![CDATA[Quite often it&#8217;s advisable to treat unique IDs as a string, particularly when using a third party API, as you never know when they may migrate from a numeric to alphanumeric format. The Facebook Actionscript API is no exception. In a recent project, I&#8217;d already been treating user&#8217;s UIDs as a string, but got caught [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/beware-of-the-facebook-uid-as-number/"><![CDATA[<p>Quite often it&#8217;s advisable to treat unique IDs as a string, particularly when using a third party API, as you never know when they may migrate from a numeric to alphanumeric format.</p>
<p>The Facebook Actionscript API is no exception. In a recent project, I&#8217;d already been treating user&#8217;s UIDs as a string, but got caught out when calling the <a title="GetAppUsers ASdoc" href="http://facebook-actionscript-api.googlecode.com/svn/release/current/docs/com/facebook/commands/friends/GetAppUsers.html" target="_blank">GetAppUsers</a> API method. This essentially returns the UID of each friend who has the same Facebook application installed. Instead of returning a set of string values, it returns an array of number values.</p>
<p>Storing this array within Actionscript doesn&#8217;t appear to be hazardous. The problems arise when sending that array via remoting (in this case using a <a title="sfAmfphp plugin" href="http://raw.trac.symfony-project.org/wiki/sfAmfphpPlugin" target="_blank">sfAmfphp</a> gateway).</p>
<p>Facebook currently employ two formats of UID:<br />
<strong> OLD:</strong> 289204186<br />
<strong> NEW:</strong> 100000792322346</p>
<p>The old format will be serialized and received by the PHP gateway as expected, whereas PHP will output the new longer format as, for example, 100000792322E+14.</p>
<p>Moral of the story: iterate through the array returned by GetAppUsers and cast all values to String.</p>
<div class="codecolorer-container actionscript3 vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> getAppUsersComplete<span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">:</span>FacebookEvent<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> uidFriends<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=array%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:array.html"><span style="color: #004993;">Array</span></a> = event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">data</span><span style="color: #000000;">&#91;</span><span style="color: #990000;">'uids'</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Convert all uidFriend uids from Number to String because AMFPHP messes this up (converts large int values to float)</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">for</span><span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=int%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:int.html"><span style="color: #004993;">int</span></a> = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span> i<span style="color: #000066; font-weight: bold;">&lt;</span>uidFriends<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span><span style="color: #000066; font-weight: bold;">;</span> i<span style="color: #000066; font-weight: bold;">++</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; uidFriends<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> = uidFriends<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">toString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/beware-of-the-facebook-uid-as-number/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/beware-of-the-facebook-uid-as-number/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/beware-of-the-facebook-uid-as-number/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Reading an Oyster card with Arduino]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/BUH1dMuLBX4/" />
		<id>http://www.milkisevil.com/blog/?p=184</id>
		<updated>2011-11-03T16:08:48Z</updated>
		<published>2010-05-26T22:15:16Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Personal Projects" /><category scheme="http://www.milkisevil.com/blog" term="arduino" /><category scheme="http://www.milkisevil.com/blog" term="rfid" />		<summary type="html"><![CDATA[I&#8217;ve had a few geek/creative experiemental ideas recently, one of which being a physical installation with an Oyster card interface. So figured it was high time to start playing. For the non-Londoners amongnst you, an Oyster card is the cashless payment smartcard used for journeys on London&#8217;s buses and Underground. Most Londoners already have one, [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/reading-an-oyster-card-with-arduino/"><![CDATA[<p>I&#8217;ve had a few geek/creative experiemental ideas recently, one of which being a physical installation with an <a title="Oyster is a blue plastic card you can use instead of paper tickets. " href="http://www.tfl.gov.uk/tickets/14836.aspx" target="_blank">Oyster card</a> interface. So figured it was high time to start playing.</p>
<p><a href="http://www.milkisevil.com/blog/wp-content/uploads/2010/06/low_oyster_card_held.jpg" rel="lightbox[184]"><img class="alignnone size-full wp-image-185" title="Britain's next top hand-model showing off an Oyster Card" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/06/low_oyster_card_held.jpg" alt="Oyster Card" width="520" height="346" /></a></p>
<p><span id="more-184"></span></p>
<p>For the non-Londoners amongnst you, an Oyster card is the cashless payment smartcard used for journeys on London&#8217;s buses and Underground. Most Londoners already have one, so it&#8217;d be great to leverage that.</p>
<p>An oyster card uses the <a title="Mifare on Wikipedia" href="http://en.wikipedia.org/wiki/MIFARE" target="_blank">Mifare</a> 13.25Mhz protocol and requires a compatible reader. The most common RFID shield used with <a title="Arduino is an open-source electronics prototyping platform" href="http://www.arduino.cc/">Arduino</a> is the <a title="Parallax RFID Card Reader Serial" href="http://www.parallax.com/tabid/768/ProductID/114/Default.aspx" target="_blank">Parallax</a>. Don&#8217;t buy this if it&#8217;s Oyster cards you want to read. Instead I purchased a <a title="HF RFID Module SL018" href="http://www.stronglink.cn/english/sl018.htm" target="_blank">Stronglink SL018</a> which works just fine.</p>
<p>I&#8217;ve tested it using Oyster cards predating January 2010 (<a title="MIFARE Classic (Standard)" href="http://en.wikipedia.org/wiki/MIFARE#MIFARE_Classic_.28Standard.29" target="_blank">Mifare Classic 1k</a>). <del datetime="2011-11-03T16:04:01+00:00">I&#8217;ve not yet tested the board with the newer Oyster cards (<a title="MIFARE DESFire" href="http://en.wikipedia.org/wiki/MIFARE#MIFARE_DESFire" target="_blank">Mifare DesFire</a>), but believe these should be readable seeing as the two cards only differ in encryption methods.</del> <strong>UPDATE Nov 2011:</strong> I&#8217;ve been tinkering with this again, and can confirm that you can read the Mifare DesFire&#8217;s UID with the <a title="HF RFID Module SL018" href="http://www.stronglink.cn/english/sl018.htm" target="_blank">Stronglink SL018</a> &#8211; in fact you can read any of the following: &#8220;1K&#8221;, &#8220;Pro&#8221;, &#8220;UltraLight&#8221;, &#8220;4K&#8221;, &#8220;ProX&#8221;, &#8220;DesFire&#8221;.</p>
<p>So step 1 complete. Many thanks to <a href="http://rfid.marcboon.com" target="_blank">Marc Boon</a> for providing <a title="SL018 library for Arduino" href="http://iloapp.marcboon.com/blog/rfid?Home&amp;post=26">Arduino code</a> to read the tags.</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/reading-an-oyster-card-with-arduino/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/reading-an-oyster-card-with-arduino/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/reading-an-oyster-card-with-arduino/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Pass It Around Pizza]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/K5nVdhaiakA/" />
		<id>http://www.milkisevil.com/blog/?p=195</id>
		<updated>2010-09-18T20:38:43Z</updated>
		<published>2010-05-02T22:47:13Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Facebook Development" /><category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="blue barracuda" /><category scheme="http://www.milkisevil.com/blog" term="facebook api" /><category scheme="http://www.milkisevil.com/blog" term="game" /><category scheme="http://www.milkisevil.com/blog" term="puremvc" />		<summary type="html"><![CDATA[UPDATE: Read my &#8220;Pass It Around Pizza&#8221; article on the Blue Barracuda blog. Aimed at marketers, it looks at the benefits of using in-game incentives/virtual gifts and rewards in conjunction with the Facebook Platform. I&#8217;ve been getting to know Facebook Connect and the AS3 API over the past few weeks, and finally I&#8217;ve been able [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/pass-it-around-pizza/"><![CDATA[<p><strong>UPDATE:</strong> <a href="http://blog.bluebarracuda.com/2010/06/21/social-gaming-pizza-huts-take-on-the-beautiful-game/" target="_blank">Read my &#8220;Pass It Around Pizza&#8221; article on the Blue Barracuda blog.</a> Aimed at marketers, it looks at the benefits of using in-game incentives/virtual gifts and rewards in conjunction with the Facebook Platform.</p>
<p>I&#8217;ve been getting to know Facebook Connect and the <a title="Actionscript 3.0 Client for the Facebook Platform API" href="http://code.google.com/p/facebook-actionscript-api/" target="_blank">AS3 API</a> over the past few weeks, and finally I&#8217;ve been able to put what I&#8217;ve learnt into practice by creating a game for <a title="Pizza Hut UK" href="http://www.pizzahut.co.uk/" target="_blank">Pizza Hut UK</a>.</p>
<div id="attachment_231" class="wp-caption alignnone" style="width: 533px"><a href="http://apps.facebook.com/pass-it-around"><img class="size-full wp-image-231" title="pass-it-around-gameplay" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/05/pass-it-around-gameplay.jpg" alt="" width="523" height="403" /></a><p class="wp-caption-text">Pass the ball as many times as you can in 45 seconds!</p></div>
<p><span id="more-195"></span></p>
<p><a title="Play Pass It Around Pizza on Facebook" href="http://apps.facebook.com/pass-it-around/">&#8220;Pass It Around Pizza&#8221;</a> is a part of Pizza Hut UK&#8217;s World Cup 2010 promotion. Staying true to my love for the mini-gaming legend that is <a title="Watch people playing Bishi Bashi on YouTube" href="http://www.youtube.com/results?search_query=Bishi+Bashi" target="_blank">Bishi Bashi</a>, I wanted to create a quick-fire football passing mini-game.</p>
<p>The premise is simple, make as many passes as you can in 45 seconds, oh and collect any random pizza slices that fall out of the sky! There are 8 varieties of pizza slice to collect, and once collected they can be shared on your facebook wall for your friends to collect too. The more slices you and your friends collectively gain, the more chance you have of winning prizes.</p>
<p>I throughly enjoyed creating this (from concept, to a 60+ page wireframes and functional spec document, right through to PureMVC-based Flash development), so much so that I missed out on a massive &#8220;company director&#8217;s card behind the bar&#8221; pub outing to get it done :( But was it worth it? Hell yeah! I&#8217;m addicted! Hopefully you&#8217;ll be too&#8230;</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/pass-it-around-pizza/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/pass-it-around-pizza/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/pass-it-around-pizza/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Facebook Multi-Friend-Selector for Flash AS3]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/Qg3hYFSd49Q/" />
		<id>http://www.milkisevil.com/blog/?p=170</id>
		<updated>2010-11-15T16:52:54Z</updated>
		<published>2010-02-28T22:13:04Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Actionscript 3" /><category scheme="http://www.milkisevil.com/blog" term="Facebook Development" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="facebook api" />		<summary type="html"><![CDATA[UPDATE Nov 2010: This requires the old REST API Facebook_library_v3.4_flash.swc, which has now been deprecated in favour of the Graph API. Please feel free to fork this for use with the new GraphAPI SWC. There is a little more info on this in the comments. I&#8217;d love to update it myself, but not sure when [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/facebook-multi-friend-selector-for-flash-as3/"><![CDATA[<p><strong>UPDATE Nov 2010: This requires the old REST API <a href="http://code.google.com/p/facebook-actionscript-api/downloads/detail?name=Facebook_library_v3.4_flash.swc&#038;can=1&#038;q=" target="_blank">Facebook_library_v3.4_flash.swc</a>, which has now been deprecated in favour of the Graph API. Please feel free to fork this for use with the new <a href="http://code.google.com/p/facebook-actionscript-api/downloads/list" target="_blank">GraphAPI SWC</a>. There is a little more info on this in the comments. I&#8217;d love to update it myself, but not sure when that might happen at the moment :-/</strong></p>
<p>One of the drawbacks of the current <a title="Actionscript 3.0 Client for the Facebook Platform API" href="http://code.google.com/p/facebook-actionscript-api/" target="_blank">Facebook Actionscript API</a> is that it doesn&#8217;t come bundled with UI components, it&#8217;s simply a data API. Fortunately you can use the <a title="Facebook JavaScript Client Library" href="http://wiki.developers.facebook.com/index.php/JavaScript_Client_Library" target="_blank">JavaScript Client Library&#8217;s</a> FB.UI.FBMLPopupDialog() to render FBML overlaying your SWF (if you don&#8217;t mind using wmode=&#8221;transparent&#8221;). But still, when it comes to the FBML <a title="Facebook Markup Language: fb:multi-friend-selector" href="http://developers.facebook.com/docs/reference/fbml/multi-friend-selector" target="_blank">fb:multi-friend-selector</a>, if you want to do anything but send out invites to your Facebook app (via a browser-redirecting POST) , you&#8217;re out of luck.</p>
<p>Ideally, the fb:multi-friend-selector would allow the setting of a callback which would return the UIDs of the selected friends. It would then be down to the developer to choose what to do with them.</p>
<p>So, I decided to recreate the fb:multi-friend-selector directly in Flash. It will allow you to input an array of uid strings and later return a FacebookUserCollection featuring the selected users. Unfortunately I haven&#8217;t created this to be a fully resizable component, it simply does what it says on the tin. Hopefully, you may find that this gets you out of a sticky situation once you realise the shortcomings of the FBML fb:multi-friend-selector.</p>
<div id="attachment_218" class="wp-caption alignnone" style="width: 571px"><a href="http://www.milkisevil.com/blog/wp-content/uploads/2010/02/multi-friend-selector-flash.png" rel="lightbox[170]"><img class="size-full wp-image-218" title="multi-friend-selector-flash" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/02/multi-friend-selector-flash.png" alt="" width="561" height="321" /></a><p class="wp-caption-text">Don&#39;t be fooled, this MultiFriendSelector is not FBML, it&#39;s Flash :)</p></div>
<p>You can download it from the <a title="milkisevil-toolbox at github" href="http://github.com/milkisevil/milkisevil-toolbox" target="_blank">milkisevil-toolbox</a> on github. You&#8217;ll need to add the &#8220;lib/milkisevil/FacebookComponents.swc&#8221; to your project and create a new instance of the &#8220;com.milkisevil.ui.facebook.MultiFriendSelector&#8221; class.</p>
<p>Here&#8217;s a rough guide to how you might want to instantiate the MultiFriendSelector:</p>
<div class="codecolorer-container actionscript3 vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900; font-style: italic;">// Don't forget to make the following imports where appropriate</span><br />
<span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>milkisevil<span style="color: #000066; font-weight: bold;">.</span>ui<span style="color: #000066; font-weight: bold;">.</span>facebook<span style="color: #000066; font-weight: bold;">.</span>MultiFriendSelector<span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>milkisevil<span style="color: #000066; font-weight: bold;">.</span>events<span style="color: #000066; font-weight: bold;">.</span>StatusEventEnhanced<span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #009900; font-style: italic;">// And the following inside your class</span><br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> multiFriendSelector<span style="color: #000066; font-weight: bold;">:</span>MultiFriendSelector<span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> showFriendSelector<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; multiFriendSelector = <span style="color: #0033ff; font-weight: bold;">new</span> MultiFriendSelector<span style="color: #000000;">&#40;</span> facebook<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">16</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; multiFriendSelector<span style="color: #000066; font-weight: bold;">.</span>title = <span style="color: #990000;">'Your friends'</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; multiFriendSelector<span style="color: #000066; font-weight: bold;">.</span>subtitle = <span style="color: #990000;">'Irritate the hell out of your friends!'</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; multiFriendSelector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span> MultiFriendSelector<span style="color: #000066; font-weight: bold;">.</span>STATUS_EVENT<span style="color: #000066; font-weight: bold;">,</span> multiFriendSelectorStatus <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span> multiFriendSelector <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; multiFriendSelector<span style="color: #000066; font-weight: bold;">.</span>getFriends<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> &nbsp; &nbsp; &nbsp; <br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> hideFriendSelector<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #004993;">removeChild</span><span style="color: #000000;">&#40;</span> multiFriendSelector <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; multiFriendSelector = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> multiFriendSelectorStatus<span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">:</span>StatusEventEnhanced<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">'exec multiFriendSelectorStatus: '</span> <span style="color: #000066; font-weight: bold;">+</span> event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">code</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">switch</span><span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">code</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">case</span> MultiFriendSelector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">CLOSE</span><span style="color: #000066; font-weight: bold;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hideFriendSelector<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">break</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">case</span> MultiFriendSelector<span style="color: #000066; font-weight: bold;">.</span>SUBMIT<span style="color: #000066; font-weight: bold;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> selectedUsers<span style="color: #000066; font-weight: bold;">:</span>FacebookUserCollection = multiFriendSelector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getSelected</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hideFriendSelector<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> uidList<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=array%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:array.html"><span style="color: #004993;">Array</span></a> = <span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">for</span><span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=int%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:int.html"><span style="color: #004993;">int</span></a> = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span> i<span style="color: #000066; font-weight: bold;">&lt;</span>selectedUsers<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span><span style="color: #000066; font-weight: bold;">;</span> i<span style="color: #000066; font-weight: bold;">++</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> facebookUser<span style="color: #000066; font-weight: bold;">:</span>FacebookUser = selectedUsers<span style="color: #000066; font-weight: bold;">.</span>getItemAt<span style="color: #000000;">&#40;</span>i<span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> FacebookUser<span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; uidList<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">push</span><span style="color: #000000;">&#40;</span> facebookUser<span style="color: #000066; font-weight: bold;">.</span>uid <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Now do some custom stuff with those uids</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myCustomMethod<span style="color: #000000;">&#40;</span> uidList <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">break</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/facebook-multi-friend-selector-for-flash-as3/#comments" thr:count="26" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/facebook-multi-friend-selector-for-flash-as3/feed/atom/" thr:count="26" />
		<thr:total>26</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/facebook-multi-friend-selector-for-flash-as3/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Going social in Actionscript 3]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/_qhbUUyxDbM/" />
		<id>http://www.milkisevil.com/blog/?p=107</id>
		<updated>2010-08-21T09:39:53Z</updated>
		<published>2010-02-24T20:34:09Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Actionscript 3" /><category scheme="http://www.milkisevil.com/blog" term="Facebook Development" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="facebook api" /><category scheme="http://www.milkisevil.com/blog" term="javascript" />		<summary type="html"><![CDATA[The last couple of weeks have allowed me to get intimate with AS3 implementations of the main social network&#8217;s APIs. I first started out playing with Adobe&#8217;s Flash Platform Social Services which is basically a layer providing access to Gigya (which in turn is an abstract API providing uniform access to all of the main [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/going-social-in-actionscript-3/"><![CDATA[<p>The last couple of weeks have allowed me to get intimate with AS3 implementations of the main social network&#8217;s APIs. I first started out playing with <a title="The Social service enables developers to easily integrate leading social networks such as Facebook, Twitter, and MySpace with their applications, increasing engagement and promoting the applications virally." href="http://www.adobe.com/flashplatform/services/social/" target="_blank">Adobe&#8217;s Flash Platform Social Services</a> which is basically a layer providing access to <a title="Gigya" href="http://www.gigya.com/" target="_blank">Gigya</a> (which in turn is an abstract API providing uniform access to all of the main social networks). As you can probably imagine, this also comes with a couple of drawbacks.</p>
<ol>
<li>Gigya aims to provide the &#8216;make one call, push to many&#8217; approach. This is one of the reasons that the full spectrum of services for one social network aren&#8217;t available, largely because there won&#8217;t be a uniform equivilant on another network.</li>
<li>The other reason, is that we&#8217;re relying on a single API vendor (Gigya) to update as and when every other API vendor updates. So where a great new service might be made available on Facebook, you&#8217;ll likely be waiting a while until Gigya provides an updated interface.</li>
</ol>
<p>Not great. So putting aside a greed to support every social network under the sun, I swiftly moved to and focused on the the most popular (and arguably the best), the <a title="Actionscript 3.0 Client for the Facebook Platform API" href="http://code.google.com/p/facebook-actionscript-api/" target="_blank">Facebook Actionscript API</a>. This is basically an Adobe supported AS3 interface to Facebook&#8217;s REST API. The majority of it is very straight forward to use, and is up to date with the latest of Facebook&#8217;s features. The biggest pain, though, has been offering a smooth login experience.</p>
<p>There are several blogged solutions out there, but the smoothest I&#8217;ve found revolves around using the JavaScript API in conjunction with an &#8220;xd_receiver.htm&#8221;. The user logs into their account after which a JavaScript callback passes a session key, a secret key, the user&#8217;s UID and your (hardcoded) API key to Actionscript where it is verified via the REST API. This does require a bit of a hack seeing as the AS3 API doesn&#8217;t normally allow the setting of the UID, but I&#8217;d say it&#8217;s worth the trouble:</p>
<div class="codecolorer-container actionscript3 vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>facebook<span style="color: #000066; font-weight: bold;">.</span>facebook_internal<span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #009900; font-style: italic;">// Create a WebSession passing in your API key, the secret key and session key</span><br />
webSession = <span style="color: #0033ff; font-weight: bold;">new</span> WebSession<span style="color: #000000;">&#40;</span> apiKey<span style="color: #000066; font-weight: bold;">,</span> secret<span style="color: #000066; font-weight: bold;">,</span> sessionKey <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #009900; font-style: italic;">// Force set the uid (don't forget to import the &quot;facebook_internal&quot; namespace)</span><br />
webSession<span style="color: #000066; font-weight: bold;">.</span>facebook_internal<span style="color: #000066; font-weight: bold;">::</span>_uid = uid<span style="color: #000066; font-weight: bold;">;</span><br />
facebook<span style="color: #000066; font-weight: bold;">.</span>startSession<span style="color: #000000;">&#40;</span> webSession <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div></td></tr></tbody></table></div>
<p>This solution will use those nice AJAX-populated dialogue boxes, so don’t forget to set wmode=”transparent” on your embed.</p>
<p><img class="size-full wp-image-158 alignnone" title="connect-with-facebook-dialog" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/02/connect-with-facebook-dialog.png" alt="" width="470" height="187" /></p>
<p>I&#8217;ve created a singleton-based wrapper, which provides me with easy access to basic functionality such as login and stream publishing, along with an accompanying JavaScript file (I&#8217;ve been accessing this via a PureMVC proxy &#8211; abstraction overkill?! Maybe!). It&#8217;s not exactly the tidiest of classes, but is fairly descriptive along with some doc-blocks. Feel free to <a href="http://www.milkisevil.com/blog/wp-content/uploads/2010/02/facebook-connect-as3-api-example.zip">download a zip here</a> or grab the latest source from within the <a title="milkisevil-toolbox on github" href="http://github.com/milkisevil/milkisevil-toolbox" target="_blank">milkisevil-toolbox</a> on github (you&#8217;ll mainly be interested in the <a href="http://github.com/milkisevil/milkisevil-toolbox/tree/master/src/com/milkisevil/api/facebook/" target="_blank">api.facebook</a> package as well as the <a href="http://github.com/milkisevil/milkisevil-toolbox/tree/master/bin/js/milkisevil/" target="_blank">js</a> and possibly <a href="http://github.com/milkisevil/milkisevil-toolbox/tree/master/bin/" target="_blank">html test page</a>).</p>
<p>Of course, you&#8217;ll also be needing the <a title="Actionscript 3.0 Client for the Facebook Platform API" href="http://code.google.com/p/facebook-actionscript-api/" target="_blank">Facebook Actionscript 3 API</a> (and <a href="http://code.google.com/p/swfobject/" target="_blank">SWFObject </a>if you&#8217;d like to play with the test html page).</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/going-social-in-actionscript-3/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/going-social-in-actionscript-3/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/going-social-in-actionscript-3/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[TGI Friday&#8217;s Cocktails]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/z4zx8VXXIIE/" />
		<id>http://www.milkisevil.com/blog/?p=101</id>
		<updated>2010-09-18T20:39:14Z</updated>
		<published>2010-01-12T20:26:41Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="blue barracuda" /><category scheme="http://www.milkisevil.com/blog" term="puremvc" />		<summary type="html"><![CDATA[I&#8217;ve just completed a new site to promote Cocktails at TGI Friday&#8217;s. The idea is to let customers experience the essence of their cocktails, rather than simply reading a tabular listing of thumbnails &#38; text. It centres around the concept of a &#8220;Dream River&#8221; where emotionally-linked items float across the screen. Clicking an item will [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2010/tgi-fridays-cocktails/"><![CDATA[<p>I&#8217;ve just completed a new site to promote <a href="http://www.tgifridays.co.uk/cocktails/" target="_blank">Cocktails at TGI Friday&#8217;s</a>. The idea is to let customers experience the essence of their cocktails, rather than simply reading a tabular listing of thumbnails &amp; text.</p>
<p><a href="http://www.tgifridays.co.uk/cocktails/"><img class="size-large wp-image-119 alignnone" title="Cocktails at TGI Friday's" src="http://www.milkisevil.com/blog/wp-content/uploads/2010/01/tgi-fridays-cocktails-cosmopolitan-1024x588.png" alt="" width="491" height="282" /></a></p>
<p><span id="more-101"></span></p>
<p>It centres around the concept of a &#8220;Dream River&#8221; where emotionally-linked items float across the screen. Clicking an item will have the site suggest a cocktail that pairs with the associated emotion. The main challenge with this was to animate the river – complete with mouse interactivity – as organically as possible.</p>
<p>Overall I&#8217;m pretty pleased with the result, full of tantalizing visuals, but I feel a unique soundscape for each cocktail would have been the cherry on the cake. Sadly, budgets rarely cover everything under the sun :(</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2010/tgi-fridays-cocktails/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2010/tgi-fridays-cocktails/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2010/tgi-fridays-cocktails/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Philip Bulley</name>
						<uri>http://milkisevil.com</uri>
					</author>
		<title type="html"><![CDATA[Connected to British Film and TV]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/milkisevil/~3/ll-U5JtW3Cw/" />
		<id>http://www.milkisevil.com/blog/?p=86</id>
		<updated>2010-09-18T20:39:33Z</updated>
		<published>2009-09-20T17:52:51Z</published>
		<category scheme="http://www.milkisevil.com/blog" term="Portfolio" /><category scheme="http://www.milkisevil.com/blog" term="as3" /><category scheme="http://www.milkisevil.com/blog" term="away3d" /><category scheme="http://www.milkisevil.com/blog" term="blue barracuda" /><category scheme="http://www.milkisevil.com/blog" term="google maps api" /><category scheme="http://www.milkisevil.com/blog" term="puremvc" /><category scheme="http://www.milkisevil.com/blog" term="twitter api" /><category scheme="http://www.milkisevil.com/blog" term="youtube api" />		<summary type="html"><![CDATA[My first major project at Blue Barracuda has gone live. Connected To British Film and TV is intended to increase people&#8217;s appreciation for the British Film and Television scene, ultimately in the hope that people will realise the error of their ways (and in future watch via legal means). It&#8217;s from the same folks who [...]]]></summary>
		<content type="html" xml:base="http://www.milkisevil.com/blog/2009/connected-to-british-film-and-tv/"><![CDATA[<p>My first major project at <a title="Blue Barracuda" href="http://www.bluebarracuda.com/" target="_blank">Blue Barracuda</a> has gone live. <a title="Connected To British Film and TV" href="http://www.connectedtobritishfilmandtv.co.uk">Connected To British Film and TV</a> is intended to increase people&#8217;s appreciation for the British Film and Television scene, ultimately in the hope that people will realise the error of their ways (and in future watch via legal means). It&#8217;s from the same folks who brought us those <a title="You wouldn't steal a car, you wouldn't steal a handbag, you wouldn't steal a television, you wouldn't steal a movie." href="http://www.youtube.com/watch?v=HmZm8vNHBSU" target="_blank">&#8220;You Wouldn&#8217;t Steal a Handbag&#8221;</a> ads, but now instead of making people feel like criminals, the strategy is to incite national pride.</p>
<p><a href="http://www.connectedtobritishfilmandtv.co.uk"><img class="alignnone size-full wp-image-88" title="connected-to-british-film-and-tv-screenshot" src="http://www.milkisevil.com/blog/wp-content/uploads/2009/09/connected-to-british-film-and-tv-screenshot.jpg" alt="" width="461" height="288" /></a></p>
<p><span id="more-86"></span></p>
<p>The concept revolves around going local and showing just how the film industry relates to your neck of the woods. The site is set on a British street corner (originally photographed <a title="Google StreetView: Corner on Brick Lane" href="http://maps.google.com/?ie=UTF8&amp;layer=c&amp;cbll=51.522002,-0.071692&amp;panoid=H-r_D6u1FBF76GdHQgXTmg&amp;cbp=12,142.04,,0,7.74&amp;ll=51.521947,-0.072632&amp;spn=0,0.003433&amp;z=19" target="_blank">here on Brick Lane</a> in London and digitally rendered at runtime with the <a title="Away3D - Flash 3D Engine" href="http://away3d.com/" target="_blank">Away3D</a> Flash 3D engine) and features a bunch of modular apps. The best of which is probably <a title="Framespotting" href="http://www.connectedtobritishfilmandtv.co.uk/#/framespotting" target="_blank">&#8220;Framespotting&#8221;</a>, the Google Maps/film data mash-up which tells you if any film-related events have taken place at the postcode of your choice. Amongst other apps, there&#8217;s also a twitter-based competition and a trivia spouting monkey who seems to be craving a good ol&#8217; spanking!</p>
<p>It also has the longest URL for any site I&#8217;ve worked on: <a title="http://www.connectedtobritishfilmandtv.co.uk - phew!" href="http://www.connectedtobritishfilmandtv.co.uk" target="_blank">http://www.connectedtobritishfilmandtv.co.uk</a> &#8211; brownie points if you can memorize that!</p>
]]></content>
		<link rel="replies" type="text/html" href="http://www.milkisevil.com/blog/2009/connected-to-british-film-and-tv/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.milkisevil.com/blog/2009/connected-to-british-film-and-tv/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.milkisevil.com/blog/2009/connected-to-british-film-and-tv/</feedburner:origLink></entry>
	</feed>

