<?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>FLEX{er} &#187; ActionScript</title>
	<atom:link href="http://www.flexer.info/category/actionscript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.flexer.info</link>
	<description>flex developers web corner</description>
	<lastBuildDate>Mon, 26 Jul 2010 17:54:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
  <link>http://www.flexer.info</link>
  <url>http://www.flexer.info/favicon.ico</url>
  <title>FLEX{er}</title>
</image>
		<item>
		<title>Anaglyphs with Pixel Bender</title>
		<link>http://www.flexer.info/2010/07/26/anaglyphs-with-pixel-bender/</link>
		<comments>http://www.flexer.info/2010/07/26/anaglyphs-with-pixel-bender/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 17:54:21 +0000</pubDate>
		<dc:creator>Andrei Ionescu</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Pixel Bender]]></category>
		<category><![CDATA[anaglyphs]]></category>
		<category><![CDATA[as3]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=1677</guid>
		<description><![CDATA[Jozef Chúťka has did manage to create anaglyphs using Pixel Bender and displacement maps. The result is amazing! 

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_ee63ab1fa7305283c62866e3a4e4a2c72b014a81_2045329199"
			class="flashmovie"
			width="600"
			height="450">
	<param name="movie" value="http://swf.wonderfl.net/swf/usercode/e/ee/ee63/ee63ab1fa7305283c62866e3a4e4a2c72b014a81.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://swf.wonderfl.net/swf/usercode/e/ee/ee63/ee63ab1fa7305283c62866e3a4e4a2c72b014a81.swf"
			name="fm_ee63ab1fa7305283c62866e3a4e4a2c72b014a81_2045329199"
			width="600"
			height="450">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
There are multiple kinds of 2 color glasses used with anaglyphs but the demo in Jozef&#8217;s article is for the common cyan-magenta glasses.
To find out more read Jozef&#8217;s article: http://blog.yoz.sk/2010/06/anaglyphs-with-pixel-bender-and-depth-map/
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F07%2F26%2Fanaglyphs-with-pixel-bender%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F07%2F26%2Fanaglyphs-with-pixel-bender%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2010/07/26/anaglyphs-with-pixel-bender/&title=Anaglyphs+with+Pixel+Bender&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><p>Jozef Chúťka has did manage to create <a href="http://blog.yoz.sk/2010/06/anaglyphs-with-pixel-bender-and-depth-map/" target="_blank">anaglyphs using Pixel Bender and displacement maps</a>. The result is amazing! </p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_ee63ab1fa7305283c62866e3a4e4a2c72b014a81_620415399"
			class="flashmovie"
			width="600"
			height="450">
	<param name="movie" value="http://swf.wonderfl.net/swf/usercode/e/ee/ee63/ee63ab1fa7305283c62866e3a4e4a2c72b014a81.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://swf.wonderfl.net/swf/usercode/e/ee/ee63/ee63ab1fa7305283c62866e3a4e4a2c72b014a81.swf"
			name="fm_ee63ab1fa7305283c62866e3a4e4a2c72b014a81_620415399"
			width="600"
			height="450">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>There are multiple kinds of 2 color glasses used with anaglyphs but the demo in Jozef&#8217;s article is for the common cyan-magenta glasses.</p>
<p>To find out more read Jozef&#8217;s article: <a href="http://blog.yoz.sk/2010/06/anaglyphs-with-pixel-bender-and-depth-map/" target="_blank">http://blog.yoz.sk/2010/06/anaglyphs-with-pixel-bender-and-depth-map/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2010/07/26/anaglyphs-with-pixel-bender/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Medical Device Simulation on Flash Player Platform Using Multi-Screen Development</title>
		<link>http://www.flexer.info/2010/07/09/medical-device-simulation-on-flash-player-platform-using-multi-screen-development/</link>
		<comments>http://www.flexer.info/2010/07/09/medical-device-simulation-on-flash-player-platform-using-multi-screen-development/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 19:12:20 +0000</pubDate>
		<dc:creator>Andrei Ionescu</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[multi-screen]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=1660</guid>
		<description><![CDATA[Serge Jespers did post an article regarding the new application Innovation Mecom has built for Dräger Carina medical device. The application is a simulation that reproduces all functions of the real device. So it is possible to get a real good impression of it even without using a real device. 
Watch the following demo about [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F07%2F09%2Fmedical-device-simulation-on-flash-player-platform-using-multi-screen-development%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F07%2F09%2Fmedical-device-simulation-on-flash-player-platform-using-multi-screen-development%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2010/07/09/medical-device-simulation-on-flash-player-platform-using-multi-screen-development/&title=Medical+Device+Simulation+on+Flash+Player+Platform+Using+Multi-Screen+Development&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><p>Serge Jespers did post <a href="http://www.webkitchen.be/2010/07/06/multi-screen-medical-device-simulation/" target="_blank">an article</a> regarding the new application Innovation Mecom has built for Dräger Carina medical device. The application is a simulation that reproduces all functions of the real device. So it is possible to get a real good impression of it even without using a real device. </p>
<p>Watch the following demo about it.</p>
<p><object width="600" height="360"><param name="movie" value="http://www.youtube.com/v/yUAHKI2G8JE&#038;color1=0xb1b1b1&#038;color2=0xd0d0d0&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/yUAHKI2G8JE&#038;color1=0xb1b1b1&#038;color2=0xd0d0d0&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="600" height="360"></embed></object></p>
<p>You can experience the application for yourself following this link: <a href="http://www.draeger.com/local/products/carina_trainer/start.html" target="_blank">http://www.draeger.com/local/products/carina_trainer/start.html</a></p>
<p>You can read how it was developed on the creator&#8217;s blog: <a href="http://www.ketzler.de/2010/07/simulations-of-medical-devices-on-touch-devices-desktop-iphone-ipad-android/" target="_blank">http://www.ketzler.de/2010/07/simulations-of-medical-devices-on-touch-devices-desktop-iphone-ipad-android/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2010/07/09/medical-device-simulation-on-flash-player-platform-using-multi-screen-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two New Apps with Multi-Screen Experince</title>
		<link>http://www.flexer.info/2010/07/06/two-new-apps-with-multi-screen-experince/</link>
		<comments>http://www.flexer.info/2010/07/06/two-new-apps-with-multi-screen-experince/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 09:16:20 +0000</pubDate>
		<dc:creator>Andrei Ionescu</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex in the world]]></category>
		<category><![CDATA[MXML]]></category>
		<category><![CDATA[Made in Flex]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=1654</guid>
		<description><![CDATA[Last two week I seen two great applications that make use of multi-screen experience capabilities of Flash Platform. 

Androideroids by  Grant Skinner
Desktop MP3 Music Player by Mihai Corlan

The first is a prototype multiplayer asteroids game in which each player uses an Android phone as their game controller. The player connects to the game and [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F07%2F06%2Ftwo-new-apps-with-multi-screen-experince%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F07%2F06%2Ftwo-new-apps-with-multi-screen-experince%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2010/07/06/two-new-apps-with-multi-screen-experince/&title=Two+New+Apps+with+Multi-Screen+Experince&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><p>Last two week I seen two great applications that make use of multi-screen experience capabilities of Flash Platform. </p>
<ol>
<li><a href="http://www.gskinner.com/blog/archives/2010/06/androideroids.html" target="_blank">Androideroids</a> by  Grant Skinner</li>
<li><a href="http://corlan.org/2010/07/02/creating-multi-screen-apps-for-android-and-desktop-using-air/" target="_blank">Desktop MP3 Music Player</a> by Mihai Corlan</li>
</ol>
<p>The first is a prototype multiplayer asteroids game in which each player uses an Android phone as their game controller. The player connects to the game and on the main screen he can see 3rd person view of the whole game while in the same time he can see the 1st person view on their Android phones.</p>
<p>The second one is a mp3 player that can be controlled by any numbers of Android phones. Mihai did the application using AIR and Flex Framework. The communication between the remote controls (AIR apps running on Android phones) and  desktop player is done using the peer to peer features of AIR 2 and Flash Player 10.1.</p>
<p>Demos of the running application can be found on each of the application pages. So take a look at them.</p>
<p>These two applications show the power of the Flash Platform for all types of devices: Computers, TVs, Phones, etc.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2010/07/06/two-new-apps-with-multi-screen-experince/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FxGallery &#8211; Drupal Image Module</title>
		<link>http://www.flexer.info/2010/03/19/fxgallery-drupal-image-module/</link>
		<comments>http://www.flexer.info/2010/03/19/fxgallery-drupal-image-module/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 08:50:41 +0000</pubDate>
		<dc:creator>Andrei Ionescu</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Flex 3 SDK]]></category>
		<category><![CDATA[Flexer]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Made in Flex]]></category>
		<category><![CDATA[drupal image module]]></category>
		<category><![CDATA[drupal image module with flex]]></category>
		<category><![CDATA[Flex 3]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Picasa]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=1487</guid>
		<description><![CDATA[Together with our friend, Mihai Corlan (Adobe Evangelist) we released FxGallery, a Drupal Image Module. Mihai came with the challenge to build an image gallery module for Drupal and we liked it and got involved into the FxGallery project. 

FxGallery has 3 main view: Gallery View, Cover Flow View and Single View. The image module [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F03%2F19%2Ffxgallery-drupal-image-module%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F03%2F19%2Ffxgallery-drupal-image-module%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2010/03/19/fxgallery-drupal-image-module/&title=FxGallery+&#8211;+Drupal+Image+Module&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><p>Together with our friend, <a href="http://corlan.org/creating-drupal-modules-with-flex/" target="_blank">Mihai Corlan (Adobe Evangelist)</a> we released <a href="http://corlan.org/creating-drupal-modules-with-flex/fx-gallery-drupal-module/" target="_blank">FxGallery</a>, a Drupal Image Module. Mihai came with the challenge to build an image gallery module for Drupal and we liked it and got involved into the <a href="http://corlan.org/creating-drupal-modules-with-flex/fx-gallery-drupal-module/" target="_blank">FxGallery</a> project. </p>
<p><a href="http://www.flexer.info/wp-content/uploads/2010/03/fxgallery_1.jpg" target="_blank"><img src="http://www.flexer.info/wp-content/uploads/2010/03/fxgallery_1.jpg" alt="fxgallery_1" title="fxgallery_1" width="600" height="362" /></a></p>
<p><a href="http://corlan.org/creating-drupal-modules-with-flex/fx-gallery-drupal-module/" target="_blank">FxGallery</a> has 3 main view: <strong>Gallery View</strong>, <strong>Cover Flow View</strong> and <strong>Single View</strong>. The image module can manage 3 kinds of image galleries: <strong>Flickr</strong>, <strong>Picasa</strong> and <strong>Local Gallery</strong> that is saved directly in the Drupal. In <strong>Single View</strong> there is also the possibility to add comments for the local gallery.</p>
<p>The project is kind of complex but not complex enough to use some Flex frameworks like Cairngorm. In the project we used the following libraries:</p>
<ul class="ul">
<li><a href="http://sf.net/projects/xmlrpcflash" target="_blank">XMLRPCFlash</a> – for communication between the Flex client and the Drupal back end</li>
<li><a href="http://code.google.com/p/as3flickrlib/" target="_blank">ActionScript 3 Flickr Library</a> – for connecting to Flickr</li>
<li><a href="http://code.google.com/p/picasaflashapi/" target="_blank">Picasa ActionScript 3 Library</a> – for connecting to Picasa</li>
<li><a href="http://blog.greensock.com/overwritemanager/" target="_blank">GreenSock Tweening Library</a> – for some animations</li>
<li><a href="http://code.google.com/p/as3corelib/" target="_blank">as3corelib</a> – a utility library for ActionScript 3</li>
<li><a href="http://www.quietlyscheming.com/blog/components/tutorial-displayshelf-component/" target="_blank">DisplayShelf Flex component</a> – for the cover flow view</li>
</ul>
<p>It was great to work with Mihai and Magda on this project and we hope that we will be able to develop it even further. The things we could do next are: </p>
<ul class="ul">
<li>Port it to Flex 4</li>
<li>Add comment feature to Flickr and Picasa type of albums</li>
<li>Implement deep linking</li>
<li>Integration with Photoshop.com and other social web applications</li>
<li>Mouse gestures using Flash Player 10.1</li>
</ul>
<p>You can view a <a href="https://admin.adobe.acrobat.com/_a295153/p49576597/" target="_blank">webinar</a> held by Mihai and you can download the <a href="http://corlan.org/downloads/fxgallery/fxgallery.zip" target="_blank">module</a> and the <a href="http://corlan.org/downloads/fxgallery/FxGalleryProjects.zip" target="_blank">sources</a> from Mihai&#8217;s blog. Also a working example can be seen here: <a href="http://fxgallery.corlan.org" target="_blank">http://fxgallery.corlan.org</a>.</p>
<p>I know you&#8217;ll want to know more so follow the following links:<br />
<a href="http://myadobe.ro/2010/03/11/building-an-image-module-for-drupal/" target="_blank">http://myadobe.ro/2010/03/11/building-an-image-module-for-drupal/</a><br />
<a href="http://corlan.org/creating-drupal-modules-with-flex/fx-gallery-drupal-module/" target="_blank">http://corlan.org/creating-drupal-modules-with-flex/fx-gallery-drupal-module/</a><br />
<a href="http://corlan.org/creating-drupal-modules-with-flex/" target="_blank">http://corlan.org/creating-drupal-modules-with-flex/</a><br />
<a href="http://fxgallery.corlan.org" target="_blank">http://fxgallery.corlan.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2010/03/19/fxgallery-drupal-image-module/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How To Create Conditional Compilation Definitions (Conditional Compile Blocks)</title>
		<link>http://www.flexer.info/2010/03/04/how-to-create-conditional-compilation-definitions-conditional-compile-blocks/</link>
		<comments>http://www.flexer.info/2010/03/04/how-to-create-conditional-compilation-definitions-conditional-compile-blocks/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 06:50:36 +0000</pubDate>
		<dc:creator>Andrei Ionescu</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[MXML]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[Flash Builder 4]]></category>
		<category><![CDATA[mxmlc]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=1466</guid>
		<description><![CDATA[If you have a big project you will soon find out that you&#8217;ll need to have to versions of the application. One that you work on and one that you need to give it as a release build. On a release build you need to get rid of unwanted things like pre-filed login credentials that [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F03%2F04%2Fhow-to-create-conditional-compilation-definitions-conditional-compile-blocks%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2010%2F03%2F04%2Fhow-to-create-conditional-compilation-definitions-conditional-compile-blocks%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2010/03/04/how-to-create-conditional-compilation-definitions-conditional-compile-blocks/&title=How+To+Create+Conditional+Compilation+Definitions+(Conditional+Compile+Blocks)&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><p>If you have a big project you will soon find out that you&#8217;ll need to have to versions of the application. One that you work on and one that you need to give it as a release build. On a release build you need to get rid of unwanted things like pre-filed login credentials that you need to have in the development (to rapidly get over login with one click instead of loosing time filing the fields) and that has not to be in the release build.</p>
<p>Here we have Conditional Compile Blocks or Conditional Compilation Definitions. This works like this: you define a variable that is set in the compilation arguments, and depending of theirs values we remove from compilation some unneeded lines of code.</p>
<p>For example in the properties of your Flex project in the Flex Compiler zone you have the following compile arguments:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">-locale en_US -define+=CONFIG::development,true</pre></div></div>

<p>and in code you can use it like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">CONFIG::development <span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">// this is a conditional compile block</span>
    usernameTextInput.<span style="color: #0066CC;">text</span> = <span style="color: #ff0000;">&quot;myusername&quot;</span>;
    passwordTextInput.<span style="color: #0066CC;">text</span> = <span style="color: #ff0000;">&quot;mypassword&quot;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>This means the because in the compile arguments we have <strong>CONFIG::development,true</strong> (which means that <strong>CONFIG::development</strong> is true) the code lines inside <strong>CONFIG::development{ }</strong> block will be compiled in the application.</p>
<p>If instead we have <strong>CONFIG::development,false</strong> (which means <strong>CONFIG::development</strong> is false) the code lines inside <strong>CONFIG::development{ }</strong> block will not be compiled.</p>
<p>So, using&#8230;</p>
<ul class="ul">
<li><strong>-define+=CONFIG::development,true</strong> &mdash; the code lines are compiled in</li>
<li><strong>-define+=CONFIG::development,false</strong> &mdash; the code lines are <u>not</u> compiled in</li>
</ul>
<p>You can define any conditional compile variable but you need to keep the <strong>CONFIG</strong> name space, like this:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">-define+=CONFIG::myvar,true
-define+=CONFIG::debug,false
-define+=CONFIG::othervar,true</pre></div></div>

<p>This is it, kind of simple.</p>
<p>You can see the the available arguments for MXML compiler by executing <strong>mxmlc -help</strong> command or by going <a href="http://www.docsultant.com/site2/articles/flex_cmd.html" target="_blank">here and scrolling down to the mxmlc 3.0 options</a> section.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2010/03/04/how-to-create-conditional-compilation-definitions-conditional-compile-blocks/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Chromeless Youtube Video Player for Flex</title>
		<link>http://www.flexer.info/2009/12/24/chromeless-youtube-video-player-for-flex/</link>
		<comments>http://www.flexer.info/2009/12/24/chromeless-youtube-video-player-for-flex/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 23:10:49 +0000</pubDate>
		<dc:creator>Stelian Crisan</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Components]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[chromeless]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=1346</guid>
		<description><![CDATA[This Flex component allow you to play Youtube movies into you Flex applications and also to be able to customize the look of your player. Actually I put a main movie component and two control sections, one for:  play, stop, mute, unmute and time figures (current second and total number of seconds of the movie); [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F12%2F24%2Fchromeless-youtube-video-player-for-flex%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F12%2F24%2Fchromeless-youtube-video-player-for-flex%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2009/12/24/chromeless-youtube-video-player-for-flex/&title=Chromeless+Youtube+Video+Player+for+Flex&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><p>This Flex component allow you to play Youtube movies into you Flex applications and also to be able to customize the look of your player. Actually I put a main movie component and two control sections, one for:  play, stop, mute, unmute and time figures (current second and total number of seconds of the movie); the other one it&#8217;s for a visual playing time.</p>
<p>The Youtube API for ActionScript 3.0 (this is for Flash, but it&#8217;s working also in Flex) that I used it&#8217;s available on Google Code at: <a target="_blank" title="Youtube API for ActionScript 3.0" href="http://code.google.com/apis/youtube/flash_api_reference.html">http://code.google.com/apis/youtube/flash_api_reference.html</a>. Youtube API for  Flash and ActionScript 2 it&#8217;s available at: <a target="_blank" title="Youtube API for ActionScript 2.0" href="http://code.google.com/apis/youtube/flash_api_reference_as2.html">http://code.google.com/apis/youtube/flash_api_reference_as2.html</a>.</p>
<p>I implement almost all functions available on this API (see Youtube class), but for this example I use just the basics ones. Also you will see that are some skins for buttons, that you can use.</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_chromelessyoutubevideoplayer_1449667094"
			class="flashmovie"
			width="480"
			height="335">
	<param name="movie" value="/wp-content/uploads/2009/12/chromelessyoutubevideoplayer.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/wp-content/uploads/2009/12/chromelessyoutubevideoplayer.swf"
			name="fm_chromelessyoutubevideoplayer_1449667094"
			width="480"
			height="335">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>In order to change the Youtube video ID just go to init() function into ChromelessYoutubeVideoPlayer.mxmml file and change the value._youtube it&#8217;s player component, and we set to this the ID value, also we add this to the canvas where this will be in design.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">//set video ID</span>
_youtube.<span style="color: #006600;">videoId</span> = <span style="color: #ff0000;">&quot;D-wvgqDWjnk&quot;</span>;
_playerArea.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>_youtube<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>The size of played move it&#8217;s set for the moment on Youtube class. It&#8217;s better to set the sive before movie starts to play, also, using this API, you can set the playback quality (small, medium, large, hd720) and to see the state of the movie ( unstarted (-1), ended (0), playing (1), paused (2), buffering (3), video cued (5) ).</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onPlayerReady<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">// Event.data contains the event parameter, which is the Player API ID</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;player ready:&quot;</span>, <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#40;</span>event<span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// Once this event has been dispatched by the player, we can use</span>
<span style="color: #808080; font-style: italic;">// cueVideoById, loadVideoById, cueVideoByUrl and loadVideoByUrl</span>
<span style="color: #808080; font-style: italic;">// to load a particular YouTube video.</span>
_player = _loader.<span style="color: #006600;">content</span>;
<span style="color: #808080; font-style: italic;">//load our video ID</span>
_player.<span style="color: #006600;">loadVideoById</span><span style="color: #66cc66;">&#40;</span>_videoId<span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">//set movie size</span>
_player.<span style="color: #006600;">setSize</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">480</span>,<span style="color: #cc66cc;">270</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>I think that it&#8217;s better to download the source code, and just try to see how it&#8217;s work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2009/12/24/chromeless-youtube-video-player-for-flex/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Flex/Flash Keyboard Key Codes</title>
		<link>http://www.flexer.info/2009/12/20/flexflash-keyboard-key-codes/</link>
		<comments>http://www.flexer.info/2009/12/20/flexflash-keyboard-key-codes/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 02:12:25 +0000</pubDate>
		<dc:creator>Andrei Ionescu</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[keyboard]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=1302</guid>
		<description><![CDATA[If you need to know the key codes when implementing a keyboard event use the following application that displays some info about the pressed key. First you need to click on the application to have focus on it then you can start trying out different key strokes.

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_keycodes_1573847580"
			class="flashmovie"
			width="440"
			height="284">
	<param name="movie" value="/wp-content/uploads/2009/12/keycodes.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/wp-content/uploads/2009/12/keycodes.swf"
			name="fm_keycodes_1573847580"
			width="440"
			height="284">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
Some key codes, ASCII codes [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F12%2F20%2Fflexflash-keyboard-key-codes%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F12%2F20%2Fflexflash-keyboard-key-codes%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2009/12/20/flexflash-keyboard-key-codes/&title=Flex/Flash+Keyboard+Key+Codes&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><p>If you need to know the key codes when implementing a keyboard event use the following application that displays some info about the pressed key. First you need to click on the application to have focus on it then you can start trying out different key strokes.</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_keycodes_2060933950"
			class="flashmovie"
			width="440"
			height="284">
	<param name="movie" value="/wp-content/uploads/2009/12/keycodes.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/wp-content/uploads/2009/12/keycodes.swf"
			name="fm_keycodes_2060933950"
			width="440"
			height="284">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>Some key codes, ASCII codes tables are present bellow&#8230;<br />
&nbsp;</p>
<table border="0" cellpadding="0" cellspacing="0" style="border:solid 1px #6699cc">
<tr>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      Letter or number key
    </th>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      Key code
    </th>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      ASCII key code
    </th>
</tr>
<tr>
<td style="padding-left:10px">A</td>
<td style="padding-left:10px">65</td>
<td style="padding-left:10px">65</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">B</td>
<td style="padding-left:10px">66</td>
<td style="padding-left:10px">66</td>
</tr>
<tr>
<td style="padding-left:10px">C</td>
<td style="padding-left:10px">67</td>
<td style="padding-left:10px">67</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">D</td>
<td style="padding-left:10px">68</td>
<td style="padding-left:10px">68</td>
</tr>
<tr>
<td style="padding-left:10px">E</td>
<td style="padding-left:10px">69</td>
<td style="padding-left:10px">69</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">F</td>
<td style="padding-left:10px">70</td>
<td style="padding-left:10px">70</td>
</tr>
<tr>
<td style="padding-left:10px">G</td>
<td style="padding-left:10px">71</td>
<td style="padding-left:10px">71</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">H</td>
<td style="padding-left:10px">72</td>
<td style="padding-left:10px">72</td>
</tr>
<tr>
<td style="padding-left:10px">I</td>
<td style="padding-left:10px">73</td>
<td style="padding-left:10px">73</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">J</td>
<td style="padding-left:10px">74</td>
<td style="padding-left:10px">74</td>
</tr>
<tr>
<td style="padding-left:10px">K</td>
<td style="padding-left:10px">75</td>
<td style="padding-left:10px">75</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">L</td>
<td style="padding-left:10px">76</td>
<td style="padding-left:10px">76</td>
</tr>
<tr>
<td style="padding-left:10px">M</td>
<td style="padding-left:10px">77</td>
<td style="padding-left:10px">77</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">N</td>
<td style="padding-left:10px">78</td>
<td style="padding-left:10px">78</td>
</tr>
<tr>
<td style="padding-left:10px">O</td>
<td style="padding-left:10px">79</td>
<td style="padding-left:10px">79</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">P</td>
<td style="padding-left:10px">80</td>
<td style="padding-left:10px">80</td>
</tr>
<tr>
<td style="padding-left:10px">Q</td>
<td style="padding-left:10px">81</td>
<td style="padding-left:10px">81</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">R</td>
<td style="padding-left:10px">82</td>
<td style="padding-left:10px">82</td>
</tr>
<tr>
<td style="padding-left:10px">S</td>
<td style="padding-left:10px">83</td>
<td style="padding-left:10px">83</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">T</td>
<td style="padding-left:10px">84</td>
<td style="padding-left:10px">84</td>
</tr>
<tr>
<td style="padding-left:10px">U</td>
<td style="padding-left:10px">85</td>
<td style="padding-left:10px">85</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">V</td>
<td style="padding-left:10px">86</td>
<td style="padding-left:10px">86</td>
</tr>
<tr>
<td style="padding-left:10px">W</td>
<td style="padding-left:10px">87</td>
<td style="padding-left:10px">87</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">X</td>
<td style="padding-left:10px">88</td>
<td style="padding-left:10px">88</td>
</tr>
<tr>
<td style="padding-left:10px">Y</td>
<td style="padding-left:10px">89</td>
<td style="padding-left:10px">89</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Z</td>
<td style="padding-left:10px">90</td>
<td style="padding-left:10px">90</td>
</tr>
<tr>
<td style="padding-left:10px">0</td>
<td style="padding-left:10px">48</td>
<td style="padding-left:10px">48</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">1</td>
<td style="padding-left:10px">49</td>
<td style="padding-left:10px">49</td>
</tr>
<tr>
<td style="padding-left:10px">2</td>
<td style="padding-left:10px">50</td>
<td style="padding-left:10px">50</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">3</td>
<td style="padding-left:10px">51</td>
<td style="padding-left:10px">51</td>
</tr>
<tr>
<td style="padding-left:10px">4</td>
<td style="padding-left:10px">52</td>
<td style="padding-left:10px">52</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">5</td>
<td style="padding-left:10px">53</td>
<td style="padding-left:10px">53</td>
</tr>
<tr>
<td style="padding-left:10px">6</td>
<td style="padding-left:10px">54</td>
<td style="padding-left:10px">54</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">7</td>
<td style="padding-left:10px">55</td>
<td style="padding-left:10px">55</td>
</tr>
<tr>
<td style="padding-left:10px">8</td>
<td style="padding-left:10px">56</td>
<td style="padding-left:10px">56</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">9</td>
<td style="padding-left:10px">57</td>
<td style="padding-left:10px">57</td>
</tr>
<tr>
<td style="padding-left:10px">a</td>
<td style="padding-left:10px">65</td>
<td style="padding-left:10px">97</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">b</td>
<td style="padding-left:10px">66</td>
<td style="padding-left:10px">98</td>
</tr>
<tr>
<td style="padding-left:10px">c</td>
<td style="padding-left:10px">67</td>
<td style="padding-left:10px">99</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">d</td>
<td style="padding-left:10px">68</td>
<td style="padding-left:10px">100</td>
</tr>
<tr>
<td style="padding-left:10px">e</td>
<td style="padding-left:10px">69</td>
<td style="padding-left:10px">101</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">f</td>
<td style="padding-left:10px">70</td>
<td style="padding-left:10px">102</td>
</tr>
<tr>
<td style="padding-left:10px">g</td>
<td style="padding-left:10px">71</td>
<td style="padding-left:10px">103</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">h</td>
<td style="padding-left:10px">72</td>
<td style="padding-left:10px">104</td>
</tr>
<tr>
<td style="padding-left:10px">i</td>
<td style="padding-left:10px">73</td>
<td style="padding-left:10px">105</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">j</td>
<td style="padding-left:10px">74</td>
<td style="padding-left:10px">106</td>
</tr>
<tr>
<td style="padding-left:10px">k</td>
<td style="padding-left:10px">75</td>
<td style="padding-left:10px">107</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">l</td>
<td style="padding-left:10px">76</td>
<td style="padding-left:10px">108</td>
</tr>
<tr>
<td style="padding-left:10px">m</td>
<td style="padding-left:10px">77</td>
<td style="padding-left:10px">109</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">n</td>
<td style="padding-left:10px">78</td>
<td style="padding-left:10px">110</td>
</tr>
<tr>
<td style="padding-left:10px">o</td>
<td style="padding-left:10px">79</td>
<td style="padding-left:10px">111</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">p</td>
<td style="padding-left:10px">80</td>
<td style="padding-left:10px">112</td>
</tr>
<tr>
<td style="padding-left:10px">q</td>
<td style="padding-left:10px">81</td>
<td style="padding-left:10px">113</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">r</td>
<td style="padding-left:10px">82</td>
<td style="padding-left:10px">114</td>
</tr>
<tr>
<td style="padding-left:10px">s</td>
<td style="padding-left:10px">83</td>
<td style="padding-left:10px">115</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">t</td>
<td style="padding-left:10px">84</td>
<td style="padding-left:10px">116</td>
</tr>
<tr>
<td style="padding-left:10px">u</td>
<td style="padding-left:10px">85</td>
<td style="padding-left:10px">117</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">v</td>
<td style="padding-left:10px">86</td>
<td style="padding-left:10px">118</td>
</tr>
<tr>
<td style="padding-left:10px">w</td>
<td style="padding-left:10px">87</td>
<td style="padding-left:10px">119</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">x</td>
<td style="padding-left:10px">88</td>
<td style="padding-left:10px">120</td>
</tr>
<tr>
<td style="padding-left:10px">y</td>
<td style="padding-left:10px">89</td>
<td style="padding-left:10px">121</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">z</td>
<td style="padding-left:10px">90</td>
<td style="padding-left:10px">122</td>
</tr>
</table>
<p>&nbsp;</p>
<table border="0" cellpadding="0" cellspacing="0" style="border:solid 1px #6699cc">
<tr>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      Numeric keypad key
    </th>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      Key code
    </th>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      ASCII key code
    </th>
</tr>
<tr>
<td style="padding-left:10px">Numpad 0</td>
<td style="padding-left:10px">96</td>
<td style="padding-left:10px">48</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Numpad 1</td>
<td style="padding-left:10px">97</td>
<td style="padding-left:10px">49</td>
</tr>
<tr>
<td style="padding-left:10px">Numpad 2</td>
<td style="padding-left:10px">98</td>
<td style="padding-left:10px">50</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Numpad 3</td>
<td style="padding-left:10px">99</td>
<td style="padding-left:10px">51</td>
</tr>
<tr>
<td style="padding-left:10px">Numpad 4</td>
<td style="padding-left:10px">100</td>
<td style="padding-left:10px">52</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Numpad 5</td>
<td style="padding-left:10px">101</td>
<td style="padding-left:10px">53</td>
</tr>
<tr>
<td style="padding-left:10px">Numpad 6</td>
<td style="padding-left:10px">102</td>
<td style="padding-left:10px">54</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Numpad 7</td>
<td style="padding-left:10px">103</td>
<td style="padding-left:10px">55</td>
</tr>
<tr>
<td style="padding-left:10px">Numpad 8</td>
<td style="padding-left:10px">104</td>
<td style="padding-left:10px">56</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Numpad 9</td>
<td style="padding-left:10px">105</td>
<td style="padding-left:10px">57</td>
</tr>
<tr>
<td style="padding-left:10px">Multiply</td>
<td style="padding-left:10px">106</td>
<td style="padding-left:10px">42</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Add</td>
<td style="padding-left:10px">107</td>
<td style="padding-left:10px">43</td>
</tr>
<tr>
<td style="padding-left:10px">Enter</td>
<td style="padding-left:10px">13</td>
<td style="padding-left:10px">13</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Subtract</td>
<td style="padding-left:10px">109</td>
<td style="padding-left:10px">45</td>
</tr>
<tr>
<td style="padding-left:10px">Decimal</td>
<td style="padding-left:10px">110</td>
<td style="padding-left:10px">46</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Divide</td>
<td style="padding-left:10px">111</td>
<td style="padding-left:10px">47</td>
</tr>
</table>
<p>&nbsp;</p>
<table border="0" cellpadding="0" cellspacing="0" style="border:solid 1px #6699cc">
<tr>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      Function key
    </th>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      Key code
    </th>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      ASCII key code
    </th>
</tr>
<tr>
<td style="padding-left:10px">F1</td>
<td style="padding-left:10px">112</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">F2</td>
<td style="padding-left:10px">113</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">F3</td>
<td style="padding-left:10px">114</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">F4</td>
<td style="padding-left:10px">115</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">F5</td>
<td style="padding-left:10px">116</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">F6</td>
<td style="padding-left:10px">117</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">F7</td>
<td style="padding-left:10px">118</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">F8</td>
<td style="padding-left:10px">119</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">F9</td>
<td style="padding-left:10px">120</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">F10</td>
<td style="padding-left:10px">This key is reserved by the system and cannot be used in ActionScript.</td>
<td style="padding-left:10px">This key is reserved by the system and cannot be used in ActionScript.</td>
</tr>
<tr>
<td style="padding-left:10px">F11</td>
<td style="padding-left:10px">122</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">F12</td>
<td style="padding-left:10px">123</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">F13</td>
<td style="padding-left:10px">124</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">F14</td>
<td style="padding-left:10px">125</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">F15</td>
<td style="padding-left:10px">126</td>
<td style="padding-left:10px">0</td>
</tr>
</table>
<p>&nbsp;</p>
<table border="0" cellpadding="0" cellspacing="0" style="border:solid 1px #6699cc">
<tr>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      Key
    </th>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      Key code
    </th>
<th nowrap style="text-align:left; background:#6699cc; color:white; padding-left:10px; padding-right:10px">
      ASCII key code
    </th>
</tr>
<tr>
<td style="padding-left:10px">Backspace</td>
<td style="padding-left:10px">8</td>
<td style="padding-left:10px">8</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Tab</td>
<td style="padding-left:10px">9</td>
<td style="padding-left:10px">9</td>
</tr>
<tr>
<td style="padding-left:10px">Enter</td>
<td style="padding-left:10px">13</td>
<td style="padding-left:10px">13</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Shift</td>
<td style="padding-left:10px">16</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">Control</td>
<td style="padding-left:10px">17</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Caps Lock</td>
<td style="padding-left:10px">20</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">Esc</td>
<td style="padding-left:10px">27</td>
<td style="padding-left:10px">27</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Spacebar</td>
<td style="padding-left:10px">32</td>
<td style="padding-left:10px">32</td>
</tr>
<tr>
<td style="padding-left:10px">Page Up</td>
<td style="padding-left:10px">33</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Page Down</td>
<td style="padding-left:10px">34</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">End</td>
<td style="padding-left:10px">35</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Home</td>
<td style="padding-left:10px">36</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">Left Arrow</td>
<td style="padding-left:10px">37</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Up Arrow</td>
<td style="padding-left:10px">38</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">Right Arrow</td>
<td style="padding-left:10px">39</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Down Arrow</td>
<td style="padding-left:10px">40</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">Insert</td>
<td style="padding-left:10px">45</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">Delete</td>
<td style="padding-left:10px">46</td>
<td style="padding-left:10px">127</td>
</tr>
<tr>
<td style="padding-left:10px">Num Lock</td>
<td style="padding-left:10px">144</td>
<td style="padding-left:10px">0</td>
</tr>
<tr bgcolor="#F8F8F8">
<td style="padding-left:10px">ScrLk</td>
<td style="padding-left:10px">145</td>
<td style="padding-left:10px">0</td>
</tr>
<tr>
<td style="padding-left:10px">Pause/Break</td>
<td style="padding-left:10px">19</td>
<td style="padding-left:10px">0</td>
</tr>
</table>
<p>Some stuff about keyboard events bellow:<br />
<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=events_11.html" target="_blank">http://livedocs.adobe.com/flex/3/html/help.html?content=events_11.html</a><br />
<a href="http://cookbooks.adobe.com/post_Global_keyboard_event_handling-304.html" target="_blank">http://cookbooks.adobe.com/post_Global_keyboard_event_handling-304.html</a><br />
<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=Capturing_User_Input_3.html" target="_blank">http://livedocs.adobe.com/flex/3/html/help.html?content=Capturing_User_Input_3.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2009/12/20/flexflash-keyboard-key-codes/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MiniBuilder &#8211; Flash based IDE for ActionScript</title>
		<link>http://www.flexer.info/2009/11/08/minibuilder-flash-based-ide-for-actionscript/</link>
		<comments>http://www.flexer.info/2009/11/08/minibuilder-flash-based-ide-for-actionscript/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 22:10:28 +0000</pubDate>
		<dc:creator>Stelian Crisan</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex IDE]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[minibuilder]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=1240</guid>
		<description><![CDATA[Flash MiniBuilder is a lightweight IDE created for developing programs written in ActionScript 3. Flash MiniBuilder is itself written in ActionScript.
Two of the main raison tobe of MiniBuilder are:

provide a completely free and cross platform alternative for developing ActionScript projects.
provide an editor with a small footprint that would eventually run on smaller computers like netbooks [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F11%2F08%2Fminibuilder-flash-based-ide-for-actionscript%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F11%2F08%2Fminibuilder-flash-based-ide-for-actionscript%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2009/11/08/minibuilder-flash-based-ide-for-actionscript/&title=MiniBuilder+&#8211;+Flash+based+IDE+for+ActionScript&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><p>Flash MiniBuilder is a lightweight IDE created for developing programs written in ActionScript 3. Flash MiniBuilder is itself written in ActionScript.</p>
<p>Two of the main raison tobe of MiniBuilder are:</p>
<ul>
<li>provide a completely free and cross platform alternative for developing ActionScript projects.</li>
<li>provide an editor with a small footprint that would eventually run on smaller computers like netbooks or even pocket-size devices.</li>
</ul>
<p>Extending, changing (and even integrating MiniBuilder with other software) is easy: MiniBuilder is itself written in your favourite language, AS3!</p>
<p>This and some of it&#8217;s unique features and concepts will make it the IDE of choice for lots AS3 developers.</p>
<p>MiniBuilder will benefit from Adobe AIR&#8217;s ability to launch applications from the browser. Code samples, online tutorials, code libraries will be able to provide a direct launch link for their projects: &#8220;launch this project in MiniBuilder&#8221; (This feature will be available in the first beta version.)</p>
<p>Because ActionScript virtual machine is now an open source project, we expect lots of solutions to adopt it for embedding. From the start, MiniBuilder targets several implementations of Tamarin AVM:</p>
<ul>
<li>Flash Player</li>
<li>Adobe AIR</li>
<li>Tamarin AVM shell</li>
<li>Mod ActionScript (experimental web server module running ActionScript)</li>
</ul>
<p>MiniBuilder will be available in 2 versions:</p>
<ul>
<li>Desktop MiniBuilder</li>
<li>Web MiniBuilder</li>
</ul>
<p>More about MiniBuilder and download information you can read at: <a target="_blank" href="http://code.google.com/p/minibuilder/">http://code.google.com/p/minibuilder/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2009/11/08/minibuilder-flash-based-ide-for-actionscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Undefined Error in Debug Session Because of Sequence</title>
		<link>http://www.flexer.info/2009/10/13/undefined-error-in-debug-session-because-of-sequence/</link>
		<comments>http://www.flexer.info/2009/10/13/undefined-error-in-debug-session-because-of-sequence/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 15:10:41 +0000</pubDate>
		<dc:creator>Andrei Ionescu</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[Errors]]></category>
		<category><![CDATA[Flex 3 SDK]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[undefined]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=1215</guid>
		<description><![CDATA[If you ever got into the following error (see bellow after this paragraph) you must know how you can overcome it. 
The error is triggered only in debugging. No trace of it in the normal run. But if you need to debug and get this error it will pause the debug session and even after [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F10%2F13%2Fundefined-error-in-debug-session-because-of-sequence%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F10%2F13%2Fundefined-error-in-debug-session-because-of-sequence%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2009/10/13/undefined-error-in-debug-session-because-of-sequence/&title=Undefined+Error+in+Debug+Session+Because+of+Sequence&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><p>If you ever got into the following error (see bellow after this paragraph) you must know how you can overcome it. </p>
<p>The error is triggered only in debugging. No trace of it in the normal run. But if you need to debug and get this error it will pause the debug session and even after lots of resume pressed you&#8217;ll won&#8217;t get over it because is a cyclic error.</p>
<pre>undefined
	at flash.events::EventDispatcher/dispatchEvent()
	at mx.effects::Effect/effectStartHandler()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\Effect.as:1310]
	at flash.events::EventDispatcher/dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at mx.effects::EffectInstance/play()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\EffectInstance.as:580]
	at mx.effects.effectClasses::CompositeEffectInstance/play()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\effectClasses\CompositeEffectInstance.as:172]
	at mx.effects.effectClasses::SequenceInstance/play()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\effectClasses\SequenceInstance.as:150]
	at mx.effects::EffectInstance/finishRepeat()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\EffectInstance.as:685]
	at mx.effects.effectClasses::SequenceInstance/play()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\effectClasses\SequenceInstance.as:156]
	at mx.effects::EffectInstance/finishRepeat()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\EffectInstance.as:685]
	at mx.effects.effectClasses::SequenceInstance/play()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\effectClasses\SequenceInstance.as:156]
	at mx.effects::EffectInstance/finishRepeat()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\EffectInstance.as:685]
	at mx.effects.effectClasses::SequenceInstance/play()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\effectClasses\SequenceInstance.as:156]
	at mx.effects::EffectInstance/finishRepeat()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\EffectInstance.as:685]
	at mx.effects.effectClasses::SequenceInstance/play()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\effectClasses\SequenceInstance.as:156]
	at mx.effects::EffectInstance/finishRepeat()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\EffectInstance.as:685]
	at mx.effects.effectClasses::SequenceInstance/play()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\effectClasses\SequenceInstance.as:156]
	at mx.effects::EffectInstance/finishRepeat()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\EffectInstance.as:685]
	at mx.effects.effectClasses::SequenceInstance/play()
	[C:\autobuild\3.x\frameworks\projects\framework\src\mx\effects\effectClasses\SequenceInstance.as:156]</pre>
<p>The error is triggered by Sequence and the code looks like this&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>mx:Sequence id=<span style="color: #ff0000;">&quot;movement&quot;</span> repeatCount=<span style="color: #ff0000;">&quot;0&quot;</span> startDelay=<span style="color: #ff0000;">&quot;{delay}&quot;</span><span style="color: #66cc66;">&gt;</span>
    <span style="color: #66cc66;">&lt;</span>mx:Move id=<span style="color: #ff0000;">&quot;movementUp&quot;</span> <span style="color: #0066CC;">target</span>=<span style="color: #ff0000;">&quot;{this}&quot;</span> <span style="color: #0066CC;">duration</span>=<span style="color: #ff0000;">&quot;{interval}&quot;</span> 
        yTo=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #66cc66;">/&gt;</span>
    <span style="color: #66cc66;">&lt;</span>mx:Move id=<span style="color: #ff0000;">&quot;movementDown&quot;</span> <span style="color: #0066CC;">target</span>=<span style="color: #ff0000;">&quot;{this}&quot;</span> <span style="color: #0066CC;">duration</span>=<span style="color: #ff0000;">&quot;{interval}&quot;</span> 
        yTo=<span style="color: #ff0000;">&quot;{_startYPos}&quot;</span> <span style="color: #66cc66;">/&gt;</span>
<span style="color: #66cc66;">&lt;/</span>mx:Sequence<span style="color: #66cc66;">&gt;</span></pre></div></div>

<p>What&#8217;s the problem? After trying different things on the code I noticed that instead of setting the <strong>target</strong> property of the <strong>Sequence</strong> I did set up the <strong>target</strong> of each <strong>Move</strong> item. So by removing the target from each <strong>Move</strong> and adding one to <strong>Sequence</strong> may fix the problem.</p>
<p>Another thing to check is that the sequence is called only once for the target object. If the same effect is called twice or more on the same object and the previous effect did not finished their job a conflict appears. That means that starting the effect on a event that triggers more than once (ex: <strong>updateComplete</strong>, <strong>addedToStage</strong>) will end in this error also. Try use <strong>creationComplete</strong> event instead.</p>
<p>It is important to tell you that the Flex SDK I used to test this are 3.4 and 3.5 from <a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3" target="_blank">Adobe Nightly Builds</a>.</p>
<p>Hope this helps you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2009/10/13/undefined-error-in-debug-session-because-of-sequence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiple File Upload Using AMFPHP</title>
		<link>http://www.flexer.info/2009/09/02/multiple-file-upload-using-amfphp/</link>
		<comments>http://www.flexer.info/2009/09/02/multiple-file-upload-using-amfphp/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 01:13:07 +0000</pubDate>
		<dc:creator>Andrei Ionescu</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Components]]></category>
		<category><![CDATA[Flash Builder 4]]></category>
		<category><![CDATA[Flex 4 SDK]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[MXML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[amfphp]]></category>

		<guid isPermaLink="false">http://www.flexer.info/?p=760</guid>
		<description><![CDATA[What is AMF and a bit of history
Action Message Format (AMF) is a compact binary format that is used to serialize ActionScript object graphs. Once serialized an AMF encoded object graph may be used to persist and retrieve the public state of an application across sessions or allow two endpoints to communicate through the exchange [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F09%2F02%2Fmultiple-file-upload-using-amfphp%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.flexer.info%2F2009%2F09%2F02%2Fmultiple-file-upload-using-amfphp%2F" height="61" width="51" /></a></div><div style="float: right; margin-right: 10px"><a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://www.flexer.info/2009/09/02/multiple-file-upload-using-amfphp/&title=Multiple+File+Upload+Using+AMFPHP&srcURL=http://www.flexer.info" target="_blank" rel="nofollow"><img
src="http://www.flexer.info/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a></div><h2>What is AMF and a bit of history</h2>
<p>Action Message Format (AMF) is a compact binary format that is used to serialize ActionScript object graphs. Once serialized an AMF encoded object graph may be used to persist and retrieve the public state of an application across sessions or allow two endpoints to communicate through the exchange of strongly typed data. </p>
<p>AMF was introduced in Flash Player 6 in 2001 and remained unchanged with the introduction of Actionscript 2.0 in Flash Player 7 and with the release of Flash Player 8. This version of AMF is referred to as AMF 0. In Flash Player 9, Action Script 3.0 was introduced along with a new Actionscript Virtual Machine (AVM+) &#8211; the new data types and language features made possible by these improvements prompted AMF to be updated. Given the opportunity to release a new version of AMF, several optimizations were also made to the encoding format to remove redundant information from serialized data.</p>
<h2>Why AMF?</h2>
<ol>
<li>AMF is a compact binary format which means few bits to be transferred from the server to the client. </li>
<li>Using AMF you can call methods from the server as the method would be in you Actionscript code.<br />
In my opinion these two are the main advantages of AMF. There are others advantages as well that you may find important.</li>
</ol>
<p>Some stats about AMF and its concurrent protocols available can be seen on James Ward’s Census Application (<a href="http://www.jamesward.com/census" target="_blank">http://www.jamesward.com/census</a>).</p>
<h2>What you need</h2>
<p>In order to complete this article you need the following things:</p>
<ol>
<li>Flash Builder 4 (<a href="http://labs.adobe.com/technologies/flashbuilder4" target="_blank">http://labs.adobe.com/technologies/flashbuilder4</a>) or other IDE with Flex 4 SDK</li>
<li>AMFPHP (<a href="http://www.amfphp.org" target="_blank">http://www.amfphp.org</a>)</li>
<li>Local LAMP server (ex: Zend Server Community Edition, XAMPP, WAMP, etc)</li>
</ol>
<p>Once you have those requirements satisfied we can go on. </p>
<p>At this moment the last version of AMFPHP is 1.9.</p>
<h2>Setting up the server side</h2>
<p>First of all create a folder in your <strong>htdocs</strong> or an alias so the web services, will be made available through your installed web server. In that place create a folder called <strong>webservices</strong>. Copy everything (but not the <strong>.htaccess</strong> file) that is in <strong>amf</strong> folder of the AMFPHP archive downloaded from amfphp.org to <strong>webservices</strong> folder. All your PHP web services will be in <strong>webservices/services</strong> folder.</p>
<p>Another thing to know is that you may need to put a <strong>crossdomain.xml</strong> file so the resulting swf file will be able to connect to the web services.</p>
<p>On same level with the <strong>webservices</strong> folder create <strong>_uploads</strong> folder (include the first underline). In this folder we will save our uploaded files.</p>
<p>This should be enough for now and we will go further to the next step.</p>
<h2>Creating our upload web service</h2>
<p>Create a new php file in <strong>webservices/services</strong> folder called <strong>upload.php</strong>. This will be the file that will contain our upload class and its methods and all its methods will be available in our flex upload application.</p>
<p>Create a class called <strong>upload</strong> as the file’s name. This class will have only one method named <strong>uploadFiles</strong>. </p>
<p>This method takes an object (<code>$fileData</code>) as parameter. This object contains the <strong>filename</strong> (<code>$fileData["filename"]</code>) and the file content as byte array (<code>$fileData["filedata"]</code>). The method gets those two and saves the file on the server location. It always returns true if it doesn’t crash. In case of a crash that means the file is not saved or an error is in our web service in which case we assume that the file is not saved. See <strong>upload.php</strong> bellow.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> upload <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// method saves files on the server</span>
    <span style="color: #000000; font-weight: bold;">function</span> uploadFiles<span style="color: #009900;">&#40;</span><span style="color: #000088;">$fileData</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// new file path an name</span>
        <span style="color: #666666; font-style: italic;">// to not overwrite the files we add the microtime before the file name </span>
        <span style="color: #000088;">$myFilePath</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'../../_uploads/'</span><span style="color: #339933;">.</span>
            <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/[^0-9]+/&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;_&quot;</span><span style="color: #339933;">,</span><span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'_'</span><span style="color: #339933;">.</span><span style="color: #000088;">$fileData</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;filename&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">// writing on the disk</span>
        <span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$myFilePath</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fileData</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;filedata&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">// returning response - is not used anywhere </span>
        <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>    
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h2>Getting into the client side</h2>
<p>We will use the Spark components of the Flex 4 SDK. This will ease up a lot the development needed to finalize our application. The states will help us a lot.</p>
<p>Bellow in you can see the content of my <strong>MultipleFileUploadUsingAMFPHP</strong> project.</p>
<p><img src="http://www.flexer.info/wp-content/uploads/2009/09/figure1.png" alt="MultipleFileUploadUsingAMFPHP Flex Project" title="MultipleFileUploadUsingAMFPHP Flex Project" width="327" height="165" style="padding: 15px 0px 15px 0px" /></p>
<p>Let’s look at the attributes of <code><mx:RemoteObject></code> declaration which contains the paths and settings to reach to our upload web service. Our web service file is called <strong>upload.php</strong> and can be found in <strong>webservices/services/</strong> folder. The url to our web server location is <strong>http://localhost/multiplefileupload/</strong>.</p>
<ul class="ul">
<li>endpoint: this must point to <strong>gateway.php</strong>; in our case the url is <strong>http://localhost/multiplefileupload/webservices/gateway.php</strong></li>
<li>source: this is the filename of the PHP file containing the web service without the &#8220;.php&#8221; extension; in our case is <strong>upload</strong></li>
<li>destination: is the method from the file and class defined in source; in our case <strong>uploadFiles</strong></li>
</ul>
<p>These three are the attributes to reach the web service. Of course we set up the <strong>result</strong> and <strong>fault</strong> event handlers, the <strong>id</strong> and the <strong>showBusyCursor</strong> to true to visually show that the application is working.</p>
<p>Now we will define four states that will display different components depending of the state we are in.</p>
<ol>
<li><strong>initUpload</strong>: the first state that will be displayed at starting
<p><img src="http://www.flexer.info/wp-content/uploads/2009/09/figure2.png" alt="MultipleFileUploadUsingAMFPHP Flex Project" title="MultipleFileUploadUsingAMFPHP Flex Project" width="533" height="136" /></li>
<li><strong>beforeUploading</strong>: this will show the list with the files chosen and some buttons
<p><img src="http://www.flexer.info/wp-content/uploads/2009/09/figure3.png" alt="MultipleFileUploadUsingAMFPHP Flex Project" title="MultipleFileUploadUsingAMFPHP Flex Project" width="533" height="348" /></li>
<li><strong>inUploadProcess</strong>: this will show the progress and will have a button for canceling the process
<p><img src="http://www.flexer.info/wp-content/uploads/2009/09/figure4.png" alt="MultipleFileUploadUsingAMFPHP Flex Project" title="MultipleFileUploadUsingAMFPHP Flex Project" width="533" height="348" /></li>
<li><strong>uploadFinalized</strong>: this will show all the files and the finalized button
<p><img src="http://www.flexer.info/wp-content/uploads/2009/09/figure5.png" alt="MultipleFileUploadUsingAMFPHP Flex Project" title="MultipleFileUploadUsingAMFPHP Flex Project" width="533" height="348" /></li>
</ol>
<p>Next we will have a panel that will contain a Spark list and a few buttons that will appear according to the state we are in. I will not stop explaining about the new features of Flex 4 SDK and Flash Builder 4 because that is over our scope for now.</p>
<h2>A bit of theory &#8211; how the upload process work</h2>
<p>Now I want to explain how the upload process will work. The whole process is based on a stack idea. Files are uploaded one at a time. After the current file is uploaded or it has failed the next one will take its place and will be processed. </p>
<p>All files that have been chosen for upload are stored in a <strong>FileReferenceList</strong> object (<code>_refAddFiles</code>). We will iterate through it and we will add each <strong>FileReference</strong> object to <code>_arrUploadFiles</code> array collection. This array collection is used to display the files in a list and iterate through it to process each file reference object.</p>
<p>The process is started calling <code>startUpload()</code> method. These are the steps taken for each file reference object from <code>_arrUploadFiles</code> array collection:</p>
<ol>
<li>We add a complete event to current file reference<br />&nbsp;

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">_arrUploadFiles<span style="color: #66cc66;">&#91;</span>_numCurrentUpload<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">data</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>
    Event.<span style="color: #006600;">COMPLETE</span>, handleFileLoadedComplete
<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

</li>
<li>We instruct it to load the file in the application memory <br />&nbsp;

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">_arrUploadFiles<span style="color: #66cc66;">&#91;</span>_numCurrentUpload<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

</li>
<li>When the file is loaded into the memory <code>handleFileLoadedComplete</code> is triggered</li>
<li>After the file is loaded into the memory we can read the content of the file<br />&nbsp;

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> tmpFileContent:<span style="color: #0066CC;">String</span> = 
    fileRef.<span style="color: #0066CC;">data</span>.<span style="color: #006600;">readUTFBytes</span><span style="color: #66cc66;">&#40;</span>fileRef.<span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">length</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

</li>
<li>We call the upload web service<br />&nbsp;

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">myUploadService.<span style="color: #006600;">uploadFiles</span><span style="color: #66cc66;">&#40;</span>
    <span style="color: #66cc66;">&#123;</span>filedata:tmpFileContent, filename:fileRef.<span style="color: #0066CC;">name</span><span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

</li>
<li>The upload web service which is defined at the beginning with the <code><mx:RemoteObject></code> tag will trigger one of its event handlers:
<ul class="ul">
<li>result event if it is a success &#8211; <code>myUploadService_resultHandler</code></li>
<li>fault event if it is a failure &#8211; <code>myUploadService_faultHandler</code></li>
</ul>
</li>
<li>Result event will show in the list if the upload was successful with a green dot and the fault event will show that it has been an error and a failure with a red dot</li>
<li>The current file number is incremented and the process is started again with <code>startUpload()</code> method</li>
</ol>
<p>These are the steps taken for each file contained in a file reference object from _arrUploadFiles array collection.</p>
<p>You should notice that you need to use <code>readUTFBytes</code> method to get the content of the file and send them through the web service. Also you will be able to read the data of a file reference (<code>fileRef.data</code>) only after the files is loaded. This means that <code>load()</code> method must be called and the when the load is complete a complete event is triggered. After this the <code>fileRef.data</code> is available.</p>
<p>The main application code listing can be seen in the source archive. I will not put the whole code here because has lots of lines.</p>
<h2>About the custom list item renderer</h2>
<p>In order to display a feedback icon for each file we have to create a custom item renderer for our Spark list control. We tell the list that we are using a custom item renderer by specifying the item renderer attribute like bellow:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">itemRenderer=<span style="color: #ff0000;">&quot;com.flexer.CustomListItemRenderer&quot;</span></pre></div></div>

<p>We won’t go deep into the inner things of the custom component only just to specify that the icon is added at the end like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>s:BitmapImage id=<span style="color: #ff0000;">&quot;icon&quot;</span>
        source=<span style="color: #ff0000;">&quot;{data.ico}&quot;</span>
        verticalCenter=<span style="color: #ff0000;">&quot;0&quot;</span>
        <span style="color: #0066CC;">right</span>=<span style="color: #ff0000;">&quot;3&quot;</span> <span style="color: #66cc66;">/&gt;</span></pre></div></div>

<p>The image is taken from data object which is present in each item of the list, and is horizontally aligned at 3 pixels from right. You can see the whole component code bellow.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>s:ItemRenderer <span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;CustomListItemRenderer&quot;</span>
    xmlns:fx=<span style="color: #ff0000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span>
    xmlns:s=<span style="color: #ff0000;">&quot;library://ns.adobe.com/flex/spark&quot;</span>
    <span style="color: #0066CC;">focusEnabled</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #66cc66;">&gt;</span>
&nbsp;
    <span style="color: #66cc66;">&lt;</span>s:states<span style="color: #66cc66;">&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:State <span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;normal&quot;</span> <span style="color: #66cc66;">/&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:State <span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;hovered&quot;</span> <span style="color: #66cc66;">/&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:State <span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;selected&quot;</span> <span style="color: #66cc66;">/&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:State <span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;normalAndShowsCaret&quot;</span><span style="color: #66cc66;">/&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:State <span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;hoveredAndShowsCaret&quot;</span><span style="color: #66cc66;">/&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:State <span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;selectedAndShowsCaret&quot;</span><span style="color: #66cc66;">/&gt;</span>
    <span style="color: #66cc66;">&lt;/</span>s:states<span style="color: #66cc66;">&gt;</span>
&nbsp;
    <span style="color: #66cc66;">&lt;</span>fx:Script<span style="color: #66cc66;">&gt;</span>
        <span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
            override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> labelText<span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
                <span style="color: #0066CC;">super</span>.<span style="color: #006600;">labelText</span> = value;
                labelDisplay.<span style="color: #0066CC;">text</span> = labelText; 
            <span style="color: #66cc66;">&#125;</span>
        <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
    <span style="color: #66cc66;">&lt;/</span>fx:Script<span style="color: #66cc66;">&gt;</span>
&nbsp;
    <span style="color: #66cc66;">&lt;</span>s:Rect <span style="color: #0066CC;">left</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #0066CC;">right</span>=<span style="color: #ff0000;">&quot;0&quot;</span> top=<span style="color: #ff0000;">&quot;0&quot;</span> bottom=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #66cc66;">&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:stroke.<span style="color: #006600;">normalAndShowsCaret</span><span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>s:SolidColorStroke <span style="color: #0066CC;">color</span>=<span style="color: #ff0000;">&quot;{selectionColor}&quot;</span> weight=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #66cc66;">/&gt;</span>
        <span style="color: #66cc66;">&lt;/</span>s:stroke.<span style="color: #006600;">normalAndShowsCaret</span><span style="color: #66cc66;">&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:stroke.<span style="color: #006600;">hoveredAndShowsCaret</span><span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>s:SolidColorStroke <span style="color: #0066CC;">color</span>=<span style="color: #ff0000;">&quot;{selectionColor}&quot;</span> weight=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #66cc66;">/&gt;</span>
        <span style="color: #66cc66;">&lt;/</span>s:stroke.<span style="color: #006600;">hoveredAndShowsCaret</span><span style="color: #66cc66;">&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:stroke.<span style="color: #006600;">selectedAndShowsCaret</span><span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>s:SolidColorStroke <span style="color: #0066CC;">color</span>=<span style="color: #ff0000;">&quot;{selectionColor}&quot;</span> weight=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #66cc66;">/&gt;</span>
        <span style="color: #66cc66;">&lt;/</span>s:stroke.<span style="color: #006600;">selectedAndShowsCaret</span><span style="color: #66cc66;">&gt;</span>
        <span style="color: #66cc66;">&lt;</span>s:fill<span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>s:SolidColor <span style="color: #0066CC;">color</span>.<span style="color: #006600;">normal</span>=<span style="color: #ff0000;">&quot;{contentBackgroundColor}&quot;</span>
                <span style="color: #0066CC;">color</span>.<span style="color: #006600;">normalAndShowsCaret</span>=<span style="color: #ff0000;">&quot;{contentBackgroundColor}&quot;</span>
                <span style="color: #0066CC;">color</span>.<span style="color: #006600;">hovered</span>=<span style="color: #ff0000;">&quot;{rollOverColor}&quot;</span>    
                <span style="color: #0066CC;">color</span>.<span style="color: #006600;">hoveredAndShowsCaret</span>=<span style="color: #ff0000;">&quot;{rollOverColor}&quot;</span>
                <span style="color: #0066CC;">color</span>.<span style="color: #006600;">selected</span>=<span style="color: #ff0000;">&quot;{selectionColor}&quot;</span>
                <span style="color: #0066CC;">color</span>.<span style="color: #006600;">selectedAndShowsCaret</span>=<span style="color: #ff0000;">&quot;{selectionColor}&quot;</span> <span style="color: #66cc66;">/&gt;</span>
        <span style="color: #66cc66;">&lt;/</span>s:fill<span style="color: #66cc66;">&gt;</span>
    <span style="color: #66cc66;">&lt;/</span>s:Rect<span style="color: #66cc66;">&gt;</span>
&nbsp;
    <span style="color: #66cc66;">&lt;</span>s:SimpleText id=<span style="color: #ff0000;">&quot;labelDisplay&quot;</span>
        verticalCenter=<span style="color: #ff0000;">&quot;0&quot;</span>
        <span style="color: #0066CC;">left</span>=<span style="color: #ff0000;">&quot;3&quot;</span> <span style="color: #0066CC;">right</span>=<span style="color: #ff0000;">&quot;3&quot;</span> top=<span style="color: #ff0000;">&quot;6&quot;</span> bottom=<span style="color: #ff0000;">&quot;4&quot;</span><span style="color: #66cc66;">/&gt;</span>
    <span style="color: #66cc66;">&lt;!</span>-- our mini dot icon showing the state of the file --<span style="color: #66cc66;">&gt;</span>
    <span style="color: #66cc66;">&lt;</span>s:BitmapImage id=<span style="color: #ff0000;">&quot;icon&quot;</span>
        source=<span style="color: #ff0000;">&quot;{data.ico}&quot;</span>
        verticalCenter=<span style="color: #ff0000;">&quot;0&quot;</span>
        <span style="color: #0066CC;">right</span>=<span style="color: #ff0000;">&quot;3&quot;</span> <span style="color: #66cc66;">/&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;/</span>s:ItemRenderer<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>This icon is set from the main application where three dot icons are embedded.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source=<span style="color: #ff0000;">&quot;assets/bullet_empty.png&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _icoUploadNotStarted:<span style="color: #000000; font-weight: bold;">Class</span>;            
<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source=<span style="color: #ff0000;">&quot;assets/bullet_green.png&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _icoUploadSucces:<span style="color: #000000; font-weight: bold;">Class</span>;            
<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source=<span style="color: #ff0000;">&quot;assets/bullet_red.png&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _icoUploadFailed:<span style="color: #000000; font-weight: bold;">Class</span>;</pre></div></div>

<p><code>{data.ico}</code> contains the embedded icon.</p>
<h2>Conclusion</h2>
<p>AMF is a powerful data protocol and can be used for any kind of transfer. It has lots of advantages and is by far the most parsimonious protocol freely available. </p>
<p>Source files are available at the end of this article. Two zip archives and an fxp file exported from my Flash Builder 4 which contains also the php files (I used Flash Builder 4 with PDT and Zend Debugger).</p>
<h2>Resources</h2>
<p><a href="http://opensource.adobe.com/wiki/download/attachments/1114283/amf3_spec_05_05_08.pdf" target="_blank">http://opensource.adobe.com/wiki/download/attachments/1114283/amf3_spec_05_05_08.pdf</a><br />
<a href="http://www.amfphp.org/" target="_blank">http://www.amfphp.org/</a><br />
<a href="http://www.amfphp.org/docs2/index.html" target="_blank">http://www.amfphp.org/docs2/index.html</a><br />
<a href="http://framework.zend.com/manual/en/zend.amf.html" target="_blank">http://framework.zend.com/manual/en/zend.amf.html</a><br />
<a href="http://www.themidnightcoders.com/products/weborb-for-net/overview.html" target="_blank">http://www.themidnightcoders.com/products/weborb-for-net/overview.html</a><br />
<a href="http://www.themidnightcoders.com/products/weborb-for-rails/overview.html" target="_blank">http://www.themidnightcoders.com/products/weborb-for-rails/overview.html</a><br />
<a href="http://labs.adobe.com/technologies/flashbuilder4/" target="_blank">http://labs.adobe.com/technologies/flashbuilder4/</a><br />
<a href="http://en.wikipedia.org/wiki/Action_Message_Format" target="_blank">http://en.wikipedia.org/wiki/Action_Message_Format</a><br />
<a href="http://www.zend.com/en/products/server-ce/" target="_blank">http://www.zend.com/en/products/server-ce/</a><br />
<a href="http://www.apachefriends.org/en/xampp.html" target="_blank">http://www.apachefriends.org/en/xampp.html</a><br />
<a href="http://www.wampserver.com/en/download.php" target="_blank">http://www.wampserver.com/en/download.php</a><br />
<a href="http://sourceforge.net/project/showfiles.php?group_id=72483&#038;package_id=257933" target="_blank">http://sourceforge.net/project/showfiles.php?group_id=72483&#038;package_id=257933</a><br />
<a href="http://www.jamesward.com/census/" target="_blank">http://www.jamesward.com/census/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexer.info/2009/09/02/multiple-file-upload-using-amfphp/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>
