<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Mihai Corlan</title>
	
	<link>http://corlan.org</link>
	<description>Web, Mobile, and Rock&amp;Roll</description>
	<lastBuildDate>Mon, 30 Jan 2012 11:01:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/corlan" /><feedburner:info uri="corlan" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Announcing a series of web conferences organized by Adobe Romania</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/lO0JjeKTeMA/</link>
		<comments>http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 10:31:10 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3380</guid>
		<description><![CDATA[
			
				
			
		
On February 2nd we will host the first conference from a series of conferences about web technologies and development. Our presenter will be Vincent Hardy, principal scientist at Adobe Systems.

See you on February 2nd!
You can find more info about this conference and register here (the presentations will be in English).
PS. I am so happy to see this [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F16%2Fannouncing-a-series-of-web-conferences-organized-by-adobe-romania%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F16%2Fannouncing-a-series-of-web-conferences-organized-by-adobe-romania%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>On February 2nd we will host the first conference from a series of conferences about web technologies and development. Our presenter will be Vincent Hardy, principal scientist at Adobe Systems.</p>
<p><img class="alignnone size-full wp-image-3382" title="Adobe Developer Day -  Web Platform" src="http://corlan.org/wp-content/uploads/2012/01/add.png" alt="" width="450" height="155" /></p>
<p>See you on February 2nd!</p>
<p>You can find more info about this conference and register <a href="http://adobedeveloperday.eventbrite.com/">here</a> (the presentations will be in English).</p>
<p>PS. I am so happy to see this finally get started as I&#8217;ve been working on it for some time.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/lO0JjeKTeMA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=announcing-a-series-of-web-conferences-organized-by-adobe-romania</feedburner:origLink></item>
		<item>
		<title>Getting Started with PhoneGap resources</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/92an26ohwNM/</link>
		<comments>http://corlan.org/2012/01/13/getting-started-with-phonegap-resources/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 11:29:43 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3375</guid>
		<description><![CDATA[
			
				
			
		
If you want to learn how to use PhoneGap to build mobile applications with JavaScript and HTML, one good way is to watch this great series of nine videos. My fellow evangelist Kevin Hoyt spent some time in the studio for shooting and the result is great. It will take you less than a hour [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/13/getting-started-with-phonegap-resources/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F13%2Fgetting-started-with-phonegap-resources%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F13%2Fgetting-started-with-phonegap-resources%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you want to learn how to use PhoneGap to build mobile applications with JavaScript and HTML, one good way is to watch this great series of nine videos. My fellow evangelist <a href="http://blog.kevinhoyt.com/">Kevin Hoyt</a> spent some time in the studio for shooting and the result is great. It will take you less than a hour and a half to watch all the videos.</p>
<p>Here is the list:</p>
<p><span id="more-3375"></span></p>
<h3>1. Getting Started with PhoneGap</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11728/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>2. Developing for iOS</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11729/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>3. Developing for Android</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11730/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>4. Device API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11750/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>5. Accelerometer API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11745/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>6. Camera API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11746/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>7. Compass API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11747/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>8. Connection API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11748/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>9. Contacts API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11749/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/92an26ohwNM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/13/getting-started-with-phonegap-resources/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/13/getting-started-with-phonegap-resources/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=getting-started-with-phonegap-resources</feedburner:origLink></item>
		<item>
		<title>Debugging web pages remotely using a PlayBook tablet</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/Rt5B8unFu_8/</link>
		<comments>http://corlan.org/2012/01/12/debugging-web-pages-remotely-using-a-playbook-tablet/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 15:17:15 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3351</guid>
		<description><![CDATA[
			
				
			
		
In  a previous post I explained how you can use weinre to remotely &#8221;debug&#8221; web pages that run on your mobile devices. If you are familiar with weinre then you also know its biggest limitations: no JavaScript debug support and CSS styles introspection.
Now there is no need to be sad if you happen to have a [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/12/debugging-web-pages-remotely-using-a-playbook-tablet/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F12%2Fdebugging-web-pages-remotely-using-a-playbook-tablet%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F12%2Fdebugging-web-pages-remotely-using-a-playbook-tablet%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>In  a previous <a href="http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/">post</a> I explained how you can use weinre to remotely &#8221;debug&#8221; web pages that run on your mobile devices. If you are familiar with weinre then you also know its biggest limitations: no JavaScript debug support and CSS styles introspection.</p>
<p>Now there is no need to be sad if you happen to have a PlayBook device. If so, then you are back in business. What do I mean by that? I mean full access to Web Inspector/Developer Tools goodies while browsing web pages on the PlayBook tablet. Yes, including JavaScript debugging and CSS introspection.</p>
<p>A question or a doubt might pop in at this point &#8230; how this could this be possibly useful for developing web applications that run on mobile devices when Android and iOS devices have the greatest market share? Relax my friend, no need to lose your faith :D Because iOS, Android, and PlayBook default browsers are all based on WebKit. Although there are some differences between them I think they are close enough that you can get lots of value out of using the PlayBook device as the &#8220;debug&#8221; mobile platform. It also performs fine, at least today. I mean it is not too far off from the latest mobile phones or tablets.</p>
<p>So let me guide you through the steps you need to complete if you want to remotely debug web pages using a PlayBook.</p>
<p><span id="more-3351"></span></p>
<h3>1. Get a PlayBook</h3>
<p>The most important step is actually getting a device :D. You might be able to buy a used one for a good price. I think it is a good investment if you plan to (or  you already) do lots of mobile web development.</p>
<h3>2. Connect the PlayBook and your computer to the same WiFi network</h3>
<p>This is another important step. The PlayBook browser has Web Inspector support. While you can use it directly on the device I bet my 2 cents that it is far more convenient to use it on your computer. So this is the reason you need to connect them to the same network</p>
<h3>3. Enable Web Inspector on your PlayBook</h3>
<p>Set up a password for your PlayBook if you haven&#8217;t already set one (Settings &gt; Security &gt; Password). Then open the browser application and go to Settings. Select Privacy &amp; Security and then enable Web Inspector (it will ask for your password when enabling this option).</p>
<p><img class="alignnone size-full wp-image-3356" title="IMG_00000001" src="http://corlan.org/wp-content/uploads/2012/01/IMG_00000001.jpg" alt="" width="600" height="352" /></p>
<p>Once you enter the password a message window will give you the IP and port number of the PlayBook Web Inspector. Write down this info because you will need it.</p>
<p><img class="alignnone size-full wp-image-3355" title="IMG_00000002" src="http://corlan.org/wp-content/uploads/2012/01/IMG_00000002.jpg" alt="" width="600" height="352" /></p>
<h3>4. Load the page you want to debug/profile</h3>
<p>Now it is time to get serious. So open the web page you want to debug in the PlayBook browser. Please note that it is possible to open up a web page hosted on your computer web server (remember that the PlayBook and your computer are connected to the same network; so if you have a web server running on your computer you will be able to access it from your tablet).</p>
<h3>5. Start Web Inspector</h3>
<p>You can do this in two different ways. If you are a masochist you could use the Web Inspector on the PlayBook: open a new tab in your browser and type in this URL http://localhost:1337. You will see a page that has an entry for each opened tab in your browser (the URL must be opened after you enable Web Inspector in order to be listed). Here is an image to get an idea:</p>
<p><img class="alignnone size-full wp-image-3358" title="IMG_00000003" src="http://corlan.org/wp-content/uploads/2012/01/IMG_000000031.jpg" alt="" width="600" height="352" /></p>
<p>And here is the Web Inspector running for the first tab on my PlayBook on the PlayBook if you know what I mean:</p>
<p><img class="alignnone size-full wp-image-3359" title="IMG_00000004" src="http://corlan.org/wp-content/uploads/2012/01/IMG_00000004.jpg" alt="" width="600" height="352" /></p>
<p>But probably the sane way to do it is to run the Web Inspector remotely on your computer. So open a browser and type in the URL you got from Step 3. Once it is loaded you can select the tab you want to debug. And once you select the tab the Web Inspector should be displayed. From now onit is business as usual: you can access Elements, Resources, Scripts, Timeline, Profiles, Storage, Audits, and Console. You can debug the JavaScript code, audit the page for performance, and all sorts of magical things.</p>
<p>Here are screenshots with the Web Inspector running on my machine and the page I am debugging on the PlayBook. In the Web Inspector I selected a DIV element and you can see that the element was highlighted in the PlayBook browser.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/01/webinspector2.png"><img class="alignnone  wp-image-3361" title="webinspector2" src="http://corlan.org/wp-content/uploads/2012/01/webinspector2-300x167.png" alt="" width="600" /></a></p>
<p><img class="alignnone size-full wp-image-3360" title="IMG_00000005" src="http://corlan.org/wp-content/uploads/2012/01/IMG_00000005.jpg" alt="" width="600" height="352" /></p>
<p><strong>Word of warning:</strong> it might take a while for the Web Inspector to initialize on your machine. Be patient and don&#8217;t give up.</p>
<h2>Conclusions</h2>
<p>If you are not excited by this amazing workflow then there must be something wrong with you (or you are not a web developer and then it is OK :D). Again it might not be the perfect solution. I mean in a perfect world you&#8217;d have something similar for each mobile platform. Until then don&#8217;t whine too much and do your work with what you got!</p>
<p>Here is a screencast that takes you through the setup steps of the PlayBook Web Inspector and shows a simple debugging session. Enjoy!</p>
<p><iframe width="400" height="250" src="http://player.vimeo.com/video/34954294?title=0&amp;byline=0&amp;portrait=0" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe></p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/Rt5B8unFu_8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/12/debugging-web-pages-remotely-using-a-playbook-tablet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/12/debugging-web-pages-remotely-using-a-playbook-tablet/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=debugging-web-pages-remotely-using-a-playbook-tablet</feedburner:origLink></item>
		<item>
		<title>Canvas Quirks</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/7DqSjfU5yTc/</link>
		<comments>http://corlan.org/2012/01/12/canvas-quirks/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 10:30:00 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Canvas]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3330</guid>
		<description><![CDATA[
			
				
			
		
While using Canvas 2D context for drawing stuff I discovered that the drawing line API can surprise you a bit especially when drawing horizontal or vertical lines. Here is a screenshot with a Canvas element and 5 lines drawn using lineTo() calls:

In case you haven&#8217;t noticed, let me tell you what&#8217;s wrong with this: the [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/12/canvas-quirks/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F12%2Fcanvas-quirks%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F12%2Fcanvas-quirks%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>While using Canvas 2D context for drawing stuff I discovered that the drawing line API can surprise you a bit especially when drawing horizontal or vertical lines. Here is a screenshot with a Canvas element and 5 lines drawn using lineTo() calls:</p>
<p><img class="alignnone size-full wp-image-3335" title="canvas-1" src="http://corlan.org/wp-content/uploads/2012/01/canvas-1.png" alt="" width="487" height="312" /></p>
<p>In case you haven&#8217;t noticed, let me tell you what&#8217;s wrong with this: the lines are suposed to be 1 pixel width and black. Clearly what you see on the screen is not 1 pixel and the lines are somehow grayish. It looks more like 2 pixels. The code for drawing this looks like this:</p>
<pre class="brush: jscript; title: ; notranslate">

&lt;input onclick=&quot;draw()&quot; type=&quot;button&quot; value=&quot;draw&quot; /&gt;

&lt;script type=&quot;text/javascript&quot;&gt;// &lt;![CDATA[
function draw() {
    var context, i, y;

    context = document.getElementById('canvas').getContext('2d');
    y = 20;
    context.lineWidth = 1;
    context.strokeStyle = '#000000';
    for (i = 0; i &lt; 5; i++) {
       context.moveTo(0, y);
       context.lineTo(450, y);
       y += 10;
    }
    context.stroke();
}
// ]]&gt;&lt;/script&gt;
</pre>
<p>Let&#8217;s change the line width to 2 (line 10 in the above code snippet) and check the result:</p>
<p><img class="alignnone size-full wp-image-3340" title="canvas-2" src="http://corlan.org/wp-content/uploads/2012/01/canvas-2.png" alt="" width="487" height="316" /><br />
Interesting, isn&#8217;t it? So the lines width is basically the same, but the color now is really black. Now, let&#8217;s try something else: change the line width back to 1 and adjust the y property of the moveTo/lineTo functions with o.5 (line 13/14):</p>
<pre>context.moveTo(0, y + 0.5);
context.lineTo(450, y + 0.5);</pre>
<p>And surprise, surprise the lines are now exactly 1 pixel and black:</p>
<p><img class="alignnone size-full wp-image-3341" title="canvas-3" src="http://corlan.org/wp-content/uploads/2012/01/canvas-3.png" alt="" width="489" height="320" /></p>
<p>So what&#8217;s happening? After some research I think that this is what is happening:</p>
<ul>
<li>When you use integer coordinates like 10 or 15 the drawing algorithm is actually trying to draw a line in between two pixels (for example between the 9th and 10th pixels). As a result it will actually draw two lines.</li>
<li>I think the line is slightly lighter than the color set because of the antialiasing algorithm.</li>
<li>When you offset the coordinates by 0.5 then you &#8220;end&#8221; up with drawing the line exactly on one pixel.</li>
<li>If you draw a 1 pixel vertical line from (0,0) to (0,200) you will see that this time the line is exactly one pixel wide but the issue of lighter than defined color remains. As there is no other pixel to the left of the 0 pixel on the X axis on the screen you will see only one line.</li>
</ul>
<h2>Using fillRect() function instead of lineTo()</h2>
<p>If you don&#8217;t like adding those 0.5 to any coordinate when using the lineT0() API then you can actually use the drawing rectangle API. As you probably already guessed, the trick is to draw a rectangle of one pixel for one dimension and the length you need for the other one. So here is the script for drawing 5 horizontal lines:</p>
<pre class="brush: jscript; title: ; notranslate">
function draw() {
    var context, i, y;

    context = document.getElementById('canvas').getContext('2d');
    y = 20;

    for (i = 0; i &lt; 5; i++) {
       context.fillRect(0, 10 + y, 450, 1);
       y += 10;
    }
}
</pre>
<p>And here is the result:</p>
<p><img class="alignnone size-full wp-image-3348" title="canvas-4" src="http://corlan.org/wp-content/uploads/2012/01/canvas-4.png" alt="" width="490" height="319" /></p>
<p>If you are wondering about performance differences between lineTo() and fillRect() then you shouldn&#8217;t. fillRect() is probably even faster than lineTo().</p>
<p>You can see <a href="http://corlan.org/downloads/_html/canvas_quirks.html">here</a> a page that illustrates the differences between lineTo() and fillRect() when using integer coordinates.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/7DqSjfU5yTc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/12/canvas-quirks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/12/canvas-quirks/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=canvas-quirks</feedburner:origLink></item>
		<item>
		<title>Debugging Web Pages and PhoneGap apps on mobile devices</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/fr71xlJxSHQ/</link>
		<comments>http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 18:36:17 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3310</guid>
		<description><![CDATA[
			
				
			
		
If you are a web developer chances are that Google Chrome Developer Tools, Safari Web Inspector, or a Firefox equivalent are your best friends when it comes to debugging web pages (check CSS styles, verify generated HTML, or debug JavaScript). Isn&#8217;t that great? I mean not so long ago we used to debug JavaScript using [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F10%2Fdebugging-web-pages-and-phonegap-apps-on-mobile-devices%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F10%2Fdebugging-web-pages-and-phonegap-apps-on-mobile-devices%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you are a web developer chances are that Google Chrome Developer Tools, Safari Web Inspector, or a Firefox equivalent are your best friends when it comes to debugging web pages (check CSS styles, verify generated HTML, or debug JavaScript). Isn&#8217;t that great? I mean not so long ago we used to debug JavaScript using alert() calls.</p>
<p>Once you get used to these tools it is hard not to have them. And this is exactly what happens when you move to mobile web development. As you probably know there is no web inspector running on your iOS device browser.</p>
<p>How do you debug your web apps when running on mobile devices? The best answer to this question is using <a href="http://phonegap.github.com/weinre/Home.html">weinre</a> (if you know a better way, please let me know).</p>
<p><span id="more-3310"></span></p>
<h2>What is weinre?</h2>
<p>weinre is a remote Web Inspector that runs on your computer but it is connected to a browser (or a PhoneGap application) that is running on a mobile device. In terms of user interface it reuses the Web Inspector project at WebKit.</p>
<p>weinre consists of a debug server that runs on your computer and a user interface that also runs on your computer. The server component is able to communicate with the web page you are &#8220;debugging&#8221; (that typically runs on a mobile device) thanks to a JavaScript script that you have to inject in the page you want to debug (the script is served by the server component). And here comes the first thing you have to know: because of this architecture your mobile phone must be able to reach the server running on your computer (you can easily achieve this by connecting the computer and mobile device to the same WiFi network). If you are curious about how the web page running on the mobile device is able to communicate with the debug server, the answer is using XMLHttpRequest.</p>
<p>Finally, weinre is distributed either as a Java JAR file or as a Mac OS X application. This means that you can use this tool on a Windows, Mac OS X, or Linux machine.</p>
<h2>Are there any limitations?</h2>
<p>Unfortunately there are: you can&#8217;t debug the JavaScript code. This means you are not able to set breakpoints in your JavaScript code and introspect the variables. Unfortunate though this limitation might be, weinre is still incredibly useful because you can introspect the HTML code, see the Console output, execute JavaScript code in the console, get information about the XHR calls made by your page, and even select DOM elements.</p>
<h2>How can you use it?</h2>
<p>Here is a step-by-step list that explains how you can use weinre to &#8220;debug&#8221; a web page that is running on your mobile phone:</p>
<h3>1. Download the weinre debug server application</h3>
<p>First <a href="http://phonegap.github.com/weinre/Installing.html">download</a> the weinre application (this will be basically the debug server). I will use the Mac OS X application instead of the JAR file and I will point out what is different if you use the JAR file.</p>
<h3>2. Connect the computer and mobile device to the same WiFi network</h3>
<p>After you download the weinre file it is time to connect your computer and mobile device to the same WiFi network. Once the computer is connected, it is time to find out what IP address it is using. On my case the IP address is 42.1.2.250.</p>
<h3>3. Configure the weinre debug server application</h3>
<p>Now, it is time to configure the weinre debug server. Because I am using the Mac OS application, all I have to do is to create a server.properties file in the following location: ~/.weinre/server.properties</p>
<p>Next, open the server.properties file and add these two lines (for boundHost you have to introduce the IP address of your computer and for httpPort you can use any port number you want that doesn&#8217;t conflict with other web servers that might be running on your computer):</p>
<pre>boundHost: 42.1.2.250
httpPort:  8080</pre>
<p>Make sure you save the file.</p>
<p>If you use the JAR file, then you can set the options either using the server.properties file or adding them as options to the command line when invoking the JAR file.</p>
<h3>4. Start the weinre debug server</h3>
<p>For the Mac OS X app all you have to do is start the weinre application. If you use the JAR file then you should start the application using the command line.</p>
<h3>5. Inject the JavaScript file in the web page you want to debug</h3>
<p>With the debug server running it is time to inject the JavaScript file that makes all the parts to communicate. To do so, open the HTML page you want to &#8220;debug&#8221; and add this line:</p>
<pre>&lt;script src="http://42.1.2.250:8080/target/target-script-min.js#anonymous"&gt;&lt;/script&gt;</pre>
<p>Please note that the IP address and port number must match the values you set in the server.properties file. Make sure you save these changes.</p>
<h3>6. Make the web page available to your mobile phone</h3>
<p>Now, you are ready to debug the web page. However, in order to do this you have to load this page in the browser that runs on your mobile device. You will have to copy the web page and its dependencies to a web server running on your computer. In my case I&#8217;m running a MAMP instance on port 80. So what I&#8217;ve done is to copy the folder where I created the web page to the htdocs folder of the MAMP. Make sure the web server you want to use is running.</p>
<h3>7. Load the web page on your mobile device browser</h3>
<p>Open the browser on your mobile phone and load the page: http://42.1.2.250/weinre/index.html</p>
<p>Please note the IP address and port number must be your computer IP address and your web server port number (in my case I am running on the default port so there was no need to add it) and the rest of the URL must match the folder/file name you have.</p>
<h3>8. Debug the page</h3>
<p>Once your mobile browser loads the page, the weinre application should look like this:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/01/weinre-1.png"><img class="alignnone size-medium wp-image-3319" title="weinre-1" src="http://corlan.org/wp-content/uploads/2012/01/weinre-1-285x300.png" alt="" width="285" height="300" /></a></p>
<p>In the picture above Targets refers to the mobile device browser (so the IP address is your mobile device IP) and Clients refers to the debug client/server.</p>
<p>Here is a screenshot with the weinre application when the Elements tab is used and the console is opened too. You can see that the whole body element is selected. And in the console you can see some outputs. These were dysplayed once I hit the two buttons I have created in the web page.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/01/weinre-3.png"><img class="alignnone size-medium wp-image-3320" title="weinre-3" src="http://corlan.org/wp-content/uploads/2012/01/weinre-3-268x300.png" alt="" width="268" height="300" /></a></p>
<p>And here is a screenshot of the web page running on my Android phone. As you can see the body is selected &#8211; because in the weinre app the body element was selected.</p>
<p><img class="alignnone size-full wp-image-3321" title="weinre-2" src="http://corlan.org/wp-content/uploads/2012/01/weinre-2.png" alt="" width="600" height="350" /></p>
<p>Finally, the web page used in this example looks like this:</p>
<p>&lt;!DOCTYPE HTML&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta charset=&#8221;UTF-8&#8243;&gt;</p>
<p>&lt;title&gt;Testing&lt;/title&gt;<br />
&lt;script src=&#8221;http://42.1.2.250:8080/target/target-script-min.js#anonymous&#8221;&gt;&lt;/script&gt;<br />
&lt;script&gt;<br />
function clickBtn() {<br />
console.log(&#8216;clickBtn() was called!&#8217;);<br />
}<br />
function click2Btn() {<br />
console.log(&#8216;click2Btn() was called!&#8217;);<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body onLoad=&#8221;init()&#8221;&gt;<br />
&lt;h1&gt;A simple page&lt;/h1&gt;<br />
&lt;h2&gt;To test weinre &#8211; Web Inspector Remote&lt;/h2&gt;<br />
&lt;button onClick=&#8221;clickBtn()&#8221;&gt;Click Me&lt;/button&gt;<br />
&lt;br&gt;<br />
&lt;button onClick=&#8221;click2Btn()&#8221;&gt;Click Me Too&lt;/button&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>If you use the JAR file, then you should open on your computer this URL: http://42.1.2.250:8080/client/#anonymous. Again change the IP address and port number to what you configured for the weinre debug server. Here is a screenshot with the debugger client opened in my browser:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/01/weinre-4.png"><img class="alignnone size-medium wp-image-3323" title="weinre-4" src="http://corlan.org/wp-content/uploads/2012/01/weinre-4-300x295.png" alt="" width="300" height="295" /></a></p>
<p>For your convenience, I captured this workflow in a short screencast:</p>
<p><iframe width="400" height="225" src="http://player.vimeo.com/video/34847707?title=0&amp;byline=0&amp;portrait=0" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe></p>
<h2>Conclusions</h2>
<p>Although you don&#8217;t get all the features available in the desktop Web Inspector, weinre is still a formidable asset in any developer&#8217;s toolbox. I mean without this you would have to use alert() or some other ten times more time consuming technique. Recently I was working on a web mobile application and weinre came to my rescue on a number of occasions.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/fr71xlJxSHQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=debugging-web-pages-and-phonegap-apps-on-mobile-devices</feedburner:origLink></item>
		<item>
		<title>Happy New Year!</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/fkNRgdooNc8/</link>
		<comments>http://corlan.org/2012/01/04/happy-new-year-2/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 19:01:10 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3301</guid>
		<description><![CDATA[
			
				
			
		
I intended to write this post last month. But because the last two months were so busy, in the end I could find neither the time nor the energy to write. So here I go with my first post in 2012 that partially talks about 2011.
Speaking of the previous year, I&#8217;d like to extend a [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/04/happy-new-year-2/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F04%2Fhappy-new-year-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F04%2Fhappy-new-year-2%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I intended to write this post last month. But because the last two months were so busy, in the end I could find neither the time nor the energy to write. So here I go with my first post in 2012 that partially talks about 2011.</p>
<p>Speaking of the previous year, I&#8217;d like to extend a big thank you to all my readers and followers. Knowing that people will read your posts and send feedback is like fuel for engines. Next, I&#8217;d like to say thank you and applaud all the community leaders who worked so hard to organize events. I know firsthand the hard work needed to put together an event. You guys did an amazing job in 2011. I feel both proud and lucky being able to be part of some of the events you organized around the world.</p>
<p>People asked me what the highlights of 2011 were for me. Many things come to mind, but once I boiled them down they distilled  down to only two:</p>
<ol>
<li>Adobe AIR and Flex demonstrated that development for multiple mobile platforms can be both fun and efficient. Indeed, what started as a promise back in 2010 grew to an amazing platform in less than a year.</li>
<li>Adobe increased investment and effort in HTML/CSS/JavaScript. The last part of 2011 only accelerated a process that started long ago and produces things like: CSS Regions and Exclusions, CSS Shaders, Dreamweaver support for jQuery and PhoneGap, contributions to WebKit and jQuery Mobile. The PhoneGap and Typekit acquisitions cemented these trends and set up a perfect scene for more things to come moving forward.</li>
</ol>
<p>What about me (I know, I know it&#8217;s a bit too much :D)? Well, I couldn&#8217;t be happier to tell you the truth! I am still having the time of my life and enjoy every bit of my job :) I&#8217;ve been doing evangelism for almost four years and I&#8217;m looking forward to many more. However 2012 marks a change regarding what my focus will be: I will focus more and more on HTML, JavaScript, and CSS. And I have to confess that I&#8217;m excited. First, because this is how I started to make money programming years ago (HTML/JavaScript/CSS and server-side technologies). And second, I think Adobe is extremely well positioned on moving forward the web standards and HTML authoring/services tools.</p>
<p>What about Flex, AIR, and Flash Player? Despite what some people are saying I think they will be doing great. The runtimes are pushed harder and harder because Adobe wants to make the Flash Platform the game console of the web. This means that even if you are not in the gaming industry your Flash apps will benefit. What about Flex? I think the Flex framework is mature, it has a great community around it, and it is used for big enterprise projects and consumer apps. Having said that I think that the Flex framework will be relevant as long as the community wants it to be. Because if the community doesn&#8217;t believe in it and stops using it then it doesn&#8217;t matter what Adobe does and who&#8217;s behind it. I will surely keep an eye on what you guys will be doing :).</p>
<p>I wish you a Happy New Year!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/fkNRgdooNc8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/04/happy-new-year-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/04/happy-new-year-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=happy-new-year-2</feedburner:origLink></item>
		<item>
		<title>CoffeeScript or JavaScript?</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/gUUEwKAjLaI/</link>
		<comments>http://corlan.org/2011/12/11/coffeescript-or-javascript/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 14:25:41 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3292</guid>
		<description><![CDATA[
			
				
			
		
Recently I played with CoffeeScript a bit. Friends were talking about CoffeeScript and also I read couple of interesting blog posts. Based on my limited experience with it here is my understanding of what is cool and not so cool.
Cool:

It is much more compact than JavaScript. This translates to up to 1/3 less lines of code than [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/12/11/coffeescript-or-javascript/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F11%2Fcoffeescript-or-javascript%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F11%2Fcoffeescript-or-javascript%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Recently I played with <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> a bit. Friends were talking about CoffeeScript and also I read couple of interesting blog posts. Based on my limited experience with it here is my understanding of what is cool and not so cool.</p>
<p><strong>Cool:</strong></p>
<ol>
<li>It is much more compact than JavaScript. This translates to up to 1/3 less lines of code than the equivalent JavaScript</li>
<li>Offers the concept of classes &#8211; something that is familiar for people coming from the Java world</li>
<li>Insulates you from JavaScript pitfalls like global scope</li>
<li>Some times you can get a performance boost &#8211; hard to tell when and by how much</li>
<li>Some compile-time error checking, which helps you to write code with fewer bugs right off the bat</li>
</ol>
<p><strong>Not so cool:</strong></p>
<ol>
<li>Hard to debug. You have to debug the generated JavaScript code and from there you have to trace back to the CoffeeScript code</li>
<li>Writing less code can actually be something bad. Anyone remember Perl? And how hard it can be to read Perl code?</li>
<li>Adds another layer of abstraction on top of the browser stack. Adding to this jQuery or other frameworks and you can easily be in a situation where you can put together reasonably complex apps but you have no idea of what is happening under the hood nor how to fix a bug that originates from the frameworks you used</li>
<li>While I understand from why is done the way it was, I still think it would have been nice to have optional data typing</li>
</ol>
<p>Maybe not so surprisingly , I&#8217;ve seen people coming from OOP languages (Java or C#) that totally love CoffeeScript and this is their preferred way to write JavaScript apps.</p>
<p>As I said, I just played with it. So if I misunderstood something or completely missed a point please let me know.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/gUUEwKAjLaI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/12/11/coffeescript-or-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/12/11/coffeescript-or-javascript/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=coffeescript-or-javascript</feedburner:origLink></item>
		<item>
		<title>Tour de Flex is available for iPad now</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/UoHMvUq3Gss/</link>
		<comments>http://corlan.org/2011/12/09/tour-de-flex-is-available-for-ipad-now/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 08:06:04 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3283</guid>
		<description><![CDATA[
			
				
			
		
My colleagues from the Enterprise team were busy updating the Tour de Flex application to Flex 4.6 and they have published it to Android Market and the Apple App Store.

What&#8217;s cool about this project is that it is a three-in-one type of product: you can learn how to use Flex, you can experience the performance [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/12/09/tour-de-flex-is-available-for-ipad-now/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F09%2Ftour-de-flex-is-available-for-ipad-now%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F09%2Ftour-de-flex-is-available-for-ipad-now%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>My colleagues from the Enterprise team were busy updating the Tour de Flex application to Flex 4.6 and they have published it to Android Market and the Apple App Store.</p>
<p><img class="alignnone size-full wp-image-3284" title="tourflex" src="http://corlan.org/wp-content/uploads/2011/12/tourflex.png" alt="" width="599" height="262" /></p>
<p>What&#8217;s cool about this project is that it is a three-in-one type of product: you can learn how to use Flex, you can experience the performance of the Flex framework on mobile devices firsthand, and you can check the source code and learn how to build awesome mobile projects. <a href="http://flex.org/flexgame/">Here</a> is the project home page and you can get the source code from <a href="http://riagora.com/pvt_content/flexgame/FlexGame-source.fxp">here</a> (you&#8217;ll need <a href="http://www.adobe.com/go/try/flashbuilder">Flash Builder 4.6</a> to import the project).</p>
<p>And if you&#8217;re looking for the app on the stores search fom &#8220;Game of Flex&#8221; and not Tour de Flex!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/UoHMvUq3Gss" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/12/09/tour-de-flex-is-available-for-ipad-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/12/09/tour-de-flex-is-available-for-ipad-now/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tour-de-flex-is-available-for-ipad-now</feedburner:origLink></item>
		<item>
		<title>Steps to deploy a Flex and PHP application</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/J5w463JRA_E/</link>
		<comments>http://corlan.org/2011/12/09/steps-to-deploy-a-flex-and-php-application/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 07:57:02 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3281</guid>
		<description><![CDATA[
			
				
			
		
I&#8217;ve been receiving a number of emails on this topic lately. It seems there is little information out there about how to move from development to production with a Flex and PHP application. Here is a simple checklist that could help you, especially if you are doing this for the first time. Please note that [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/12/09/steps-to-deploy-a-flex-and-php-application/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F09%2Fsteps-to-deploy-a-flex-and-php-application%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F09%2Fsteps-to-deploy-a-flex-and-php-application%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve been receiving a number of emails on this topic lately. It seems there is little information out there about how to move from development to production with a Flex and PHP application. Here is a simple checklist that could help you, especially if you are doing this for the first time. Please note that I presume you used the Data Services (wizards) to connect the Flex client to PHP services.</p>
<ol>
<li>Make sure you have Zend Framework on your server. If you don&#8217;t, install it</li>
<li>Make sure you change MySQL credentials and server IP/name used by your PHP scripts to connect to the database</li>
<li>Copy the PHP services folder to your server. Then test these services. If they don&#8217;t work check the MySQL credentials or look for dependencies (maybe your PHP services use other PHP classes that you forgot to copy to your server)</li>
<li>Edit the amy_config.ini file and make sure the path to the Zend Framework is OK and set production to true</li>
<li>Edit the Flex services to point to your live server gateway.php. In the services folder of your Flex project you will find _Super_something.as files. In the constructor you will find a line like this:
<p><em> _serviceControl.endpoint = &#8220;http://localhost:10088/MobileFlexPHP-PHP/public/gateway.php&#8221;;</em><br /> Copy that line and then open the class that extends this _Super class and paste the line in the constructor. Then change the URL to reflect your server setup</li>
<li>Copy the bin-release/ folder to your server (you should choose the export release for your project; this will create a SWF file smaller than the debug version)</li>
</ol>
<p>That&#8217;s it! If I missed something please drop a comment!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/J5w463JRA_E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/12/09/steps-to-deploy-a-flex-and-php-application/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/12/09/steps-to-deploy-a-flex-and-php-application/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=steps-to-deploy-a-flex-and-php-application</feedburner:origLink></item>
		<item>
		<title>The future of the Flex framework</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/CbNMqo-Lye0/</link>
		<comments>http://corlan.org/2011/11/16/the-future-of-the-flex-framework/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 10:08:57 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3275</guid>
		<description><![CDATA[
			
				
			
		
As many of you probably know we made a few announcements last week that are quite interesting &#8211; let&#8217;s put it that way :). What made things even more interesting for Ryan and me is that we were right in the middle of the tour on mobile development (and we are still on tour for [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/11/16/the-future-of-the-flex-framework/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F16%2Fthe-future-of-the-flex-framework%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F16%2Fthe-future-of-the-flex-framework%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>As many of you probably know we made a few announcements last week that are quite interesting &#8211; let&#8217;s put it that way :). What made things even more interesting for Ryan and me is that we were right in the middle of the tour on mobile development (and we are still on tour for that matter). So we got your feedback first hand.</p>
<p>The good news is that last night the Flex team posted an update that adds more context and details about how Adobe plans to move Flex to Apache Software Foundation. And in short the essence of this update is that we still support Flex and Flash Builder; they won&#8217;t go away and we are not <em>killing</em> them. Here are some quotes from the post:</p>
<blockquote><p><strong>What specifically is Adobe proposing?</strong></p>
<p>We are preparing two proposals for incubating Flex SDK and BlazeDS at the Apache Software Foundation.</p>
<p>In addition to contributing the core Flex SDK (including automation and advanced data visualization components), Adobe also plans to donate the following:</p>
<ul>
<li>Complete, but yet-to-be-released, Spark components, including ViewStack, Accordion, DateField, DateChooser and an enhanced DataGrid.</li>
<li>BlazeDS, the server-based Java remoting and web messaging technology that enables developers to easily connect to back-end distributed data and push data in real-time to Flex applications.</li>
<li>Falcon, the next-generation MXML and ActionScript compiler that is currently under development (this will be contributed when complete in 2012)</li>
<li>Falcon JS, an experimental cross-compiler from MXML and ActionScript to HTML and JavaScript.</li>
<li>Flex testing tools, as used previously by Adobe, so as to ensure successful continued development of Flex with high quality</li>
</ul>
<p>Adobe will also have a team of Flex SDK engineers contributing to those new Apache projects as their full-time responsibility. Adobe has in-development work already started, including additional Spark-based components.<br />
<strong>Isn’t Adobe just abandoning Flex SDK and putting it out to Apache to die?</strong></p>
<p>Absolutely not – we are incredibly proud of what we’ve achieved with Flex and know that it will continue to provide significant value for many years to come. We expect active and on-going contributions from the Apache community. To be clear, Adobe plans on steadily contributing to the projects and we are working with the Flex community to make them contributors as well.</p></blockquote>
<p>You can read the whole post/update <a href="http://blogs.adobe.com/flex/2011/11/your-questions-about-flex.html">here</a>. And drop a comment if you have something to share!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/CbNMqo-Lye0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/11/16/the-future-of-the-flex-framework/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/11/16/the-future-of-the-flex-framework/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=the-future-of-the-flex-framework</feedburner:origLink></item>
		<item>
		<title>Adobe Touch Apps are available now</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/K5yRTpln_9s/</link>
		<comments>http://corlan.org/2011/11/16/adobe-touch-apps-are-available-now/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 09:43:11 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3271</guid>
		<description><![CDATA[
			
				
			
		
We just launched the Adobe Touch Apps part of the Adobe Cloud. You will find the six apps in the Android Market with one of them being available for iOS too (iOS versions will follow). Just as a quick reminder the six apps are: Collage, Debut, Ideas, Kuler, Photoshop Touch, and Proto.

I think this is [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/11/16/adobe-touch-apps-are-available-now/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F16%2Fadobe-touch-apps-are-available-now%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F16%2Fadobe-touch-apps-are-available-now%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We just launched the Adobe Touch Apps part of the Adobe Cloud. You will find the six apps in the Android Market with one of them being available for iOS too (iOS versions will follow). Just as a quick reminder the six apps are: Collage, Debut, Ideas, Kuler, Photoshop Touch, and Proto.</p>
<p><img class="alignnone size-full wp-image-3272" title="adtouch" src="http://corlan.org/wp-content/uploads/2011/11/adtouch.png" alt="" width="600" height="222" /></p>
<p>I think this is great because it was about time we had more apps for tablets that can be used to create digital content. So far developers and companies were extremely good at creating apps for consuming existing content on tablets. As I said many times it is a pity not to be able to create content on your tablet device. I think that with the Adobe Touch apps we are going in the right direction: you can start working on a prototype while you are commuting and all you have is your tablet. Once you get to your computer you can continue your work on the same file. And the synch process between your computer and tablets devices is transparent; it happens auto-magically.</p>
<p>You can read more about these apps <a href="http://www.adobe.com/products/touchapps.html">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/K5yRTpln_9s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/11/16/adobe-touch-apps-are-available-now/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/11/16/adobe-touch-apps-are-available-now/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-touch-apps-are-available-now</feedburner:origLink></item>
		<item>
		<title>Bucharest Flash Camp 2011</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/e0_Icts8iag/</link>
		<comments>http://corlan.org/2011/11/09/bucharest-flash-camp-2011/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 07:58:58 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3265</guid>
		<description><![CDATA[
			
				
			
		
This Friday we will host a Flash Camp in our Bucharest office. The event starts at 5:00 PM and will end at 8:00 PM. If you have questions about what was announced at MAX, if you want to find out what&#8217;s coming next, or if you want to learn how you can start mobile development with [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/11/09/bucharest-flash-camp-2011/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F09%2Fbucharest-flash-camp-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F09%2Fbucharest-flash-camp-2011%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>This Friday we will host a Flash Camp in our Bucharest office. The event starts at 5:00 PM and will end at 8:00 PM. If you have questions about what was announced at MAX, if you want to find out what&#8217;s coming next, or if you want to learn how you can start mobile development with our tools, runtimes, and frameworks then make plans to be there. There are still a few seats left so you can go <a href="http://www.eventbrite.com/myevent?eid=2406425684">here</a> and register.</p>
<p>This event is a premiere because for the first time I will have the pleasure of co-presenting  (a Romanian event) with one of my American teammates: <a href="http://blog.digitalbackcountry.com/">Ryan Stewart</a>. So that is another reason to be there :)</p>
<p>And finally, we will have a hands-on session on getting startet with mobile development with Flex, AIR, and Flash Builder. So if you never tried Flex mobile and you want to learn the basics then you have a third reason to be there.</p>
<p>See you Friday!</p>
<p><a href="http://www.eventbrite.com/myevent?eid=2406425684">Registration link</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/e0_Icts8iag" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/11/09/bucharest-flash-camp-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/11/09/bucharest-flash-camp-2011/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=bucharest-flash-camp-2011</feedburner:origLink></item>
		<item>
		<title>Flex Mobile European Tour 2011</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/JIHC9iBYvTY/</link>
		<comments>http://corlan.org/2011/10/27/flex-mobile-european-tour-2011/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 10:35:58 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3255</guid>
		<description><![CDATA[
			
				
			
		
With almost all the bits and pieces falling nicely in place I can finally blog about the European tour we&#8217;ve been working on. Before talking about content, dates, and locations let me say loud and clear &#8220;Thank you!&#8221; to the people in our community who worked hard to make these events possible and to Magda Neagu and [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/10/27/flex-mobile-european-tour-2011/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F27%2Fflex-mobile-european-tour-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F27%2Fflex-mobile-european-tour-2011%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>With almost all the bits and pieces falling nicely in place I can finally blog about the European tour we&#8217;ve been working on. Before talking about content, dates, and locations let me say loud and clear &#8220;Thank you!&#8221; to the people in our community who worked hard to make these events possible and to Magda Neagu and John Koch, my colleagues who gave us all the support we needed.</p>
<p>Why am I saying us instead of I? Because I have the pleasure of doing this tour together with my friend and fellow evangelist <a href="http://blog.digitalbackcountry.com/">Ryan Stewart</a>.</p>
<p>Here is the list:</p>
<ol>
<li>November 3rd &#8211; <a href="https://www.xing.com/events/mobile-flash-camp-wien-827635">Vienna</a> / Austria</li>
<li>November 4rd &#8211; <a href="http://flashcamprome.eventbrite.com/#en">Rome</a> / Italy</li>
<li>November 7th &#8211; <a href="http://mobileflextourlondon.eventbrite.com/">London</a> / UK</li>
<li>November 9th &#8211; <a href="http://fpug.org.ua/meeting/32">Kiev</a> / Ukraine</li>
<li>November 10th &#8211; <a href="http://flexlabs.groups.adobe.com/index.cfm?event=post.display&amp;postid=38975">Berlin</a> / Germany</li>
<li>November 11th &#8211; <a href="http://www.eventbrite.com/myevent?eid=2406425684">Bucharest</a> / Romania</li>
<li>November 14th &#8211; <a href="http://mobileflextourzurich.eventbrite.com/">Zurich</a> / Swiss</li>
<li>November 15th &#8211; <a href="http://www.meetup.com/augdublin/events/37088572/?a=ea1.2_lnm&amp;rv=ea1.2">Dublin</a> / Ireland</li>
<li>November 17th &#8211; Barcelona / Spain
<ol>
<li>We will do a session at <a href="http://bcndevcon.org/">Barcelona DevCon</a></li>
<li>We will have a meeting with the local Flex and Flash user group. I will update this post once I have the location and date</li>
</ol>
</li>
<li>November 19th &#8211; <a href="http://flashrdevday.eventbrite.com/">Zagreb</a> / Croatia</li>
</ol>
<p>If you want to attend one of these events make sure you register today because the number of seats is limited.</p>
<p>In terms of content, we will do a hands-on on mobile development with Flex, Adobe AIR, and Flash Builder. We will also have sessions about mobile development and some of the cool things we announced at MAX. And this will provide you with the perfect opportunity to throw questions at us. Actually let me re-phrase this: it will be the perfect opportunity to ask Mr. Ryan Stewart anything you want to know :).</p>
<p>Last but definitely not the least, if you have a cool project and you want to show it to us, please don&#8217;t be shy. Come to us after the event or during one of the breaks and we will listen to you. We always love seeing the great stuff you build and listening to your feedback. If you are reading my blog you know that from time to time I blog about cool apps and projects.</p>
<p>PS. If you plan to attend one of our hands-on sessions then you should have Flash Builder installed on your laptop. Also, if you have an Android phone you will be able to run all the examples on your device too (you will need a USB cable to connect the device to your laptop). Otherwise you can use the Flash Builder desktop simulator.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/JIHC9iBYvTY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/10/27/flex-mobile-european-tour-2011/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/10/27/flex-mobile-european-tour-2011/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flex-mobile-european-tour-2011</feedburner:origLink></item>
		<item>
		<title>CSS Regions running in Chrome 15</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/RA1Ueq9NGkw/</link>
		<comments>http://corlan.org/2011/10/27/css-regions-running-in-chrome-15/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 09:22:10 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3248</guid>
		<description><![CDATA[
			
				
			
		
The latest release of the Chrome browser (15 was launched last night) makes Chrome the first browser that offers support for the CSS Regions feature. This is really amazing as the story has been developing for a little bit more than a year: from the initial idea, to the first proof of concept, then working [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/10/27/css-regions-running-in-chrome-15/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F27%2Fcss-regions-running-in-chrome-15%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F27%2Fcss-regions-running-in-chrome-15%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>The latest release of the Chrome browser (15 was launched last night) makes Chrome the first browser that offers support for the <a href="http://www.adobe.com/devnet/html5/articles/css3-regions.html">CSS Regions feature</a>. This is really amazing as the story has been developing for a little bit more than a year: from the initial idea, to the first proof of concept, then working with the standards bodies and WebKit, and finally to Chrome 15.</p>
<p>If you have the latest Chrome on your machine (should work on both Windows and Mac OS) you should be able to test this <a href="http://corlan.org/downloads/simple_single_thread.html">page</a>. Just play with the size of your browser window and you should see how the text fills the three different columns.</p>
<p><img class="alignnone size-full wp-image-3249" title="cssreg1" src="http://corlan.org/wp-content/uploads/2011/10/cssreg1.png" alt="" width="523" height="516" /></p>
<p><img class="alignnone size-full wp-image-3250" title="cssreg2" src="http://corlan.org/wp-content/uploads/2011/10/cssreg2.png" alt="" width="600" height="321" /></p>
<p><strong>PS.</strong> Just talked to the Adobe engineers that work on this and they told me that there might be a small glitch with how the text flows sometimes. But this has been already been fixed in the main line. So probably the next update of the Chrome will pick up this change.</p>
<p><strong>Later Update:</strong> Peter Elst dropped me a message telling me that the CSS Regions examples we host on Adobe Labs don&#8217;t work in Chrome 15. This is true and normal at the same time. The examples we have there represent one of the first drafts of CSS Regions. Since then the syntax has changed. This is why I included <a href="http://corlan.org/downloads/simple_single_thread.html">a page for test </a>in my post.</p>
<p><strong>Later Update 2: </strong>Someone told me that Internet Explorer 10 already supports CSS Regions. This is true, but IE 10 is a pre-release version while Chrome 15 is a &#8220;production&#8221; ready release.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/RA1Ueq9NGkw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/10/27/css-regions-running-in-chrome-15/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/10/27/css-regions-running-in-chrome-15/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=css-regions-running-in-chrome-15</feedburner:origLink></item>
		<item>
		<title>Flash Player 11.2 Beta and Adobe AIR 3.2 Beta available on Adobe Labs</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/lmfWSwo6C_o/</link>
		<comments>http://corlan.org/2011/10/26/flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 19:46:25 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3244</guid>
		<description><![CDATA[
			
				
			
		
We just released Flash Player 11.2 Beta and Adobe AIR 3.2 Beta on Adobe Labs. The main features for this release are:
Multi-threaded video decoding (Windows, Mac OS, and Linux) — The video decoding pipeline is now fully multi-threaded. This feature should improve the overall performance on all platforms. Note that this feature is a significant architecture [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/10/26/flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F26%2Fflash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F26%2Fflash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We just released <a href="http://labs.adobe.com/technologies/flashplatformruntimes/flashplayer11-2/">Flash Player 11.2</a> Beta and <a href="http://labs.adobe.com/technologies/flashplatformruntimes/air3-2/">Adobe AIR 3.2</a> Beta on Adobe Labs. The main features for this release are:</p>
<blockquote><p><strong>Multi-threaded video decoding</strong> (Windows, Mac OS, and Linux) — The video decoding pipeline is now fully multi-threaded. This feature should improve the overall performance on all platforms. Note that this feature is a significant architecture change required for other future improvements.</p>
<p><strong>Flash Player background updates</strong> (Windows) — New versions of the runtimes can now be delivered more effectively to the end user with this enhanced updating mechanism (Background update is only available in the release versions of Flash Player).</p></blockquote>
<p>From the release notes some additional info on the multi-threaded video decoding feature:</p>
<blockquote><p>Multi-threaded pipeline was written grounds up to support lower end devices and full hardware stacks where all the decoding and rendering isoffloaded to hardware. The benefits of the modernization of the pipeline would be visible from mobile devices, tvs, netbooks to high end desktops.In Flash Player 11.2, the new video pipeline is available for desktop platforms (including netbooks ) and brings enhancements with respect to:</p>
<ul>
<li>Eliminating jitter seen occasionally in some encoding and typically in live streams and real time interactive scenarios.</li>
<li>Gains in frame rate by reducing dropped frames as much as 50% on certain platforms with high bit rate content.</li>
<li>Seek frame accuracy.</li>
<li>High resolution/bit rate content decoding would still keep the player UI responsive and any background ActionScript processing going,which earlier could have experienced brief halts because all the decoding and player UI/ActionScript resided on the main thread. For HTTP streaming, ActionScript is the control point of fetching the stream data and delivering to the video stack. On seek, earlier thestreaming would halt, while the frames up to the point of seek would be getting decoded. With multithreaded video decoding, not onlywould the seek be more responsive, but it would also start playback faster after seek.</li>
<li>50+ fixes as part of the modernization of the video pipeline architecture</li>
</ul>
</blockquote>
<p>Is this cool or what?</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/lmfWSwo6C_o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/10/26/flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/10/26/flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs</feedburner:origLink></item>
		<item>
		<title>Speaking at ZendCon 2011</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/O-KuAVTWC6w/</link>
		<comments>http://corlan.org/2011/10/17/speaking-at-zendcon-2011/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 07:00:30 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3240</guid>
		<description><![CDATA[
			
				
			
		
This week I&#8217;ll be at the ZendCon PHP Conference in Santa Clara. I will have a session on Flex and PHP mobile development for iOS, Android, and PlayBook on Thursday starting at 9:15 AM.
If you plan to attend this conference make sure you drop by to say hello. We will have a booth in the [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/10/17/speaking-at-zendcon-2011/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F17%2Fspeaking-at-zendcon-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F17%2Fspeaking-at-zendcon-2011%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>This week I&#8217;ll be at the ZendCon PHP Conference in Santa Clara. I will have a session on Flex and PHP mobile development for iOS, Android, and PlayBook on Thursday starting at 9:15 AM.</p>
<p>If you plan to attend this conference make sure you drop by to say hello. We will have a booth in the exposition area next to Zend&#8217;s booth.</p>
<p>I&#8217;m really excited to be part of this conference. First, it is my first PHP conference in the States &#8211; so far I&#8217;ve been speaking only at European conferences. And second, it has been a while since my last PHP conference. I think I will have a great time catching up with what the PHP community is doing these days. I already picked up some sessions that I&#8217;m sure will blow my mind :)</p>
<p>Now straight to the airport! A long trip awaits me!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/O-KuAVTWC6w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/10/17/speaking-at-zendcon-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/10/17/speaking-at-zendcon-2011/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=speaking-at-zendcon-2011</feedburner:origLink></item>
		<item>
		<title>About Adobe MAX 2011: Flash and HTML</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/67LMX2YNBlM/</link>
		<comments>http://corlan.org/2011/10/14/about-adobe-max-2011-flash-and-html/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 13:19:30 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3228</guid>
		<description><![CDATA[
			
				
			
		
MAX 2011 was the sixth MAX for me and I have to admit it was by far the most interesting to attend. Judging by the discussions I was involved in or I overheard while being at MAX, I think that this is a feeling many share.
Fellow evangelists Ryan Stewart, Mark Doherty, Greg Wilson, and Michael [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/10/14/about-adobe-max-2011-flash-and-html/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F14%2Fabout-adobe-max-2011-flash-and-html%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F14%2Fabout-adobe-max-2011-flash-and-html%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>MAX 2011 was the sixth MAX for me and I have to admit it was by far the most interesting to attend. Judging by the discussions I was involved in or I overheard while being at MAX, I think that this is a feeling many share.</p>
<p>Fellow evangelists <a href="http://blog.digitalbackcountry.com/2011/10/max-reflections/">Ryan Stewart</a>, <a href="http://www.flashmobileblog.com/2011/10/11/adobe-max-2011/">Mark Doherty</a>, <a href="http://gregsramblings.com/2011/10/06/how-phonegap-impacts-how-we-evangelize-flex/">Greg Wilson</a>, and <a href="http://www.riagora.com/2011/10/back-from-max-my-feelings/">Michael Chaize</a> already wrote about MAX so I won&#8217;t reiterate all of the news and announcements. However, I want to highlight some of the things I consider quite important.</p>
<h2>Adobe Touch Apps</h2>
<p>I&#8217;ve been <a href="http://corlan.org/2011/07/29/about-tablets-and-smartphones/">arguing</a> for a while that (1) tablets are not just bigger smartphones and (2) tablets could be used for more than just consuming digital content. So you can imagine how happy I was when I first heard about Adobe Touch Apps.</p>
<p><a href="http://www.adobe.com/products/touchapps.html">Adobe Touch Apps</a> is a suite of applications that works on tablets and enables you to create and share content:</p>
<ol>
<li><strong>Adobe Photoshop Touch</strong> &#8211; the name says all, doesn&#8217;t it? But make sure you check the video because you&#8217;ll be surprised by how powerful this app is.</li>
<li><strong>Adobe Ideas</strong> &#8211; a digital sketchbook for artists.</li>
<li><strong>Adobe Collage</strong> &#8211; create moodboards with ease. You can search for images, bring them into the app, and modify.</li>
<li><strong>Adobe Proto</strong> &#8211; this product has a good amount of magic. Using simple gestures you can create wireframes or interactive prototypes. In a matter of seconds you can add a header, a content area, a menu, pictures, and text</li>
<li><strong>Adobe Kuler</strong> &#8211; Kuler has been around for some time (2007 to be precise). It is the little app that helps you find colors that work together. There is a large community who adds new swatches. Once you find a theme you can easily customize the colors.</li>
<li><strong>Adobe Debut</strong> &#8211; helps you to share design/digital content created with Creative Suite anywhere right on your tablet.</li>
</ol>
<p>You can find <a href="http://tv.adobe.com/show/adobe-touch-apps/">here</a> a number of videos that show these apps in action.</p>
<p>As I said at the beginning of this section I&#8217;m glad to see apps for tablets that help people to create content on the go. However there is another thing that this suite is trying to address: <a href="http://corlan.org/2011/08/05/about-different-types-of-fragmentation/">device fragmentation</a>. But first, let me present you the high-level vision. We announced a new initiative called Adobe Creative Cloud. Adobe Touch Apps is part of the Adobe Creative Cloud along with other services (such as Adobe Digital Publishing, Business Catalyst, and Typekit) and products (such as Photoshop, InDesign, Illustrator, Edge).</p>
<p>And one of the many benefits of these offerings is the seamless cross device synchronization. In other words you can take a picture with your phone or tablet and then open up your desktop or laptop and you will find the picture there. The bits are moving magically from one device to another (well you do need a Internet connection for this :D).</p>
<p>Stay tuned and early November you will find Adobe Creative Cloud prices.</p>
<h2>HTML and Adobe</h2>
<p>We talked a lot about HTML at Adobe this year. I bet you couldn&#8217;t believe the acquisition announcements of Nitobi/PhoneGap and Typekit :) However this is only one part of what we are doing at Adobe for the HTML world. These add to work around jQuery Mobile (last year we announced that we will contribute to jQuery Mobile), tooling for HTML5 (the Edge project and Wallaby are just two examples of new initiatives that complete Dreamweaver CS5.5 support for HTML5/CSS3).</p>
<p>So as you can see the work Adobe is doing around HTML5 is pretty significant and has reached the point where people from outside Adobe or Adobe&#8217;s community recognize this.</p>
<p>One aspect that is fast growing is the work Adobe does in moving web standards forward. Let me step back and tell you a short story. Back in 2007, Adobe AIR (called Apollo back then) saw the lights for the first time. And from the beginning we wanted to build a new runtime that would appeal to all web developers. What technology did developers use for building amazing websites and applications? JavaScript and ActionScript. Thus Adobe AIR brought support for both technologies. And the JavaScript/HTML/CSS support was made possible by including the WebKit engine in the AIR runtime.</p>
<p>Of course, we had to extend the WebKit engine in order to have the same APIs/capabilities as we had in ActionScript. For example to have access to the hard disk, to write/read encrypted data, SQLite support, camera and microphone access, and so forth (does this sound familiar? :D).</p>
<p>By doing this, our engineers became experts in WebKit. Fast forward to 2010 and we announced the <a href="http://labs.adobe.com/technologies/cssregions/">CSS Regions</a> proposal. Our engineers provided an implementation for this feature for WebKit. And this year we have two Adobe engineers who obtained the <strong>WebKit committer status</strong>. This is something great and I am proud to say I&#8217;m a friend of these two guys. I hope to see them getting the WebKit reviewer status :).</p>
<p>As the work with CSS Regions was moving on nicely, Adobe engineers didn&#8217;t stop here. At MAX 2011 we showed a new CSS feature that we are working on called <a href="http://www.adobe.com/devnet/html5/articles/css-shaders.html">CSS Shaders</a>. Working with Apple and Opera we already submitted this <a href="https://dvcs.w3.org/hg/FXTF/raw-file/tip/custom/index.html">proposal</a> to W3C. Go <a href="http://www.adobe.com/devnet/html5/articles/css-shaders.html">here</a> and watch the videos.</p>
<p>I have to admit that first time Alex showed me this (he&#8217;s one of the two Adobe WebKit committers) in action I was sure it was just some Flash application. When he told me that it is, actually, a modified WebKit and some CSS and JavaScript I was speechless.</p>
<p>So yeah, I think it is safe to say that Adobe &#8220;gets&#8221; HTML and we have lots of proof for this. And I know more things will come in the near future so stay tuned.</p>
<h2>Flash Platform</h2>
<p>Despite what others might think, my personal belief is that the Flash platform had an amazing year in 2011. With AIR 3, I think we have one of the best solutions for building mobile apps across devices and operating systems. The Native Extension feature makes it possible to extend the runtime and have access to all the other APIs available on the device right from your ActionScript code. The upcoming version of Flex, 4.6, will extend the support for mobile components and improve the performance.</p>
<p>With Stage Video and Stage 3D (Stage 3D is available only on desktops for now) you can build amazing applications that can handle video, sound, and complex 3D content. So playing Unreal Tournament in a browser through Flash Player became a reality.</p>
<p>What about new stuff? Well, take a look at these two sessions about the future of Flash Player from MAX: <a href="http://tv.adobe.com/watch/max-2011-develop/flash-platform-roadmap-flex-flash-builder-flash-player-air/">Flash Platform roadmap</a> and <a href="http://tv.adobe.com/watch/max-2011-develop/whats-new-in-the-flex-sdk/">What&#8217;s new in the Flex SDK</a>. Workers (concurrency), a new Flex compiler, better tooling support (Flash Builder), and an amazing telemetry tool for profiling the release SWFs (<a href="http://t.co/hM9y4D67">Monocle</a>) are things we are working on.</p>
<h2>HTML and Flash</h2>
<p>Last week I had an interesting discussion with two community leaders in the airport (hey guys, I hope your trip back home was fine :) ). And they were asking me about the future of Flash and what Adobe will do (they are first and foremost Flash guys). The main reason for all these questions was how the keynotes were perceived.</p>
<p>Since then, I thought more on this and watched again the keynotes. My personal belief is that all the effort Adobe puts in both HTML and Flash will actually serve developers and designers independently of what their first choice is. <a href="http://inflagrantedelicto.memoryspiral.com/2011/10/adobe-max-2011-reflections/">Joseph Labrecque</a> has a good post on MAX 2011 and what some felt right there when everything was still hot.</p>
<p>Let me explain why. First, Adobe will be able to provide the best tools and frameworks for both technologies. If you are a developer or a business owner who uses Adobe technologies you&#8217;ll find easier to pitch your solutions. Clients would not see you as someone who only cares and knows only HTML or Flash. You&#8217;ll be able to propose the best technology for each project/client need. Definitely, this makes our life as Adobe evangelists much easier. Instead of being pushed into a defensive stance or fighting to be credible now we can just focus on the two sides of the stories.</p>
<p>Second, if you take a look at the history of Flash and how Flash relates to HTML it has already been about Flash doing stuff that wasn&#8217;t possible just with HTML. And the relation between these two was &#8220;AND&#8221; and not &#8220;OR&#8221;. &#8220;OR&#8221; implies that there can be only one choice. &#8220;And&#8221; means that they will co-exist. Some people after watching the keynotes they left with an &#8220;OR&#8221; in their hearts.</p>
<p>Third, if you are a guy who&#8217;s been building interactive content with the Flash platform then you are incredibly well positioned. Because you already know how to design and choreograph great content and apps. Without these skills all the JavaScript and HTML5 knowledge in the world can&#8217;t do much.</p>
<p>In reality for the foreseeable future the Flash platform will still be able to do things that are either impossible or more expensive with HTML. Certainly amazing 3D capabilities seems to be the main Flash usage. But let&#8217;s not forget about all the other goodies (improved Flex framework and Flash Builder, concurrency, and a faster compiler). These are things that will help developers who build interactive applications for desktop or mobile to be more efficient while building better apps than today.</p>
<h2>Conclusions</h2>
<p>I think 2012 will be an even more interesting year. Personally, I can&#8217;t wait. I&#8217;m so looking forward to see what people will build using AIR 3 and Native Extensions. I can&#8217;t wait for Stage 3D on mobile.</p>
<p>Second, yes you will be seeing us talking more and more about HTML and the things we are doing here at Adobe. Fellow evangelist Ryan Stewart already started working with PhoneGap. I&#8217;m doing the same. Actually, I hope to port one of my mobile apps to PhoneGap this month to better understand this platform.</p>
<p>At the same time, we are still working on the Flash side as hard as ever. Right now, I&#8217;m working with Ryan on the content for a European tour about Flex mobile development. We will hit about 9 different locations all over Europe. Once we have set up everything we will post all the details (by the way a big thank you to all the people from the community who are making this tour possible). So stay tuned and try to attend if you happen to be around of one of the locations.</p>
<p>Finally, I want to add that with each year I enjoy Adobe MAX more and more. It has to do with the feeling of family/community. There are thousands of people over there and from all over the world. And still you bump into someone who built something you knew or who read something your wrote or used/extended your code. This year I met people from South America, North America, and Europe. Actually there were lots of Europeans. To all of you, thank you for your time, and the friendly and insightful discussions. Looking forward to meeting you next year :)</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/67LMX2YNBlM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/10/14/about-adobe-max-2011-flash-and-html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/10/14/about-adobe-max-2011-flash-and-html/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=about-adobe-max-2011-flash-and-html</feedburner:origLink></item>
		<item>
		<title>Devices at MAX 2011</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/RwvUvJWMKoI/</link>
		<comments>http://corlan.org/2011/09/27/devices-at-max-2011/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 14:34:25 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3222</guid>
		<description><![CDATA[
			
				
			
		
Later this week Adobe MAX 2011 will be officially opened. Last week I blogged about some of the sessions and labs that will be focusing on mobile development. This week I wanted to highlight some sessions that are built around specific devices.
Adobe AIR and TVs (Samsung and LG)
Televisions are getting smarter and smarter. This means [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/09/27/devices-at-max-2011/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F27%2Fdevices-at-max-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F27%2Fdevices-at-max-2011%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Later this week Adobe MAX 2011 will be officially opened. <a href="http://corlan.org/2011/09/19/adobe-max-2011/">Last week</a> I blogged about some of the sessions and labs that will be focusing on mobile development. This week I wanted to highlight some sessions that are built around specific devices.</p>
<h2>Adobe AIR and TVs (Samsung and LG)</h2>
<p>Televisions are getting smarter and smarter. This means that you (individual developer or company/agency) have a great opportunity to build the killer apps people will want to buy or use on their latest generation TVs. If you want to find out more about what you can do and how, bookmark these sessions:</p>
<ul>
<li><strong><a href="http://bit.ly/qwAj0O">Creating Apps in 2D or 3D for the LG Cinema 3D and Smart TV Platform</a></strong> &#8211; Learn how you can unlock opportunities in the multibillion-dollar TV market by discovering how to create 2D and 3D apps for the largest screen in the home. Be the first to see a 3D app created for LG&#8217;s Cinema 3D Smart TV platform using Adobe AIR, and learn how the LG Smart TV developer program can allow you to capitalize on this rapidly growing market segment.</li>
<li><strong><a href="http://bit.ly/n4SOoV">Developing the Samsung Smart TV Application with Adobe AIR for TV</a></strong> &#8211; Join the Samsung team for an introduction to the Samsung Smart TV platform. Hear about how to make AIR for TV applications for Samsung Smart TV and how to deploy to Samsung Smart TV. Adobe AIR for TV 2.5 is available to developers on 2011 Samsung Smart TV models, and the Samsung TV application software development kit (SDK) integrates support for Adobe AIR for TV 2.5.</li>
</ul>
<h2>Sony Android Tablets</h2>
<p>Sony <a href="http://corlan.org/2011/07/13/adobe-air-app-challenge-for-sony-tablet/">announced</a> this summer two Android based tablets that will be shipped later on this year. This was a surprise for many as this marks the first time that Sony has built a tablet that uses Android. At MAX you can attend these two sessions:</p>
<ul>
<li><strong><a href="http://bit.ly/rgjN2N">Adobe AIR App Demo Showcase for Sony Tablet Devices</a></strong> &#8211; Watch live demos of innovative applications built by your peers that take advantage of the unique capabilities of the new Android Sony Tablet devices. Hear the developers talk about their experience using Adobe AIR to develop their apps for a single-screen and a dual-screen Sony Tablet. Learn more about Sony Tablet features and how you can win up to US$130,000 for your breakthrough app by entering the Adobe AIR App Challenge, sponsored by Sony (<a href="http://www.airappchallenge.com">www.airappchallenge.com</a>).</li>
<li><strong><a href="http://bit.ly/pRGobb">Optimizing your Adobe AIR app for Sony Android tablets</a></strong> &#8211; See live demos exploring the unique features in the new Sony Tablets and demonstrating how to develop your Adobe AIR app to display on both single- and dual-screen devices. Find out about exciting opportunities on Sony’s Android tablets, including the Adobe AIR App Challenge, sponsored by Sony (www.airappchallenge.com), which offers developers US$200,000 in cash prizes, premium promotion on Sony Tablet, prerelease tablet access, and more.</li>
</ul>
<h2>BlackBerry PlayBook</h2>
<p>To date, the PlayBook is one of my favorite tablets that money can buy. And one of the things that make this tablet special is that you have multiple ways to create your application, from HTML to ActionScript/Flex. Here are some related sessions:</p>
<ul>
<li><strong><a href="http://bit.ly/ndWww1">BlackBerry Webworks SDK for Tablet OS</a></strong> &#8211; Transform your existing web content into a fully featured standalone application for the BlackBerry PlayBook using the BlackBerry WebWorks SDK for Tablet OS. You&#8217;ll discover how to leverage supported technologies such as HTML5, CSS, JavaScript, and Adobe Flash to produce visually stunning, highly functional applications for PlayBook that can integrate with the underlying Tablet OS. Take away the skills and resources needed to create PlayBook applications using the WebWorks SDK.</li>
<li><strong><a href="http://bit.ly/qASe7j">Creating Amazing Video Experiences on the BlackBerry PlayBook Tablet</a></strong> &#8211; Learn how BlackBerry Tablet OS developers can leverage the rich multimedia capabilities of the BlackBerry platform to create compelling video experiences that attract users. Presenters will discuss video encoding strategies, streaming options, DRM support, output control, and media events. Topics covered include a video API overview, BlackBerry Tablet OS multimedia architecture, and video application demonstrations.</li>
</ul>
<h2>NOOK Color</h2>
<p>NOOk Color from Barnes &amp; Noble is one of the hot devices on the market &#8211; the content, distribution, Android OS, and demographics all make this device special. Well, if you live here in Europe not so much :D. At MAX you can learn more about this ecosystem:</p>
<ul>
<li><a href="http://bit.ly/mQqRgf"><strong>The App Opportunity with Barnes &amp; Noble</strong></a><strong> &#8211; </strong>Bring your rich content to the leading monetization platform for Android — NOOK Apps by Barnes &amp; Noble. This session will focus on the business opportunity, market demographics, and advantages of publishing Adobe Flash and AIR based apps for NOOK Color. Make sure to stop by the NOOK developer booth to attend one of our 50-minute workshops on development of NOOK apps and for a chance to win a NOOK Color.</li>
</ul>
<h2>Motorola</h2>
<p>If you ever developed a mobile application you know that building the app is just one of a long list of the check points you have to complete. And arguably it is the easiest to check too (thanks to Adobe AIR, Flex, and Flash Builder I&#8217;d say). One question I heard at many mobile events is related to application discoverability. At MAX you can learn about making your app more visible in Android Market and on Motorola smartphones and tablets:</p>
<ul>
<li><a href="http://bit.ly/q5XScF"><strong>Get Your App Discovered: Android Market and Beyond</strong></a> &#8211; Join Randy Ksar, Motorola Mobility Community Manager for MOTODEV, on best practices to get your app discovered in the marketplace. Randy will cover how to optimize your Android Market listing, utilize social media as a marketing and customer feedback tool, leverage testing to improve your customer ratings, and introduce new marketing opportunities to get your app featured on Motorola Mobility smartphones and tablets.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/corlan/~4/RwvUvJWMKoI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/09/27/devices-at-max-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/09/27/devices-at-max-2011/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=devices-at-max-2011</feedburner:origLink></item>
		<item>
		<title>Native Extensions examples available now</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/fTFTCp877fE/</link>
		<comments>http://corlan.org/2011/09/22/native-extensions-examples-available-now/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 14:46:37 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3218</guid>
		<description><![CDATA[
			
				
			
		
Among of the biggest news of the Adobe AIR 3 release  is the Native Extensions feature. If you want to get started with this, or maybe just try it, you should check out the Native Extensions page on Adobe Developer Connection.
There are five examples so far:

Gyroscope (iOS/Android)
NetworkInfo (iOS) &#8211; retrieves information about the network interfaces [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/09/22/native-extensions-examples-available-now/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F22%2Fnative-extensions-examples-available-now%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F22%2Fnative-extensions-examples-available-now%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Among of the biggest news of the Adobe AIR 3 release  is the <a href="http://www.adobe.com/devnet/air/articles/extending-air.html">Native Extensions</a> feature. If you want to get started with this, or maybe just try it, you should check out the Native Extensions <a href="http://www.adobe.com/devnet/air/native-extensions-for-air.html">page</a> on Adobe Developer Connection.</p>
<p>There are five examples so far:</p>
<ol>
<li><a href="http://www.adobe.com/devnet/air/native-extensions-for-air/extensions/gyroscope.html">Gyroscope</a> (iOS/Android)</li>
<li><a href="http://www.adobe.com/devnet/air/native-extensions-for-air/extensions/networkinfo.html">NetworkInfo</a> (iOS) &#8211; retrieves information about the network interfaces on an iOS device</li>
<li><a href="http://www.adobe.com/devnet/air/native-extensions-for-air/extensions/vibration.html">Vibration</a> (iOS/Android) &#8211; make the device vibrate</li>
<li><a href="http://custardbelly.com/blog/2011/09/21/air-native-extension-example-ibattery-for-ios/">iBattery</a> (iOS) &#8211; gets the battery status (unknown, unplugged, charging, or full) of an iOS device</li>
<li><a href="http://blog.magicalhobo.com/2011/09/12/air-3-native-extension-imageprocessor/">.NET Image Encoder</a> (Windows) &#8211; encodes a bitmap into BMP, JPEG, or PNG format using Microsoft .NET Framework 4</li>
</ol>
<p>The first three extensions were created by Adobe engineers, the last two by community. As I said before I&#8217;m looking forward to seeing many more extensions created and having a central place to go for all of them.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/fTFTCp877fE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/09/22/native-extensions-examples-available-now/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/09/22/native-extensions-examples-available-now/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=native-extensions-examples-available-now</feedburner:origLink></item>
		<item>
		<title>Flash Player 11 and AIR 3 to be released in early October</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/NqMcQBF4oP8/</link>
		<comments>http://corlan.org/2011/09/21/flash-player-11-and-air-3-to-be-released-in-early-october/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 08:38:08 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3206</guid>
		<description><![CDATA[
			
				
			
		
Today Adobe announced that the next version of our runtimes, Flash Player 11 and AIR 3, will be released in early October. This is great news for all developers who rely on the Flash Platform for building desktop and mobile applications.
Just a reminder about some of the coolest new features coming with these releases:

Stage 3D [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/09/21/flash-player-11-and-air-3-to-be-released-in-early-october/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F21%2Fflash-player-11-and-air-3-to-be-released-in-early-october%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F21%2Fflash-player-11-and-air-3-to-be-released-in-early-october%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Today Adobe <a href="http://blogs.adobe.com/flashplatform/2011/09/announcing-flash-player-11-and-air-3.html">announced</a> that the next version of our runtimes, Flash Player 11 and AIR 3, will be released in early October. This is great news for all developers who rely on the Flash Platform for building desktop and mobile applications.</p>
<p>Just a reminder about some of the coolest new features coming with these releases:</p>
<ul>
<li><a href="http://www.adobe.com/devnet/flashplayer/stage3d.html">Stage 3D</a> &#8211; a new architecture for hardware accelerated graphics rendering that delivers 1000x faster rendering performance over Flash Player 10. This will enable developers to create immersive experiences whether is about a first person 3D game or some 3D or 2D scenes.</li>
<li>Full native 64-bit support for Flash Player on Linux, Windows, and Mac OS.</li>
<li>Captive runtime for AIR. Developers will be able to package their AIR applications together with a specific version of the AIR runtime. This means that users won&#8217;t have to install the AIR runtime when installing your AIR application or you can protect &#8220;freeze&#8221; your application to a specific version of the runtime so you don&#8217;t have to worry about testing your app when a new runtime is out.</li>
<li><a href="http://www.adobe.com/devnet/air/articles/extending-air.html">Native extensions</a> for AIR on Android, iOS, and desktop. This feature enables developers to take advantage of existing native code libraries as well as deep native hardware and OS capabilities. Using this feature you can create extensions that give access to notifications or the contact address book for example.</li>
</ul>
<h2>Gaming</h2>
<p>If you&#8217;ve ever played games like <a href="http://machinarium.net/demo/">Machinarium</a> or <a href="http://www.adobe.com/cfusion/showcase/index.cfm?event=casestudydetail&amp;casestudyid=1468908&amp;loc=en_us">Tanki Online</a> you know that Flash Player is one of the best options out there for developers and companies who want to build online games. To help you getting the most out of the Flash Platform we created a gaming center: <a href="http://www.adobe.com/go/gaming">Adobe Gaming Solutions</a>.</p>
<p>We are also announcing the <a href="http://www.adobe.com/devnet/flashplayer/articles/introducing_Starling.html">Starling</a> framework: a lightweight framework for 2D graphics and animation that combines the simplicity of Flash with the power of the Stage 3D API. It is an open source ActionScript library. Watch this particle effect with Starling and Flash Player 11:</p>
<p><iframe src="http://player.vimeo.com/video/28568278?title=0&amp;byline=0&amp;portrait=0" frameborder="0" height="235" width="400"></iframe></p>
<p>Adobe will also soon make a 3D framework technology preview called Proscenium. This will allow developers using Flash Builder to rapidly prototype apps focused on simple content interaction and display, whether for simple games, visualization, or high-quality rendering of small object collections.</p>
<h2>Mobile Apps Support</h2>
<p>The Native Extensions feature is aimed at mobile developers. I believe that this feature was the &#8220;missing link&#8221; that stopped some people who otherwise would have chosen the Flash Platform.</p>
<p>Indeed being able to write native code to expose native hardware and OS features and APIs means that you can basically extend the AIR runtime from now on. So, instead of asking Adobe for support for notifications or the contact list API you can create or buy/reuse a native extension that does this.</p>
<p>I know many people are already working on a number of native extensions many of them taking care of some of the most popular developer requests. I hope we will have some kind of a market so people who want to build native extensions and those who want to consume them will be able to meet.</p>
<p>Finally, the Stage 3D API will come to mobile devices too. So this means it will be possible run even more incredible content on these devices.</p>
<h2>What about Flex and Flash Builder</h2>
<p>With the new version of the runtimes almost out it is only natural to ask this question: what about Flex and Flash Builder? Well, don&#8217;t worry because Flex 4.6 and Flash Builder 4.6 are coming this year too (and if you are a Flash Builder 4.5 customer you&#8217;ll get this version for free).</p>
<p>Flex 4.6 extends the mobile support introduced by Flex 4.5 by adding new components and better performance. Here are some of them:</p>
<p><strong>SplitViewNavigator</strong></p>
<p><img class="alignnone size-full wp-image-3209" title="spn1" src="http://corlan.org/wp-content/uploads/2011/09/spn1.png" alt="" width="300" height="186" /></p>
<p><strong>CallOutButton</strong></p>
<p><img class="alignnone size-full wp-image-3210" title="callout" src="http://corlan.org/wp-content/uploads/2011/09/callout.png" alt="" width="322" height="228" /></p>
<p><strong>SpinnerList</strong></p>
<p><img class="alignnone size-full wp-image-3211" title="spinnerlist" src="http://corlan.org/wp-content/uploads/2011/09/spinnerlist.png" alt="" width="284" height="182" /></p>
<p><strong>DateSpinner</strong></p>
<p><img class="alignnone size-full wp-image-3212" title="datespinner" src="http://corlan.org/wp-content/uploads/2011/09/datespinner.png" alt="" width="284" height="182" /></p>
<p><strong>Toggle Switch</strong></p>
<p><img class="alignnone size-full wp-image-3213" title="toggleswitch" src="http://corlan.org/wp-content/uploads/2011/09/toggleswitch.png" alt="" width="188" height="122" /></p>
<p>The other big news is the improved support for text input across devices. Flex will be using the native text input control on every platform. What does this mean for developers? It means you can customize the keyboard (having access to all supported keyboards; e.g. numeric keyboard or email keboard) and you have access to features like spell checking or cut/copy/paste.</p>
<p>In terms of performance, simply repackaging with Flash Builder and Flex 4.6 can boost your application performance up to 50%.</p>
<p>These releases will provide support for the latest operating systems like iOS 5 and the upcoming Android OS.</p>
<p>Also Flash Builder 4.6 will have support for monitoring network traffic and unit testing for mobile projects.</p>
<h2>Download</h2>
<p>You can <a href="http://labs.adobe.com/technologies/flashplatformruntimes/">download</a> the release candidates from Adobe Labs.</p>
<p>If you do the math, you&#8217;ll see that it has been almost three months from the previous updates of the runtimes, Flex, and Flash Builder. This is not much time, and yet the teams were able to add lots of new features. So I think they deserve a big round of applause! Well done guys!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/NqMcQBF4oP8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/09/21/flash-player-11-and-air-3-to-be-released-in-early-october/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/09/21/flash-player-11-and-air-3-to-be-released-in-early-october/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flash-player-11-and-air-3-to-be-released-in-early-october</feedburner:origLink></item>
		<item>
		<title>Adobe MAX 2011</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/fCn_pwgS56Y/</link>
		<comments>http://corlan.org/2011/09/19/adobe-max-2011/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 15:19:36 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3197</guid>
		<description><![CDATA[
			
				
			
		
Adobe MAX 2011 is just around the corner. Every year I feel the same: how fast the last year has passed! I guess I have a better feeling of how the time is passing by counting the MAXs :D

Anyway let&#8217;s get back to the event itself. There are many reasons for wanting to attend Adobe [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/09/19/adobe-max-2011/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F19%2Fadobe-max-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F19%2Fadobe-max-2011%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://max.adobe.com/">Adobe MAX 2011</a> is just around the corner. Every year I feel the same: how fast the last year has passed! I guess I have a better feeling of how the time is passing by counting the MAXs :D</p>
<p><img class="alignnone size-full wp-image-3201" src="http://corlan.org/wp-content/uploads/2011/09/max_online_810x222.jpg" alt="" width="600" height="164" /></p>
<p>Anyway let&#8217;s get back to the event itself. There are many reasons for wanting to attend Adobe MAX (learning new products and technologies, staying in touch with the latest and greatest, and networking just to name few) but if you plan to start mobile development or to learn new tricks then here is a list I put together.</p>
<p><img class="alignnone size-full wp-image-3202" src="http://corlan.org/wp-content/uploads/2011/09/max_community_pavilion_810x222.jpg" alt="" width="600" height="164" /></p>
<p><strong>Beginner</strong></p>
<ul>
<li><strong>Getting Started with ActionScript 3.0 </strong>(Lab on Monday, October 3, 2:45 p.m. &#8211; 4:15 p.m.). If you are new to Flash Platform mobile development then this lab will help you learn ActionScript 3.0 the language used for creating Flash applications including those running on mobile and tablets.</li>
<li><strong>Introduction to Flex</strong> (Lab on Monday, October 3, 2:45 p.m. &#8211; 4:15 p.m. and Tuesday, October 4, 8:00 a.m. &#8211; 9:30 a.m.). If you are new to the Flash Platform, then understanding how the open source Flex framework works will help you a lot.</li>
<li><strong>Flex Mobile Boot Camp</strong> (Lab on Monday, October 3, 2:45 p.m. &#8211; 6:45 p.m. and Tuesday, October 4, 12:30 p.m. &#8211; 4:30 p.m.). This boot camp will teach you the basics of Flex and Flash Builder mobile features.</li>
<li><strong>Developing High-Performance 2D Mobile Games with Adobe AIR</strong> (Lab on Monday, October 3, 12:45 p.m. &#8211; 2:15 p.m. and Tuesday, October 4, 3:00 p.m. &#8211; 4:30 p.m.). If gaming is your poison and you are new to our platform then this lab is for you.</li>
</ul>
<p><strong>Intermediate / Advanced</strong></p>
<ul>
<li><strong>Flash Professional CS5.5 for Mobile &#8211; Android and iOS</strong> (Lab on Monday, October 3, 2:45 p.m. &#8211; 4:15 p.m.).</li>
<li><strong>Building a Flex Application for Tablets</strong> (Lab on Monday, October 3, 2:45 p.m. &#8211; 4:15 p.m., Wednesday, October 5, 8:30 a.m. &#8211; 10:00 a.m., and Wednesday, October 5, 11:00 a.m. &#8211; 12:30 p.m.). In this hands-on session you will build a complete Flex app for tablets starting from scratch.</li>
<li><strong>Advanced Mobile Application Development</strong> (Lab on Monday, October 3, 5:00 p.m. &#8211; 6:30 p.m. and Wednesday, October 5, 1:30 p.m. &#8211; 3:00 p.m.). This lab is presented by the guys behind Conqu &#8211; one of the best task management apps for iOS, Android, and PlayBook built with AIR, Flex, and Flash Builder. So you will get a chance to learn from the best.</li>
<li><strong>Developing an iOS Application with Flex and Adobe AIR</strong> (Lab on Tuesday, October 4, 12:30 p.m. &#8211; 2:00 p.m., Wednesday, October 5, 1:30 p.m. &#8211; 3:00 p.m., and Wednesday, October 5, 4:00 p.m. &#8211; 5:30 p.m.).This 90-minute lab will cover how to create and simulate an iPad  application in Flash Builder, and will walk you through the steps of  creating and deploying IPAs onto your personal devices.”</li>
<li><strong>Deep dive into Molehill (Stage 3D)</strong> (Session on Monday, October 3, 5:00 p.m. &#8211; 6:00 p.m.). Although this feature is not yet available for mobile it will be soon. If you plan to do advanced 3D stuff then you shouldn&#8217;t miss this one.</li>
<li><strong>Flash gaming deep dive</strong> (Lab on Sunday, October 2, 9:00 a.m. &#8211; 5:00 p.m.). You will learn the ins and outs of creating games using popular game frameworks like Flixel and PushButton Engine. You&#8217;ll also discover how to use Molehill to create stunning 3D for games, and we&#8217;ll show you how to use advanced techniques such as blitting to help with performance.</li>
<li><strong>Programming a 3D First-Person Shooter Game in Flash</strong> (Session on Tuesday, October 4, 8:30 a.m. &#8211; 9:30 a.m.). Learn more about how to build the next generation of action games with the new Flash Stage 3D API. This session will cover the key steps  required to create advanced first-person shooter gameplay, such as  creating a scene and adding a person, movement, shooting, camera  following, animations, and more, all in the context of 3D.</li>
<li><strong>Mobile Apps from 0 to 90: Powered by ColdFusion</strong> (Lab on Tuesday, October 4, 8:00 a.m. &#8211; 9:30 a.m.). This intermediate hands-on is all about building mobile apps that consume ColdFusion data.</li>
<li><strong>Unit Testing ActionScript and Flex</strong> (Lab on Monday, October 3, 12:45 p.m. &#8211; 2:15 p.m., Tuesday, October 4, 8:00 a.m. &#8211; 9:30 a.m., Tuesday, October 4, 12:30 p.m. &#8211; 2:00 p.m., and Wednesday, October 5, 4:00 p.m. &#8211; 5:30 p.m.). No matter how ninja you are (or you think you are) bugs are to be found everywhere. Join this lab to learn about unit testing for ActionScript and Flex.</li>
</ul>
<p>I want to call out these sessions:</p>
<ul>
<li><strong>Design to Release: Building a multiscreen mobile application</strong> (Session on Tuesday, October 4, 8:30 a.m. &#8211; 9:30 a.m.) presented by Renaun Erickson.</li>
<li><strong>Adobe AIR App Demo Showcase for Sony Tablet Devices</strong> (Session on Tuesday, October 4, 1:00 p.m. &#8211; 2:00 p.m.) presented by Ryan Stewart and Taichi Takayanagi. Watch live demos of innovative applications built by your peers that  take advantage of the unique capabilities of the new Android Sony Tablet  devices.</li>
<li><strong>Deploying Flash Professional Content Across Screens</strong> (Session on Wednesday, October 5, 1:30 p.m. – 2:30 p.m.) presented by Paul Trani. Discover specific workflow enhancements available in Adobe Flash  Professional CS5.5. This session steps through the process of deploying  Flash Professional content on mobile platforms, including Android,  BlackBerry, and iOS.</li>
</ul>
<p>My team has been working lately on a number of mobile applications so we have lots of experience earned first-hand. I encourage you to attend Renaun&#8217;s, Ryan&#8217;s, and Paul&#8217;s sessions.</p>
<p>See you there and don&#8217;t forget you&#8217;ll be able to watch the <a href="http://max.adobe.com/news/2011/view-max-keynotes-online.html">keynotes</a> online if you don&#8217;t plan to attend the event in person. Let&#8217;s rock the house once again!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/fCn_pwgS56Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/09/19/adobe-max-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/09/19/adobe-max-2011/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-max-2011</feedburner:origLink></item>
		<item>
		<title>About Flash Mobile Versatility</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/35Na3br-trM/</link>
		<comments>http://corlan.org/2011/09/19/about-flash-mobile-versatility/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 12:48:06 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3191</guid>
		<description><![CDATA[
			
				
			
		
The Flash Platform as a compelling mobile solution across devices is enjoying an excellent momentum. I&#8217;m getting and seeing more and more Flash powered mobile apps. While this is interesting and cool this not what I want to focus on in this post.
Most people think about the Flash Platform for mobile as something that enables [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/09/19/about-flash-mobile-versatility/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F19%2Fabout-flash-mobile-versatility%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F09%2F19%2Fabout-flash-mobile-versatility%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>The Flash Platform as a compelling mobile solution across devices is enjoying an excellent momentum. I&#8217;m getting and seeing more and more Flash powered mobile apps. While this is interesting and cool this not what I want to focus on in this post.</p>
<p>Most people think about the Flash Platform for mobile as something that enables developers to build mobile apps for Android, iOS, and BlackBerry Tablet OS. What it is not so evident is it&#8217;s versatility: you can build almost whatever you want. And when I say this I mean it. You can build sophisticated games (and soon you will be able to build cool 3D games thanks to Stage3D), you can build beautiful apps for enterprise or consumer brands, you can build high performance apps for consumers, and the list can go on and on.</p>
<p>The last big thing that was a show stopper for some projects is about to be removed by the <a href="http://www.adobe.com/devnet/air/articles/extending-air.html">Native Extensions</a> feature. This feature (it will be available in the soon-to-be-released next version of Adobe AIR) will enable developers to extend the runtime and achieve deeper integration with the device by accessing device/OS capabilities or other applications.</p>
<p>Let me give you just one example. Three applications that are quite different in what needs they solve while working and looking just great.</p>
<p><strong><a href="http://www.smallscreendesign.com/cassandra/iPad.html">Cassandra Stand</a></strong> is a companion application for Android, iOS, and PlayBook devices. It picks  your location automatically and displays time/date, temperature, and news. While this app is a simple one it works and looks great. Congratulations to Leonardo Risuleo and the team.</p>
<p><img class="size-full wp-image-3187" title="Cassandra Stand" src="http://corlan.org/wp-content/uploads/2011/09/cassandra.jpg" alt="" width="480" height="320" /></p>
<p><a href="http://appworld.blackberry.com/webstore/content/54471?lang=en"><strong>Web Reader</strong></a> is probably one of the best PlayBook apps for those who use RSS readers. It is fast and intuitive and it works great with Google Reader. I&#8217;d love to see these guys writing an article about how they built their app. As with the previous two apps I installed the app on my tablet and played with it. My RSS list is pretty big and I was curious about how they will display all the categories and how easy would be to navigate between the various items. All I can say is that they did a good job :)<br />
<img class="size-full wp-image-3189" title="Web Reader" src="http://corlan.org/wp-content/uploads/2011/09/webreader1.png" alt="" width="473" height="277" /></p>
<p><strong><a href="http://www.mushroom-games.com/">Hungry Cho-Cho</a></strong> is a funny little game for iOS. Tomer Reiss of KWAZI shown me this app during my visit to Israel earlier this year. It worked just great on my iPod Touch (at that time they were using AIR 2.5; I&#8217;m curious how it would feel with AIR 2.7 as this release brought more speed and performance especially for iOS devices). They released their application and he wrote a <a href="http://blog.kwazi.co.il/mobile-app-development/developing-efficient-adboe-air-flash-games-for-ios-or-%E2%80%9Cthe-secrets-behind-hungry-choo-choo%E2%80%9D/">blog post</a> about some of the things he learned while developing the game.<br />
<img class="size-full wp-image-3190" title="hungry choo choo" src="http://corlan.org/wp-content/uploads/2011/09/hungrychoochoo.jpg" alt="" width="480" height="320" /></p>
<p>If you created some cool mobile apps using the Flash Platform, you know how you can get in touch with me. I&#8217;m out!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/35Na3br-trM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/09/19/about-flash-mobile-versatility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/09/19/about-flash-mobile-versatility/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=about-flash-mobile-versatility</feedburner:origLink></item>
		<item>
		<title>Building an iPad game with Adobe AIR in a week</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/Vh5qrKUgd7Q/</link>
		<comments>http://corlan.org/2011/08/30/building-an-ipad-game-with-adobe-air-in-a-week/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 12:29:42 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3173</guid>
		<description><![CDATA[
			
				
			
		
Radu Ticiu of Timisoara Mobile Development Group invited me to speak at their August event about Adobe&#8217;s solutions for mobile development. And I must say I&#8217;m glad I accepted. Not only because the event and the people were great but because the other speaker was quite interesting.
Stefan is his name and he runs one of [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/30/building-an-ipad-game-with-adobe-air-in-a-week/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F30%2Fbuilding-an-ipad-game-with-adobe-air-in-a-week%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F30%2Fbuilding-an-ipad-game-with-adobe-air-in-a-week%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Radu Ticiu of <a href="http://www.meetup.com/TiMoDev/">Timisoara Mobile Development Group</a> invited me to speak at their August event about Adobe&#8217;s solutions for mobile development. And I must say I&#8217;m glad I accepted. Not only because the event and the people were great but because the other speaker was quite interesting.</p>
<p>Stefan is his name and he runs one of the most creative <a href="http://wearex3.com/">companies</a> in this part of the world. Just to give you some context: they&#8217;ve won three <a href="http://www.thefwa.com/">FWA</a> awards so far. His presentation was about the making off of an iPad game using Adobe AIR and Flash Builder 4.5. So far nothing new or extraordinary. isn&#8217;t it?</p>
<p>Well what really caught my attention were these facts:</p>
<ul>
<li>While they had great expertise in building Flash applications for the desktop, this was the first project they&#8217;ve done for mobile.</li>
<li>They completed the game from concept to final IPA file ready for publishing in a week.</li>
<li>The team who built this consisted of one designer, one developer, and Stefan.</li>
</ul>
<p><span id="more-3173"></span></p>
<p>Here are some screen shots of their game &#8211; called <a href="http://itunes.apple.com/ro/app/chemistry-brothers/id451480299?mt=8">Chemistry Brothers</a>:</p>
<p><img class="alignnone size-full wp-image-3174" title="chemistry-brothers-1" src="http://corlan.org/wp-content/uploads/2011/08/chemistry-brothers-1.jpg" alt="" width="480" height="360" /></p>
<p><img class="alignnone size-full wp-image-3175" title="chemistry-brothers-2" src="http://corlan.org/wp-content/uploads/2011/08/chemistry-brothers-2.jpg" alt="" width="480" height="360" /></p>
<p>During the presentation (and after while we enjoyed some beer and food) I learned more about this project and the company. And I think this project and the way they approached it is a good example of how you can get into mobile development if you are a web or desktop developer.</p>
<p>These were Stefan&#8217;s challenges before deciding to start the project:</p>
<ul>
<li>no expertise in mobile development</li>
<li>no expertise in Flash and AIR mobile development</li>
<li>no expertise in selling an application on Apple&#8217;s app store</li>
</ul>
<p>Though these challenges were quite big he had something to rely on:</p>
<ul>
<li>tons of creativity</li>
<li>great expertise in desktop and web development including Flash and Adobe AIR</li>
<li>a plan</li>
</ul>
<p>The plan he had was as important as the skills of his team. First of all, he decided to spend a week for building the game, from nothing to the polished &#8220;thing&#8221; you can find in app store. It was an all-or-nothing kind of bet. And to increase the chances of success he took his team out of the town to a remote town with nothing to distract them. They did a sort of software bootcamp.</p>
<p>Second, from the beginning he didn&#8217;t want to have anything less than great performances. To ensure this they used a first generation iPad for testing the code and they targeted 30 frames per second for their game. Anything less was not accepted.</p>
<p>Third, they struck a fine balance between the &#8220;features&#8221; of this game. They spent a lot of time on the graphics and game story but they didn&#8217;t spend much time on building lots of levels. It would have been impossible to do all those things with such restrictions (three people and one week).</p>
<p>And finally, they did a kind of agile development not for the code but for the product (game). Remember that I said they didn&#8217;t have any prior experience in building and selling mobile applications. So their plan was to build the game in one week and then ship it. If it had success then they would continue to develop as they already had the game story and lots of ideas. Guess what? They are happy with how the game is selling so far. Stefan told me that they will continue this project.</p>
<p>If you are one of the people who couldn&#8217;t find time for trying mobile development so far you are not alone. And more importantly, it is not so difficult to make your first move. Just think of an application that you&#8217;d like to build and make sure you allocate time for this. It could be a series of weekends during a month or three days of your vacation. It really doesn&#8217;t matter. What matters is to be focused and work on this fully committed. Chances are that you&#8217;d be surprised by yourself and what you can do.</p>
<p>In the end I just want to share some pictures from their office. Some say that having a creative environment stimulates creativity. After talking to Stefan and seeing his company&#8217;s work I&#8217;m not sure about this anymore. It looks like creative people change ordinary things into something to remember.</p>
<div id="attachment_3176" class="wp-caption alignnone" style="width: 600px"><img class="size-full wp-image-3176" title="A wall built out of books" src="http://corlan.org/wp-content/uploads/2011/08/1.jpg" alt="A wall built out of books" width="590" height="443" /><p class="wp-caption-text">A wall built out of books</p></div>
<div id="attachment_3177" class="wp-caption alignnone" style="width: 600px"><img class="size-full wp-image-3177" title="Playing around with Dark Vader's helmet " src="http://corlan.org/wp-content/uploads/2011/08/3.jpg" alt="Playing around with Dark Vader's helmet" width="590" height="443" /><p class="wp-caption-text">Playing around with Darth Vader&#39;s helmet</p></div>
<div id="attachment_3178" class="wp-caption alignnone" style="width: 600px"><img class="size-full wp-image-3178" title="Another inspirational wall closely guarded by a she-clone" src="http://corlan.org/wp-content/uploads/2011/08/12.jpg" alt="Another inspirational wall closely guarded by a she-clone" width="590" height="443" /><p class="wp-caption-text">Another inspirational wall closely guarded by a she-clone</p></div>
<div id="attachment_3179" class="wp-caption alignnone" style="width: 453px"><img class="size-full wp-image-3179" title="Rest room guardian!" src="http://corlan.org/wp-content/uploads/2011/08/4.jpg" alt="Rest room guardian!" width="443" height="590" /><p class="wp-caption-text">Rest room guardian!</p></div>
<div id="attachment_3180" class="wp-caption alignnone" style="width: 600px"><img class="size-full wp-image-3180" title="Taking a break or having a meeting in a cozy space" src="http://corlan.org/wp-content/uploads/2011/08/5.jpg" alt="Taking a break or having a meeting in a cozy space" width="590" height="443" /><p class="wp-caption-text">Taking a break or having a meeting in a cozy space</p></div>
<p>If you have similar stories or just want to talk back, don&#8217;t hesitate to use the comments :). All I can say is: Bravo Stefan &amp; Company!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/Vh5qrKUgd7Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/30/building-an-ipad-game-with-adobe-air-in-a-week/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/30/building-an-ipad-game-with-adobe-air-in-a-week/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=building-an-ipad-game-with-adobe-air-in-a-week</feedburner:origLink></item>
		<item>
		<title>Flex Mobile Development: skinning the ActionBar component</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/mYTUWw-GGaA/</link>
		<comments>http://corlan.org/2011/08/29/flex-mobile-development-skinning-the-actionbar-component/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 06:00:14 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3142</guid>
		<description><![CDATA[
			
				
			
		
One of the important pieces of the Flex framework for mobile development is the ActionBar class. This class lets you create an application title bar with three distinct areas. Starting from left to right you can have a navigation area, a title area, and an actions area. Of course you are not forced to use [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/29/flex-mobile-development-skinning-the-actionbar-component/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F29%2Fflex-mobile-development-skinning-the-actionbar-component%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F29%2Fflex-mobile-development-skinning-the-actionbar-component%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>One of the important pieces of the Flex framework for mobile development is the <em><a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/ActionBar.html">ActionBar</a></em> class. This class lets you create an application title bar with three distinct areas. Starting from left to right you can have a navigation area, a title area, and an actions area. Of course you are not forced to use all these areas.</p>
<p>Why would you want to use this component? There are many reasons for using it but probably the most important is that it is an established user interaction design pattern on Android and iOS. This is how you usually add things like an application or section title, navigation buttons, search input texts, or action buttons.</p>
<p><span id="more-3142"></span></p>
<p>Here are two screen shots of the Facebook application running on Android and iOS that illustrates this idea:</p>
<p><img class="alignnone size-full wp-image-3148" title="actionbar1" src="http://corlan.org/wp-content/uploads/2011/08/actionbar11.png" alt="" width="270" height="388" /> <img class="alignnone size-full wp-image-3149" title="actionbar2" src="http://corlan.org/wp-content/uploads/2011/08/actionbar2.png" alt="" width="270" height="388" /></p>
<h2>Using the ActionBar component</h2>
<p>Using the <em>ActionBar</em> component is quite easy. First, you&#8217;ll need to create a Flex mobile project that uses either <em>ViewNavigatorApplication</em> or <em>TabbedViewNavigatorApplication</em>. Then, you can define the components you want to add to the <em>ActionBar</em> either globally (for all the <em>Views)</em> or individually (for each <em>View)</em>.</p>
<p>If you want to add them inside of a <em>View</em> here is how you do it:</p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"&gt;

 &lt;s:navigationContent&gt;
     &lt;s:Button label="Back"/&gt;
 &lt;/s:navigationContent&gt;
 &lt;s:titleContent&gt;
     &lt;s:TextInput prompt="type to search" width="100%"/&gt;
 &lt;/s:titleContent&gt;
 &lt;s:actionContent&gt;
     &lt;s:Button label="+"/&gt;
 &lt;/s:actionContent&gt;

&lt;/s:View&gt;</pre>
<p>This code produces the following <em>ActionBar</em>:</p>
<p><img class="alignnone size-full wp-image-3151" title="actionbar3" src="http://corlan.org/wp-content/uploads/2011/08/actionbar3.png" alt="" width="270" height="233" /></p>
<p>If you want to set it globally then the method differe slightly depending on what Application root tag you chose when creating the project (<em>ViewNavigatorApplication</em> or <em>TabbedViewNavigatorApplication</em>). For <em>ViewNavigatorApplication</em> you&#8217;d do something like this:</p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark"
       firstView="views.ActionBarHomeView"&gt;

 &lt;s:navigationContent&gt;
      &lt;s:Button label="Back"/&gt;
 &lt;/s:navigationContent&gt;
 &lt;s:titleContent&gt;
      &lt;s:TextInput prompt="type to search" width="100%"/&gt;
 &lt;/s:titleContent&gt;
 &lt;s:actionContent&gt;
      &lt;s:Button label="+"/&gt;
 &lt;/s:actionContent&gt;

&lt;/s:ViewNavigatorApplication&gt;</pre>
<p>And for <em>TabbedViewNavigatorApplication</em> you&#8217;d add one for each tab you have in your application. For example:</p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark"&gt;

 &lt;s:ViewNavigator label="Tab 1" width="100%" height="100%" firstView="views.Tab1View"&gt;
      &lt;s:navigationContent&gt;
           &lt;s:Button label="Back"/&gt;
      &lt;/s:navigationContent&gt;
      &lt;s:titleContent&gt;
           &lt;s:TextInput prompt="type to search" width="100%"/&gt;
      &lt;/s:titleContent&gt;
      &lt;s:actionContent&gt;
           &lt;s:Button label="+"/&gt;
      &lt;/s:actionContent&gt;
 &lt;/s:ViewNavigator&gt;
 &lt;s:ViewNavigator label="Tab 2" width="100%" height="100%" firstView="views.Tab2View"&gt;

 &lt;/s:ViewNavigator&gt;

&lt;/s:TabbedViewNavigatorApplication&gt;</pre>
<p>And here is how this code looks like at runtime:</p>
<p><img class="alignnone size-full wp-image-3154" title="actionbar4" src="http://corlan.org/wp-content/uploads/2011/08/actionbar4.png" alt="" width="270" height="429" /></p>
<p>If you set the <em>ActionBar</em> globally and you want to override a section or all sections in a particular <em>View</em> all you have to do is to set that section/sections in the <em>View.</em></p>
<p>You should also know that you can control the <em>ActionBar</em> visibility and rendering mode. For example in any <em>View</em> in which you want to hide the <em>ActionBar</em> you can set <em>actionBarVisible = false</em>. By default the <em>ActionBar</em> is rendered so it takes up some of the available space for the rest of your application. If you want to have the bar hovering on top of the rest of your application you can set the <em>overlayControls</em> to <em>true</em> in your <em>View</em>.</p>
<h2>Understanding how the ActionBar component works</h2>
<p>Let&#8217;s see how everything is put together. Each part of the <em>ActionBar</em> (navigation, title, and action content) is actually a Spark Group object. If you open the <em>ActionBar</em> class file you&#8217;ll find three properties named: <em>actionGroup</em>, <em>navigationGroup</em>, and <em>titleGroup</em>. These Groups are populated by calling the setter methods: <em>actionContent()</em>, <em>titleContent()</em>, and <em>navigationContent()</em>. These methods are called by the <em>View</em> class to push the components you set for each section and the argument is an Array (you can set a Button or a number of UI components for each section).</p>
<p>How about the layout used by these three groups? Well you can set a different layout than the default by calling the <em>actionLayout</em>, <em>navigationLayout</em>, and <em>titleLayout</em> setters.</p>
<p>The <em>ActionBar</em> component is a Spark component and this means that the task for laying out the various UI components that you can add to each section is actually implemented by a skin class. And of course the look and feel is implemented by the same skin class. The default skin is <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/skins/mobile/ActionBarSkin.html"><em>spark.skins.mobile.ActionBarSkin</em></a>. This class extends the <em>MobileSkin</em> class, which in turns extends the <em>UIComponent</em>.</p>
<p>The interesting parts in the skin class are these three methods: <em>createChildren()</em>, <em>measure()</em>, and <em>layoutContents()</em>.</p>
<p>If you take a look at the <em>createChildren()</em> method you will see that here is where the three groups (<em>navigationGroup</em>, <em>actionGroup</em>, and <em>titleGroup</em>) used for each section are actually created and the default layout is set. Also you can see that the default layout used by each group is <em>HorizontalLayout</em>. Here is a snippet of the code that creates the <em>navigationGroup</em>:</p>
<pre>navigationGroup = new Group();
var hLayout:HorizontalLayout = new HorizontalLayout();
hLayout.horizontalAlign = HorizontalAlign.LEFT;
hLayout.verticalAlign = VerticalAlign.MIDDLE;
hLayout.gap = 0;
hLayout.paddingLeft = hLayout.paddingTop = hLayout.paddingRight
        = hLayout.paddingBottom = 0;
navigationGroup.layout = hLayout;
navigationGroup.id = "navigationGroup";</pre>
<p>The <em>measure()</em> method is executed executed after the <em>createChildren()</em> method or when the <em>invalidateSize()</em> method is executed. As the name implies, this method measures the width and the height of the <em>ActionBar</em> taking into consideration the padding (left, right, top, and bottom) and each group width and height (<em>navigationGroup</em>, <em>titleGroup</em>, and <em>actionGroup</em>). It is important to note that the height of the <em>ActionBar</em> is determined by the highest element you have, if this height is bigger than the default height. In other words if you add a <em>Button</em> and set the height of the button to 200, then the <em>ActionBar</em> height will be 200 pixels.</p>
<p>And finally the <em>layoutContent()</em> method is responsible for positioning and setting the size of each <em>Group</em>. This method positions each group starting from left to right with the <em>navigationGroup</em>, <em>titleGroup</em>, and <em>actionGroup</em>. If the total width of the <em>navigationGroup</em> and <em>actionGroup</em> is equal to or more than the total available width then the <em>titleGroup</em> is not displayed (visible = false).</p>
<p>Here is a graphical representation of how these different parts are related:</p>
<p><img class="alignnone size-full wp-image-3160" title="actiobar6" src="http://corlan.org/wp-content/uploads/2011/08/actiobar6.png" alt="" width="562" height="211" /></p>
<h2>Skinning the ActionBar component</h2>
<p>Let&#8217;s talk about styling the ActionBar component. Out of the box you can quite easily change the appearance using the CSS properties. For example you can use CSS to transform the default look and feel  of the <em>ActionBar</em> presented in a screen shot at the beginning of this article to something like this with a little bit of CSS:</p>
<p><img class="alignnone size-full wp-image-3156" title="actionbar4" src="http://corlan.org/wp-content/uploads/2011/08/actionbar42.png" alt="" width="270" height="74" /></p>
<p>And the CSS code that does this is this (please note that you have to include the CSS code or file in the main application file and not in the <em>Views</em>):</p>
<pre>&lt;fx:Style&gt;
@namespace s "library://ns.adobe.com/flex/spark";</pre>
<pre>s|ActionBar {
      chromeColor: #484877;
      defaultButtonAppearance: beveled;
}
&lt;/fx:Style&gt;</pre>
<p>The second CSS property in the code above (defaultButtonAppearance) is responsible for rendering the buttons in iOS style. If you inspect the <em>ActionBar</em> class you will find all the important CSS properties that you can play with.</p>
<p>If you want to go beyond background and font colors, sizes, and so forth you have to go down the road of creating a custom skin. And the easiest way to do this is to extend the <em>ActionBarSkin</em> class.</p>
<p>Here are the important parts of the <em>ActionBarSkin</em> class from a skinning perspective:</p>
<ul>
<li><em>border</em> and <em>borderClass</em> properties. <em>Border</em> represents the first child of the <em>ActionBarSkin</em> (take a look at the <em>createChildren()</em> method).<em>BorderClass</em> is a reference to an FXG file that is set in the class constructor depending on the <em>applicationDPI</em> value. The <em>borderClass</em> is used for creating the borders of the <em>ActionBar</em> and the shadow at the bottom. Here is a screen shot of what this looks like (I placed a pinkish background behind the graphics to provide some contrast for the highlights you can notice on the left/right side):</li>
</ul>
<p><img class="alignnone size-full wp-image-3158" title="actionbar5" src="http://corlan.org/wp-content/uploads/2011/08/actionbar5.png" alt="" width="350" height="273" /></p>
<ul>
<li><em>drawBackground()</em> method. This method is responsible for drawing the background. In the previous screen shots this is where the black or dark blue color is coming from. If you take a look at this method you will notice that it uses CSS properties (default or set by the programmer) to draw a gradient.</li>
</ul>
<p>I think that in the most of cases, when you want to skin an <em>ActionBar</em> component you&#8217;ll likely modify the <em>drawBackground()</em> method and create a different <em>borderClass</em> FXG file.</p>
<p>Let me show you an example of a custom skinning. There are three steps involved in this.</p>
<p>First, I created a new FXG file to be used for the background. To do this I opened up the FXG file used by default by the <em>ActionBarSkin</em> in Adobe Illustrator (you can find the path for this FXG in the <em>ActionBarSkin</em> constructor). And I added three green rectangles (some with a solid color, others with a transparent gradient). Here is the result in Illustrator:</p>
<p><img class="alignnone size-full wp-image-3165" title="actionbar7" src="http://corlan.org/wp-content/uploads/2011/08/actionbar7.png" alt="" width="297" height="237" /></p>
<p>Then, I exported the FXG file as an FXG. And I opened this file in a text editor to remove some of the tags and attributes introduced by Illustrator. Finally, I add the FXG file to the Flex mobile project.</p>
<div class='sniplrcode'>
<ol class="actionscript3" style="font-family:monospace;">
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;?</span>xml <span style="color: #004993;">version</span>=<span style="color: #990000;">&quot;1.0&quot;</span> encoding=<span style="color: #990000;">&quot;UTF-8&quot;</span><span style="color: #000066; font-weight: bold;">?&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;</span>Graphic <span style="color: #004993;">version</span>=<span style="color: #990000;">&quot;2.0&quot;</span> xmlns=<span style="color: #990000;">&quot;http://ns.adobe.com/fxg/2008&quot;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; scaleGridLeft=<span style="color: #990000;">&quot;2&quot;</span> scaleGridTop=<span style="color: #990000;">&quot;3&quot;</span> scaleGridRight=<span style="color: #990000;">&quot;88&quot;</span> scaleGridBottom=<span style="color: #990000;">&quot;61&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;2&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;89.8335&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;60&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#16938D&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">x</span>=<span style="color: #990000;">&quot;0.0830078&quot;</span> <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;35&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;89.8335&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;26.6665&quot;</span> <span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>LinearGradient <span style="color: #004993;">x</span>=<span style="color: #990000;">&quot;44.9165&quot;</span> <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">scaleX</span>=<span style="color: #990000;">&quot;26.6665&quot;</span> <span style="color: #004993;">rotation</span>=<span style="color: #990000;">&quot;90&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.160132&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#E2E2E2&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.126504&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.400165&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#A9A9A9&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.31613&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.79&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>LinearGradient<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;1.89014&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;89.8335&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;21.3774&quot;</span> <span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>LinearGradient <span style="color: #004993;">x</span>=<span style="color: #990000;">&quot;44.9165&quot;</span> <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;21.3774&quot;</span> <span style="color: #004993;">scaleX</span>=<span style="color: #990000;">&quot;21.3774&quot;</span> <span style="color: #004993;">rotation</span>=<span style="color: #990000;">&quot;270&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>LinearGradient<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;90&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;2&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.75&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;62&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;90&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;2&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.85&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;64&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;90&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;1&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.35&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;65&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;90&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;1&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.25&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;66&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;90&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;1&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.2&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;67&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;90&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;1&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.15&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;68&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;90&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;1&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.1&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;69&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;90&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;1&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.05&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">x</span>=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;2&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.25&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;88&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">x</span>=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;61&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.1&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;88&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;1&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;2&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;60&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>LinearGradient <span style="color: #004993;">x</span>=<span style="color: #990000;">&quot;0.5&quot;</span> <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">scaleX</span>=<span style="color: #990000;">&quot;60&quot;</span> <span style="color: #004993;">rotation</span>=<span style="color: #990000;">&quot;90&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.25&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.1&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>LinearGradient<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">x</span>=<span style="color: #990000;">&quot;89&quot;</span> <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;2&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;60&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>LinearGradient <span style="color: #004993;">x</span>=<span style="color: #990000;">&quot;0.5&quot;</span> <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">scaleX</span>=<span style="color: #990000;">&quot;60&quot;</span> <span style="color: #004993;">rotation</span>=<span style="color: #990000;">&quot;90&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.25&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0.1&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>LinearGradient<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;90&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;70&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColor <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span> <span style="color: #004993;">alpha</span>=<span style="color: #990000;">&quot;0&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;/</span>Graphic<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
</ol>
</div>
<p>Second, I created a new ActionScript class that extends the <em>ActionBarkSkin</em>. In the constructor I make sure that the <em>borderClass</em> uses the FXG file I created in the previous step. And I overrode the <em>drawBackground()</em> method because the FXG file does everything I need. Here is the complete listing:</p>
<div class='sniplrcode'>
<ol class="actionscript3" style="font-family:monospace;">
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #9900cc; font-weight: bold;">package</span> org<span style="color: #000066; font-weight: bold;">.</span>corlan<span style="color: #000066; font-weight: bold;">.</span>skins <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> spark<span style="color: #000066; font-weight: bold;">.</span>skins<span style="color: #000066; font-weight: bold;">.</span>mobile<span style="color: #000066; font-weight: bold;">.</span>ActionBarSkin<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> CustomActionBarSkin <span style="color: #0033ff; font-weight: bold;">extends</span> ActionBarSkin <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> CustomActionBarSkin<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//backgroundActionBar is the name of the FXG file</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; borderClass = backgroundActionBar<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; override <span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> drawBackground<span style="color: #000000;">&#40;</span>unscaledWidth<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=number%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:number.html"><span style="color: #004993;">Number</span></a><span style="color: #000066; font-weight: bold;">,</span> unscaledHeight<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=number%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:number.html"><span style="color: #004993;">Number</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000000;">&#125;</span></div>
</li>
</ol>
</div>
<p>Third, I changed the CSS from the main application file in order to set the new skin class as the <em>ActionBar</em> skin class, and the chromeColor used for the buttons. Here is the code:</p>
<div class='sniplrcode'>
<ol class="actionscript3" style="font-family:monospace;">
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;?</span>xml <span style="color: #004993;">version</span>=<span style="color: #990000;">&quot;1.0&quot;</span> encoding=<span style="color: #990000;">&quot;utf-8&quot;</span><span style="color: #000066; font-weight: bold;">?&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>ViewNavigatorApplication xmlns<span style="color: #000066; font-weight: bold;">:</span>fx=<span style="color: #990000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp;xmlns<span style="color: #000066; font-weight: bold;">:</span>s=<span style="color: #990000;">&quot;library://ns.adobe.com/flex/spark&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp;firstView=<span style="color: #990000;">&quot;views.ActionBarHomeView&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;</span>fx<span style="color: #000066; font-weight: bold;">:</span>Style<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; @<span style="color: #004993;">namespace</span> s <span style="color: #990000;">&quot;library://ns.adobe.com/flex/spark&quot;</span><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; s<span style="color: #000066; font-weight: bold;">|</span>ActionBar <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chromeColor<span style="color: #000066; font-weight: bold;">:</span> #16938D<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; defaultButtonAppearance<span style="color: #000066; font-weight: bold;">:</span> beveled<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skinClass<span style="color: #000066; font-weight: bold;">:</span> ClassReference<span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;org.corlan.skins.CustomActionBarSkin&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;/</span>fx<span style="color: #000066; font-weight: bold;">:</span>Style<span style="color: #000066; font-weight: bold;">&gt;</span> &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>ViewNavigatorApplication<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
</ol>
</div>
<p>Finally, here is how the skinned <em>ActionBar</em> at runtime:</p>
<p><img class="alignnone size-full wp-image-3166" title="actionbar8" src="http://corlan.org/wp-content/uploads/2011/08/actionbar8.png" alt="" width="483" height="168" /></p>
<p>In conclusion, if you couple these techniques with skinning of the other components you plan to use inside the <em>ActionBar</em> then you can really get something that is quite unique.</p>
<p>You can download the Flex project source code used for this example from <a href="http://corlan.org/downloads/ActionBar.fxp">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/mYTUWw-GGaA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/29/flex-mobile-development-skinning-the-actionbar-component/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/29/flex-mobile-development-skinning-the-actionbar-component/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flex-mobile-development-skinning-the-actionbar-component</feedburner:origLink></item>
		<item>
		<title>Future of Flex</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/SL_F3ossINo/</link>
		<comments>http://corlan.org/2011/08/26/future-of-flex/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 08:12:16 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3163</guid>
		<description><![CDATA[
			
				
			
		
Andrew Shorten (group product manager for Flex and developer tools at Adobe) just posted an interesting write-up about the future of Flex. If you are a Flex developer I&#8217;m sure you&#8217;ll find this worth reading. I know I did.
I won&#8217;t spoil the surprise but I have to say that I think this is good news!
If [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/26/future-of-flex/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F26%2Ffuture-of-flex%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F26%2Ffuture-of-flex%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://blogs.adobe.com/flex/2011/08/flex-where-were-headed.html">Andrew Shorten (group product manager for Flex and developer tools at Adobe) just posted an interesting write-up</a> about the future of Flex. If you are a Flex developer I&#8217;m sure you&#8217;ll find this worth reading. I know I did.</p>
<p>I won&#8217;t spoil the surprise but I have to say that I think this is good news!</p>
<p>If you have comments, please leave a message here! I will make sure it reaches Andrew&#8217;s inbox!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/SL_F3ossINo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/26/future-of-flex/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/26/future-of-flex/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=future-of-flex</feedburner:origLink></item>
		<item>
		<title>Introducing Adobe ColdFusion Developer Week</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/vxUq1XcQ6z4/</link>
		<comments>http://corlan.org/2011/08/25/introducing-adobe-coldfusion-developer-week/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 07:00:45 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3140</guid>
		<description><![CDATA[
			
				
			
		
If you are a ColdFusion guy or maybe just curious to find what&#8217;s new in this space then you shouldn&#8217;t miss Adobe ColdFusion Developer Week. It is a free series of webinars presented by experts. It starts on September 12 and ends on September 16. Here is the schedule:

September 12- Getting Started with Web Application [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/25/introducing-adobe-coldfusion-developer-week/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F25%2Fintroducing-adobe-coldfusion-developer-week%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F25%2Fintroducing-adobe-coldfusion-developer-week%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you are a ColdFusion guy or maybe just curious to find what&#8217;s new in this space then you shouldn&#8217;t miss Adobe ColdFusion Developer Week. It is a free series of webinars presented by experts. It starts on September 12 and ends on September 16. Here is the schedule:</p>
<ol>
<li>September 12- <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1860739&amp;loc=en_us">Getting Started with Web Application Developement Using ColdFusion ›</a></li>
<li>September  12 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870197&amp;loc=en_us">Working with PDFs Made Easy with ColdFusion ›</a></li>
<li>September  12 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870207&amp;loc=en_us">Introduction to ColdFusion Components (CFCs) ›</a></li>
<li>September  13 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870213&amp;loc=en_us">Improve Your ColdFusion Code Through Unit Testing ›</a></li>
<li>September  13 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870211&amp;loc=en_us">Using ColdFusion Frameworks for Application Development  ›</a></li>
<li>September  14 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870217&amp;loc=en_us">ColdFusion Builder: The Professional IDE to Boost Your Productivity ›</a></li>
<li>September  14 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870215&amp;loc=en_us">Expand Functionality with ColdFusion Builder Extensions ›</a></li>
<li>September  15 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870219&amp;loc=en_us">Developing Your First Application Using ColdFusion 9 and ORM ›</a></li>
<li>September  15 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870225&amp;loc=en_us">ColdFusion and Mobile &#8211; Browser-Based Applications Made Easy ›</a></li>
<li>September  16 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870223&amp;loc=en_us">Accessing ColdFusion Services From Flex Applications ›</a></li>
<li>September  16 &#8211; <a href="http://www.adobe.com/cfusion/event/index.cfm?event=session&amp;id=1870221&amp;loc=en_us">Make Your Site Searchable with Solr ›</a></li>
</ol>
<p>You can register and read more <a href="http://www.adobe.com/cfusion/event/index.cfm?event=detail&amp;id=1489920&amp;loc=en_us">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/vxUq1XcQ6z4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/25/introducing-adobe-coldfusion-developer-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/25/introducing-adobe-coldfusion-developer-week/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=introducing-adobe-coldfusion-developer-week</feedburner:origLink></item>
		<item>
		<title>Flex Mobile Development: pay attention to list.itemRenderFunction</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/h1pU49YA1qE/</link>
		<comments>http://corlan.org/2011/08/23/flex-mobile-development-pay-attention-to-list-itemrenderfunction/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 11:15:58 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3133</guid>
		<description><![CDATA[
			
				
			
		
A colleague of mine who is building a Flex mobile application had some performance issues with a list. In short, when he used a pretty heavy custom item renderer (with checkboxes, buttons, and labels) the scrolling performance dropped a lot. When using just a label item renderer everything worked well.
So, we started to debug the [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/23/flex-mobile-development-pay-attention-to-list-itemrenderfunction/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F23%2Fflex-mobile-development-pay-attention-to-list-itemrenderfunction%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F23%2Fflex-mobile-development-pay-attention-to-list-itemrenderfunction%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>A colleague of mine who is building a Flex mobile application had some performance issues with a list. In short, when he used a pretty heavy custom item renderer (with checkboxes, buttons, and labels) the scrolling performance dropped a lot. When using just a label item renderer everything worked well.</p>
<p>So, we started to debug the code and, as I suspected, the culprit was the layout manager: the virtualization was off.</p>
<p>This was strange as he didn&#8217;t turn off the <em>useVirtualLayout</em> flag anywhere in the code &#8211; at least not explicitly. So why was the virtualization off? Because he used <em>list.itemRenderFunction</em> to change the item renderer at runtime. If you take a look at the documentation you will find this:</p>
<blockquote><p>Function that returns an item renderer IFactory for a specific item. You should define an item renderer function similar to this sample function:</p>
<p><em>function myItemRendererFunction(item:Object):IFactory</em></p>
<p><strong>Currently, when using itemRendererFunction with a virtual layout (useVirtualLayout=true), item renderer recycling is turned off. Because of this, using <em>itemRendererFunction</em> can cause a performance degradation and is not recommended for mobile. This may be fixed in future versions of Flex.</strong></p></blockquote>
<p>So, if you use a heavy item renderer and/or you have many items, don&#8217;t set the item renderer using the <em>itemRendererFunction</em> method.</p>
<p>Instead, you can wrap your custom item renderer in a <em>ClassFactory</em> object and then assign this object to the <em>list.itemRenderer</em> property. Like this:</p>
<pre>var factory:ClassFactory = new ClassFactory(MyCustomItemRenderer);
// set the properties for custom item renderer
factory.properties = {iconField:"thumbnailSmall",
                  messageField:"description", iconHeight:180, iconWidth:180};
// set the ClassFactory object as the list item renderer
myList.itemRenderer = factory;</pre>
<p>There is one more thing. In the example above I used the properties property of the ClassFactory object to set the properties I needed (for example what data property should be used for the message label). You can&#8217;t use this approach for setting CSS properties like fontSize. The only solution I found so far is to create setters that behind the scenes are doing something like this:</p>
<pre>public class MyCustomItemRenderer {
   //...

   public function set fontSize(value:int):void {
      setStyle("fontSize", value);
   }

   //...
}</pre>
<p>This was my tip of the week. And don&#8217;t forget, stay away from <em>useVirtualLayout</em> = false;</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/h1pU49YA1qE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/23/flex-mobile-development-pay-attention-to-list-itemrenderfunction/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/23/flex-mobile-development-pay-attention-to-list-itemrenderfunction/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flex-mobile-development-pay-attention-to-list-itemrenderfunction</feedburner:origLink></item>
		<item>
		<title>Flex Mobile Development: storing data locally</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/_Mly5zDfCKU/</link>
		<comments>http://corlan.org/2011/08/18/flex-mobile-development-storing-data-locally/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 08:57:12 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3117</guid>
		<description><![CDATA[
			
				
			
		
One way to improve the user experience for mobile applications is to save data locally. This technique is important for desktop applications and it is even more important for mobile applications (mostly because the network connection is expensive, slower, or intermittent).
When using applications such as mail or Twitter clients local storage enables users to see [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/18/flex-mobile-development-storing-data-locally/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F18%2Fflex-mobile-development-storing-data-locally%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F18%2Fflex-mobile-development-storing-data-locally%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>One way to improve the user experience for mobile applications is to save data locally. This technique is important for desktop applications and it is even more important for mobile applications (mostly because the network connection is expensive, slower, or intermittent).</p>
<p>When using applications such as mail or Twitter clients local storage enables users to see the messages or tweets loaded in the previous session. And while you are seeing these &#8220;old&#8221; items the application can pull in newer items behind the scenes. The main idea is to not to make the user stare at an empty screen each time he opens your application.</p>
<p>A second benefit of this technique is that your application will feel much more responsive. As I said it is possible that the user has a slow Internet connection and downloading 12 small pictures and some descriptions could be visibly slow. Local storage can offer a &#8220;performance&#8221; boost especially for applications that access data that changes rarely.</p>
<p>Depending on your specific use case you may want to save locally:</p>
<ul>
<li>media assets (images, MP3 files, video files)</li>
<li>text or HTML resources</li>
<li>XML files</li>
<li>ActionScript data structures (an array of ActionScript value objects for example)</li>
</ul>
<p><span id="more-3117"></span></p>
<p>So how can you store data locally in an AIR mobile application (Android, PlayBook, and iOS)? You have almost the same methods as in AIR desktop applications (on the desktop you can use the encrypted local store to save ActionScript objects):</p>
<ul>
<li>Use the embedded SQLite database &#8211; obviously perfect for data that are a good match for a relational database</li>
<li>Save ActionScript objects or collections of objects in files &#8211; serialize the objects into a file and read back when needed. Or you can use <em>SharedObject</em> to do the same</li>
<li>Save binary assets directly into files &#8211; perfect for saving images or videos locally</li>
</ul>
<p>I won&#8217;t go into details about these three techniques. Almost three years ago I wrote a <a href="http://corlan.org/2008/09/02/storing-data-locally-in-air/">blogpost</a> that explains each technique (back then it was only AIR for desktops, but remember that apart from the encrypted local store you can use the same approach on mobile or desktop). So click <a href="http://corlan.org/2008/09/02/storing-data-locally-in-air/">here</a> if you want to learn how to use these techniques.</p>
<p>There is one aspect I do want to highlight, however. When you want to save data locally using files you should always use the application storage folder. This folder is outside of the application installation folder. So you can update the application without worrying about the saved data. Here is a simple example for creating a new file inside the application storage folder:</p>
<pre>var file:File = File.applicationStorageDirectory.resolvePath("new-file.png");
var fileStream:FileStream = new FileStream();
fileStrean.open(file, FileMode.WRITE);
fileStream.writeBytes(data, 0, data.length);
fileStream.close()</pre>
<h2>Flex mobile support for persistence</h2>
<p>You probably already know about the persistence support of the Flex mobile framework. If you save your information to the <em>data</em> property of your <em>View</em> pages and set the <em>persistNavigatorState </em>attribute in the main application file to <em>true</em>, then all the information will be automatically saved when the application is closed and restored when the application is re-opened.</p>
<p>So here is a simple example. Suppose that you use this data model in your application:</p>
<pre>package {

[Bindable]     
class User {
    public var firstName:String;
    public var lastName:String;   
}
}</pre>
<p>Next, you turn on the persistence support in the main application file:</p>
<pre>&lt;s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    firstView="views.HomeView"
    <strong>persistNavigatorState="true"</strong>/&gt;</pre>
<p>And finally you use the <em>data</em> property to save the current instance of <em>User</em>. Bellow is the first <em>View</em> of the application. It uses bidirectional binding for displaying the <em>User</em> first name and last name properties.</p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
   xmlns:s="library://ns.adobe.com/flex/spark"
   title="HomeView"
   viewActivate="onViewActivated()"&gt;
&lt;fx:Script&gt;
 &lt;![CDATA[

   private function onViewActivated():void {
      // if it is the first time the application runs t
      // here is no data
      if (!data) {
         // create a new User instance and
         // save it to data property
         data = new User();
      }
   }

 ]]&gt;
&lt;/fx:Script&gt;
 &lt;s:layout&gt;
     &lt;s:VerticalLayout/&gt;
 &lt;/s:layout&gt;
 &lt;s:Spacer height="10"/&gt;

 &lt;s:Label text="First Name:"/&gt;
 &lt;s:TextInput width="100%" text="@{data.firstName}"/&gt;
 &lt;s:Label text="Last Name:"/&gt;
 &lt;s:TextInput width="100%" text="@{data.lastName}"/&gt;
&lt;/s:View&gt;</pre>
<p>When you run the application for the first time you won&#8217;t see any information in the two text input boxes. However if you type in something and then close the app and re-open it, you will see the information you typed during the previous session.</p>
<p>When is the <em>data</em> property of a <em>View</em> saved to disk? Every time the application is closed or a <em>View</em> is destroyed/replaced by a new <em>View</em>. In terms of events right after the View deactivate event is triggered.</p>
<p>When is the <em>data</em> property of a <em>View</em> recreated if persistence is turned on? Right before the View activated event is thrown.</p>
<p>The <em>data</em> property of each <em>View</em> is saved to disk using <em>flash.net.SharedObject</em> and the object that does this is the <em>ViewNavigator</em> instance accessible in any <em>View</em> class by using the <em>navigator</em> property.</p>
<p>If you want to be sure that the <em>data</em> property is persisted you can call <em>navigator.saveViewData()</em> in your <em>View</em>. Why would you want to trigger the saving process manually? Because in the unlikely event the app is closed by the operating system due to low battery or memory events you cannot be sure that the normal event flow for closing the app will be followed. By calling <em>navigator.saveViewData()</em> manually each time the user updates something you can make sure that nothing will be lost.</p>
<h2>RegisterClassAlias</h2>
<p>When you serialize ActionScript objects to files or use SharedObject the original data type is lost when you deserialize them. The same applies when using the <em>data</em> property of the <em>View</em> because, under the hood, <em>SharedObject</em> is used for storing the data. If you want to keep the custom data type, all you have to do is to use <em>registerClassAlias()</em> method.</p>
<p>Why? Because the serialization is done using the AMF3 format (Action Message Format) and if you want to preserve the class information for the objects you serialize/deserialize then you have register the class alias of the class object. If you don&#8217;t do this, when you decode the objects you&#8217;ll get anonymous objects.</p>
<p>In a previous section I used a custom data type User. If I want to make sure that the data type is preserved I can register this class in the main application file (this way I make sure that the class is registered before any decoding is performed):</p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
 xmlns:s="library://ns.adobe.com/flex/spark"
 firstView="views.HomeView" persistNavigatorState="true"&gt;

&lt;fx:Script&gt;
&lt;![CDATA[
   import flash.net.registerClassAlias;

   <strong>registerClassAlias("User", User);</strong>
]]&gt;
&lt;/fx:Script&gt;

&lt;/s:ViewNavigatorApplication&gt;</pre>
<h2>Conclusions</h2>
<p>On Android you have to remember to set the appropriate permission in the application configuration file if you want to write files to disk (android.permission.WRITE_EXTERNAL_STORAGE). Also take into consideration how much space the data you want to saved will occupy. You should let the user know if you plan to consume GB of space.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/_Mly5zDfCKU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/18/flex-mobile-development-storing-data-locally/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/18/flex-mobile-development-storing-data-locally/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flex-mobile-development-storing-data-locally</feedburner:origLink></item>
		<item>
		<title>What are your favorite iOS/Android apps?</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/ZCIveHfyrdc/</link>
		<comments>http://corlan.org/2011/08/17/what-are-your-favorite-iosandroid-apps/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 07:15:36 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3115</guid>
		<description><![CDATA[
			
				
			
		
I&#8217;m really curious to find out what your favorite iOS or Android apps are. If you don&#8217;t mind sharing your preferences with me and spending a couple of minutes on writing them down, please drop a comment. You&#8217;ll get my eternal gratitude!
PS. You can name as many as you want as long as you consider [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/17/what-are-your-favorite-iosandroid-apps/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F17%2Fwhat-are-your-favorite-iosandroid-apps%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F17%2Fwhat-are-your-favorite-iosandroid-apps%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;m really curious to find out what your favorite iOS or Android apps are. If you don&#8217;t mind sharing your preferences with me and spending a couple of minutes on writing them down, please drop a comment. You&#8217;ll get my eternal gratitude!</p>
<p>PS. You can name as many as you want as long as you consider them killer (or favorite apps).</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/ZCIveHfyrdc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/17/what-are-your-favorite-iosandroid-apps/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/17/what-are-your-favorite-iosandroid-apps/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=what-are-your-favorite-iosandroid-apps</feedburner:origLink></item>
		<item>
		<title>Flex Mobile Development: caching images using ContentCache</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/OSkbZUwxpko/</link>
		<comments>http://corlan.org/2011/08/16/flex-mobile-development-caching-images-using-contentcache/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 15:05:12 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[PlayBook]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3106</guid>
		<description><![CDATA[
			
				
			
		
There are many places where you can optimize your code especially when working on mobile applications. In this post I will focus on caching images using the spak.core.ContentCache class (part of the Flex framework).
Right from the Flex documentation, you can see ContentCache could be useful:
Provides a caching and queuing image content loader suitable for using [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/16/flex-mobile-development-caching-images-using-contentcache/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F16%2Fflex-mobile-development-caching-images-using-contentcache%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F16%2Fflex-mobile-development-caching-images-using-contentcache%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>There are many places where you can optimize your code especially when working on mobile applications. In this post I will focus on caching images using the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/core/ContentCache.html"><em>spak.core.ContentCache</em></a> class (part of the Flex framework).</p>
<p>Right from the Flex documentation, you can see <em>ContentCache</em> could be useful:</p>
<blockquote><p>Provides a caching and queuing image content loader suitable for using   a shared image cache for the BitmapImage and spark Image components.</p></blockquote>
<h2>Why cache images?</h2>
<p>So why would you cache images? Every time you set a new source for a Spark <em>Image</em> or a <em>BitmapImage</em> object a new <em>flash.display.Loader</em> object is created to load the image bytes.</p>
<p>Now, let&#8217;s suppose you display a list of items and each item has an image (could be an icon or could be a picture). Each image is hosted on a remote server so it has to be downloaded. Finally, some of these images are the same for different items in the list (for example for a Twitter client it is quite common to see many entries with the same avatar; each entry represents a tweet from the same user and the avatar is the same in this case).</p>
<p>If you don&#8217;t use a caching mechanism, you will notice that as you scroll through the list it will take some time to load images. And the same could happen for images stored locally especially if they are not very small. While waiting for images to load and be displayed the first time is OK (and there isn&#8217;t much to do other than preload them) waiting for the same image every time it is displayed is quite annoying.</p>
<p>Here comes the <em>ContentCache</em> class. This class stores the bytes loaded (actually it stores the <em>LoaderInfo</em> object used for loading each image) and every time an image must be loaded it first checks the cache; if is not there then it goes through the loading process. If it is cached already, then it provides the <em>LoaderInfo</em> object.</p>
<p><span id="more-3106"></span></p>
<h2>How do you use the <em>ContentCache</em> class?</h2>
<p>You can enable caching for your Spark <em>Image</em> or <em>BitmapImage</em> objects quite easy. All you have to do is to create an instance of <em>ContentCache</em> and set this instance to the <em>contentLoader</em> property of the <em>BitmapImage</em> or <em>Image</em> object. Other than this, it&#8217;s business as usual. When you want to load an image you just set the source property of the <em>Image</em> or <em>BitmapImage</em> object and the <em>ContentCache</em> object will take care of the rest.</p>
<p>There is one thing you must be aware of: if an image was changed after it was cached and the source is the same then you have to invalidate the cache yourself in order to see the new image. Otherwise you will see the old version. When you want to remove an image from the cache you use the <em>removeCacheEntry()</em> method and pass the source for the image you want to invalidate in the cache.</p>
<p>You control the number of cached images using <em>maxCacheEntries</em> property (the default value is 100).</p>
<p>Let&#8217;s see a simple example:</p>
<pre>private var cache:ContentCache = new ContentCache();

private function setImage(source:String):void {
   //if we didn't set the cache
   if ( !img.contentLoader ) {
       img.contentLoader = cache;
   }
   //set the image source
   img.source = source;
}
...
&lt;s:Image id="img"/&gt;</pre>
<h2>Using <em>ContentCache</em> with Lists</h2>
<p>The Flex framework has a built-in list item renderer that supports images: <em>IconItemRenderer</em>. This is perfect for displaying lists that have images and text. By default the <em>IconItemRenderer</em> uses a <em>ContentCache</em> object to cache the images. <del>However the <em>ContentCache</em> instance is not shared across all the item renderers.</del></p>
<p>What do I mean? A Flex mobile list uses virtualization. This means that if the list displays 10 items at once it will create about 11 item renderer instances and reuse them. So even if the list has 1,000 items to display only 11 item renderers will be created. Next, each item renderer instance will use a <em>ContentCache</em> instance to cache the images. <del>So in total there will be 11 <em>ContentCache</em> instances. This means that it could happen to have an image already displayed by the list but because it was cached by a different <em>ContentCache</em> instance than the one used by the current item it will be loaded again.</del></p>
<p>The <em>IconItemRenderer</em> class uses a static property to hold an instance of the <em>ContentCache</em>. This means that the same image cache will be used by your list. However, if you have a second list or you use multiple item renderers for the same list, by default, it will be used another instance of <em>ContentCache</em>. The easiest way to fix this is to first create a single <em>ContentCache</em> instance (you can use the Singleton pattern here):</p>
<div class='sniplrcode'>
<ol class="actionscript3" style="font-family:monospace;">
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #9900cc; font-weight: bold;">package</span> org<span style="color: #000066; font-weight: bold;">.</span>corlan<span style="color: #000066; font-weight: bold;">.</span>utils <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> spark<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>ContentCache<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ImageCache <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #6699cc; font-weight: bold;">var</span> _instance<span style="color: #000066; font-weight: bold;">:</span>ImageCache<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> cache<span style="color: #000066; font-weight: bold;">:</span>ContentCache<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> ImageCache<span style="color: #000000;">&#40;</span>s<span style="color: #000066; font-weight: bold;">:</span>Singleton<span style="color: #000066; font-weight: bold;">,</span> maxCacheEntries<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=int%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:int.html"><span style="color: #004993;">int</span></a>=<span style="color: #000000; font-weight:bold;">100</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cache = <span style="color: #0033ff; font-weight: bold;">new</span> ContentCache<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cache<span style="color: #000066; font-weight: bold;">.</span>maxCacheEntries = maxCacheEntries<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> getInstance<span style="color: #000000;">&#40;</span>maxCacheEntries<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=int%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:int.html"><span style="color: #004993;">int</span></a>=<span style="color: #000000; font-weight:bold;">100</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>ImageCache <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>ImageCache<span style="color: #000066; font-weight: bold;">.</span>_instance == <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ImageCache<span style="color: #000066; font-weight: bold;">.</span>_instance = <span style="color: #0033ff; font-weight: bold;">new</span> ImageCache<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Singleton<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">,</span> maxCacheEntries<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> ImageCache<span style="color: #000066; font-weight: bold;">.</span>_instance<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #9900cc; font-weight: bold;">class</span> Singleton <span style="color: #000000;">&#123;</span><span style="color: #000000;">&#125;</span></div>
</li>
</ol>
</div>
<p>Then you extend the <em>IconItemRenderer</em> and set this Singleton as the <em>contentLoader</em> object:</p>
<div class='sniplrcode'>
<ol class="actionscript3" style="font-family:monospace;">
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ListItemRenderer <span style="color: #0033ff; font-weight: bold;">extends</span> IconItemRenderer <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> ListItemRenderer<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iconContentLoader = ImageCache<span style="color: #000066; font-weight: bold;">.</span>getInstance<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">.</span>cache<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000000;">&#125;</span></div>
</li>
</ol>
</div>
<p>When you build from scratch a list item renderer that uses images, you can use the same approach.</p>
<p>Obviously this technique can be used for other places as well not only for lists.</p>
<h2>Drawbacks</h2>
<p>As with any caching or pooling technique there are trade-offs. You have to find a fine balance between not caching any images and caching all the images. By default the <em>ContentLoader</em> is set to cache 100 entries. But this doesn&#8217;t mean that it is the best value.  It all depends on how big the images are and how much memory you want to use for caching. So be sure you take this into consideration when caching images.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/OSkbZUwxpko" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/16/flex-mobile-development-caching-images-using-contentcache/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/16/flex-mobile-development-caching-images-using-contentcache/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flex-mobile-development-caching-images-using-contentcache</feedburner:origLink></item>
		<item>
		<title>Flex Mobile Development: Creating Dialog Windows</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/SPjbkF_ujxg/</link>
		<comments>http://corlan.org/2011/08/10/flex-mobile-development-creating-dialog-windows/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 14:54:42 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[PlayBook]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3088</guid>
		<description><![CDATA[
			
				
			
		
Ever wondered how to create a modal dialog window in Flex mobile applications? For example, you may want to ask the user for a confirmation when he performs a delete operation or maybe to select an item from a list. Well, if you don&#8217;t know how to do it, then read on.
Flex has a class [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/10/flex-mobile-development-creating-dialog-windows/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F10%2Fflex-mobile-development-creating-dialog-windows%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F10%2Fflex-mobile-development-creating-dialog-windows%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Ever wondered how to create a modal dialog window in Flex mobile applications? For example, you may want to ask the user for a confirmation when he performs a delete operation or maybe to select an item from a list. Well, if you don&#8217;t know how to do it, then read on.</p>
<p>Flex has a class that just does this: <em><a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/SkinnablePopUpContainer.html">SkinnablePopUpContainer</a></em>. <em>SkinnablePopUpContainer</em> extends <em>SkinnableContainer</em> class and has a very simple API you can use in order to &#8220;open&#8221; and &#8220;close&#8221; the dialog.</p>
<h2>Understanding SkinnablePopUpContainer</h2>
<p>Because <em>SkinnablePopUpContainer</em> extends the <em>SkinnableContainer</em> it is extremely easy to create any kind of dialog window you want. You can create a new MXML component that extends the <em>SkinnablePopUpContainer</em>. Then you set a layout manager that works for you (VerticalLayout, HorizontalLayout). And finally, you add the UI components you need &#8211; labels, buttons, lists, and so on.</p>
<p>Suppose you want to create a simple alert window that looks like this:</p>
<p><img title="Alert Window" src="http://corlan.org/wp-content/uploads/2011/08/dialog1.png" alt="" width="437" height="145" /></p>
<p><span id="more-3088"></span></p>
<p>Here is the code to implement this (as a new MXML component that extends <em>SkinnablePopUpContainer</em>):</p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:SkinnablePopUpContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    backgroundColor="0x898989"&gt;

    &lt;s:layout&gt;
        &lt;s:VerticalLayout horizontalAlign="center"/&gt;
    &lt;/s:layout&gt;

   &lt;s:Label text="The contact was saved" width="100%" textAlign="center"/&gt;
   &lt;s:Button label="OK" width="100%" click="this.close()"/&gt;
&lt;/s:SkinnablePopUpContainer&gt;</pre>
<p>The API for controlling the <em>SkinnablePopUpContainer</em> is pretty simple:</p>
<ul>
<li>To open or display the window you create a new instance and then call the <em>open()</em> method of <em>SkinnablePopUpContainer</em>. This method has two arguments. The first argument is the display object container where it will be created. The second argument is a flag that tells Flex if the window will be modal or not.</li>
<li>To close the window and send data from the window to the application you use the <em>close</em>() method of <em>SkinnablePopUpContainer</em>. This methods also has two arguments. The first argument is a flag. You can set this to true if, for example, the user clicked the OK button, and false otherwise. If you want to send some data back to the application you use the second argument. For example, if you have a <em>TextInput</em> in your dialog and you want to send the text you will use this second argument.</li>
<li>To listen for the close event and read the data sent from the <em>SkinnablePopUpContainer</em> you have to register an event listener on the <em>SkinnablePopUpContainer</em>. The event type is <em>PopUpEvent</em>. <em>PopUpEvent</em> has two properties that you can use to read the flag and data set when calling the <em>close()</em> method: <em>commit</em> and <em>data</em>.</li>
</ul>
<p>Here is an example of how to open a <em>SkinnablePopUpContainer</em> component and read the flag/data when it is closed:</p>
<pre>//create the component and open it
var alertWindow:SkinnablePopUpContainer = new SkinnablePopUpContainer();
alertWindow.addEventListener(PopUpEvent.CLOSE, onAlertClose, false, 0, true);
alertWindow.width = stage.width;
alertWindow.height = stage.height / 2;
alertWindow.x = 0;
alertWindow.y = 100;
alertWindow.open(this, true);

private function onAlertClose(event:PopUpEvent):void {
    trace(event.commit);
    trace(event.data);
    alertWindow = null;
}</pre>
<h2>Creating custom dialog windows</h2>
<p>Once you understand how to use the <em>SkinnablePopUpContainer</em> it is pretty simple to create any kind of dialog window you might need: confirmation messages, simple alerts, pop up lists, and so on. Here is the code for a confirmation window that has two buttons (Yes and No) and lets you set the message text:</p>
<div class='sniplrcode'>
<ol class="actionscript3" style="font-family:monospace;">
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;?</span>xml <span style="color: #004993;">version</span>=<span style="color: #990000;">&quot;1.0&quot;</span> encoding=<span style="color: #990000;">&quot;utf-8&quot;</span><span style="color: #000066; font-weight: bold;">?&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>SkinnablePopUpContainer xmlns<span style="color: #000066; font-weight: bold;">:</span>fx=<span style="color: #990000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xmlns<span style="color: #000066; font-weight: bold;">:</span>s=<span style="color: #990000;">&quot;library://ns.adobe.com/flex/spark&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #004993;">backgroundColor</span>=<span style="color: #990000;">&quot;0&#215;898989&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;400&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>layout<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>VerticalLayout gap=<span style="color: #990000;">&quot;20&quot;</span> paddingBottom=<span style="color: #990000;">&quot;10&quot;</span> paddingLeft=<span style="color: #990000;">&quot;30&quot;</span> paddingRight=<span style="color: #990000;">&quot;30&quot;</span> paddingTop=<span style="color: #990000;">&quot;30&quot;</span> horizontalAlign=<span style="color: #990000;">&quot;center&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>layout<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fx<span style="color: #000066; font-weight: bold;">:</span>Script<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;!</span><span style="color: #000000;">&#91;</span>CDATA<span style="color: #000000;">&#91;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _message<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html"><span style="color: #004993;">String</span></a><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#91;</span>Bindable<span style="color: #000000;">&#93;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> <span style="color: #004993;">message</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html"><span style="color: #004993;">String</span></a> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> _message<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> <span style="color: #004993;">message</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">value</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html"><span style="color: #004993;">String</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _message = <span style="color: #004993;">value</span><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onClick<span style="color: #000000;">&#40;</span>commit<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=boolean%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:boolean.html"><span style="color: #004993;">Boolean</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">close</span><span style="color: #000000;">&#40;</span>commit<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#93;</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fx<span style="color: #000066; font-weight: bold;">:</span>Script<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Label <span style="color: #004993;">text</span>=<span style="color: #990000;">&quot;{message}&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;100%&quot;</span> textAlign=<span style="color: #990000;">&quot;center&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>HGroup <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;100%&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Button label=<span style="color: #990000;">&quot;Yes&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;50%&quot;</span> <span style="color: #004993;">click</span>=<span style="color: #990000;">&quot;onClick(true)&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Button label=<span style="color: #990000;">&quot;No&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;50%&quot;</span> <span style="color: #004993;">click</span>=<span style="color: #990000;">&quot;onClick(false)&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>HGroup<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>SkinnablePopUpContainer<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
</ol>
</div>
<p>And here is how this component look on my Android phone:</p>
<p><img title="Confirmation Window" src="http://corlan.org/wp-content/uploads/2011/08/dialog2.png" alt="" width="251" height="400" /></p>
<p>And here is the code for a pop up list that lets you to set the title, the list&#8217;s data provider, the list&#8217;s label field, the list&#8217;s initial selected items, and multiple selections (you can retrieve the selected items by listening for <em>PopupEvent.CLOSE</em> and reading the <em>data</em> attribute).</p>
<div class='sniplrcode'>
<ol class="actionscript3" style="font-family:monospace;">
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;?</span>xml <span style="color: #004993;">version</span>=<span style="color: #990000;">&quot;1.0&quot;</span> encoding=<span style="color: #990000;">&quot;utf-8&quot;</span><span style="color: #000066; font-weight: bold;">?&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>SkinnablePopUpContainer xmlns<span style="color: #000066; font-weight: bold;">:</span>fx=<span style="color: #990000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xmlns<span style="color: #000066; font-weight: bold;">:</span>s=<span style="color: #990000;">&quot;library://ns.adobe.com/flex/spark&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #004993;">backgroundColor</span>=<span style="color: #990000;">&quot;0&#215;898989&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;400&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>layout<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>VerticalLayout gap=<span style="color: #990000;">&quot;20&quot;</span> paddingBottom=<span style="color: #990000;">&quot;10&quot;</span> paddingLeft=<span style="color: #990000;">&quot;30&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paddingRight=<span style="color: #990000;">&quot;30&quot;</span> paddingTop=<span style="color: #990000;">&quot;30&quot;</span> horizontalAlign=<span style="color: #990000;">&quot;center&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>layout<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fx<span style="color: #000066; font-weight: bold;">:</span>Script<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;!</span><span style="color: #000000;">&#91;</span>CDATA<span style="color: #000000;">&#91;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> mx<span style="color: #000066; font-weight: bold;">.</span>collections<span style="color: #000066; font-weight: bold;">.</span>ArrayCollection<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _dataProvider<span style="color: #000066; font-weight: bold;">:</span>ArrayCollection<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _labelField<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html"><span style="color: #004993;">String</span></a><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _allowMultipleSelection<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=boolean%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:boolean.html"><span style="color: #004993;">Boolean</span></a><span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _selectedItems<span style="color: #000066; font-weight: bold;">:</span>Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Object<span style="color: #000066; font-weight: bold;">&gt;;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#91;</span>Bindable<span style="color: #000000;">&#93;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> selectedItems<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Object<span style="color: #000066; font-weight: bold;">&gt;</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> _selectedItems<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> selectedItems<span style="color: #000000;">&#40;</span>v<span style="color: #000066; font-weight: bold;">:</span>Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Object<span style="color: #000066; font-weight: bold;">&gt;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _selectedItems = v<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#91;</span>Bindable<span style="color: #000000;">&#93;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> allowMultipleSelection<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=boolean%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:boolean.html"><span style="color: #004993;">Boolean</span></a> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> _allowMultipleSelection<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> allowMultipleSelection<span style="color: #000000;">&#40;</span>v<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=boolean%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:boolean.html"><span style="color: #004993;">Boolean</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _allowMultipleSelection = v<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#91;</span>Bindable<span style="color: #000000;">&#93;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> labelField<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html"><span style="color: #004993;">String</span></a> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> _labelField<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> labelField<span style="color: #000000;">&#40;</span>v<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html"><span style="color: #004993;">String</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _labelField = v<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#91;</span>Bindable<span style="color: #000000;">&#93;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> dataProvider<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>ArrayCollection <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> _dataProvider<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> dataProvider<span style="color: #000000;">&#40;</span>v<span style="color: #000066; font-weight: bold;">:</span>ArrayCollection<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _dataProvider = v<span style="color: #000066; font-weight: bold;">;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onClick<span style="color: #000000;">&#40;</span>commit<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=boolean%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:boolean.html"><span style="color: #004993;">Boolean</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">close</span><span style="color: #000000;">&#40;</span>commit<span style="color: #000066; font-weight: bold;">,</span> list<span style="color: #000066; font-weight: bold;">.</span>selectedItems<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#93;</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fx<span style="color: #000066; font-weight: bold;">:</span>Script<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Label <span style="color: #004993;">text</span>=<span style="color: #990000;">&quot;Select an item:&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;100%&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>List id=<span style="color: #990000;">&quot;list&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;100%&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;100%&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dataProvider=<span style="color: #990000;">&quot;{dataProvider}&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelField=<span style="color: #990000;">&quot;{labelField}&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allowMultipleSelection=<span style="color: #990000;">&quot;{allowMultipleSelection}&quot;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selectedItems=<span style="color: #990000;">&quot;{selectedItems}&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>HGroup <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;100%&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Button label=<span style="color: #990000;">&quot;OK&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;50%&quot;</span> <span style="color: #004993;">click</span>=<span style="color: #990000;">&quot;onClick(true)&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Button label=<span style="color: #990000;">&quot;Cancel&quot;</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;50%&quot;</span> <span style="color: #004993;">click</span>=<span style="color: #990000;">&quot;onClick(false)&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>HGroup<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>SkinnablePopUpContainer<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
</ol>
</div>
<p>And here is the component running on my phone:</p>
<p><img class="alignnone size-full wp-image-3095" title="Popup List Dialog" src="http://corlan.org/wp-content/uploads/2011/08/dialog3.png" alt="" width="250" height="400" /></p>
<h2>Skinning</h2>
<p>The two custom dialog windows I showed you in the previous section use the default look and feel. What about skinning a <em>SkinnablePopUpContainer</em>? There is a Flex class that provides the default skin for a <em>SkinnablePopUpContainer</em>: <em>SkinnablePopUpContainerSkin</em>. By creating a skin that extends this default skin you can change the background of the component quite easily. If you look at the <em>SkinnablePopUpContainerSkin</em> skin you&#8217;ll notice that it has a <em>rect</em> with the id equal to <em>background</em>. This is the starting point to change the default background. You can draw additional stuff on top of this background or replace it alltogether with an FXG or PNG file.</p>
<p>For the rest of the UI components used in a <em>SkinnablePopUpContainer </em>(buttons, text inputs, labels, and so on) you will create additional skins and/or use CSS. Here is a screenshot with the same confirmation window but this time using a custom skin:</p>
<p><a href="http://corlan.org/wp-content/uploads/2011/08/dialog4.png"><img class="alignnone size-full wp-image-3098" title="Skinned Confirmation Window" src="http://corlan.org/wp-content/uploads/2011/08/dialog4.png" alt="" width="251" height="400" /></a></p>
<p>Here is the skin class used to customize the confirmation window presented in the previous section:</p>
<div class='sniplrcode'>
<ol class="actionscript3" style="font-family:monospace;">
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;?</span>xml <span style="color: #004993;">version</span>=<span style="color: #990000;">&quot;1.0&quot;</span> encoding=<span style="color: #990000;">&quot;utf-8&quot;</span><span style="color: #000066; font-weight: bold;">?&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Skin xmlns<span style="color: #000066; font-weight: bold;">:</span>fx=<span style="color: #990000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span> xmlns<span style="color: #000066; font-weight: bold;">:</span>s=<span style="color: #990000;">&quot;library://ns.adobe.com/flex/spark&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; xmlns<span style="color: #000066; font-weight: bold;">:</span>fb=<span style="color: #990000;">&quot;http://ns.adobe.com/flashbuilder/2009&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">alpha</span><span style="color: #000066; font-weight: bold;">.</span>disabled=<span style="color: #990000;">&quot;0.5&quot;</span> xmlns<span style="color: #000066; font-weight: bold;">:</span>skins=<span style="color: #990000;">&quot;org.corlan.dialog.skins.*&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fx<span style="color: #000066; font-weight: bold;">:</span>Metadata<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;!</span><span style="color: #000000;">&#91;</span>CDATA<span style="color: #000000;">&#91;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3f5fbf;">/** </span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #3f5fbf;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @copy spark.skins.spark.ApplicationSkin#hostComponent</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #3f5fbf;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#91;</span>HostComponent<span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;spark.components.SkinnablePopUpContainer&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000000;">&#93;</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fx<span style="color: #000066; font-weight: bold;">:</span>Metadata<span style="color: #000066; font-weight: bold;">&gt;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>states<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>State <span style="color: #004993;">name</span>=<span style="color: #990000;">&quot;normal&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>State <span style="color: #004993;">name</span>=<span style="color: #990000;">&quot;disabled&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>State <span style="color: #004993;">name</span>=<span style="color: #990000;">&quot;closed&quot;</span> stateGroups=<span style="color: #990000;">&quot;closedGroup&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>State <span style="color: #004993;">name</span>=<span style="color: #990000;">&quot;disabledAndClosed&quot;</span> stateGroups=<span style="color: #990000;">&quot;closedGroup&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>states<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;!&#8211;</span> Transitions <span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #004993;">open</span> and <span style="color: #004993;">close</span> <span style="color: #000066; font-weight: bold;">&#8211;&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>transitions<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Transition fromState=<span style="color: #990000;">&quot;closed&quot;</span> toState=<span style="color: #990000;">&quot;normal&quot;</span> autoReverse=<span style="color: #990000;">&quot;true&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Fade duration=<span style="color: #990000;">&quot;150&quot;</span> <span style="color: #004993;">target</span>=<span style="color: #990000;">&quot;{chrome}&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>Transition<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Transition fromState=<span style="color: #990000;">&quot;disabledAndClosed&quot;</span> toState=<span style="color: #990000;">&quot;disabled&quot;</span> autoReverse=<span style="color: #990000;">&quot;true&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Fade duration=<span style="color: #990000;">&quot;150&quot;</span> <span style="color: #004993;">target</span>=<span style="color: #990000;">&quot;{chrome}&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>Transition<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Transition fromState=<span style="color: #990000;">&quot;normal&quot;</span> toState=<span style="color: #990000;">&quot;closed&quot;</span> autoReverse=<span style="color: #990000;">&quot;true&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Fade duration=<span style="color: #990000;">&quot;150&quot;</span> <span style="color: #004993;">target</span>=<span style="color: #990000;">&quot;{chrome}&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>Transition<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Transition fromState=<span style="color: #990000;">&quot;disabled&quot;</span> toState=<span style="color: #990000;">&quot;disabledAndClosed&quot;</span> autoReverse=<span style="color: #990000;">&quot;true&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Fade duration=<span style="color: #990000;">&quot;150&quot;</span> <span style="color: #004993;">target</span>=<span style="color: #990000;">&quot;{chrome}&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>Transition<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>s<span style="color: #000066; font-weight: bold;">:</span>transitions<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;!&#8212;</span> Defines the <span style="color: #004993;">background</span> and <span style="color: #004993;">content</span> group used by <span style="color: #0033ff; font-weight: bold;">this</span> skin<span style="color: #000066; font-weight: bold;">.</span> <span style="color: #000066; font-weight: bold;">&#8211;&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>s<span style="color: #000066; font-weight: bold;">:</span>Group id=<span style="color: #990000;">&quot;chrome&quot;</span> <span style="color: #004993;">left</span>=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">right</span>=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">top</span>=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">bottom</span>=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">visible</span><span style="color: #000066; font-weight: bold;">.</span>closedGroup=<span style="color: #990000;">&quot;false&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;!&#8212;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Defines the appearance of the SkinnablePopUpContainer <span style="color: #9900cc; font-weight: bold;">class</span><span style="color: #990000;">&#8216;s background. </span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; In this case a FXG file is used to draw the background.</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8211;&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;skins:BackGroundAlert id=&quot;background&quot; left=&quot;0&quot; right=&quot;0&quot; top=&quot;0&quot; bottom=&quot;0&quot;/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;"> &nbsp; &nbsp; &nbsp; &nbsp;&lt;!&#8212; @copy spark.components.SkinnableContainer#contentGroup &#8211;&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;"> &nbsp; &nbsp; &nbsp; &nbsp;&lt;s:Group id=&quot;contentGroup&quot; left=&quot;0&quot; right=&quot;0&quot; top=&quot;0&quot; bottom=&quot;0&quot; minWidth=&quot;0&quot; minHeight=&quot;0&quot;&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;s:layout&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;s:BasicLayout/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/s:layout&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;"> &nbsp; &nbsp; &nbsp; &nbsp;&lt;/s:Group&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;"> &nbsp; &nbsp;&lt;/s:Group&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;"> &nbsp; &nbsp;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #990000;">&lt;/s:Skin&gt;</span></div>
</li>
</ol>
</div>
<p>And this is the FXG used by the skin class to draw the background:</p>
<div class='sniplrcode'>
<ol class="actionscript3" style="font-family:monospace;">
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;?</span>xml <span style="color: #004993;">version</span>=<span style="color: #990000;">&quot;1.0&quot;</span> encoding=<span style="color: #990000;">&quot;utf-8&quot;</span> <span style="color: #000066; font-weight: bold;">?&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;</span>Graphic <span style="color: #004993;">version</span>=<span style="color: #990000;">&quot;2.0&quot;</span> xmlns=<span style="color: #990000;">&quot;http://ns.adobe.com/fxg/2008&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; xmlns<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">d</span>=<span style="color: #990000;">&quot;http://ns.adobe.com/fxg/2008/dt&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; xmlns<span style="color: #000066; font-weight: bold;">:</span>flm=<span style="color: #990000;">&quot;http://ns.adobe.com/flame/2008&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; scaleGridLeft=<span style="color: #990000;">&quot;10&quot;</span> scaleGridTop=<span style="color: #990000;">&quot;10&quot;</span> </div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; scaleGridRight=<span style="color: #990000;">&quot;90&quot;</span> scaleGridBottom=<span style="color: #990000;">&quot;90&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>Rect <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;100&quot;</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;100&quot;</span> radiusX=<span style="color: #990000;">&quot;10&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>LinearGradient <span style="color: #004993;">x</span>=<span style="color: #990000;">&quot;190.417&quot;</span> <span style="color: #004993;">y</span>=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">scaleX</span>=<span style="color: #990000;">&quot;361.667&quot;</span> <span style="color: #004993;">rotation</span>=<span style="color: #990000;">&quot;90&quot;</span><span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#FFFFFF&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.0424137&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#E1DBCE&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.0886452&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#CEC3AE&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.139618&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#C4B89F&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.208589&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#C2B59B&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.588957&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#C2B59B&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.758513&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#C0B399&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.852955&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#B2A58E&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;0.932468&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#918372&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>GradientEntry ratio=<span style="color: #990000;">&quot;1&quot;</span> <span style="color: #004993;">color</span>=<span style="color: #990000;">&quot;#594A42&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>LinearGradient<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>fill<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>stroke<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;</span>SolidColorStroke weight=<span style="color: #990000;">&quot;3&quot;</span><span style="color: #000066; font-weight: bold;">/&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>stroke<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">&lt;/</span>Rect<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
<li style="font-weight: normal; vertical-align:top;">
<div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #000066; font-weight: bold;">&lt;/</span>Graphic<span style="color: #000066; font-weight: bold;">&gt;</span></div>
</li>
</ol>
</div>
<h2>Download</h2>
<p>You can download a working Flex project that includes all the code used in this article from <a href="https://github.com/mcorlan/AlertExample">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/SPjbkF_ujxg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/10/flex-mobile-development-creating-dialog-windows/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/10/flex-mobile-development-creating-dialog-windows/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flex-mobile-development-creating-dialog-windows</feedburner:origLink></item>
		<item>
		<title>AIR 3 Beta and Flash Player 11 Beta are out!</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/bmxj-m7unPQ/</link>
		<comments>http://corlan.org/2011/08/10/air-3-beta-and-flash-player-11-beta-are-out/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 09:29:58 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[AIR]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3084</guid>
		<description><![CDATA[
			
				
			
		
We just released AIR 3 Beta 2 for desktop and Flash Player 11 Beta for desktop. You can download them from here and here.
Here is a list of the most important news in these releases.
AIR 3 Beta:

You can download the AIR 3 SDK and start building mobile and desktop apps. You can also download the [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/10/air-3-beta-and-flash-player-11-beta-are-out/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F10%2Fair-3-beta-and-flash-player-11-beta-are-out%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F10%2Fair-3-beta-and-flash-player-11-beta-are-out%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We just released AIR 3 Beta 2 for desktop and Flash Player 11 Beta for desktop. You can download them from <a href="http://labs.adobe.com/downloads/air3.html">here</a> and <a href="http://labs.adobe.com/downloads/flashplayer11.html">here</a>.</p>
<p>Here is a list of the most important news in these releases.</p>
<p><strong>AIR 3 Beta:</strong></p>
<ul>
<li>You can download the AIR 3 SDK and start building mobile and desktop apps. You can also download the AIR 3 runtimes for Windows and Mac OS</li>
<li><strong>Stage Video Hardware Acceleration for mobile</strong> ( previously, this was available only for desktops). This will enable developers to leverage hardware acceleration for decoding and composing the video on the screen. This means reduced memory and CPU usage and smoother video playback.</li>
<li><strong>Captive Runtime Support (AIR for desktop and Android)</strong>. You will be able to package your application with a captive runtime. This enables you either to use a specific version of the runtime instead of what the user might have or to push the app together with the runtime so the user doesn&#8217;t have to go through the installation process of the runtime. Needless to say that this was one popular request :)</li>
<li><strong>iOS Background Audio Playback Support</strong>. You can write multi-tasking apps that can play audio in background.</li>
<li><strong>Android Licensing Service Support</strong>. You have access to the Android Market Licensing Service so you can enforce licensing policies for paid apps that are published through Android Market.</li>
<li><strong>Android Front-facing Camera Support</strong>. This is another popular request. This was already available on iOS and PlayBook; now you can use it on Android too.</li>
<li><strong>Encrypted Local Storage for Mobile</strong>. Another feature that developers wanted badly. Now you can store encrypted data the same way you would do on AIR desktop apps. Great for storing passwords and other sensitive data.</li>
<li><strong> </strong><strong>H.264/AVC Software Encoding for Cameras for Desktop</strong>. You can stream high-quality video from your computer&#8217;s camera with better compression and industry-standard support.</li>
</ul>
<p>You can read more <a href="http://labs.adobe.com/technologies/flashplatformruntimes/air3/">here</a>.</p>
<p><strong>Flash Player 11 desktop Beta:</strong></p>
<ul>
<li><strong>Stage3D APIs (AKA Molehill)</strong>. 3D GPU accelerated graphics.</li>
<li><strong>Native 64-bit support</strong>. For 64-bit operating systems (Linux, Mac OS, and Windows).</li>
<li><strong>G.711 audio compression for telephony</strong>. Real-time voice and telephony capabilities and support for integration with existing phone systems using a G.711 codec.</li>
<li><strong>Socket Progress Events</strong>. This was another feature requested by many developers.</li>
<li><strong>JPEG-XR support</strong>. Support for JPEG-XR compression format so you can use higher quality images with less bandwidth. Plus you can use alpha channel transparency.</li>
</ul>
<p>You can read more <a href="http://labs.adobe.com/technologies/flashplatformruntimes/flashplayer11/features.html">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/bmxj-m7unPQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/10/air-3-beta-and-flash-player-11-beta-are-out/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/10/air-3-beta-and-flash-player-11-beta-are-out/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=air-3-beta-and-flash-player-11-beta-are-out</feedburner:origLink></item>
		<item>
		<title>About Different Types of Fragmentation</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/QefP4ME-7zA/</link>
		<comments>http://corlan.org/2011/08/05/about-different-types-of-fragmentation/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 11:19:16 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3071</guid>
		<description><![CDATA[
			
				
			
		
If you are a developer fragmentation is part of your life. Everywhere you look you find it:

device fragmentation (devices running on different OSes, with different screens and capabilities &#8211; smartphones, personal computer, tablets, televisions, and so on),
browsers fragmentation (you have desktop browsers and mobile browsers, as well as embedded device browsers like those found in [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/08/05/about-different-types-of-fragmentation/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F05%2Fabout-different-types-of-fragmentation%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F08%2F05%2Fabout-different-types-of-fragmentation%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you are a developer fragmentation is part of your life. Everywhere you look you find it:</p>
<ul>
<li>device fragmentation (devices running on different OSes, with different screens and capabilities &#8211; smartphones, personal computer, tablets, televisions, and so on),</li>
<li>browsers fragmentation (you have desktop browsers and mobile browsers, as well as embedded device browsers like those found in televisions or other devices).</li>
</ul>
<p>Judging fragmentation in terms of good or bad is counter productive. It is what it is, right? In the end it gives us more work which is not that bad :)</p>
<h2>There is fragmentation and fragmentation</h2>
<p>However, there is another type of fragmentation that is becoming more and more visible. And this version is quite annoying. It is about having all these devices like islands in a big ocean. And all these islands are not aware of each other and they don&#8217;t even know they are islands.</p>
<p>What am I talking about? Let&#8217;s take a look at a typical household. You&#8217;ll find devices like:</p>
<ul>
<li>router</li>
<li>personal computers</li>
<li>smartphones</li>
<li>tablets</li>
<li>console or media center</li>
<li>television with Internet connectivity (like GoogleTV for example or Samsung SmartTV)</li>
<li>air conditioning units</li>
<li>car(s)</li>
<li>automation devices (video cameras, remote controls for the main door or garage door)</li>
</ul>
<p>And the simple truth is that all these devices are not aware of each other. Or in other words, if I have a smartphone and I&#8217;m home enjoying some TV time on the latest television set I don&#8217;t get any extra functionality on either device.</p>
<h2>All together now</h2>
<p>So what could we do to improve this simple scenario (a smart TV and a smartphone/tablet)? Well think of the &#8220;ultimate&#8221; remote control&#8221;. In a perfect world, when I want to find something interesting to watch at TV, I&#8217;d pull out my tablet (or smartphone) and open up the remote control app. This app will connect to television or set-top box and retrieve all the programs that are available.</p>
<p>Then it will present them in a useful way. Today, we think in terms of channels. You have x channels and you zip through them. Instead of this, this Remote Control app would display the available programs sorted on categories: SF movies, nature, cooking, news, fashion, sports, and so on. So with a quick flip through movie sections I could find easily an interesting movie. Or if I love football or tennis I can find what&#8217;s available right now.</p>
<p>Next, suppose that I select a tennis match (the US Open is coming by the way). While I&#8217;m watching the match I could choose the social section of the Remote Control app and I can check to see if my buddies are online. I could ping them to watch the match together and chat using text messages, VOIP, or video calls directly from the tablet device.</p>
<p>While enjoying the match together with my friends, my wife is on the way home. She has a smartphone as well and because of that I can get a notification on my smartphone or tablet that she is quite close to home. So I can go to the kitchen and start preparing the dinner. She could have left for me instructions for me (using her smartphone or personal computer) and I could check them on my device or using the fridge integrated tablet (did I mention the fridge has an integrated tablet?).</p>
<p>While cooking some delicious dishes somebody rings the doorbell. My tablet pop ups a notification and with one tap I can see who&#8217;s outside and decide to open the door or to ask him what he wants.</p>
<p>My wife wants a new couch and I start browsing for options using my laptop. Once I found something that looks great I choose to display the web site on my TV so we can see what it looks like. While the images are displayed on the TV I use my laptop to navigate, rotate, or zoom the images.</p>
<p>The next morning, as we are getting ready to leave the house I could check the car status on my phone: fuel level, service notifications, outside temperature. As I arrive at the office I realize that I forgot to program the air conditioning unit. I just fix this using my mobile phone.</p>
<h2>Present or the land of opportunities</h2>
<p>Now back to reality. Most of what I have described here is already possible. Of course there is no off- the-shelf solution but a smart developer can create software that makes different devices work together. I&#8217;ve been thinking about this a lot lately and also I&#8217;ve been talking to others smarter than me (fellow evangelist Mark Doherty has lots of idea about this cross device experience).</p>
<p>And the reason we don&#8217;t have off-the-shelf solutions (or solutions that do exist are very expensive) is that we don&#8217;t have a standard that is implemented by all the manufacturers who build smart devices. Manufacturers will have to expose some of the core functionality of their devices to third parties as well if we want to build software like my &#8220;Remote Control&#8221; example. Today it is pretty hard to come in as a third party developer/company and try to build in some interoperability.</p>
<p>How is this post related to what I&#8217;m usually talking about on my blog? Well, you can do many things with the Flash Platform since you can use it to build stuff for so many devices (personal computers, embedded devices, mobile devices, Arduino and Phidgets). Maybe we can start building cool prototypes and go after the big consumer electronics manufacturers and show them what is possible to do. This is one way to turn around this issue.</p>
<p>I don&#8217;t have enough insight into the consumer industry so what I&#8217;m about to say could be horribly wrong. I have the impression that many of the big players (companies who build TVs, cars, broadcasters and content providers) are just missing this. There is no doubt in my mind that one way or another we will end up talking about this type of fragmentation using the past tense. Until then, I wish you an amazing weekend and don&#8217;t forget to post a comment if you have something to share!</p>
<p>PS 1. Almost two years ago I wrote a <a href="http://corlan.org/2009/09/24/web-3-0-or-just-augmented-reality-always-connected-always-in-sync/">post</a> on a somehow related matter (augmented reality + always connected/synced). Back then I was pretty sure that in about two years we would have something like that available.</p>
<p>PS 2. There are some companies who are working in this direction (use your mobile device with your television, making home automation more accessible) but these examples are far too few.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/QefP4ME-7zA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/08/05/about-different-types-of-fragmentation/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/08/05/about-different-types-of-fragmentation/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=about-different-types-of-fragmentation</feedburner:origLink></item>
		<item>
		<title>About Tablets and Smartphones</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/_KrDYY8RHj8/</link>
		<comments>http://corlan.org/2011/07/29/about-tablets-and-smartphones/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 16:36:03 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3060</guid>
		<description><![CDATA[
			
				
			
		
Lately, it is quite impossible to attend a software conference and not see sessions dedicated to mobile  development. This is the hot topic of the day and rightly so, I believe. However, I have the impression that many people think that tablets and smartphones are almost the same thing. This is something that I [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/07/29/about-tablets-and-smartphones/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F07%2F29%2Fabout-tablets-and-smartphones%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F07%2F29%2Fabout-tablets-and-smartphones%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Lately, it is quite impossible to attend a software conference and not see sessions dedicated to mobile  development. This is the hot topic of the day and rightly so, I believe. However, I have the impression that many people think that tablets and smartphones are almost the same thing. This is something that I do not believe is true. Furthermore, I think that because of this belief held by others many tablet applications end up being just a scaled up version of smartphone apps. If a tablet is just a phone with a bigger screen then a tablet app is just a bigger resolution smartphone app, right?</p>
<p>Let&#8217;s see why do I think that a tablet it is not just a bigger phone.</p>
<h2>Tablets are more powerful than smartphones</h2>
<p>This seems to be just a truism. Well, it is and yet most applications that run on tablets and smartphones tend to offer the same set of features and experience.</p>
<p>This is  suboptimal because on a tablet you have more storage space, a more powerful processor, and a bigger screen. And, if the battery doesn&#8217;t last for a full day it is not a tragedy. Is not like you end up in the middle of nowhere with a dead phone :)</p>
<p>All these differences should be exploited to create tablet applications that help people to do more than what they are able to do on a smartphone. If you take into account only the bigger screen you have something that enables people to read for hours without getting teary eyed. When more storage space is available , for example, why not let the user decide how many GB your application can use and offer him a true offline experience for things like email, news, RSS feeds, videos, and so on.</p>
<h2>Tablets are shared smartphones are personal</h2>
<p>Correct me if I&#8217;m wrong, but I have the feeling that, at least in the case of home users, a tablet is shared. This is not the case with your smartphone. You don&#8217;t say &#8220;hey mate, here is my phone. Just return it  in four hours.&#8221;</p>
<p>And if this is true, why are so many tablets apps built with a single user in mind? How can you have a tablet shared when you have to logout from your social or email accounts in order to let the other user do something?</p>
<p>Again, this feels to me like a big opportunity that it is missed. Why not enable multiusers for them and support on all the apps for which it makes sense? Remember, you do have plenty of storage space&#8230;</p>
<h2>The Missed Opportunity</h2>
<p>I think that this tablet shortsightedness is part of the reason for what we are seeing today: there a far fewer apps for tablets than for phones. And this is true for all the application stores.</p>
<p>I think that developers have a real opportunity here, and that for now it is just being missed. Once we fully understand that tablets and smartphones are different and people want and should use them differently, we will see much more innovation.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/_KrDYY8RHj8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/07/29/about-tablets-and-smartphones/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/07/29/about-tablets-and-smartphones/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=about-tablets-and-smartphones</feedburner:origLink></item>
		<item>
		<title>Adobe AIR and Sony Tablet Opportunities Webinar</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/lOSmP2CP1I0/</link>
		<comments>http://corlan.org/2011/07/20/adobe-air-and-sony-tablet-opportunities-webinar/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 08:07:33 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3051</guid>
		<description><![CDATA[
			
				
			
		
Today, July 20th, join Adobe &#38; Sony for a webinar on Sony Tablet devices and the Adobe AIR App Challenge. Fellow evangelists, Ryan Stewart and Mark Doherty, will present the two webinars:

11:00 AM &#8211; 12:00 PM US/Pacific Time &#8211; Mark Doherty
7:00 PM &#8211; 8:00 PM US/Pacific Time &#8211; Ryan Stewart

You can register here.
]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/07/20/adobe-air-and-sony-tablet-opportunities-webinar/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F07%2F20%2Fadobe-air-and-sony-tablet-opportunities-webinar%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F07%2F20%2Fadobe-air-and-sony-tablet-opportunities-webinar%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img src="http://corlan.org/wp-content/uploads/2011/07/6858_aaac_adc220x116.jpg" alt="" width="220" height="116" align="right" />Today, July 20th, join Adobe &amp; Sony for a webinar on Sony Tablet devices and the <a href="http://www.airappchallenge.com/">Adobe AIR App Challenge</a>. Fellow evangelists, Ryan Stewart and Mark Doherty, will present the two webinars:</p>
<ul>
<li><strong>11:00 AM &#8211; 12:00 PM US/Pacific Time &#8211; Mark Doherty</strong></li>
<li><strong>7:00 PM &#8211; 8:00 PM US/Pacific Time &#8211; Ryan Stewart</strong></li>
</ul>
<p>You can register <a href="http://www.adobe.com/cfusion/event/index.cfm?event=detail&amp;id=1851799&amp;loc=en_us">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/lOSmP2CP1I0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/07/20/adobe-air-and-sony-tablet-opportunities-webinar/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/07/20/adobe-air-and-sony-tablet-opportunities-webinar/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-air-and-sony-tablet-opportunities-webinar</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 35.295 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-02-09 13:50:57 -->

