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

<channel>
	<title>Alastair&#039;s Axioms &#187; AIR</title>
	<atom:link href="http://blog.alastairdawson.com/category/air/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alastairdawson.com</link>
	<description>Let us toast your non-idiocy</description>
	<lastBuildDate>Thu, 11 Aug 2011 23:13:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Getting a blank screen when using Adobe&#8217;s Flash Packager for iPhone?</title>
		<link>http://blog.alastairdawson.com/2010/10/27/getting-a-blank-screen-when-using-adobes-flash-packager-for-iphone/</link>
		<comments>http://blog.alastairdawson.com/2010/10/27/getting-a-blank-screen-when-using-adobes-flash-packager-for-iphone/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 20:27:40 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blog.alastairdawson.com/?p=226</guid>
		<description><![CDATA[Chris Cantrell released an iPhone packager refresher a few weeks back but when I packaged up my AIR app I was getting a blank white screen (as were a few others). However I got it to work after I made a few changes to my Application descriptor file &#8211; the XML file created with your [...]]]></description>
			<content:encoded><![CDATA[<p>Chris Cantrell released an <a href="http://blogs.adobe.com/cantrell/archives/2010/09/packager-for-iphone-refresher.html">iPhone packager refresher</a> a few weeks back but when I packaged up my AIR app I was getting a blank white screen (as were a few others). However I got it to work after I made a few changes to my Application descriptor file &#8211; the XML file created with your AIR project e.g. myApp-app.xml.</p>
<p>Make sure you have all the properties as below:</p>
<pre class="textmate-source"><span class="text text_plain"><span class="meta meta_paragraph meta_paragraph_text">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;application xmlns="<span class="markup markup_underline markup_underline_link markup_underline_link_text">http://ns.adobe.com/air/application/2.0</span>"&gt;
</span>    <span class="meta meta_paragraph meta_paragraph_text">&lt;id&gt;com.example.HelloWorld&lt;/id&gt;
    &lt;filename&gt;MobileDesigner&lt;/filename&gt;
    &lt;name&gt;Hello World&lt;/name&gt;
    &lt;version&gt;v1&lt;/version&gt;
    &lt;initialWindow&gt;
</span>        <span class="meta meta_paragraph meta_paragraph_text">&lt;renderMode&gt;gpu&lt;/renderMode&gt;
        &lt;content&gt;HelloWorld.swf&lt;/content&gt;
        &lt;fullScreen&gt;true&lt;/fullScreen&gt;
        &lt;aspectRatio&gt;portrait&lt;/aspectRatio&gt;
        &lt;autoOrients&gt;true&lt;/autoOrients&gt;
        &lt;visible&gt;true&lt;/visible&gt;
</span>    <span class="meta meta_paragraph meta_paragraph_text">&lt;/initialWindow&gt;
    &lt;supportedProfiles&gt;mobileDevice&lt;/supportedProfiles&gt;
    &lt;icon&gt;
&lt;!--        &lt;image29x29&gt;icons/icon29.png&lt;/image29x29&gt; --&gt;
</span>        <span class="meta meta_paragraph meta_paragraph_text">&lt;image57x57&gt;Icon_57.png&lt;/image57x57&gt;
&lt;!--        &lt;image512x512&gt;icons/icon512.png&lt;/image512x512&gt; --&gt;
</span>    <span class="meta meta_paragraph meta_paragraph_text">&lt;/icon&gt;
    &lt;iPhone&gt;
</span>        <span class="meta meta_paragraph meta_paragraph_text">&lt;InfoAdditions&gt;
</span>            <span class="meta meta_paragraph meta_paragraph_text">&lt;![CDATA[
</span>                <span class="meta meta_paragraph meta_paragraph_text">&lt;key&gt;UIStatusBarStyle&lt;/key&gt;
                &lt;string&gt;UIStatusBarStyleBlackOpaque&lt;/string&gt;
                &lt;key&gt;UIRequiresPersistentWiFi&lt;/key&gt;
                &lt;string&gt;NO&lt;/string&gt;
</span>            <span class="meta meta_paragraph meta_paragraph_text">]]&gt;
</span>        <span class="meta meta_paragraph meta_paragraph_text">&lt;/InfoAdditions&gt;
</span>    <span class="meta meta_paragraph meta_paragraph_text">&lt;/iPhone&gt;
&lt;/application&gt;</span></span></pre>
<p>Another tip is to not draw any graphics or UI in your main Sprite&#8217;s constructor. Instead create another method and do any drawing there.</p>
<pre>
package
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	[SWF(width="320", height="480", frameRate="12", backgroundColor="#FFFFFF")]
	public class HelloWorld extends Sprite
	{
		public function HelloWorld()
		{
			super();

			this.stage.scaleMode = StageScaleMode.NO_SCALE;
			this.stage.align = StageAlign.TOP_LEFT;

			init();
		}

		private function init():void
		{
			var funk:Sprite = new Sprite();
			this.addChild( funk );
			funk.graphics.beginFill( 0xFF0000 );
			funk.graphics.drawRect( 0, 0, 360, 480 );
			funk.graphics.endFill();
		}
	}
}
</pre>
<p>Hope that  helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2010/10/27/getting-a-blank-screen-when-using-adobes-flash-packager-for-iphone/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Flex/Flash Builder will soon be the easiest way to develop mobile apps</title>
		<link>http://blog.alastairdawson.com/2010/02/11/flexflash-builder-will-soon-be-the-easiest-way-to-develop-mobile-apps/</link>
		<comments>http://blog.alastairdawson.com/2010/02/11/flexflash-builder-will-soon-be-the-easiest-way-to-develop-mobile-apps/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 19:28:16 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blog.alastairdawson.com/?p=181</guid>
		<description><![CDATA[OpenPlug just released the latest beta version of their ELIPS Studio, which adds Android support. Currently ELIPS Studio is Windows only but in a month they will add OS X support, yay!
The latest version of ELIPS Studio has just been released. It brings the ability for developers to create native mobile apps in ActionScript and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.openplug.com/">OpenPlug</a> just released <a href="http://developer.openplug.com/index.php/blog/171-beta-3-release-build-for-android-and-soon-to-come-beta-4-mac-os-support">the latest beta version of their ELIPS Studio</a>, which adds Android support. Currently ELIPS Studio is Windows only but in a month they will add OS X support, yay!</p>
<blockquote><p>The latest version of ELIPS Studio has just been released. It brings the ability for developers to create native mobile apps in ActionScript and Flex for mobile devices running Google&#8217;s Android platform.</p>
<p>With this new release, developers can now address all major smartphone platforms (iPhone, Android, Symbian, Windows Mobile) from a single code base using powerful web 2.0 languages and technologies from Adobe.</p>
<p>The next version of ELIPS Studio will bring the support of MacOSX as desktop development platform.</p></blockquote>
<p>If I were Adobe I&#8217;d buy French OpenPlug toute suite and turn ELIPSE studio into AIR Mobile (or Mobile AIR).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2010/02/11/flexflash-builder-will-soon-be-the-easiest-way-to-develop-mobile-apps/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Adobe holding a series of online seminars this week</title>
		<link>http://blog.alastairdawson.com/2008/03/24/adobe-holding-a-series-of-online-seminars-this-week/</link>
		<comments>http://blog.alastairdawson.com/2008/03/24/adobe-holding-a-series-of-online-seminars-this-week/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 15:00:40 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://blog.vixiom.com/2008/03/24/adobe-holding-a-series-of-online-seminars-this-week/</guid>
		<description><![CDATA[Info here.
Some of the more interesting sessions:
Extending Web to the Desktop with AIR
Monday, March 24, 2008
9:00 AM &#8211; 10:00 AM US/Pacific
Getting Started with Flash Lite 3 and CS3
Monday, March 24, 2008
11:00 AM &#8211; 12:00 PM US/Pacific
Building Rich Internet Applications with Flex 3
Monday, March 24, 2008
4:00 PM &#8211; 5:00 PM US/Pacific
Introduction to Adobe Blaze DS
Tuesday, March [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.adobe.com/cfusion/event/index.cfm?event=detail&#038;id=1200007&#038;loc=en_us">Info here.</a></p>
<p>Some of the more interesting sessions:</p>
<p>Extending Web to the Desktop with AIR<br />
Monday, March 24, 2008<br />
9:00 AM &#8211; 10:00 AM US/Pacific</p>
<p>Getting Started with Flash Lite 3 and CS3<br />
Monday, March 24, 2008<br />
11:00 AM &#8211; 12:00 PM US/Pacific</p>
<p>Building Rich Internet Applications with Flex 3<br />
Monday, March 24, 2008<br />
4:00 PM &#8211; 5:00 PM US/Pacific</p>
<p>Introduction to Adobe Blaze DS<br />
Tuesday, March 25, 2008<br />
9:00 AM &#8211; 10:00 AM US/Pacific</p>
<p>Integrating Salesforce.com and Flex<br />
Tuesday, March 25, 2008<br />
11:00 AM &#8211; 12:00 PM US/Pacific</p>
<p>Building AIR Applications with Flash CS3<br />
Tuesday, March 25, 2008<br />
1:00 PM &#8211; 2:00 PM US/Pacific</p>
<p>Adobe AIR Local Data Storage Options With Emphasis on Using Embedded SQL Databases<br />
Wednesday, March 26, 2008<br />
9:00 AM &#8211; 10:00 AM US/Pacific</p>
<p>Flex and Java – Tying the Knot!<br />
Wednesday, March 26, 2008<br />
4:00 PM &#8211; 5:00 PM US/Pacific</p>
<p>Flex Data Services<br />
Thursday, March 27, 2008<br />
9:00 AM &#8211; 10:00 AM US/Pacific</p>
<p>Blood from a Stone: Flash Game Optimization on Low-end mobile devices<br />
Thursday, March 27, 2008<br />
1:00 PM &#8211; 2:00 PM US/Pacific</p>
<p>Flex Visual Data &#038; Charting<br />
Thursday, March 27, 2008<br />
4:00 PM &#8211; 5:00 PM US/Pacific</p>
<p>AIR Native Drag and Drop<br />
Friday, March 28, 2008<br />
1:00 PM &#8211; 2:00 PM US/Pacific</p>
<p>Flex Architecture<br />
Friday, March 28, 2008<br />
4:00 PM &#8211; 5:00 PM US/Pacific</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2008/03/24/adobe-holding-a-series-of-online-seminars-this-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Run Ruby code in the Flash Player?</title>
		<link>http://blog.alastairdawson.com/2008/02/26/run-ruby-code-in-the-flash-player/</link>
		<comments>http://blog.alastairdawson.com/2008/02/26/run-ruby-code-in-the-flash-player/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 02:30:59 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://blog.vixiom.com/2008/02/26/run-ruby-code-in-the-flash-player/</guid>
		<description><![CDATA[Or even better write Flash/Flex Rich Internet Applications with Ruby? Ted Patrick says it may soon be possible.
When Microsoft released Silverlight the one feature that got a lot of people excited was that you could use the language you were most familiar with to build a RIA. Apparently Adobe has an internal project which allows [...]]]></description>
			<content:encoded><![CDATA[<p>Or even better write Flash/Flex Rich Internet Applications with Ruby? <a href="http://www.onflex.org/ted/2008/02/extending-adobe-flash-player-and-adobe.php">Ted Patrick says it may soon be possible</a>.</p>
<p>When Microsoft released Silverlight the one feature that got a lot of people excited was that you could use the language you were most familiar with to build a RIA. Apparently Adobe has an internal project which allows any C or C++ code to run in the Flash Player or on AIR. This means that any language built on C/C++ will also run which means that Java, Python, and my beloved Ruby could also run. Schwing! <img src='http://blog.alastairdawson.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ted is a Python guy so he talks about IronPython and JPython but of course Ruby has <a href="http://jruby.codehaus.org/">JRuby</a> and <a href="http://www.ironruby.net/">IronRuby</a> so I&#8217;m sure the behavior would be similar.</p>
<blockquote><p>Like many organizations Adobe has lots of legacy C/C++ code ranging from PhotoShop filters, to PDF renderers, to readers and writers of every file format in existence, font libraries, to very complex vector renderers, and text layout code. Beyond Adobe there are many open source libraries that could be leveraged as components as well. The big thing for me is that these are not ports of these libraries, they run identical to the original source code down. For example the behavior of Python in Flash Player is identical to C-Python vs the ported behavior under the IronPython and Jython projects. The goal here is to bring lots of these legacy assets, code libraries, and languages into Flash Player and Adobe AIR perfectly so that any developer can leverage them cross-platform to build software. It would not shock me to see some of these components added into the Flash Player component cache so that they essentially are built into the player on first use.</p></blockquote>
<p><a href="http://www.infoworld.com/article/08/02/26/adobe-player_1.html">InfoWorld has more</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2008/02/26/run-ruby-code-in-the-flash-player/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Log into Facebook with Adobe AIR (without leaving the desktop)</title>
		<link>http://blog.alastairdawson.com/2008/01/10/log-into-facebook-with-adobe-air-without-leaving-the-desktop/</link>
		<comments>http://blog.alastairdawson.com/2008/01/10/log-into-facebook-with-adobe-air-without-leaving-the-desktop/#comments</comments>
		<pubDate>Thu, 10 Jan 2008 16:40:16 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://blog.vixiom.com/2008/01/10/log-into-facebook-with-adobe-air-without-leaving-the-desktop/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2008/01/10/log-into-facebook-with-adobe-air-without-leaving-the-desktop/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Lee Brimelow on Taking Flash to the Desktop</title>
		<link>http://blog.alastairdawson.com/2007/08/03/lee-brimelow-on-taking-flash-to-the-desktop/</link>
		<comments>http://blog.alastairdawson.com/2007/08/03/lee-brimelow-on-taking-flash-to-the-desktop/#comments</comments>
		<pubDate>Fri, 03 Aug 2007 15:52:40 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://blog.vixiom.com/2007/08/03/lee-brimelow-on-taking-flash-to-the-desktop/</guid>
		<description><![CDATA[This was my favorite presentation of the LA stop of the Adobe AIR bus tour. Lee is very engaging and shows off a bunch of AIR apps built with Flash. If you have a Flash, rather than Flex, background Lee&#8217;s presentation will show that you&#8217;re invited to the AIR party too &#8211; don&#8217;t be shy [...]]]></description>
			<content:encoded><![CDATA[<p>This was my <a href="http://onair.adobe.com/blogs/videos/2007/08/01/lee-brimelow-transitioning-to-the-desktop-with-adobe-air/">favorite presentation</a> of the LA stop of the Adobe AIR bus tour. Lee is very engaging and shows off a bunch of AIR apps built with Flash. If you have a Flash, rather than Flex, background Lee&#8217;s presentation will show that you&#8217;re invited to the AIR party too &#8211; don&#8217;t be shy grab <a href="http://www.gskinner.com/blog/archives/2007/07/creating_air_pr.html">Grant Skinner&#8217;s AIR plug-in</a> for Flash and build some apps!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2007/08/03/lee-brimelow-on-taking-flash-to-the-desktop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Everybody&#8217;s chatting about Flex</title>
		<link>http://blog.alastairdawson.com/2007/08/02/everybodys-chatting-about-flex/</link>
		<comments>http://blog.alastairdawson.com/2007/08/02/everybodys-chatting-about-flex/#comments</comments>
		<pubDate>Thu, 02 Aug 2007 17:11:37 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blog.vixiom.com/2007/08/02/everybodys-chatting-about-flex/</guid>
		<description><![CDATA[&#8230;make that chatting on Flex. All Flex front-ends but a multitude of approaches to flinging the messages about on the back-side.

Ted (on Flex) has his AIRchat running on Python Twisted.
Derek Wischusen has his messages moving atop Rails, Apache ActiveMQ, ActiveMessaging, and STOMP (post 1, post 2)
Alex McCaw is the creator of Juggernaut which can use [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;make that chatting <em>on</em> Flex. All Flex front-ends but a multitude of approaches to flinging the messages about on the back-side.</p>
<ul>
<li>Ted (on Flex) has his <a href="http://www.onflex.org/ted/2007/07/airchat-live-from-bus.php">AIRchat</a> running on <a href="http://twistedmatrix.com/trac/">Python Twisted</a>.</li>
<li><a href="http://www.flexonrails.net/">Derek Wischusen</a> has his messages moving atop Rails, <a href="http://activemq.apache.org/">Apache ActiveMQ</a>, <a href="http://code.google.com/p/activemessaging/wiki/ActiveMessaging">ActiveMessaging</a>, and <a href="http://stomp.codehaus.org/">STOMP</a> (<a href="http://flexonrails.net/?p=83">post 1</a>, <a href="http://flexonrails.net/?p=88">post 2</a>)</li>
<li><a href="http://www.eribium.org/blog/">Alex McCaw</a> is the creator of <a href="http://juggernaut.rubyforge.org/">Juggernaut</a> which can use <a href="http://www.eribium.org/blog/?p=154">Flex</a> or Ajax to push messages on Rails (using a Flash socket)</li>
<li>Renaun Erickson has <a href="http://renaun.com/blog/2006/10/13/111/">an example</a> using Flex and <a href="http://osflash.org/red5">Red 5</a> the open source Flash server.</li>
<li>The new <a href="http://webmessenger.yahoo.com/">Yahoo! Messenger for the web</a> runs on Flex.</li>
</ul>
<p>Fire up those Flex chat apps and talk amongst yourselves, I&#8217;ll give you a topic:</p>
<p><a href="http://blog.wired.com/monkeybites/2007/08/buzzword-web-ba.html">Buzzword</a> is the most wondrous invention since the printing press and will kill off both MS Word and Ajax in one fell swoop, <em>discuss</em></p>
<p><img src="http://blog.vixiom.com/uploads/coffeetalk.jpg" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2007/08/02/everybodys-chatting-about-flex/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On AIR Bus Tour Los Angeles Notes and Links</title>
		<link>http://blog.alastairdawson.com/2007/07/17/on-air-bus-tour-los-angeles-notes-and-links/</link>
		<comments>http://blog.alastairdawson.com/2007/07/17/on-air-bus-tour-los-angeles-notes-and-links/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 18:38:42 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://blog.vixiom.com/2007/07/17/on-air-bus-tour-los-angeles-notes-and-links/</guid>
		<description><![CDATA[
Tom Bray of Search Coders on stage
Here are my notes from the LA stop of the tour.
[Getting There]
The large orange juice before the drive up from OC might have been a mistake. Finding a rest stop in East LA is a potentially a pant wetting experience with an empty bladder, so having an Austin Powers&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm2.static.flickr.com/1434/834411505_7819ee4af5.jpg?v=0" alt="Tom Bray speaking at the LA stop of the Adobe AIR bus tour" /><br />
<em>Tom Bray of Search Coders on stage</em></p>
<p>Here are my notes from the <a href="http://onair.adobe.com/schedule/cities/losangeles.php">LA stop of the tour</a>.</p>
<p><strong>[Getting There]</strong><br />
The large orange juice before the drive up from OC might have been a mistake. Finding a rest stop in East LA is a potentially a pant wetting experience with an empty bladder, so having an Austin Powers&#8217; cryogenic pee on deck makes it doubly dangerous.</p>
<p>If you&#8217;ve never tried to get in the LA Center Studios it&#8217;s an experience akin to infiltrating the Green Zone in Baghdad.</p>
<p><strong>[Morning Session]</strong><br />
<a href="http://www.mikechambers.com/blog/">Mike Chambers</a> introduces <a href="http://madowney.com/blog/">Mike Downey</a> for the keynote, MC Chambers deserves a raise, he will spend about 3hrs total on stage over a 12hr+ day. Downey gives an overview of AIR and then shows off some AIR apps including <a href="http://pownce.com/">Pownce</a>, <a href="http://finetune.com/">Finetune</a>, and <a href="http://virtub.com/">Buzzword</a>.</p>
<p>Chambers runs through an introduction to AIR and a HelloWorld app. He asks for a show of hands of Flex and JavaScript developers, it&#8217;s a 50/50 split.</p>
<p>After Alan Lewis of eBay shows off their San Dimas project I overhear an investor on the phone: &#8220;Buy more Abobe stock&#8221;.</p>
<p>Kevin Hoyt introduces AIR to the JavaScript folks. While not my area of focus building AIR apps with JavaScript is remarkably similar/easy as building them with Flex. Part of the session uses the <a href="http://www.aptana.com/">Aptana IDE</a>, there&#8217;s also an <a href="http://www.aptana.com/download_rails_rdt.php">Aptana RadRails environment</a>.</p>
<p><strong>[Afternoon Session]</strong><br />
Kevin Hoyt also deserves a raise as he is back again talking about <a href="http://blog.kevinhoyt.org/2007/07/10/occasionally-connected-yahoo-maps/">occasionally connected applications</a>.</p>
<p>The salesforce.com dude then runs into a perfect storm for audience ADD, dry subject matter, non functioning slides, and the onset of the post-lunch food coma. The problems were unfortunate as the <a href="http://wiki.apexdevnet.com/index.php/Flex_Toolkit">salesforce.com Flex API</a> looks pretty rich (and could also make you rich).</p>
<p>Adobe should have scheduled <a href="http://www.theflexblog.com/">Lee Brimelow</a> right after lunch as his presentation was a) Hilarious and b) inspiring and informative. Lee showed off a series of AIR apps built sans Flex Builder with <a href="http://www.gskinner.com/blog/archives/2007/07/creating_air_pr.html">Grant Skinner&#8217;s AIR plugin for Flash CS3</a>.</p>
<p><strong>[Cocktail Hour]</strong><br />
I managed to find the Rails folk out on the patio and got a preview of a cool music based app (not sure the details are public so I&#8217;ll keep it on the DL, but it&#8217;s a different angle than last.fm, finetune et al).</p>
<p><strong>[Night Session]</strong><br />
After being schooled by Kevin Hoyt at Wii Tennis I headed back for the night session (I have an excuse for my Wiifutility, Kevin towers over me and I&#8217;m 6&#8242;2&#8243;, I had visions of an errant swing lodging a Wiimote permanently in my noggin).</p>
<p>My notes are a bit sparse as the free as in beer beers were setting in. <a href="http://www.tombray.com/">Tom Bray</a> of <a href="http://www.searchcoders.com/">Search Coders</a> showed their Dashboard app which is one of the most fully realized AIR apps out in the wild. Tom&#8217;s partner <a href="http://www.machine501.com/">Robert Cedana</a> showed me the Search Coders <a href="http://labs.searchcoders.com/dashboard/instructions.html">Dashboard app</a> earlier in the day and it can handle some pretty amazing amounts of a data. Check out the app if you&#8217;re looking for work as the ads are targeted at Flex developers.</p>
<p>At the end of the night there were still over 50 people in the audience, maybe I should buy some Adobe stock.</p>
<p>PS: If you can&#8217;t make it to a tour stop each event is being <a href="http://onair.adobe.com/live/">streamed live</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2007/07/17/on-air-bus-tour-los-angeles-notes-and-links/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Merb on AIR &#8211; Drag and Drop Multiple File Upload</title>
		<link>http://blog.alastairdawson.com/2007/06/29/merb-on-air-drag-and-drop-multiple-file-upload/</link>
		<comments>http://blog.alastairdawson.com/2007/06/29/merb-on-air-drag-and-drop-multiple-file-upload/#comments</comments>
		<pubDate>Fri, 29 Jun 2007 07:07:38 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.vixiom.com/2007/06/29/merb-on-air-drag-and-drop-multiple-file-upload/</guid>
		<description><![CDATA[Merb was originally created by Ezra Zygmuntowicz to avoid some Rails upload issues.

This is one of the things that Merb was written for. Rails doesnâ€˜t allow multiple concurrent file uploads at once without blocking an entire rails backend for each file upload. Merb allows multiple file uploads at once.

I&#8217;ve built &#8216;multiple&#8217; file uploaders for Rails [...]]]></description>
			<content:encoded><![CDATA[<p>Merb was originally created by <a href="http://brainspl.at/">Ezra Zygmuntowicz</a> to avoid some Rails upload issues.</p>
<blockquote>
<p>This is one of the things that Merb was written for. Rails doesnâ€˜t allow multiple concurrent file uploads at once without blocking an entire rails backend for each file upload. Merb allows multiple file uploads at once.</p>
</blockquote>
<p>I&#8217;ve built &#8216;multiple&#8217; file uploaders for Rails sites but they always involved some slight of hand, the files appeared to be uploading all at once but they where actually queued up by Flex then handled one by one by the app (which also had the unhappy side effect of blocking any other requests to that process). I&#8217;ve been wanting to try out Adobe AIR&#8217;s file system drag and drop for a while so this is a two-fer example. You&#8217;ll need the beta version of <a href="http://labs.adobe.com/technologies/flex/flexbuilder3/">Flex Builder 3</a> or the <a href="http://labs.adobe.com/technologies/flex/sdk/flex3sdk.html">Flex 3 SDK beta</a> if you don&#8217;t mind getting down with the command line. </p>
<p>In a hurry? Here&#8217;s <a href="http://blog.vixiom.com/uploads/merb_air_upload.zip">one I made earlier</a> (flex source in <span class="meta meta_paragraph meta_paragraph_text">&#8216;dist/app/fx</span>&#8216;).</p>
<p>If you haven&#8217;t before install Merb</p>
<pre class="textmate-source"><span class="text text_plain"><span class="meta meta_paragraph meta_paragraph_text">$ sudo gem install merb</span></span></pre>
<p>Then create a new Merb app</p>
<pre class="textmate-source"><span class="text text_plain"><span class="meta meta_paragraph meta_paragraph_text">$ merb -g merb_air_upload</span></span></pre>
<p>and dive on in</p>
<pre class="textmate-source"><span class="text text_plain"><span class="meta meta_paragraph meta_paragraph_text">$ cd merb_air_upload</span></span></pre>
<p>We&#8217;ll need two folders not in a Merb skeleton, one for Flex, and one for our uploads</p>
<pre class="textmate-source"><span class="text text_plain"><span class="meta meta_paragraph meta_paragraph_text">$ mkdir dist/app/fx
$ mkdir dist/public/uploads</span></span></pre>
<p>Create a local database called &#8216;merb_air_upload&#8217; and edit dist/conf/merb_init.rb so that the database definition matches your setup</p>
<pre class="textmate-source"><span class="source source_ruby source_ruby_rails"><span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> set your db info here
</span><span class="support support_class support_class_ruby">ActiveRecord</span>::<span class="support support_class support_class_ruby">Base</span>.establish_connection(
  <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>adapter</span> =&gt; <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>mysql<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>,
  <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>username</span> =&gt; <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>root<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>,
  <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>password</span> =&gt; <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>,
  <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>database</span> =&gt; <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>merb_air_upload<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>
)</span></pre>
<p>Our model will be called &#8216;UserFile&#8217; as &#8216;Upload&#8217; and &#8216;File&#8217; are reserved words, create a migration</p>
<pre class="textmate-source"><span class="text text_plain"><span class="meta meta_paragraph meta_paragraph_text">$ ./script/new_migration CreateUserFiles</span></span></pre>
<p>and edit it (dist/schema/migrations/002_create_user_files.rb) to look like so</p>
<pre class="textmate-source"><span class="source source_ruby source_ruby_rails"><span class="meta meta_class meta_class_ruby"><span class="keyword keyword_control keyword_control_class keyword_control_class_ruby">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_ruby">CreateUserFiles<span class="entity entity_other entity_other_inherited-class entity_other_inherited-class_ruby"> <span class="punctuation punctuation_separator punctuation_separator_inheritance punctuation_separator_inheritance_ruby">&lt;</span> ActiveRecord::Migration</span></span></span>
  <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">self.up</span></span>
    create_table <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>user_files</span> <span class="keyword keyword_control keyword_control_ruby keyword_control_ruby_start-block">do </span>|t|
      t.column <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>filename</span>, <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>string</span>, <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>null</span> =&gt; <span class="constant constant_language constant_language_ruby">false</span>
    <span class="keyword keyword_control keyword_control_ruby">end</span>
  <span class="keyword keyword_control keyword_control_ruby">end</span>

  <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">self.down</span></span>
    drop_table <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>user_files</span>
  <span class="keyword keyword_control keyword_control_ruby">end</span>
<span class="keyword keyword_control keyword_control_ruby">end</span></span></pre>
<p>rake your db</p>
<pre class="textmate-source"><span class="text text_plain"><span class="meta meta_paragraph meta_paragraph_text">$ rake db:migrate</span></span></pre>
<p>Then create a UserFile model (dist/app/models/user_file.rb)</p>
<pre class="textmate-source"><span class="source source_ruby source_ruby_rails"><span class="meta meta_rails meta_rails_model"><span class="meta meta_class meta_class_ruby"><span class="keyword keyword_control keyword_control_class keyword_control_class_ruby">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_ruby">UserFile<span class="entity entity_other entity_other_inherited-class entity_other_inherited-class_ruby"> <span class="punctuation punctuation_separator punctuation_separator_inheritance punctuation_separator_inheritance_ruby">&lt;</span> ActiveRecord::Base</span></span></span>
</span><span class="keyword keyword_control keyword_control_ruby">end</span></span></pre>
<p>and an upload controller (dist/controllers/upload.rb)</p>
<pre class="textmate-source"><span class="source source_ruby source_ruby_rails"><span class="meta meta_class meta_class_ruby"><span class="keyword keyword_control keyword_control_class keyword_control_class_ruby">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_ruby">Upload<span class="entity entity_other entity_other_inherited-class entity_other_inherited-class_ruby"> <span class="punctuation punctuation_separator punctuation_separator_inheritance punctuation_separator_inheritance_ruby">&lt;</span> Application</span></span></span>

  <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">index</span></span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> for testing check jer terminal
</span>    puts params.inspect
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> new user file object
</span>    <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>upload</span> = <span class="support support_class support_class_ruby">UserFile</span>.<span class="keyword keyword_other keyword_other_special-method keyword_other_special-method_ruby">new</span>
    <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>upload</span>.filename = params[<span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>Filename</span>]
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> save
</span>    <span class="keyword keyword_control keyword_control_ruby">if</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>upload</span>.save
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">      <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> create directories
</span>      dist_root = <span class="support support_class support_class_ruby">Merb</span>::<span class="support support_class support_class_ruby">Server</span>.config[<span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>dist_root</span>]
      <span class="support support_class support_class_ruby">FileUtils</span>.mkdir dist_root + <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>/public/uploads/<span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">#{</span><span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>upload</span>.id<span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}</span></span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">      <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> move
</span>      destination = dist_root + <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>/public/uploads/<span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">#{</span><span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>upload</span>.id<span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}</span></span>/<span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">#{</span>params[<span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>Filename</span>]<span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}</span></span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>
      <span class="support support_class support_class_ruby">FileUtils</span>.mv params[<span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>Filedata</span>][<span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>tempfile</span>].path, destination
    <span class="keyword keyword_control keyword_control_ruby">else</span>
      <span class="constant constant_language constant_language_ruby">false</span>
    <span class="keyword keyword_control keyword_control_ruby">end</span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span>render_no_layout
</span>  <span class="keyword keyword_control keyword_control_ruby">end</span>

<span class="keyword keyword_control keyword_control_ruby">end</span></span></pre>
<p>That&#8217;s it for the Merb side of thing on to our AIR app, fire up Flex Builder and create a new AIR project</p>
<p><img src="http://blog.vixiom.com/uploads/merb_air_new.png" width="551" height="185"></p>
<p>I like to keep my flex files in my Rails/Merb app directory</p>
<p><img src="http://blog.vixiom.com/uploads/merb_air_dir.png" width="549" height="270"></p>
<p>The AIR app is three files; the main MXML file (dist/app/fx/merb_air_upload.mxml), a code behind class (dist/app/fx/com/vixiom/merb_air_upload/App.as), and an upload progress component that gets repeated for each file (dist/app/fx/com/vixiom/merb_air_upload/UploadProgressComponent.mxml). Here&#8217;s the main MXML file:</p>
<pre class="textmate-source"><span class="source source_mxml"><span class="meta meta_tag meta_tag_preprocessor meta_tag_preprocessor_xml"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&lt;?</span><span class="entity entity_name entity_name_tag entity_name_tag_xml">xml</span><span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_xml"> version</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>1.0<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span><span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_xml"> encoding</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>utf-8<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">?&gt;</span></span>
<span class="meta meta_tag meta_tag_xml"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_namespace entity_name_tag_namespace_xml">app</span><span class="entity entity_name entity_name_tag entity_name_tag_xml"><span class="punctuation punctuation_separator punctuation_separator_namespace punctuation_separator_namespace_xml">:</span></span><span class="entity entity_name entity_name_tag entity_name_tag_localname entity_name_tag_localname_xml">App</span>
    xmlns:mx=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>http://www.adobe.com/2006/mxml<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span>
    xmlns:app=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>com.vixiom.merb_air_upload.*<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span>
    layout=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>vertical<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span>
    width=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>300<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_localname entity_other_attribute-name_localname_xml">height</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>375<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span>
    backgroundGradientAlphas=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>[1.0, 1.0]<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span>
    backgroundGradientColors=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>[#F4F4F4, #E0E0E0]<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span>
    paddingBottom=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>10<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_localname entity_other_attribute-name_localname_xml">paddingLeft</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>10<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_localname entity_other_attribute-name_localname_xml">paddingRight</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>10<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_localname entity_other_attribute-name_localname_xml">paddingTop</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>10<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span>
    verticalScrollPolicy=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>off<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_localname entity_other_attribute-name_localname_xml">horizontalScrollPolicy</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>off<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&gt;</span></span>

    <span class="meta meta_tag meta_tag_xml meta_tag_xml_template">&lt;<span class="entity entity_name entity_name_tag entity_name_tag_xml">mx:</span>VBox <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">id</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"files_vb"</span>
        width=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"100%"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">height</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"300"</span>
        backgroundColor=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"#FFFFFF"</span>
        horizontalScrollPolicy=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"off"</span>
        paddingBottom=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"5"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">paddingLeft</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"5"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">paddingRight</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"5"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">paddingTop</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"5"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">borderColor</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"#ABABAB"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">borderStyle</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"inset"</span>&gt;</span>
    <span class="meta meta_tag meta_tag_xml"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_namespace entity_name_tag_namespace_xml">mx</span><span class="entity entity_name entity_name_tag entity_name_tag_xml"><span class="punctuation punctuation_separator punctuation_separator_namespace punctuation_separator_namespace_xml">:</span></span><span class="entity entity_name entity_name_tag entity_name_tag_localname entity_name_tag_localname_xml">VBox</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&gt;</span></span>

    <span class="meta meta_tag meta_tag_xml meta_tag_xml_template">&lt;<span class="entity entity_name entity_name_tag entity_name_tag_xml">mx:</span>Button <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">id</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"upload_btn"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">label</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"Upload Files"</span>/&gt;</span>

<span class="meta meta_tag meta_tag_xml"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_namespace entity_name_tag_namespace_xml">app</span><span class="entity entity_name entity_name_tag entity_name_tag_xml"><span class="punctuation punctuation_separator punctuation_separator_namespace punctuation_separator_namespace_xml">:</span></span><span class="entity entity_name entity_name_tag entity_name_tag_localname entity_name_tag_localname_xml">App</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&gt;</span></span></span></pre>
<p>It&#8217;s hooked up to it&#8217;s code behind &#8216;App.as&#8217; class by the xmlns tag <span class="meta meta_tag meta_tag_xml">(xmlns:app=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">&#8220;</span>com.vixiom.merb_air_upload.*<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">&#8220;</span></span></span>) App.as extends WindowedApplication which is the base of all AIR apps:</p>
<pre class="textmate-source"><span class="source source_actionscript">package com.vixiom.merb_air_upload
{
    <span class="keyword keyword_control keyword_control_actionscript">import</span> com.vixiom.merb_air_upload.UploadProgressComponent

    <span class="keyword keyword_control keyword_control_actionscript">import</span> mx.core.WindowedApplication;
    <span class="keyword keyword_control keyword_control_actionscript">import</span> mx.containers.VBox;
    <span class="keyword keyword_control keyword_control_actionscript">import</span> mx.controls.<span class="support support_class support_class_actionscript">Button</span>;

    <span class="keyword keyword_control keyword_control_actionscript">import</span> mx.events.FlexEvent;
    <span class="keyword keyword_control keyword_control_actionscript">import</span> flash.events.<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">*</span>;

    <span class="keyword keyword_control keyword_control_actionscript">import</span> flash.desktop.<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">*</span>;
    <span class="keyword keyword_control keyword_control_actionscript">import</span> flash.filesystem.File;
    <span class="keyword keyword_control keyword_control_actionscript">import</span> flash.net.<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">*</span>;

    <span class="keyword keyword_control keyword_control_actionscript">public</span> <span class="meta meta_class meta_class_actionscript"><span class="storage storage_type storage_type_class storage_type_class_actionscript">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_actionscript">App</span> <span class="storage storage_modifier storage_modifier_extends storage_modifier_extends_actionscript">extends</span> <span class="entity entity_other entity_other_inherited-class entity_other_inherited-class_actionscript">WindowedApplication</span></span>
    {
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="keyword keyword_control keyword_control_actionscript">var</span> filesToUpload <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_class support_class_actionscript">Array</span>
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="keyword keyword_control keyword_control_actionscript">var</span> UploadProgressComponents <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_class support_class_actionscript">Array</span>;
        <span class="keyword keyword_control keyword_control_actionscript">public</span> <span class="keyword keyword_control keyword_control_actionscript">var</span> files_vb<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span>VBox;
        <span class="keyword keyword_control keyword_control_actionscript">public</span> <span class="keyword keyword_control keyword_control_actionscript">var</span> upload_btn<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_class support_class_actionscript">Button</span>;
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="keyword keyword_control keyword_control_actionscript">var</span> uploadURL<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span>URLRequest;

        <span class="comment comment_block comment_block_actionscript"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">/*</span>
         * Constructor
         <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">*/</span></span>
        <span class="keyword keyword_control keyword_control_actionscript">public</span> <span class="meta meta_function meta_function_actionscript"><span class="storage storage_type storage_type_function storage_type_function_asp">function</span> <span class="entity entity_name entity_name_function entity_name_function_asp">App</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_actionscript">(</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_actionscript">)</span></span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_function support_function_actionscript">void</span>
        {
            <span class="support support_function support_function_actionscript">addEventListener</span>( FlexEvent.CREATION_COMPLETE, creationCompleteHandler );
        }

        <span class="comment comment_block comment_block_actionscript"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">/*</span>
         * creationComplete
         *
         * called when the AIR has finishe loading, sets up drag/drop event listeners reference objects
         *
         <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">*/</span></span>
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="meta meta_function meta_function_actionscript"><span class="storage storage_type storage_type_function storage_type_function_asp">function</span> <span class="entity entity_name entity_name_function entity_name_function_asp">creationCompleteHandler</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_actionscript">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_asp"> event:FlexEvent </span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_actionscript">)</span></span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_function support_function_actionscript">void</span>
        {
            <span class="support support_function support_function_actionscript">addEventListener</span>( NativeDragEvent.NATIVE_DRAG_ENTER,    onDragEnter );
            <span class="support support_function support_function_actionscript">addEventListener</span>( NativeDragEvent.NATIVE_DRAG_DROP,     onDragDrop );
            upload_btn.<span class="support support_function support_function_actionscript">enabled</span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> <span class="constant constant_language constant_language_actionscript">false</span>;
            upload_btn.<span class="support support_function support_function_actionscript">addEventListener</span>( MouseEvent.CLICK, upload );

            uploadURL <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> <span class="keyword keyword_control keyword_control_actionscript">new</span> URLRequest();
            uploadURL.<span class="support support_function support_function_actionscript">url</span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> <span class="string string_quoted string_quoted_double string_quoted_double_actionscript"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_actionscript">"</span>http://localhost:4000/upload<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_actionscript">"</span></span>;
            uploadURL.<span class="support support_function support_function_actionscript">method</span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span>URLRequestMethod.POST;

            filesToUpload <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> <span class="keyword keyword_control keyword_control_actionscript">new</span> <span class="support support_class support_class_actionscript">Array</span>();
            UploadProgressComponents <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> <span class="keyword keyword_control keyword_control_actionscript">new</span> <span class="support support_class support_class_actionscript">Array</span>();
        }

        <span class="comment comment_block comment_block_actionscript"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">/*</span>
         * onDragEnter
         *
         * files have been dragged into the app
         <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">*/</span></span>
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="meta meta_function meta_function_actionscript"><span class="storage storage_type storage_type_function storage_type_function_asp">function</span> <span class="entity entity_name entity_name_function entity_name_function_asp">onDragEnter</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_actionscript">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_asp"> event:NativeDragEvent </span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_actionscript">)</span></span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_function support_function_actionscript">void</span>
        {
           DragManager.acceptDragDrop(<span class="support support_function support_function_actionscript">this</span>);
        }

        <span class="comment comment_block comment_block_actionscript"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">/*</span>
         * onDragDrop
         *
         * when files are dropped...
         <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">*/</span></span>
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="meta meta_function meta_function_actionscript"><span class="storage storage_type storage_type_function storage_type_function_asp">function</span> <span class="entity entity_name entity_name_function entity_name_function_asp">onDragDrop</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_actionscript">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_asp"> event:NativeDragEvent </span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_actionscript">)</span></span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_function support_function_actionscript">void</span>
        {
            DragManager.dropAction <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> DragActions.COPY;
            <span class="keyword keyword_control keyword_control_actionscript">var</span> files<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_class support_class_actionscript">Array</span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> <span class="support support_function support_function_actionscript">event</span>.transferable.dataForFormat( TransferableFormats.FILE_LIST_FORMAT ) as <span class="support support_class support_class_actionscript">Array</span>;
            <span class="keyword keyword_control keyword_control_actionscript">for</span> each (<span class="keyword keyword_control keyword_control_actionscript">var</span> f<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span>File <span class="support support_function support_function_actionscript">in</span> files)
            {
               addFile( FileReference( f ) );
            }

            upload_btn.<span class="support support_function support_function_actionscript">enabled</span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> <span class="constant constant_language constant_language_actionscript">true</span>;
        }

        <span class="comment comment_block comment_block_actionscript"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">/*</span>
         * addFile
         *
         * ...add then to filesToUpload array, and the file upload listeners,
         * and create a progress component for each file
         <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">*/</span></span>
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="meta meta_function meta_function_actionscript"><span class="storage storage_type storage_type_function storage_type_function_asp">function</span> <span class="entity entity_name entity_name_function entity_name_function_asp">addFile</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_actionscript">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_asp"> f:FileReference </span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_actionscript">)</span></span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_function support_function_actionscript">void</span>
        {
            filesToUpload.<span class="support support_function support_function_actionscript">push</span>( f );

            <span class="keyword keyword_control keyword_control_actionscript">var</span> upv<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span>UploadProgressComponent <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> <span class="keyword keyword_control keyword_control_actionscript">new</span> UploadProgressComponent();
            UploadProgressComponents.<span class="support support_function support_function_actionscript">push</span>( upv );
            files_vb.addChild( upv );
            upv.file_lb.<span class="support support_function support_function_actionscript">text</span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> f.<span class="support support_function support_function_actionscript">name</span>;
            upv.pb.<span class="support support_function support_function_actionscript">source</span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> f;

            f.<span class="support support_function support_function_actionscript">addEventListener</span>( Event.COMPLETE, completeHandler );
            f.<span class="support support_function support_function_actionscript">addEventListener</span>( IOErrorEvent.IO_ERROR, ioErrorHandler );
        }

        <span class="comment comment_block comment_block_actionscript"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">/*</span>
         * completeHandler
         *
         * a file upload is complete, remove it from filesToUpload
         * and remove the upload component
         <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">*/</span></span>
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="meta meta_function meta_function_actionscript"><span class="storage storage_type storage_type_function storage_type_function_asp">function</span> <span class="entity entity_name entity_name_function entity_name_function_asp">completeHandler</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_actionscript">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_asp"> e:Event </span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_actionscript">)</span></span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_function support_function_actionscript">void</span>
        {
            <span class="keyword keyword_control keyword_control_actionscript">var</span> f<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span>FileReference <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> FileReference(e.<span class="support support_function support_function_actionscript">target</span>);
            <span class="keyword keyword_control keyword_control_actionscript">for</span>( <span class="keyword keyword_control keyword_control_actionscript">var</span> i<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span>uint; i &lt; filesToUpload.<span class="support support_function support_function_actionscript">length</span>; i<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">++</span> )
            {
                <span class="keyword keyword_control keyword_control_actionscript">if</span>( f.<span class="support support_function support_function_actionscript">name</span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">==</span> filesToUpload[i].<span class="support support_function support_function_actionscript">name</span> )
                {
                    files_vb.removeChild( UploadProgressComponents[i] );
                    filesToUpload.<span class="support support_function support_function_actionscript">splice</span>(i, <span class="constant constant_numeric constant_numeric_actionscript">1</span>);
                    UploadProgressComponents.<span class="support support_function support_function_actionscript">splice</span>(i, <span class="constant constant_numeric constant_numeric_actionscript">1</span>);
                }
            }
        }

        <span class="comment comment_block comment_block_actionscript"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">/*</span>
         * trace any errors
         <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">*/</span></span>
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="meta meta_function meta_function_actionscript"><span class="storage storage_type storage_type_function storage_type_function_asp">function</span> <span class="entity entity_name entity_name_function entity_name_function_asp">ioErrorHandler</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_actionscript">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_asp"> event:IOErrorEvent </span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_actionscript">)</span></span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_function support_function_actionscript">void</span>
        {
            <span class="support support_function support_function_actionscript">trace</span>(<span class="string string_quoted string_quoted_double string_quoted_double_actionscript"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_actionscript">"</span>ioErrorHandler: <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_actionscript">"</span></span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">+</span> <span class="support support_function support_function_actionscript">event</span>);
        }

        <span class="comment comment_block comment_block_actionscript"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">/*</span>
         * upload!
         <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_actionscript">*/</span></span>
        <span class="keyword keyword_control keyword_control_actionscript">private</span> <span class="meta meta_function meta_function_actionscript"><span class="storage storage_type storage_type_function storage_type_function_asp">function</span> <span class="entity entity_name entity_name_function entity_name_function_asp">upload</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_actionscript">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_asp"> e:MouseEvent </span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_actionscript">)</span></span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span><span class="support support_function support_function_actionscript">void</span>
        {
            <span class="keyword keyword_control keyword_control_actionscript">for</span> each (<span class="keyword keyword_control keyword_control_actionscript">var</span> f<span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">:</span>File <span class="support support_function support_function_actionscript">in</span> filesToUpload)
            {
               f.upload( uploadURL );
            }
        }
    }
}</span></pre>
<p>The last file is the upload progress component, it&#8217;s progress bar listens for events from each file (<span class="source source_actionscript">upv.pb.<span class="support support_function support_function_actionscript">source</span> <span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_actionscript">=</span> f;</span> above in the addFile method)</p>
<pre class="textmate-source"><span class="source source_mxml"><span class="meta meta_tag meta_tag_preprocessor meta_tag_preprocessor_xml"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&lt;?</span><span class="entity entity_name entity_name_tag entity_name_tag_xml">xml</span><span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_xml"> version</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>1.0<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span><span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_xml"> encoding</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_xml">"</span>utf-8<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_xml">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">?&gt;</span></span>
<span class="meta meta_tag meta_tag_xml meta_tag_xml_template">&lt;<span class="entity entity_name entity_name_tag entity_name_tag_xml">mx:</span>VBox
    xmlns:mx=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"http://www.adobe.com/2006/mxml"</span>
    paddingBottom=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"5"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">paddingLeft</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"5"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">paddingRight</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"5"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">paddingTop</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"5"</span>
    borderColor=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"#BABABA"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">borderStyle</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"solid"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">borderThickness</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"2"</span>
    width=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"100%"</span>
    backgroundColor=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"#F7F7F7"</span>&gt;</span>

    <span class="meta meta_tag meta_tag_xml meta_tag_xml_template">&lt;<span class="entity entity_name entity_name_tag entity_name_tag_xml">mx:</span>Label <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">id</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"file_lb"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">text</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"Label"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">fontWeight</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"bold"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">color</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"#000000"</span>/&gt;</span>
    <span class="meta meta_tag meta_tag_xml meta_tag_xml_template">&lt;<span class="entity entity_name entity_name_tag entity_name_tag_xml">mx:</span>ProgressBar <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">id</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"pb"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">labelPlacement</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"right"</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">label</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">""</span> <span class="keyword keyword_operator keyword_operator_namespace-separator keyword_operator_namespace-separator_xml">width</span>=<span class="string string_quoted string_quoted_double string_quoted_double_xml">"100%"</span>/&gt;</span>

<span class="meta meta_tag meta_tag_xml"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_namespace entity_name_tag_namespace_xml">mx</span><span class="entity entity_name entity_name_tag entity_name_tag_xml"><span class="punctuation punctuation_separator punctuation_separator_namespace punctuation_separator_namespace_xml">:</span></span><span class="entity entity_name entity_name_tag entity_name_tag_localname entity_name_tag_localname_xml">VBox</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_xml">&gt;</span></span></span></pre>
<p>That&#8217;s it! test your AIR app by dragging some files from the file system, once you drop them the upload progress components show a visual representation of the files, click &#8216;upload files&#8217; and the files are upload all at once (for real real not for play play this time).</p>
<p><img src="http://blog.vixiom.com/uploads/merb_air_drag.png" width="547" height="437"><br />
<em>drag!</em></p>
<p><img src="http://blog.vixiom.com/uploads/merb_air_drop.png" width="329" height="421"><br />
<em>drop!</em></p>
<p><img src="http://blog.vixiom.com/uploads/merb_air_upload.png" width="329" height="425"><br />
<em>upload!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2007/06/29/merb-on-air-drag-and-drop-multiple-file-upload/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Get on the bus</title>
		<link>http://blog.alastairdawson.com/2007/06/12/get-on-the-bus/</link>
		<comments>http://blog.alastairdawson.com/2007/06/12/get-on-the-bus/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 18:33:45 +0000</pubDate>
		<dc:creator>Alastair</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://blog.vixiom.com/2007/06/12/get-on-the-bus/</guid>
		<description><![CDATA[I just registered for the LA stop of the Adobe AIR Bus Tour. It&#8217;ll be cool to meet some other Flex/AIR developers in SoCal.
]]></description>
			<content:encoded><![CDATA[<p>I just registered for the LA stop of the <a href="http://onair.adobe.com/">Adobe AIR Bus Tour</a>. It&#8217;ll be cool to meet some other Flex/AIR developers in SoCal.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alastairdawson.com/2007/06/12/get-on-the-bus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

