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

<channel>
	<title>Words, punctuated &#187; Flex</title>
	<atom:link href="http://probertson.com/articles/category/flex/feed/" rel="self" type="application/rss+xml" />
	<link>http://probertson.com</link>
	<description>Thoughts on web development, user-centered design, code, etc. by Paul Robertson</description>
	<lastBuildDate>Tue, 20 Jul 2010 21:29:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>&#8220;Adobe AIR data privacy and security&#8221; - slides, notes, links</title>
		<link>http://probertson.com/articles/2009/06/09/adobe-air-data-privacy-and-security-slides-notes-links/</link>
		<comments>http://probertson.com/articles/2009/06/09/adobe-air-data-privacy-and-security-slides-notes-links/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 17:03:48 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Application Design]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Privacy/security]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[local SQL database]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=279</guid>
		<description><![CDATA[On May 20, 2009 at the 360&#124;Flex conference in Indianapolis I gave a presentation titled &#8220;Adobe AIR data privacy and security.&#8221; As I always do (and after a bit of a delay), here are the slides from my presentation. I&#8217;ve added fairly lengthy notes to the slides (I had to make the font smaller so [...]]]></description>
			<content:encoded><![CDATA[<p>On May 20, 2009 at the 360|Flex conference in Indianapolis I gave a presentation titled &#8220;Adobe AIR data privacy and security.&#8221; As I always do (and after a bit of a delay), here are the slides from my presentation. I&#8217;ve added fairly lengthy notes to the slides (I had to make the font smaller so they&#8217;d fit on the pages) so it&#8217;s more than just bullet points.</p>
<p><a href="/resources/2009/06/09/air-data-privacy-security-slides-links.zip">Adobe AIR data privacy and security slides, notes, and links</a> (1 MB .zip)</p>
<p>As a side note for those who actually attended the presentation, in retrospect I think I over-emphasized the security concerns and didn&#8217;t emphasize enough that there are plenty of use cases for which AIR is definitely secure &#8212; especially in the case where you need to keep the user&#8217;s private data secure. Hopefully the notes that accompany the slides help to clarify this somewhat.</p>
<p>I also used and referred to a number of resources in my presentation, which are listed below. The download .zip with the slides also includes an html page with all these links.</p>
<h2>Introduction</h2>
<ul>
<li>&quot;<a href="http://tv.adobe.com/#vi+f15384v1025">Maintaining security with Adobe AIR</a>&quot; by Ethan Malasky and Peleus Uhley (Adobe MAX 2008)</li>
</ul>
<h2>Background</h2>
<ul>
<li>&quot;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7fa3.html">AIR security</a>&quot; (Adobe AIR documentation)</li>
<li>&quot;<a href="http://blogs.adobe.com/simplicity/2009/03/why_air_does_not_include_your_favorite_feature.html">Why Adobe AIR Doesn&#8217;t (Yet) Include the Feature You Most Want</a>&quot; by Oliver Goldman</li>
<li>&quot;<a href="http://tv.adobe.com/#vi+f15384v1102">Understanding the Flash Player Security Model</a>&quot; by Deneb Meketa (Adobe MAX 2008)</li>
<li>&quot;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS34990ABF-C893-47ec-B813-9C9D9587A398.html">Considerations for using encryption with a database</a>&quot; (Adobe AIR documentation)</li>
<li>&quot;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118676a5be7-8000.html">Using digital rights management</a>&quot; (Adobe AIR documentation)</li>
<li>Operating system security (user and &quot;admin&quot; rights)
<ul>
<li>&quot;<a href="http://blogs.adobe.com/simplicity/2009/04/what_are_administrative_rights.html">What are Adminstrative Rights, Anyway?</a>&quot; by Oliver Goldman</li>
<li>&quot;<a href="http://blogs.adobe.com/simplicity/2009/04/does_installing_an_air_app_require_admin_rights.html">Does Installing an AIR Application Require Admin Rights?</a>&quot; by Oliver Goldman</li>
</ul>
</li>
<li>Source code visibility
<ul>
<li><a href="http://www.buraks.com/asv/">Action Script Viewer (ASV)</a></li>
<li>&quot;<a href="http://www.gotoandlearn.com/play?id=70">Ethical SWF Decompiling</a>&quot; by Lee Brimelow</li>
<li><a href="http://www.nitrolm.com/home">Nitro-LM</a></li>
</ul>
</li>
<li>Encryption: ActionScript  crypto libraries:
<ul>
<li><a href="http://code.google.com/p/as3crypto/">as3crypto</a></li>
<li><a href="http://labs.adobe.com/wiki/index.php/Alchemy:Libraries">OpenSSL (partially) cross-compiled to ActionScript</a> using <a href="http://labs.adobe.com/technologies/alchemy/">Alchemy</a></li>
</ul>
</li>
</ul>
<h2>AIR application installation</h2>
<ul>
<li>Sign your app with a trusted cert
<ul>
<li>&quot;<a href="http://www.ddj.com/architect/210004209">Code Signing in Adobe AIR</a>&quot; by Oliver Goldman</li>
<li>&quot;<a href="http://www.stage.adobe.com/devnet/air/articles/signing_air_applications.html">Digitally signing Adobe AIR applications</a>&quot; by Todd Prekaski</li>
<li>Promotion: get a free signing certificate (while supplies last) by submitting your app to the <a href="http://www.adobe.com/go/airmarketplace">Adobe AIR marketplace</a></li>
</ul>
</li>
<li>Plan for updates
<ul>
<li>&quot;<a href="http://www.adobe.com/devnet/air/articles/tips_building_air_apps.html">Building AIR applications that can be easily updated</a>&quot; by David Deraedt</li>
<li>&quot;<a href="http://www.adobe.com/devnet/air/flex/quickstart/update_framework.html">Using the Adobe AIR update framework</a>&quot; Quick Start article by Jeff Swartz (Adobe AIR documentation)</li>
</ul>
</li>
</ul>
<h2>Modular applications</h2>
<ul>
<li>Sandbox bridge
<ul>
<li>&quot;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7e5c.html">Scripting between content in different domains</a>&quot; (Adobe AIR documentation)</li>
</ul>
</li>
<li>XML signature validation
<ul>
<li>&quot;<a href="http://www.adobe.com/devnet/air/flex/quickstart/xml_signatures.html">Creating and validating XML signatures</a>&quot; by Joe Ward</li>
<li>&quot;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WSe3d2d529026165536d4beb2c11c33737198-8000.html">Using the XML signature validation classes</a>&quot; (Adobe AIR documentation)</li>
<li>&quot;<a href="http://livedocs.adobe.com/flex/3/langref/index.html?flash/security/package-detail.html&amp;flash/security/class-list.html">flash.security package</a>&quot; reference (Adobe AIR documentation)</li>
</ul>
</li>
</ul>
<h2>Local shared objects</h2>
<p>[No links]</p>
<h2>Encrypted Local Store</h2>
<ul>
<li>&quot;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7e31.html">Storing encrypted data</a>&quot; (Adobe AIR documentation)</li>
<li>&quot;<a href="http://livedocs.adobe.com/flex/3/langref/index.html?flash/data/EncryptedLocalStore.html&amp;flash/data/class-list.html">EncryptedLocalStore class</a>&quot; reference (Adobe AIR documentation)</li>
</ul>
<h2>Local files</h2>
<p>[No links]</p>
<h2>Local SQL database (SQLite)</h2>
<ul>
<li>SQL injection attack
<ul>
<li>&quot;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7d42.html">Using parameters in statements</a>&quot; (Adobe AIR documentation)</li>
<li>&quot;<a href="http://livedocs.adobe.com/flex/3/langref/index.html?flash/data/SQLStatement.html#parameters&amp;flash/data/class-list.html">SQLStatement.parameters property</a>&quot; reference (Adobe AIR documentation)</li>
</ul>
</li>
<li>Encrypted database
<ul>
<li>&quot;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS8AFC5E35-DC79-4082-9AD4-DE1A2B41DAAF.html">Using encryption with SQL databases</a>&quot; (Adobe AIR documentation)</li>
<li>&quot;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS44EC31A7-61B1-4e0a-8C61-D720AA95DE03.html">Using the EncryptionKeyGenerator class to obtain a secure encryption key</a>&quot; (Adobe AIR documentation)</li>
<li><a href="http://code.google.com/p/as3corelib/">as3corelib project</a> (includes the EncryptionKeyGenerator class and hashing algorithms</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2009/06/09/adobe-air-data-privacy-and-security-slides-notes-links/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Thoughts from 360&#124;Flex day one</title>
		<link>http://probertson.com/articles/2009/05/18/thoughts-from-360flex-day-one/</link>
		<comments>http://probertson.com/articles/2009/05/18/thoughts-from-360flex-day-one/#comments</comments>
		<pubDate>Tue, 19 May 2009 03:49:21 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Sites to remember]]></category>
		<category><![CDATA[Unit testing]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=276</guid>
		<description><![CDATA[Here are a few things that stood out to me the most in this great day at the greatest Flex conference on the planet:

FlexUnit 4. Wow. Big update. Very nice new features. Time to get (back) into it. (presentation by Michael Labriola)
Renaun Erickson&#8217;s Structured Log Testing framework. Another great, unexpected surprise. I didn&#8217;t really have [...]]]></description>
			<content:encoded><![CDATA[<p>Here are a few things that stood out to me the most in this great day at <a href="http://360flex.com/">the greatest Flex conference on the planet</a>:</p>
<ul>
<li><a href="http://opensource.adobe.com/wiki/display/flexunit/FlexUnit">FlexUnit 4</a>. Wow. Big update. Very nice new features. Time to get (back) into it. (presentation by <a href="http://blogs.digitalprimates.net/codeslinger/">Michael Labriola</a>)</li>
<li><a href="http://renaun.com/blog/">Renaun Erickson</a>&#8217;s <a href="http://structuredlogs.com/">Structured Log Testing framework</a>. Another great, unexpected surprise. I didn&#8217;t really have plans to go to this session except that Renaun&#8217;s such a smart, friendly guy. And frankly, I&#8217;ve never really had enough interest to take a look at his work on this project so far. Boy am I glad I changed my mind. This is definitely a testing approach I can get into &#8212; much less overhead than other approaches I&#8217;ve seen. Getting going with it is only barely more work than adding <code>trace()</code> calls. And the result is certainly infinitely more valuable.</li>
</ul>
<p>Considering I didn&#8217;t come to Indianapolis with any real interest in hearing more about testing&#8230;I&#8217;m surprised to find myself so excited by what I saw today. Today is a great day for Flex testing, that&#8217;s for sure.</p>
<p>I also got to hear some interesting ideas and future plans from <a href="http://jacwright.com/">Jacob Wright</a> and <a href="http://www.xtyler.com/">Tyler Wright</a>. (They made me a bit jealous &#8212; I wish I had a Flex programmer brother that I could see at conferences.) If you&#8217;re in Indianapolis, I recommend checking out their &#8220;write-in&#8221; session on the <a href="http://www.flightxd.com/flightframework/">Flight Framework</a> at 10am Tuesday in the Illinois East room.</p>
<p>Other less code-centric, but interesting, tidbits:</p>
<ul>
<li><a href="http://joeberkovitz.com/">Joe Berkovitz</a> is an avid mountain biker.</li>
<li><a href="http://blog.benstucki.net/">Ben Stucki</a> has a sweet five-year-old daughter who likes deep-fried calamari and pasta, although she wasn&#8217;t able to finish her macaroni and cheese at <a href="http://www.bucadibeppo.com/">Buca di Beppo</a>, where apparently even the child meals are sized to feed 3-4 people.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2009/05/18/thoughts-from-360flex-day-one/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>A busy (and exciting) May for the Flex community</title>
		<link>http://probertson.com/articles/2009/05/05/a-busy-may-for-flex-community/</link>
		<comments>http://probertson.com/articles/2009/05/05/a-busy-may-for-flex-community/#comments</comments>
		<pubDate>Tue, 05 May 2009 19:57:47 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex Builder]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=274</guid>
		<description><![CDATA[In case you&#8217;ve missed the announcements, the month of May feels like it&#8217;s overflowing with community events. Here&#8217;s what&#8217;s on my schedule so far for May 2009 (And I strongly endorse these. With the possible exception of the third one =):

SilvaFUG North (SF) May meeting (May 12): This is basically a pre-event for FlashCamp, with [...]]]></description>
			<content:encoded><![CDATA[<p>In case you&#8217;ve missed the announcements, the month of May feels like it&#8217;s overflowing with community events. Here&#8217;s what&#8217;s on my schedule so far for May 2009 (And I strongly endorse these. With the possible exception of the third one =):</p>
<ul>
<li><a href="http://silvafug.org/">SilvaFUG North (SF) May meeting</a> (May 12): This is basically a pre-event for FlashCamp, with presentations on Flex-related designer concepts and designer/developer workflow. I&#8217;ve been away from the design world for a while, so I&#8217;m excited for the &#8220;refresher&#8221; course.</li>
<li><a href="http://360Flex.com/">360|Flex Indianapolis</a> (May 18-20): I&#8217;ll be there, speaking on &#8220;AIR data privacy and security&#8221;, and you&#8217;ll also find a host of the best and friendliest Flex developers I&#8217;ve ever met, including a healthy contingent from the Flex engineering and evangelism teams. If I had to choose one conference to go to (and I probably do, this year) 360|Flex is it for me.</li>
<li><a href="http://iummug.indiana.edu/">Bloomington, Indiana Adobe users&#8217; groups</a> (May 21): While I&#8217;m in Indiana, I&#8217;ll be heading down to Bloomington to speak to the users&#8217; group(s). My presentation topic is still being finalized, but it looks like it&#8217;s going to be something around Flash/Flex Designer/Developer collaboration (notice a trend?). I&#8217;m also hoping to have a bit of time to catch up with friends, colleagues, professors, etc. &#8212; I went to grad school at Indiana University and worked for IU after graduation, living in Bloomington for just under six years total.</li>
<li><a href="http://www.mikechambers.com/blog/2009/05/05/flashcamp-san-francisco-may-29th-flex-4-flash-catalyst-flex-builder-4/">FlashCamp San Francisco</a> (May 29): Back in SF, at the Adobe office, this is the preview event that&#8217;s not to be missed, covering all things Flex 4/Flex Builder &#8220;Gumbo&#8221;/Flash Catalyst. I won&#8217;t be speaking at this one, but I&#8217;ll be hanging around learning more Flex 4 goodness, talking to developers (as part of the AIR team), etc.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2009/05/05/a-busy-may-for-flex-community/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>360&#124;Flex slides for &#8220;AIR SQLite: An optimization conversation&#8221;</title>
		<link>http://probertson.com/articles/2008/08/22/360flex-slides-for-air-sqlite-optimization-conversation/</link>
		<comments>http://probertson.com/articles/2008/08/22/360flex-slides-for-air-sqlite-optimization-conversation/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 00:16:24 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[local SQL database]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=188</guid>
		<description><![CDATA[Updates (Oct. 30, 2008): The video of my presentation has been posted, so I added a link to it at the bottom of this post. Also, I just learned about another AIR-based SQLite admin tool which looks interesting, so I added it to the list of resources even though it&#8217;s obviously not discussed in the [...]]]></description>
			<content:encoded><![CDATA[<p class="editornote">Updates (Oct. 30, 2008): The video of my presentation has been posted, so I added a link to it at the bottom of this post. Also, I just learned about another AIR-based SQLite admin tool which looks interesting, so I added it to the list of resources even though it&#8217;s obviously not discussed in the presentation.</p>
<p>As I mentioned briefly before, this week I presented at the 360|Flex San Jose (August 2008) conference. My presentation was titled &#8220;Adobe AIR SQLite: An optimization conversation.&#8221; As I mentioned in the presentation, the term &#8220;optimization&#8221; could mean a few different things &#8212; for example, optimization meaning improving performance, or optimization meaning improving developer productivity. While my presentation focused mostly on the first type of optimization, I included suggestions for tools, libraries, and strategies that fall in the &#8220;developer productivity&#8221; type of optimization as well.</p>
<p>Anyway, as always I&#8217;m happy to make my presentation materials available. Here are the slides (with some notes) from my presentation:</p>
<p><a href="/resources/2008/08/22/air_sqlite_optimization_slides.zip">&#8220;Adobe AIR SQLite: An optimization conversation&#8221; slides</a> (PDF in .zip - 504kb)</p>
<p>I don&#8217;t really have any specific code examples, apart from what&#8217;s in the slides, so there&#8217;s no &#8220;source code&#8221; download. However, I did link to a lot of external tools and resources (including a few of my own). To save you the trouble of digging into the PDF, here are the links:</p>
<p>Tools</p>
<ul>
<li><a href="http://coenraets.org/blog/2008/02/air-based-sqlite-admin-updated-for-beta-3/">Cristophe Coenraets&#8217; &#8220;SQLite Admin&#8221;</a></li>
<li><a href="/projects/doppler-air-sql-admin-tool/">My tool for testing queries</a></li>
<li><a href="http://www.dehats.com/drupal/?q=node/59">&#8220;Lita&#8221; by David Deraedt</a> (I learned about this one after the presentation, so it&#8217;s not discussed in my slides/video, but I thought it&#8217;d be worth mentioning anyway.)</li>
</ul>
<p>Application architecture/patterns/libraries</p>
<ul>
<li><a href="http://www.peterelst.com/blog/2008/04/07/introduction-to-sqlite-in-adobe-air/">SQLite MXML wrapper classes</a> (Peter Elst)</li>
<li><a href="http://www.brandonellis.org/?p=49">Data access layer</a> (Brandon Ellis)</li>
<li><a href="http://code.google.com/p/asqlib/">asqlib SQL statement generator</a> (Miran Loncaric)</li>
<li>&#8220;Command&#8221; classes (me) as <a href="/projects/addressbook/">demonstrated by my AddressBook sample application</a></li>
<li><a href="http://code.google.com/p/air-activerecord/">AIR ActiveRecord source</a> and <a href="http://jacwright.com/blog/79/air-activerecord-is-open-source/">blog post explaining its usage</a> (Jacob Wright)</li>
<li><a href="http://www.ericfeminella.com/blog/2008/06/22/air-cairngorm-20/">AIR SQLite Cairngorm services</a> (Eric Feminella)</li>
<li>Connection and statement pools, mentioned (with source code) in the article <a href="http://www.adobe.com/devnet/air/flex/articles/air_sql_operations.html">User experience considerations with SQLite operations</a> (Daniel Rinehart)</li>
</ul>
<p>Finally, as you may have heard, Adobe sponsored the recording of every presentation at 360|Flex, and they&#8217;re all going to be made available free of charge via a channel in Adobe Media Player. They&#8217;re rolling them out in phases, <span class="cut">and mine isn&#8217;t available yet. When it is, I&#8217;ll update this post with the video as well.</span> Update: the video is <a href="http://onflash.org/ted/2008/10/360flex-sj-2008-air-sqlite-optimization.php">now available on Ted Patrick&#8217;s blog</a> as well as in Adobe Media Player.</p>
<p>In the mean time, 360|Flex was full of awesome presentations. I wasn&#8217;t able to get to all the ones I wanted to see, due to conflicts and me trying to finish up preparation for my presentation. So I&#8217;m going to be spending some time watching many of those videos as well. If you&#8217;d like to see the videos, Ted Patrick has posted instructions on his blog:</p>
<p><a href="http://www.onflex.org/ted/2008/08/360flex-sessions-media-rss-feed.php">How to view 360|Flex San Jose 8/08 session videos in Adobe Media Player</a></p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/08/22/360flex-slides-for-air-sqlite-optimization-conversation/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Slides and files for &#8220;AIR, Windows, Menus, and the System Tray&#8221;</title>
		<link>http://probertson.com/articles/2008/06/04/slides-and-files-for-air-windows-menus-and-the-system-tray/</link>
		<comments>http://probertson.com/articles/2008/06/04/slides-and-files-for-air-windows-menus-and-the-system-tray/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 23:24:29 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=174</guid>
		<description><![CDATA[As I&#8217;ve mentioned before, a couple of weeks ago at the Webmaniacs conference I presented a session titled &#8220;Adobe AIR: Windows, Menus, and the System Tray&#8221; (and I also presented the same material in a partially different form over the course of two SilvaFUG meetings. The presentation covers those three aspects of Adobe AIR, specifically [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ve mentioned before, a couple of weeks ago at the <a href="http://webmaniacsconference.com/">Webmaniacs conference</a> I presented a session titled &#8220;Adobe AIR: Windows, Menus, and the System Tray&#8221; (and I also presented the same material in a partially different form over the course of two <a href="http://silvafug.org/">SilvaFUG</a> meetings. The presentation covers those three aspects of Adobe AIR, specifically using Flex components when they&#8217;re available. The coverage is pretty thorough in the broad sense, plus it talks about many of the issues you might run into working with these aspects of AIR.</p>
<p>In all those presentations I promised to make my slides and code available. For those of you who attended my presentations these are a long time coming; for those who attended my session at Webmaniacs/Flexmaniacs, these are also somewhat overdue.</p>
<p>In any case, after deadlines, conference, and illness, here are the slides and files for my Webmaniacs session &#8220;Adobe AIR: Windows, Menus, and the System Tray&#8221; (and my two SilvaFUG presentations that were based on that session):</p>
<ul>
<li><a href="http://probertson.com/resources/2008/06/04/air_windows_menus_system_tray_presentation.zip">&#8220;Adobe AIR: Windows, Menus, and the System Tray&#8221; slides and files</a> (2.4 MB .zip)</li>
</ul>
<p>The .zip file contains three files and a folder:</p>
<ul>
<li>Webmaniacs 2008 Slides for presentation.pdf: PDF &#8220;notes pages&#8221; printout of my presentation &#8212; each page contains one slide plus any notes that I added.</li>
<li>Exercises.pdf: Since this is a &#8220;hands-on&#8221; presentation I created this document that contains step-by-step instructions for all the exercises. Using this plus the files below you should be able to work through all the exercises for the session.</li>
<li>Code Snippets for exercises.txt: While all the code listings for the exercises are available in the PDF, a few of them are really long. In any case, if you&#8217;d rather copy and paste instead of type as you work through the exercises you can get the code from this file.</li>
<li>Exercises_workspace_start/: A Flex Builder workspace with the &#8220;starting state&#8221; of some of the exercises for the session. Most of the exercises just start from a blank screen or continue a previous exercise, but for a few I set up the UI ahead of time to save time, and those files are in this folder.</li>
</ul>
<p>Enjoy! As always, please leave comments and feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/06/04/slides-and-files-for-air-windows-menus-and-the-system-tray/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New ActionScript unit testing framework</title>
		<link>http://probertson.com/articles/2008/05/01/new-actionscript-unit-testing-framework/</link>
		<comments>http://probertson.com/articles/2008/05/01/new-actionscript-unit-testing-framework/#comments</comments>
		<pubDate>Fri, 02 May 2008 03:58:09 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Sites to remember]]></category>
		<category><![CDATA[Unit testing]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=172</guid>
		<description><![CDATA[Back in November 2005 (yes, 2.5 years ago!) I wrote an article about how data types and type checking work in ActionScript. ActionScript is different than many languages, in that the ActionScript compiler can be used for compile-time type checking (or not), and at runtime it is a strongly typed language, but it also has [...]]]></description>
			<content:encoded><![CDATA[<p>Back in November 2005 (yes, 2.5 years ago!) I wrote <a href="/articles/2005/11/08/actionscript-3-unit-testing-recommended/">an article about how data types and type checking work in ActionScript</a>. ActionScript is different than many languages, in that the ActionScript compiler can be used for compile-time type checking (or not), and at runtime it is a strongly typed language, but it also has features of dynamically typed languages. This allows for some flexibility but also means that you have to be careful about testing your code (because the compiler won&#8217;t always catch everything).</p>
<p>My conclusion (not original by any means) was that unit testing is an important tool for ActionScript developers. I&#8217;ve tried a couple of ActionScript unit testing frameworks (<a href="http://www.asunit.org/">ASUnit</a> and <a href="http://code.google.com/p/as3flexunitlib/">FlexUnit</a>). And finally getting to the point of this post, I was interested to learn today that the crew at <a href="http://www.digitalprimates.net/">Digital Primates</a> is releasing <a href="http://code.google.com/p/dpuint/">an open source unit testing framework for Flex, known as &#8220;dpunit&#8221;</a>.</p>
<p>(via <a href="http://jessewarden.com/">Jesse Warden</a> via <a href="http://twitter.com/jesterxl">Twitter</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/05/01/new-actionscript-unit-testing-framework/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flex 4 (&#8220;Gumbo&#8221;) - first details revealed</title>
		<link>http://probertson.com/articles/2008/04/11/flex-gumbo-details-revealed/</link>
		<comments>http://probertson.com/articles/2008/04/11/flex-gumbo-details-revealed/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 23:36:16 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=169</guid>
		<description><![CDATA[The first details of the overarching &#8220;themes&#8221; for Flex 4 (&#8220;Gumbo&#8221;) have been posted on the Flex open source wiki. Four themes are listed (&#8220;Design in Mind&#8221;, &#8220;Accelerated Development&#8221;, &#8220;Horizontal Platform Improvements&#8221;, and &#8220;Broadening Horizons&#8221;) although currently only &#8220;Design in Mind&#8221; has any details.
And what nice details they are!
Here are a few highlights that stood [...]]]></description>
			<content:encoded><![CDATA[<p>The first details of <a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+4">the overarching &#8220;themes&#8221; for Flex 4 (&#8220;Gumbo&#8221;)</a> have been posted on the Flex open source wiki. Four themes are listed (&#8220;Design in Mind&#8221;, &#8220;Accelerated Development&#8221;, &#8220;Horizontal Platform Improvements&#8221;, and &#8220;Broadening Horizons&#8221;) although currently only &#8220;<a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+4#Flex4-DesigninMind">Design in Mind</a>&#8221; has any details.</p>
<p>And what nice details they are!</p>
<p>Here are a few highlights that stood out to me:</p>
<blockquote><p>Flex applications however have gained a reputation for looking too similar to each other, as many developers choose to use the Flex default look and feel (known as Halo)&#8230;we have found that it remains too challenging to create a truly custom experience. It is therefore a priority for Gumbo to make easy customization of Flex application experiences the norm instead of the exception.</p></blockquote>
<blockquote><p>Major features&#8230;component and skinning architecture&#8230;make it easier to describe experience-oriented features such as states and transitions</p></blockquote>
<p>Perhaps the most revealing part for existing Flex devs is the aptly named &#8220;Caveats and Reassurances&#8221; section:</p>
<blockquote><p>Gumbo will remain compatible with Flex 3&#8230;Over multiple releases post-Gumbo we expect to deprecate the Halo model&#8230;Halo and new Gumbo components can co-exist&#8230;new MXML features may require some changes to your existing markup. However, you can make these decisions on a file-by-file basis</p></blockquote>
<p>But my favorite line of all is in the &#8220;Related Work&#8221; section:</p>
<blockquote><p>Provide a tool in which design-oriented users can easily customize the look of individual components or entire applications. Yes, this is Thermo. We&#8217;re not discussing it here.</p></blockquote>
<p>Of course, this is all fairly in line with what&#8217;s been talked about previously, such as <a href="http://labs.adobe.com/wiki/index.php/Thermo">Thermo</a>, <a href="http://clintm.esria.com/2008/02/26/mxml-g-an-xml-abstraction-of-the-flash-player-drawing-api-and-then-some/">MXML-G</a>, <a href="http://dougmccune.com/blog/2007/10/19/my-writeup-of-ely-greenfields-max-session/">Ely&#8217;s presentation about a new component structure with separation of model and view</a>, etc. But it&#8217;s nice to see more information&#8230;and what&#8217;s not there but is hinted at is even more tantalizing.</p>
<p>I&#8217;ll definitely be watching that page for more information about &#8220;Design in Mind&#8221; and the other Flex 4 themes.</p>
<p>(via email from <a href="http://weblogs.macromedia.com/mxna/">Matt Chotin</a> &#8212; also see the <a href="http://weblogs.macromedia.com/flexteam/archives/2008/04/info_on_our_fir.cfm">announcement on the Flex team blog</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/04/11/flex-gumbo-details-revealed/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Open Source Flex Visual Graph Library</title>
		<link>http://probertson.com/articles/2008/04/02/open-source-flex-visual-graph-library/</link>
		<comments>http://probertson.com/articles/2008/04/02/open-source-flex-visual-graph-library/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 17:25:40 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Sites to remember]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2008/04/02/open-source-flex-visual-graph-library/</guid>
		<description><![CDATA[A couple of months ago at a SilvaFUG meeting I saw a demo of some graph visualization libraries &#8212; the kind of thing you use to create a graph showing nodes linked together according to various relationships.
The current &#8220;favorite&#8221; is the Flex Visual Graph Library (FVGL) Open Source Project.
Their Visual Graph explorer sample gives a [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of months ago at a <a href="http://silvafug.org/">SilvaFUG</a> meeting I saw a demo of some graph visualization libraries &#8212; the kind of thing you use to create a graph showing nodes linked together according to various relationships.</p>
<p>The current &#8220;favorite&#8221; is the <a href="http://code.google.com/p/flexvizgraphlib/">Flex Visual Graph Library (FVGL) Open Source Project</a>.</p>
<p>Their <a href="http://flexvizgraphlib.googlecode.com/svn/trunk/vgExplorer/bin/VGExplorer.html">Visual Graph explorer sample</a> gives a nice overview of the functionality that&#8217;s available.</p>
<p>Anyway, I forgot to note this earlier, so I&#8217;m adding it now, though there&#8217;s a good chance this isn&#8217;t news to anyone who&#8217;s interested in this sort of thing.</p>
<p>(via email from <a href="http://www.onflex.org/ted/">Ted Patrick</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/04/02/open-source-flex-visual-graph-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe AIR 1.0 ships! SQL changes, and other thoughts</title>
		<link>http://probertson.com/articles/2008/03/24/air-1_0-final-sql-changes-and-thoughts/</link>
		<comments>http://probertson.com/articles/2008/03/24/air-1_0-final-sql-changes-and-thoughts/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 21:04:26 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[local SQL database]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2008/03/24/air-1_0-final-sql-changes-and-thoughts/</guid>
		<description><![CDATA[Now that Adobe AIR 1.0 is in the wild, I wanted to post an update about changes that happened with the local SQL database functionality between beta 3 and the final release. Plus, I&#8217;ve had some general thoughts about the release of the software that I thought I&#8217;d share.
For some reason, the final time that [...]]]></description>
			<content:encoded><![CDATA[<p>Now that Adobe AIR 1.0 is in the wild, I wanted to post an update about changes that happened with the local SQL database functionality between beta 3 and the final release. Plus, I&#8217;ve had some general thoughts about the release of the software that I thought I&#8217;d share.</p>
<p class="editornote">For some reason, the final time that I saved this post before publishing it, my changes didn&#8217;t get saved. So if you saw this soon after it was posted, and wondered why it didn&#8217;t really talk about SQL changes, and why it had some messed up headings&#8230;that&#8217;s why. Sadly I&#8217;m sure I can&#8217;t recreate the text as well as I wrote it the first time. But here&#8217;s my best effort&#8230;</p>
<p>First of all, allow me to clear something up. I am aware that Adobe AIR 1.0 shipped almost exactly a month ago, so this shouldn&#8217;t be news to anyone who&#8217;s actually interested in it. I intentionally held off on publishing my thoughts (and a description of changes since beta 3). As a rule, I never post anything in the week or so following a big product announcement &#8212; there are so many &#8220;me too&#8221; posts about the product, and so little actual different thoughts or original ideas, that I don&#8217;t want to clog up the aggregaters by adding to the hubbub (the &#8220;MXNA firehose&#8221; as I&#8217;ve heard <a href="http://weblogs.macromedia.com/jd/">JD</a> describe it).</p>
<p>That&#8217;s not a complete excuse, of course. The truth is also that I&#8217;ve just gotten busy with a lot of post-launch cleanup activities, and of course moving ahead on future projects (Flash Player 10 and AIR 2.0), so I&#8217;ve neglected this post for longer than it deserved.</p>
<p>And now, lest I postpone it any longer, here are a few bits of news and opinion from my corner of the Flex/AIR world:</p>
<ul>
<li><a href="#sql_changes">Local SQL database changes</a></li>
<li><a href="#release">What does &#8220;finished&#8221; really mean?</a></li>
<li><a href="#flex3_source">Go right to the source</a></li>
</ul>
<h2 id="sql_changes">Local SQL database feature changes</h2>
<p>Wait a minute &#8212; didn&#8217;t I say a couple of months ago that as of beta 3 AIR is API frozen? Indeed that was the intention, and with one small exception it&#8217;s true. And that was the first thing that came to my mind when I read the notification (shortly after beta 3 was locked down) that some changes to the SQL functionality had been checked in to source control. But I was correct before &#8212; the API hasn&#8217;t changed &#8212; just one particular behavior has.</p>
<p>The specific change is with how the runtime treats column data types in database tables. In betas 1-3, AIR was consistent with the <a href="http://sqlite.org/datatype3.html#affinity">&#8220;default&#8221; SQLite behavior</a>:</p>
<blockquote>
<p>the type of a value is associated with the value itself, not with the column or variable in which the value is stored&#8230;. All other SQL databases engines that we are aware of use the more restrictive system of static typing where the type is associated with the container, not the value.</p>
<p>In order to maximize compatibility between SQLite and other database engines, SQLite support [<em>sic</em>] the concept of &#8220;type affinity&#8221; on columns. The type affinity of a column is the recommended type for data stored in that column. The key here is that the type is recommended, not required. Any column can still store any type of data, in theory. It is just that some columns, given the choice, will prefer to use one storage class over another. The preferred storage class for a column is called its &#8220;affinity&#8221;.</p>
</blockquote>
<p>So under the &#8220;affinity&#8221; system, if in your <code>CREATE TABLE</code> statement you specify that a column stores INTEGER data, and you write an <code>INSERT</code> statement that stores a String instance in that column, the runtime allows it. (I initially wrote &#8220;it works just fine&#8221; but that may not be true &#8212; since your application may be assuming that values retrieved from that column are always integers.) When I first read about this behavior when we were reviewing the spec for the feature, I recognized that it was different than what I&#8217;d done before, but I figured it was okay &#8212; I&#8217;d just have to be extra careful when inserting values into the database, and enforce the data types myself by convention even if the runtime didn&#8217;t enforce them in practice.</p>
<p>However, the feedback we got from developers was that this doesn&#8217;t really match what they&#8217;re used to from typical web app database code (which likely uses databases such as Oracle, SQL Server, or MySQL). As a result, in the final release, the declared data types of database columns are more strictly enforced. If you declare a data type for a column, then attempt to store a value that isn&#8217;t an instance of that type, the database will try to convert the value to the appropriate type (for example, turning a number into a string, or parsing a string to see if its text is actually a number). If the value can be converted, then the converted value is stored; otherwise, the runtime throws an error. (For more details, see <a href="http://livedocs.adobe.com/flex/3/langref/localDatabaseSQLSupport.html#columnAffinity">the column affinity description in the documentation</a>.)</p>
<p>Personally I&#8217;m pretty happy with this solution. It&#8217;s still a bit more flexible than the databases I mentioned before &#8212; usually they won&#8217;t even try to convert a value, and will just choke if the data type doesn&#8217;t match. But I think that the way it works in AIR 1.0 is consistent philosophically (and actually) with <a href="/articles/2005/11/08/actionscript-3-unit-testing-recommended/">the way data types work in ActionScript 3.0</a> where values can be strongly typed or weakly typed at compile time, but either way at runtime the type must match.</p>
<p>So, what do you do if you were one of the people with more SQLite experience than other db experience, of who otherwise preferred the old behavior? Well, there is still a workaround. If you don&#8217;t declare any data type for your columns, you can store data of any type without causing errors. This isn&#8217;t the same as the previous behavior, but based on some anecdotal observations I&#8217;d guess that developers who intentionally mix data types in columns are less likely to declare a column data type, in any case.</p>
<p>Also, as a side note, I decided to keep the term &#8220;column affinity&#8221; in the documentation even though the behavior changed. I did this for a couple of reasons: 1) Developers who&#8217;d been reading the docs were probably familiar with the term now, and 2) the data types still aren&#8217;t strictly enforced, in the sense that the runtime attempts to convert values before storing them (just as a default SQLite implementation does). For example, just about anything can be stored in a TEXT column without an error occurring. So in that sense, the data type specified in a <code>CREATE TABLE</code> statement is still somewhat of an &#8220;affinity&#8221; rather than a traditional strictly enforced data type.</p>
<h2 id="release">What does &#8220;finished&#8221; really mean?</h2>
<p>Not too many years ago, my definition of a &#8220;release version&#8221; of software was different than it is now. I knew that any software, no matter how much it is tested, is bound to have <em>some</em> bugs in it &#8212; it&#8217;s just not possible to ship software of any notable size without making a mistake somewhere. However, I had enough faith in big software companies that I assumed that when a company declares a product to be a &#8220;release&#8221; or &#8220;shipping&#8221; version, that it at least doesn&#8217;t have any bugs <em>that they know of</em>.</p>
<p>I&#8217;m not sure when I realized that this view is far from reality. I suppose it was probably with the first private beta I was involved with, though maybe it was before that.</p>
<p>In any case, I hope I&#8217;m not shocking anyone&#8217;s sensibilities when I point out the reality, that even though Flex 3 and AIR 1.0 have shipped, they do have bugs &#8212; and <em>Adobe even knows it</em>! The recent openness of Flex, in particular the introduction of the <a href="http://bugs.adobe.com/flex/">public Flex bugbase</a>, makes this reality much more transparent. A quick search on the Flex SDK project, looking only at bugs (as opposed to feature requests), shows 309 &#8220;open&#8221;, &#8220;in progress&#8221;, &#8220;community&#8221;, or &#8220;new&#8221; issues. And that&#8217;s not even taking into account &#8220;deferred&#8221; bugs, such as <a href="https://bugs.adobe.com/jira/browse/SDK-14339">SDK-14339 &#8220;WindowedApplication doesn&#8217;t update/show menu when it changes during runtime&#8221;</a>.</p>
<p>While Adobe AIR doesn&#8217;t have a public bugbase, that doesn&#8217;t mean it&#8217;s any more free of bugs. Try calling the <code>NativeMenu.display()</code> method on a PowerPC Mac running OS X 10.4 and you&#8217;ll see what I mean (hint: the menu appears at the mouse cursor rather than at the specified coordinates).</p>
<p>So what does &#8220;release quality&#8221; software really mean? Well, it means that it doesn&#8217;t have any bugs that are &#8220;showstopper&#8221; issues, or that are &#8220;really bad.&#8221; Yes, I&#8217;m intentionally using non-specific terms here. The reality of life is that if Adobe (or any software company) waited to release software until all known bugs are fixed, the software would never get released. So instead, they use a process that&#8217;s sort of like this (I&#8217;m generalizing and also stating this based on my own observations, not on any review of actual process or guidelines within Adobe):</p>
<ol>
<li>The decision makers figure out a date by which the software should be done. (I&#8217;m not talking about at the beginning of a product cycle &#8212; I&#8217;m starting somewhere in the middle.)</li>
<li>Throughout the process, bugs are reported. Any time a bug is reported, it is investigated and a decision is made as to whether resources can/should be allocated to fixing it. The criteria for this decision are generally based on how severe the bug is (whether it crashes the software/computer, causes data loss, is a usability issue, etc); how hard it is to fix; how much time it will take to fix; how likely it is that someone will run into the bug; whether or not there&#8217;s a workaround; etc.</li>
<li>As the product moves closer to the release date, the threshold for whether a bug will be fixed goes up &#8212; the closer the software is to the release date, the more severe and less difficult to fix a bug must be in order for it to get fixed.</li>
</ol>
<p>This can be frustrating for people who file bugs, like me. Often, due to workload and general stability issues, it&#8217;s not practical for me to start writing the documentation for a feature until it&#8217;s fairly stable and close to finished. But that means that when I do find bugs, there&#8217;s a good chance it&#8217;s too late in the process for the bug to get fixed in time for the product release.</p>
<p>Ah, tradeoffs.</p>
<h2 id="flex3_source">Go right to the source</h2>
<p>Now that Flex 3 has shipped, the <a href="http://opensource.adobe.com/wiki/display/flexsdk/Get+Source+Code">Flex 3 source code</a> is available in the Flex Subversion (SVN) repository. I&#8217;ve actually been accessing it there for a while &#8212; internally we made the switch from Perforce to Subversion around the first of the year. I was pretty worried at the time, because I had never used SVN before. The majority of the Flex 3 work was already done at that point &#8212; they were just in final bug fixing mode. We still had about a week before our content had to be locked down, so I was working furiously to try and finish up some work I was doing on the Flex AIR components. I wasn&#8217;t too excited about the prospect of switching source control systems in the middle of that crunch. Fortunately, SVN turned out to be pretty straightforward. (In case you&#8217;re wondering, I use <a href="http://tortoisesvn.net/">TortoiseSVN</a>). It&#8217;s actually been good for me to learn SVN at work &#8212; it made it easier for me to move some of my code projects over to Google Code (a few that are already there, and a few more that I&#8217;ve started but not posted on <a href="/projects/">my projects page</a> yet). So overall I give SVN thumbs up, and I&#8217;m happy that the Flex source code is available that way.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/03/24/air-1_0-final-sql-changes-and-thoughts/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>AIR beta 3 and local SQL database changes</title>
		<link>http://probertson.com/articles/2007/12/18/air-beta-3-and-local-sql-database-changes/</link>
		<comments>http://probertson.com/articles/2007/12/18/air-beta-3-and-local-sql-database-changes/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 19:55:51 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[local SQL database]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/12/18/air-beta-3-and-local-sql-database-changes/</guid>
		<description><![CDATA[Note: Sorry for the delay on this article. I composed this article a couple of weeks ago, and then I got busy with work and holidays and I forgot and didn&#8217;t publish it until now =(
If you&#8217;ve been following my posts on AIR and the SQL database functionality, you may have noticed a trend: every [...]]]></description>
			<content:encoded><![CDATA[<p class="editornote">Note: Sorry for the delay on this article. I composed this article a couple of weeks ago, and then I got busy with work and holidays and I forgot and didn&#8217;t publish it until now =(</p>
<p>If you&#8217;ve been following my posts on AIR and the SQL database functionality, you may have noticed a trend: every time there&#8217;s a new beta, I tend to go silent for a few weeks beforehand as I try to get things finished up with the documentation. Well, here we went again &#8212; another period of silence, another AIR beta.</p>
<p>The marketing team kept things pretty low-key with announcing this new beta, especially compared to previous rounds. I&#8217;m not sure of all the reasons for that, but there are a few that are important and helpful for you to know if you&#8217;re developing AIR applications:</p>
<ul>
<li>AIR is now API-frozen &#8212; as of this beta, there <strong>shouldn&#8217;t</strong> be any changes to the AIR apis. In fact, the goal was to have as few API changes as possible between AIR beta 2 and AIR beta 3, as things get closer to being locked down. Naturally, if we find a big security issue that requires us to change an API, we&#8217;re going to consider it &#8212; but aside from that, things are now the way they will be for AIR 1.0 (phew &#8212; it&#8217;s been tiring for me to update apps every beta, and I&#8217;m sure it has been for you, too).</li>
<li>Along with the new AIR beta, Adobe also released a beta of a new product code-named &#8220;<a href="http://labs.adobe.com/technologies/blazeds/">BlazeDS</a>&#8221;. This very cool offering is a free, open-source, slimmed down LiveCycle Data Services &#8212; basically it includes the RPC Components (&#8220;Flash Remoting&#8221;) functionality as well as the Messaging functionality. In addition, we&#8217;re releasing an official specification for the AMF format. While the format was (for the most part) reverse-engineered long ago, I think it&#8217;s great to have something official for all the other open-source offerings like <a href="http://www.amf-php.org/">AMFPHP</a>, <a href="http://www.fluorinefx.com/">Fluorine</a>, etc. to work from.</li>
<li>Along with beta 3, Adobe created the &#8220;<a href="http://www.adobe.com/go/marketplace">Adobe AIR Marketplace</a>&#8221; where developers can post apps for people to download and try out &#8212; basically an extension of the
<li><a href="http://labs.adobe.com/technologies/flex/flexbuilder3/">Flex 3 beta 3 is officially the last Flex 3 beta before Flex 3/AIR 1.0</a> (second paragraph, also in the <a href="http://labs.adobe.com/technologies/flex/faq.pdf">FAQ PDF</a>). &#8216;nuff said =)</li>
</ul>
<p>Of course, following the trend of my going silent before each beta, you can expect that to be magnified as we continue leading up to AIR 1.0. There have been a few things each beta that I wanted to do but had to put off until later &#8212; but of course, this time there isn&#8217;t any &#8220;until later&#8221; &#8212; so it&#8217;s now or never!</p>
<p>Talking specifically about the local SQL database functionality, there were only a few changes this beta, but they&#8217;re pretty significant and maybe even a bit sneaky so you&#8217;ll want to pay attention to them:</p>
<ul>
<li>
<p>Specifying synchronous and asynchronous execution: Synchronous database execution was added to SQLConnection in beta 2. At that point, to specify that a SQLConnection&#8217;s operations were synchronous rather than asynchronous, you had to specify a <code>true</code> parameter in the <code><a href="http://livedocs.adobe.com/labs/flex3/langref/flash/data/SQLConnection.html#SQLConnection()">SQLConnection()</a></code> constructor. Now, however, the <code>SQLConnection()</code> constructor doesn&#8217;t accept any parameters. Instead, you specify the execution mode when you open the connection to the main database. To specify that you want to use synchronous execution, you call the <code><a href="http://livedocs.adobe.com/labs/flex3/langref/flash/data/SQLConnection.html#open()">SQLConnection.open()</a></code> method; to specify async execution, you call the new <code><a href="http://livedocs.adobe.com/labs/flex3/langref/flash/data/SQLConnection.html#openAsync()">SQLConnection.openAsync()</a></code> method.</p>
<p>The most important thing to note surrounding this change is this: <em>if you&#8217;re migrating an app from beta 2 to beta 3, you may be changing the behavior of your app without even realizing it!</em> If you want a connection to be synchronous, you&#8217;ll know you have to change things because the code won&#8217;t compile (<code>SQLConnection()</code> no longer accepts a parameter). However, if you <em>want</em> you connection to be asynchronous, then if you don&#8217;t change anything the code will still work but it will actually use synchronous rather than asynchronous execution. If you have a long-running query and it&#8217;s freezing the UI now, that&#8217;s probably the reason &#8212; the exact code you used previously to specify asynchronous execution (no <code>SQLConnection()</code> parameter, and <code>open()</code> to connect the db) now is the way to specify <em>synchronous</em> execution. If your code doesn&#8217;t cause any errors, you might not even notice immediately because the SQLConnection and SQLStatement events are still triggered even in synchronous execution &#8212; so your &#8220;success&#8221; event listeners will still get called (but error listeners won&#8217;t &#8212; the operations will throw exceptions instead).</p>
</li>
<li>There were a couple of changes to the SQLError class and related classes: The <code>SQLError.code</code> property was removed (because it already inherited <code>errorID</code> from Error) and the <code>details</code> property was added, providing a more detailed error message in certain cases. Along with this, the SQLErrorCode class was removed entirely (tragically &#8212; I spent a fair amount of time hammering out those error descriptions with Jason, the engineer for the feature).</li>
</ul>
<p>I think that&#8217;s it, but please let me know if I&#8217;ve forgotten another change!</p>
<p>In the mean time, In addition to the SQL database stuff I&#8217;ve been doing more with another part of AIR that I&#8217;ve previously been working on as I&#8217;ve had time &#8212; the AIR-related Flex components. This release includes a new one, the FlexNativeMenu component, which is pretty slick. Watch for more on this in the (hopefully near) future!</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/12/18/air-beta-3-and-local-sql-database-changes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Worth watching: Flex application frameworks presentations</title>
		<link>http://probertson.com/articles/2007/10/18/flex-application-frameworks-presentations/</link>
		<comments>http://probertson.com/articles/2007/10/18/flex-application-frameworks-presentations/#comments</comments>
		<pubDate>Thu, 18 Oct 2007 16:49:08 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Application Design]]></category>
		<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/10/18/flex-application-frameworks-presentations/</guid>
		<description><![CDATA[Last week I posted some of my thoughts on the future of Flex application frameworks, which were my take-aways from the October Silicon valley Flex user&#8217;s group (a.k.a. &#8220;SilvaFUG&#8221;) users group meeting. In that post I strongly recommended watching the recordings of the presentations. The recordings are available now, so once again I highly recommend [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I posted some of <a href="/articles/2007/10/12/flex-frameworks-future/">my thoughts on the future of Flex application frameworks</a>, which were my take-aways from the October <a href="http://www.silvafug.org/">Silicon valley Flex user&#8217;s group (a.k.a. &#8220;SilvaFUG&#8221;)</a> users group meeting. In that post I strongly recommended watching the recordings of the presentations. The recordings are available now, so once again I highly recommend watching them (now that you actually <em>can</em> watch them =)</p>
<p>Here are the direct links:</p>
<ul>
<li><a href="http://adobechats.adobe.acrobat.com/p49294102/">Grant Straker on Moving ZoomFlex from a homegrown framework to Cairngorm</a></li>
<li><a href="http://adobechats.adobe.acrobat.com/p12266504/">Ali Mills and Luke Bayes on Flex application frameworks</a> (A great overview of the strengths and weaknesses of various frameworks like Cairngorm etc., from <a href="http://asserttrue.com/">two really smart developers</a>.)</li>
</ul>
<p>Enjoy!</p>
<p>(via email from <a href="http://www.silvafug.org/">SilvaFUG</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/10/18/flex-application-frameworks-presentations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The future of Flex application frameworks-my thoughts</title>
		<link>http://probertson.com/articles/2007/10/12/flex-frameworks-future/</link>
		<comments>http://probertson.com/articles/2007/10/12/flex-frameworks-future/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 16:55:14 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Application Design]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Opinions]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/10/12/flex-frameworks-future/</guid>
		<description><![CDATA[This post started out as my notes from the Oct. 11, 2007 SilvaFUG user&#8217;s group meeting, which included two talks on Flex application frameworks, but by the end I realized it was more of a restatement of (filtered through my opinion) some of the important forward-looking ideas that came out of the audience discussions and [...]]]></description>
			<content:encoded><![CDATA[<p>This post started out as my notes from the Oct. 11, 2007 SilvaFUG user&#8217;s group meeting, which included two talks on Flex application frameworks, but by the end I realized it was more of a restatement of (filtered through my opinion) some of the important forward-looking ideas that came out of the audience discussions and the presentations at that meeting. So I think it rambles more than I would normally like, but I was trying to capture my &#8220;raw thoughts&#8221; while the meeting was progressing.</p>
<p>If you&#8217;re interested in a summary of the talks, I&#8217;m afraid I didn&#8217;t do that. (But I highly recommend viewing the presentations:</p>
<ul>
<li><a href="http://adobechats.adobe.acrobat.com/p49294102/">Grant Strake on moving ZoomFlex from a homegrown framework to Cairngorm</a></li>
<li><a href="http://adobechats.adobe.acrobat.com/p12266504/">Ali Mills and Luke Bayes comparing various Flex application frameworks</a></li>
</ul>
<p>What I&#8217;ve written here is primarily just thoughts that I wanted to save for myself; things that maybe I don&#8217;t think about as often as I should, or things I want to remember about the audience of Flex and other Adobe developer products. Because I&#8217;m interested in the developer community, much of the focus is on points about the developer community that I sometimes need to remind myself of.</p>
<h2>Grant Straker</h2>
<p>The first speaker was Grant Straker, talking about his company&#8217;s choice to use a homegrown framework, and eventual decision to migrate it to Cairngorm instead. His company (<a href="http://www.strakerinteractive.co.uk/">Straker Interactive</a>) has a RAD product (&#8220;ZoomFlex,&#8221; I believe it&#8217;s called) that bundles ColdFusion and Flex to create apps quickly &#8212; you use wizards to define data structures, and the product generates database structure, backend ColdFusion, and front-end Flex code for apps using that data. (The idea is that developers then take those Flex files and customize the front-end forms, style the app, etc.)</p>
<p>Here are some interesting thoughts/points I picked up:</p>
<ul>
<li>Originally they chose not to use Cairngorm for the underlying framework for their generated code. The reason: while there are some developers who build big, fancy, complex enterprise apps, there&#8217;s also a group of developers who &#8220;just want to know what they need to know to get their job done&#8221; &#8212; which often means build basic CRUD apps as quickly and easily as possible (e.g. web-enabling existing databases, spreadsheets, etc.). This latter group was/is more in their target audience.</li>
<li>Code can be written in different ways &#8212; they try to generate code so that it&#8217;s clear and obvious what it does, and so that it can be easily extended by developers of varying levels of experience (key: don&#8217;t assume a high level of experience).</li>
<li>In retrospect, he wishes they had just stuck with Cairngorm in the beginning. Now, 1.5 years later, there&#8217;s a large community, examples, documentation, etc. making it easier for a less-experienced developer to learn enough Cairngorm that they can understand it and use it.</li>
<li>I was really amazed by how much code they are able to generate for developers. I&#8217;ve read some things about code generation tools, but I&#8217;ve never tried them out (due to the organizations I&#8217;ve worked for, and perhaps due to my personality as a developer who likes to have &#8220;control&#8221; of the code). However, I&#8217;ve definitely seen the down side of that, which is that I end up writing a lot of redundant or very similar code (especially for data access and manipulation). The &#8220;alternative&#8221; approach certainly has some attractions&#8230;</li>
<li>Part of what they include is a library of pre-built UI components. The process of migrating these components to Cairngorm has been challenging at times. One of the principles of many frameworks including Cairngorm is that the user interface code is separate from the &#8220;model&#8221; (the underlying data). However, some components by nature lend themselves to having knowledge of their underlying data (e.g. their video player component) so figuring out how to structure those components is complicated.</li>
</ul>
<h2>Luke Bayes and Ali Mills - Evaluating application frameworks for Flex</h2>
<p><a href="http://asserttrue.com/">Luke and Ali</a> came into this presentation with no background in any of the major frameworks (other than the Flex framework). This is good because they didn&#8217;t have any biases, but it means they may have some non-best-practices too.</p>
<p>This was a great talk, but there was a lot of info in a short time so again, I&#8217;m not going to bother trying to write detailed notes. I highly recommend watching <a href="http://adobechats.adobe.acrobat.com/p12266504/">the recording</a>.</p>
<p>However, once again in this presentation (in particular in the discussion afterwards) some of the same ideas came up. Luke in particular expressed a reluctance to have a prescriptive framework, because he doesn&#8217;t want to be &#8220;told how to code.&#8221; That opinion resonated with most of the audience there &#8212; but at the same time, everyone also acknowledged that the audience at a user&#8217;s group presentation isn&#8217;t really an accurate representation of the broad Flex developer community (especially the even broader community of developers who are considering Flex or who will be Flex developers in the future). If the Flex community is going to continue to grow, and be more accessible to new developers, it would be very helpful to have some prescriptive application frameworks that give people a predefined, standard architecture within which they can build their app (in the same way that Flex&#8217;s components provide user interface elements and layout elements that give developers a big head-start in building an app, compared to straight ActionScript or Flash).</p>
<p>What is the &#8220;next frontier&#8221; of Flex developers? Is it the &#8220;VB developer&#8221;<a class="footnote" href="#noteVBDeveloper">1</a> (the &#8220;behind-the-firewall&#8221; corporate developer). If so, then to support that group of developers we&#8217;re going to need prescriptive frameworks that are easy to get into (&#8220;accessible&#8221; in Luke and Ali&#8217;s terms), that do as much work for you as they can, but that still don&#8217;t get in the way as an app grows in complexity.</p>
<p>At the same time, more advanced Flex developers may not want such a framework, and they certainly aren&#8217;t going to want to have to carry along the &#8220;baggage&#8221; (meaning both prescriptive architecture imposed on them, and literal baggage in download size) that would come along with such a framework if they&#8217;re not using it.</p>
<p>Personally, I think that&#8217;s an extremely important point for both Adobe and third-party framework developers to keep in mind going into the future.</p>
<p id="noteVBDeveloper">&#8220;VB Developer&#8221; is my name for a developer who works in a medium-large corporation or organization, perhaps coding apps for a group within that organization, who doesn&#8217;t really want to learn everything there is to know about Flex (or their language of choice), or become a &#8220;guru,&#8221; but rather just wants to build their app and make it work nicely, but do so as quickly and painlessly as possible. Yes, the name &#8220;VB developer&#8221; is rather dated, since at this stage in history most such developers are doing web-based apps, probably using ASP.NET or J2EE in a large, standardized org or perhaps PHP or Ruby in a smaller or more independent group.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/10/12/flex-frameworks-future/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Knowing when to not use AIR</title>
		<link>http://probertson.com/articles/2007/09/14/knowing-when-to-not-use-air/</link>
		<comments>http://probertson.com/articles/2007/09/14/knowing-when-to-not-use-air/#comments</comments>
		<pubDate>Fri, 14 Sep 2007 22:58:03 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Application Design]]></category>
		<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[User-centered design]]></category>
		<category><![CDATA[Web Browsers]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/09/14/knowing-when-to-not-use-air/</guid>
		<description><![CDATA[Simplified Chaos has an insightful article about deciding when to use AIR and when to stick to browser-based Flash/Flex. His recommendation is to use the browser by default, and only move to AIR if you really need that desktop functionality. His reasoning, which I can agree with, is that people are much less likely to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.simplifiedchaos.com/">Simplified Chaos</a> has an insightful article about deciding <a href="http://www.simplifiedchaos.com/2007/08/29/too-many-adobe-air-applications-that-shouldnt-be/">when to use AIR and when to stick to browser-based Flash/Flex</a>. His recommendation is to use the browser by default, and only move to AIR if you really need that desktop functionality. His reasoning, which I can agree with, is that people are much less likely to try out a desktop app that they have to install (and probably uninstall later) than to just look at something in a browser. I definitely agree &#8212; I hadn&#8217;t really realized it until reading this, but I&#8217;ve noticed that when I hear about a new AIR app then I always hope the web site has some screenshots or videos of the app in action, so that I don&#8217;t have to install it to try it out.</p>
<p><a href="http://www.bit-101.com/blog/">Keith Peters</a> wrote <a href="http://www.bit-101.com/blog/?p=1018">a similar post on the same topic</a>, which I also recommend.</p>
<p>(via <a href="http://jessewarden.com/">Jesse Warden</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/09/14/knowing-when-to-not-use-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brandon Ellis&#8217;s DataAccess Utility class</title>
		<link>http://probertson.com/articles/2007/06/19/brandon-ellis-dataaccess-class/</link>
		<comments>http://probertson.com/articles/2007/06/19/brandon-ellis-dataaccess-class/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 16:17:56 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Application Design]]></category>
		<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[local SQL database]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/06/19/brandon-ellis-dataaccess-class/</guid>
		<description><![CDATA[If you&#8217;re looking to simplify the local database access part of your AIR app, this might be the ticket. Brandon Ellis has written a no-frills wrapper class for AIR local database operations. The biggest benefit it provides is that if you add, delete, or update data in a table, it automatically updates whatever component is [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re looking to simplify the local database access part of your AIR app, this might be the ticket. Brandon Ellis has written a <a href="http://www.brandonellis.org/?p=49">no-frills wrapper class for AIR local database operations</a>. The biggest benefit it provides is that if you add, delete, or update data in a table, it automatically updates whatever component is displaying the data from the related SELECT statement.</p>
<p>The part that caught my eye the most was that the wrapper class doesn&#8217;t dispatch any events to notify the view when the operations have completed. How, I asked myself, does it notify the view when the updated data loads? After a few seconds I realized the answer &#8212; it&#8217;s the magic of Flex data binding. The DataAccess class exposes the SELECT results as a property (<code>dbResult</code>) that&#8217;s a Flex ArrayCollection, and it&#8217;s marked <code>[Bindable]</code>. A Flex control can bind to that property as a data provider, and whenever the DataAccess instance reloads its data and updates the ArrayCollection. Then the Flex framework takes over, and the view gets updated automatically. Pretty slick; and it definitely saves a lot of event-handling code. So I guess seeing this in action gave me further appreciation for the power of data binding.</p>
<p>It has a couple of minor issues that I&#8217;ve noted in the comments on that page (but mostly they should be fairly easy to fix, if Brandon or someone else decides to do so).</p>
<p>(via: <a href="http://blog.halcyonsolutions.net/">Greg Hamer</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/06/19/brandon-ellis-dataaccess-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resources for getting started with FlexUnit</title>
		<link>http://probertson.com/articles/2007/04/11/flexunit-getting-started-resources/</link>
		<comments>http://probertson.com/articles/2007/04/11/flexunit-getting-started-resources/#comments</comments>
		<pubDate>Wed, 11 Apr 2007 04:17:53 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Unit testing]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/04/11/flexunit-getting-started-resources/</guid>
		<description><![CDATA[I&#8217;ve been finishing up migrating my XML-RPC client library to ActionScript 3.0. First task, according to my own recommendation: write more unit tests.
Even though the unit tests I wrote for the ActionScript 2.0 version of the library used ASUnit, this time around I decided to go with the &#8220;home team&#8221; (i.e. developed by Adobe employees) [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been finishing up migrating my <a href="/projects/xmlrpc/">XML-RPC client library</a> to ActionScript 3.0. First task, according to <a href="/articles/2005/11/08/actionscript-3-unit-testing-recommended/">my own recommendation</a>: <strong>write more unit tests</strong>.</p>
<p>Even though the unit tests I wrote for the ActionScript 2.0 version of the library used ASUnit, this time around I decided to go with the &#8220;home team&#8221; (i.e. developed by Adobe employees) solution and try out <a href="http://code.google.com/p/as3flexunitlib/">FlexUnit</a>. Fortunately, at least for the tests I had already written, the two systems are pretty similar, so I only had a few tweaks to make to migrate them. (Too bad there wasn&#8217;t any way for me to unit-test my unit tests, to make sure they worked the same across frameworks.)</p>
<p>Anyway, along the way I found a couple of resources that were very helpful in getting started, especially since the FlexUnit documentation is rather sketchy (only limited API reference docs available). These were the articles that helped the most:</p>
<ul>
<li><a href="http://www.darronschall.com/weblog/archives/000216.cfm">Darron Schall: How to use FlexUnit with Flex Builder 2</a> (A great &#8220;getting started&#8221; article. This article was actually written while Flex Builder was still in public alpha, so it&#8217;s not perfectly accurate when describing Flex Builder&#8217;s dialog boxes &#8212; but it&#8217;s close enough that it was easy to figure out.)</li>
<li>Daniel Rinehart: Asynchronous Testing with FlexUnit (Naturally, it doesn&#8217;t take long with ActionScript 3.0 before you want to test something involving events&#8230;so you need to do some asynchronous tests. The docs are no help here, and the included examples are really convoluted. I don&#8217;t know how Daniel figured it out, but I found his article very helpful for getting going with asynchronous tests.)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/04/11/flexunit-getting-started-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
