<?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; Writing</title>
	<atom:link href="http://probertson.com/articles/category/writing/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>Mon, 30 Aug 2010 16:38:38 +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>New article &#8220;Programming with the Vector class&#8221;</title>
		<link>http://probertson.com/articles/2009/09/14/programming-with-the-vector-class/</link>
		<comments>http://probertson.com/articles/2009/09/14/programming-with-the-vector-class/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 23:40:31 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Vector (typed arrays)]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=326</guid>
		<description><![CDATA[Several months ago (probably almost a year ago) I wrote an article for the Adobe Developer Connection titled &#8220;Programming with the Vector class.&#8221; As you can surely guess, the article is about the Vector class, which provides typed array functionality (an array whose elements are required to all be instances of the same data type). [...]]]></description>
			<content:encoded><![CDATA[<p>Several months ago (probably almost a year ago) I wrote an article for the Adobe Developer Connection titled &#8220;<a href="http://www.adobe.com/devnet/flash/quickstart/programming_vectors_as3/">Programming with the Vector class</a>.&#8221; As you can surely guess, the article is about the Vector class, which provides typed array functionality (an array whose elements are required to all be instances of the same data type). The Vector class was added to ActionScript in Flash Player 10 and AIR 1.5.</p>
<p>Apparently the article got lost in the shuffle, and about a week ago they found it and asked me to review their changes. I just found out that the article was published today.</p>
<p>Although it&#8217;s grouped under the &#8220;quick starts&#8221; category, it has a lot of detail. Also, it&#8217;s included in the Flash developer center but Flex developers shouldn&#8217;t be put off by that. It&#8217;s really about a core ActionScript class that&#8217;s available anywhere you&#8217;re writing ActionScript. (I&#8217;ve always found the ADC&#8217;s forced boundaries between Flash, Flex, and AIR to be too constraining for reality.)</p>
<p>I personally think the article provides a good, in-depth introduction to various aspects of working with the Vector class. In particular, it has guidance on areas that some people find problematic, such as the type parameter syntax and the fact that you have to provide your own custom sorting code (and of course the article includes examples to copy). I personally think it&#8217;s better than the developer guide documentation on the Vector class. (And I wrote them both so I&#8217;m not just showing a bias for my own work =)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2009/09/14/programming-with-the-vector-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funny coding behaviors</title>
		<link>http://probertson.com/articles/2009/03/10/funny-coding-behaviors/</link>
		<comments>http://probertson.com/articles/2009/03/10/funny-coding-behaviors/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 19:25:35 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=234</guid>
		<description><![CDATA[Disclaimer: this is just a silly little note, perhaps the first such on this site although my personal site primarily consists of such little tidbits, mostly about my kids.
A few years ago I was working as a developer for a computer training department at a large midwestern university*. I also wrote and taught training courses [...]]]></description>
			<content:encoded><![CDATA[<p class="editornote">Disclaimer: this is just a silly little note, perhaps the first such on this site although my personal site primarily consists of such little tidbits, mostly about my kids.</p>
<p>A few years ago I was working as a developer for a <a href="http://ittraining.iu.edu/">computer training department</a> at a <a href="http://www.iub.edu/">large midwestern university</a><a href="#note">*</a>. I also wrote and taught training courses for them. As jobs tend to do, the work was often in cycles &#8212; sometimes I&#8217;d spend a few months doing mostly coding, then perhaps I&#8217;d be working on a new workshop so I&#8217;d spend most of my time writing for a few months.</p>
<p>At one point I was in the transition phase, moving off of a &#8220;coding&#8221; cycle and into a &#8220;writing&#8221; cycle. One day while I was writing (in Adobe Framemaker &#8212; the word processor we used) I realized that each time I reached the end of a sentence my first instinct was to type a semicolon rather than a period. Too many lines of code written, I guess!</p>
<p>Anyway, I was reminded of that today when something kind of similar took place. Nowadays of course most of my writing, whether code or documentation, is done on a computer. In fact it&#8217;s fairly common that when I reach a stopping place while writing in a web browser (such as editing a wiki page) I instinctively type Ctrl+S to &#8220;save&#8221; (even though that just opens up a dialog to save the HTML of the page, rather than actually saving my work in the wiki or whatever. Today, however, this instinctual behavior was taken to a new level.</p>
<p>I was in a meeting and I had a thought about something I&#8217;ve been brainstorming since yesterday. It&#8217;s a new project I&#8217;m starting on (a documentation architecture project, not a coding one) so I&#8217;ve started by just jotting down thoughts in a notebook as they occur to me. I pulled out my notebook and wrote down my ideas. Then I felt a sort of funny twitching in my left hand &#8212; my left pinky and middle finger were instinctively trying to perform some sort of repetitive action, and couldn&#8217;t quite figure out whether it was appropriate or not. I realized that since I had just finished writing down a thought, my hand was trying to make the gesture for Ctrl+S in an attempt to &#8220;save&#8221; my &#8220;document&#8221;. Because of this my brain was momentarily confused &#8212; like it somehow knew this action didn&#8217;t quite fit in this context (pen and paper) but couldn&#8217;t figure out exactly why that was the case. Since of course, mentally I knew I needed to hurry and save my work so that it wasn&#8217;t lost.</p>
<p>Anyway, that&#8217;s my funny story for the day. Probably for the rest of my life, at least in terms of publishing at this url. So I hope you enjoyed it =)</p>
<h2 id="note" class="footnote">* Note</h2>
<p class="footnote">My use of the term &#8220;large midwestern university&#8221; is also an attempt at humor &#8212; its an academic inside joke. I went to graduate school at Indiana University (the same &#8220;large midwestern university&#8221; where I later worked) and we students often read academic papers published by our professors or their former students. In the spirit of anonymity, when they described the participants in their research studies they never described their study participants as &#8220;students at Indiana University&#8221; or something like that. Instead they always described them as &#8220;students at a large midwestern university&#8221; although the authors&#8217; biographies would always indicate their affiliation with Indiana University, so there really wasn&#8217;t any anonymity about it at all.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2009/03/10/funny-coding-behaviors/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>AIR 1.5 encrypted SQLite database &#8212; how to use it, best practices, and new projects</title>
		<link>http://probertson.com/articles/2008/11/18/air-1_5-encrypted-sqlite-database-how-to/</link>
		<comments>http://probertson.com/articles/2008/11/18/air-1_5-encrypted-sqlite-database-how-to/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 08:30:25 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Life at Adobe]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[local SQL database]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=214</guid>
		<description><![CDATA[Over a year ago I described a potential area of concern for using a SQLite database with an AIR application &#8212; because all apps use the same database engine, any AIR app can read any other app&#8217;s database (as long as it can find the database file).
As you may have heard among all the news [...]]]></description>
			<content:encoded><![CDATA[<p>Over a year ago I described <a href="/articles/2007/06/21/securing-air-sql-database/">a potential area of concern for using a SQLite database with an AIR application</a> &#8212; because all apps use the same database engine, any AIR app can read any other app&#8217;s database (as long as it can find the database file).</p>
<p>As you may have heard among all the news that&#8217;s coming out from MAX right now, <a href="http://www.adobe.com/devnet/logged_in/rchristensen_lpolanco_air_1.5.html">Adobe AIR 1.5 has just been released</a>. Most of the features of AIR 1.5 are features that were introduced with Flash Player 10. However, one new feature in AIR 1.5 that helps address the easy-to-read database issue is AIR 1.5&#8217;s new support for AES encrypted databases.</p>
<p>I&#8217;ve had the interesting and at times complex job of writing the documentation for this new feature. The bulk of the new documentation is in a new section &#8220;<a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS8AFC5E35-DC79-4082-9AD4-DE1A2B41DAAF.html">Using encryption with SQL databases</a>&#8221; in the SQL database chapter of the manual &#8220;Developing Adobe AIR Applications&#8221;.</p>
<p>It&#8217;s pretty straightforward to use an encrypted database. You have to create the database as an encrypted db. To create or open it, you call the SQLConnection class&#8217;s <code>open()</code> or <code>openAsync()</code> methods, just as you normally do, and there&#8217;s a new parameter where you provide a 16-byte ByteArray encryption key for the database. That&#8217;s all there is to it.</p>
<p>The SQLConnection class also has a new <code>reencrypt()</code> method, that you use to change the encryption key of an already encrypted database.</p>
<p>If you want to see some code examples, check out the documentation listed above, or see these quick start articles on the Adobe developer center:</p>
<ul>
<li><a href="http://www.adobe.com/devnet/air/flex/quickstart/encrypted_database.html">Working with the encrypted local SQLite database (Flex)</a></li>
<li><a href="http://www.adobe.com/devnet/air/flash/quickstart/encrypted_database_flash.html">Working with the encrypted local SQLite database (Flash)</a></li>
<li><a href="http://www.stage.adobe.com/devnet/air/ajax/quickstart/encrypted_database.html">Working with the encrypted local SQLite database (HTML/JavaScript)</a></li>
</ul>
<p>There are a couple of parts of the new documentation that I think are particularly interesting (although I&#8217;m obviously biased since I wrote it all):</p>
<ul>
<li><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> talks about some of the various reasons you may want to use an encrypted database, and some of the differences in how you might architect your application to account for the desired level of security and privacy.</li>
<li>
<p><a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS61068DCE-9499-4d40-82B8-B71CC35D832C.html">Example: Generating and using an encryption key</a> goes into great depth into one technique for creating an encryption key for your database. You have to provide a ByteArray encryption key to encrypt your database. How you come up with that encryption key can have a big impact on the actual security of your app data.</p>
<p>This was definitely the most involved example I&#8217;ve written for the documentation. the techniques it uses were specified to me by security engineers at Adobe. The documentation goes into lots of detail describing how these techniques are used and why. Both the code and the text went through a series of reviews by engineers and security experts.</p>
<p>I ended up writing the example as a simple UI, plus a class that anyone can just pull into their own app (rather than having to pull apart the example and turn it into something you can use. I&#8217;m also excited to share that <a href="http://mikechambers.com/">Mike Chambers</a> and <a href="http://weblogs.macromedia.com/cantrell/">Christian Cantrell</a> decided that this &#8220;encryption key generator&#8221; class is useful enough that it&#8217;s now included in the <a href="http://code.google.com/p/as3corelib/">open-source ActionScript 3.0 core library (as3corelib) project</a>.</p>
</li>
</ul>
<p>Now that AIR 1.5 is out the door, I&#8217;ve updated my <a href="http://probertson.com/projects/doppler-air-sql-admin-tool/">AIR database admin tool</a> to support encrypted databases (when you try to open an encrypted database it prompts you for an encryption key, which you enter as a Base-64 string). I already mentioned that I wrote the encryption key generator class that&#8217;s now in as3corelib. I&#8217;ve also got at least one more new encrypted database-related open-source project that I&#8217;m about to release&#8230;but I&#8217;ll wait until the MAX &#8220;firehose&#8221; dies down a bit before I write more about that one. =)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/11/18/air-1_5-encrypted-sqlite-database-how-to/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Flash Player 10/Flash CS4 documentation now available</title>
		<link>http://probertson.com/articles/2008/10/14/flash-player-10-flash-cs4-documentation/</link>
		<comments>http://probertson.com/articles/2008/10/14/flash-player-10-flash-cs4-documentation/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 17:49:10 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Life at Adobe]]></category>
		<category><![CDATA[Pixel Bender]]></category>
		<category><![CDATA[Sites to remember]]></category>
		<category><![CDATA[Vector (typed arrays)]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=202</guid>
		<description><![CDATA[Why haven't I written anything in a while? Well, I've written lots -- just not on this site! The final Flash Player 10 and Flash CS4 documentation is out the door and live on the web. Here I've listed my favorite parts and some top-level links to help you get started with the new features in Flash Player 10.]]></description>
			<content:encoded><![CDATA[<p>(or, &#8220;why I haven&#8217;t written anything new here in a looong time&#8221;)</p>
<p>Like so many people, my work goes in cycles (from &#8220;busy&#8221; to &#8220;crazy&#8221; to &#8220;desperate crunch&#8221;). If you&#8217;re someone who follows this site (if in fact there is anybody who does), you may have figured out that any time I go for a long time without posting, it means I&#8217;m near the end of a project (and consequently, that new documentation is coming soon).</p>
<p>Well, that time has arrived. With the public announcement of Adobe Creative Suite 4, we&#8217;re doing something different in terms of the schedule for releasing documentation. This time the documentation has been released ahead of time, before the product actually ships. (Primarily for the sake of search engine indexing &#8212; but hey, let&#8217;s not complain.)</p>
<p>Of course, a draft version of the Flash Player 10 language reference has been around <a href="/articles/2008/05/21/flash-player-10-documentation-available-on-labs/">for a while now</a>, but if you haven&#8217;t had a chance to take a look (or if you want to know how things turned out in their final form), you can now view <a href="http://help.adobe.com/en_US/Flash/10.0_Welcome/WSC6B89A38-F236-4cb9-9D15-91A7BEC35EBF.html">the final Flash CS4 (including ActionScript for Flash Player 10) documentation</a>. Also, this includes several significant additions to the content in Programming ActionScript 3.0, so if you prefer to learn by reading about a topic rather than by piecing things together from the reference, then you&#8217;ll find this content useful.</p>
<p>Here are a few top-level links to get you started:</p>
<ul>
<li><a href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/">Programming ActionScript 3.0</a></li>
<li><a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/">ActionScript 3.0 Language and Components reference</a></li>
<li><a href="http://help.adobe.com/en_US/Flash/10.0_UsingFlash/index.html">Using Flash</a> (including <a href="http://help.adobe.com/en_US/Flash/10.0_UsingFlash/WS9F717870-8AED-438d-B324-44ACCE6871E8a.html">what&#8217;s new in Flash CS4</a>)</li>
</ul>
<p>Just for fun, here is the new content that I wrote:</p>
<ul>
<li>
<p>Vector class (strongly-typed arrays):</p>
<ul>
<li><a href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fdc.html">Vector class in Programming ActionScript 3.0</a> (new content is interspersed with the previous content on the Array class)</li>
<li><a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/Vector.html">Vector class reference</a></li>
</ul>
</li>
<li>
<p>Pixel Bender (&#8220;custom filters&#8221; &#8212; although it&#8217;s a lot more than filters)</p>
<ul>
<li><a href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS3E659D01-10C0-479d-8175-B40950BBC223.html">Working with Pixel Bender shaders (in Programming ActionScript 3.0)</a> - plus other sections that are linked to from there, about using a shader as a drawing fill, a filter, a blend mode, etc.</li>
<li><a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Shader.html">Shader class reference</a></li>
<li><a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/ShaderJob.html">ShaderJob class reference</a></li>
<li><a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/ShaderParameter.html">ShaderParameter</a> and <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/ShaderInput.html">ShaderInput</a> class references</li>
<li><a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/filters/ShaderFilter.html">ShaderFilter class</a></li>
<li>plus new content in the <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/DisplayObject.html">DisplayObject class</a>, the <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/BlendMode.html">BlendMode class</a>, the <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Graphics.html">Graphics class</a>, etc.</li>
</ul>
</li>
</ul>
<p>And here are some of the other new topics that I think are the most interesting:</p>
<ul>
<li><a href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WSF24A5A75-38D6-4a44-BDC6-927A2B123E90.html">Working in three dimensions (3D) in Programming ActionScript 3.0</a></li>
<li><a href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS33C39F6A-19F1-4848-A0F8-A3604A000067.html">Inverse Kinematics (IK) in Programming ActionScript 3.0</a></li>
<li><a href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WSE06FE962-09BE-4460-B020-5CDC2E54C499.html">Using the new drawing api (aka &#8220;drawing api 2&#8221;) in Programming ActionScript 3.0</a></li>
</ul>
<p>So, what&#8217;s next for me? (Thanks for asking!) Since finishing the final versions of the Flash CS4 documentation, I&#8217;ve been working on some &#8220;quick start&#8221; articles around the new features. Those articles will appear in the <a href="http://www.adobe.com/devnet/flash/quickstart/">Flash developer center</a> soon &#8212; probably when Flash CS4 actually ships. (I&#8217;ve done one on the Vector class and one on the new FileReference functionality for accessing local files without a server round trip. Other colleagues have done cool things with dynamically generating audio and Pixel Bender &#8212; so I think it&#8217;ll definitely be worth a look.) Along with that, I&#8217;m working on new features for the next version of Adobe AIR. I also have <a href="/projects/">a few side projects</a> that I&#8217;ve been trying to make progress on as I can sneak in a minute here and there.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/10/14/flash-player-10-flash-cs4-documentation/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Flash Player 10 documentation available on labs</title>
		<link>http://probertson.com/articles/2008/05/21/flash-player-10-documentation-available-on-labs/</link>
		<comments>http://probertson.com/articles/2008/05/21/flash-player-10-documentation-available-on-labs/#comments</comments>
		<pubDate>Wed, 21 May 2008 18:08:05 +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[Writing]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=173</guid>
		<description><![CDATA[Lee Brimelow has just pointed out that the Flash Player 10 documentation is available for download on Adobe Labs. I&#8217;m excited that this is public, so I can start talking about it more &#8212; I&#8217;ve been working on the documentation for several months now =)
On a personal note, the screenshot that Lee posted for the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://theflashblog.com/">Lee Brimelow</a> has just pointed out that the Flash Player 10 documentation is <a href="http://download.macromedia.com/pub/labs/flashplayer10/flashplayer10_as3langref_052008.zip">available for download</a> on Adobe Labs. I&#8217;m excited that this is public, so I can start talking about it more &#8212; I&#8217;ve been working on the documentation for several months now =)</p>
<p>On a personal note, the <a href="http://theflashblog.com/?p=387">screenshot that Lee posted for the Vector class documentation</a> was written by me. So that was fun to see =)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/05/21/flash-player-10-documentation-available-on-labs/feed/</wfw:commentRss>
		<slash:comments>3</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>New Adobe Dev Center articles (Flash deep-linking and Flash CS3 DataGrid)</title>
		<link>http://probertson.com/articles/2007/11/13/two-developer-center-articles/</link>
		<comments>http://probertson.com/articles/2007/11/13/two-developer-center-articles/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 18:14:06 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/11/13/two-developer-center-articles/</guid>
		<description><![CDATA[Several months ago I was asked to re-purpose two of my previous articles from this site for publication on the Adobe Developer Center (now renamed as the &#8220;Adobe Developer Connection&#8221;). The first one was published in September 2007, and the second was just published yesterday. So in a way this is sort of a revisiting [...]]]></description>
			<content:encoded><![CDATA[<p>Several months ago I was asked to re-purpose two of my previous articles from this site for publication on the Adobe Developer Center (now renamed as the &#8220;Adobe Developer Connection&#8221;). The first one was published in September 2007, and the second was just published yesterday. So in a way this is sort of a revisiting of previous topics, but if you missed them before here they are in their new-and-improved form (or if you&#8217;re just really curious about me, you can see what I look like in my author photo on the articles =):</p>
<ul>
<li><a href="http://www.adobe.com/devnet/flash/articles/deep_linking.html">Deep-linking to frames in Flash websites</a> (Sept. 10, 2007) - for this article I took just one of the techniques I described in <a href="/articles/2006/12/14/deep-linking-flash-application-states/">the original article</a> and added more background information and better explanations. (I&#8217;m sometimes amazed by how much detail I leave out when I&#8217;m writing posts on this site!)</li>
<li><a href="http://www.adobe.com/devnet/flash/articles/detecting_datagrid_edits.html">Detecting when data is edited in the DataGrid component</a> (Nov. 12, 2007) - this article was revised much less from <a href="/articles/2007/05/01/flash-cs3-datagrid-detecting-data-change/">the original</a> than the other one. Basically I took the text and found places where I thought it needed more/better/clearer explanation, and added a sentence or revised the text. I definitely think the new version is better, but there isn&#8217;t any new information to be had if you read the original.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/11/13/two-developer-center-articles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why doesn&#8217;t Adobe&#8217;s AIR dev guide mention SQLite? A response to Tim Anderson</title>
		<link>http://probertson.com/articles/2007/06/19/air-sql-docs-dont-mention-sqlite-my-response/</link>
		<comments>http://probertson.com/articles/2007/06/19/air-sql-docs-dont-mention-sqlite-my-response/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 03:11:44 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[local SQL database]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/06/19/air-sql-docs-dont-mention-sqlite-my-response/</guid>
		<description><![CDATA[Yesterday Tim Anderson asked a question: &#8220;Why doesn&#8217;t Adobe&#8217;s AIR dev guide mention SQLite?&#8221; As the author of the &#8220;Working with local SQL databases&#8221; chapter in the AIR Developers Guide that Tim refers to, as well as the related sections of the AIR language reference, I guess I know better than most people the answer [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday Tim Anderson asked a question: &#8220;<a href="http://www.itwriting.com/blog/?p=253">Why doesn&#8217;t Adobe&#8217;s AIR dev guide mention SQLite?</a>&#8221; As the author of the &#8220;<a href="http://livedocs.adobe.com/labs/air/1/devappsflex/SQL_01.html">Working with local SQL databases</a>&#8221; chapter in the AIR Developers Guide that Tim refers to, as well as the <a href="http://livedocs.adobe.com/labs/flex/3/langref/localDatabaseSQLSupport.html">related</a> <a href="http://livedocs.adobe.com/labs/flex/3/langref/flash/data/package-detail.html">sections</a> of the AIR language reference, I guess I know better than most people the answer to that question. Unfortunately, although it was a consciously considered decision that underwent a reasonable amount of discussion, I can&#8217;t promise that the reasoning is absolutely irrefutable logic that will stand the test of time. But then, if it was, Tim probably wouldn&#8217;t have asked the question =)</p>
<p class="editornote">Note: This post won&#8217;t make as much sense unless you read <a href="http://www.itwriting.com/blog/?p=253">Tim&#8217;s post</a> first. So I&#8217;ll pause for a moment while you go read it &#8212; don&#8217;t worry, it&#8217;s not nearly as long as this one =)</p>
<p>As suggested by John Dowdell in the comments on Tim&#8217;s post, the biggest reason why SQLite isn&#8217;t mentioned by name in the documentation is a somewhat complex matter involving the timing of when the feature was developed, deadlines for when the documentation had to be done in order to include it in the beta release, and the timing of when Google Gears was announced.</p>
<h2>Background: Development schedules, marketing announcements, and the realities of human limits</h2>
<p>If you don&#8217;t mind, I&#8217;ll start off with a bit of background/context on the timing of the local SQL database feature being developed and the agreement with Google.</p>
<p class="editornote">Note: Admittedly I&#8217;m making educated guesses on the timing described here, based on things I observed but without actually being involved in the conversations between Adobe and Google.</p>
<p>Before any sort of agreement about synchronized APIs and common code had been reached, perhaps before it had even started, Adobe, and presumably Google, had both separately developed most of their respective implementations of database functionality based on SQLite. Naturally, at the point that they agreed to make their APIs agree with each other, both companies could have chosen to postpone releasing their implementations until the final, synchronized API was finished. Not surprisingly, both companies felt it was more important to get something out to developers sooner (even if it wasn&#8217;t the &#8220;synchronized API&#8221;) rather than later when things were final. From a public visibility perspective, Google made their announcement first, so they have the benefit of being perceived as the &#8220;original&#8221; and I expect many developers expected the AIR API to be identical when it was released (about a week and a half later, it&#8217;s important to note). </p>
<p>I wasn&#8217;t involved in any of the planning or discussion surrounding the AIR-Google Gears &#8220;synchronized API&#8221; decision, and in fact I didn&#8217;t know anything about it until I read the public announcements. (If you can, imagine <em>my</em> reaction when I read that the APIs were going to be aligned &#8212; since I had just finished the API reference documentation the previous week! =) The fact that I wasn&#8217;t involved in the conversations doesn&#8217;t bother me and makes sense to me &#8212; there wasn&#8217;t really any compelling reason why I should have been involved in those conversations &#8212; but obviously that had a direct impact on my ability to anticipate the consequences of that announcement while I was writing the documentation. By the time the announcement was made, it was too late to go back and change the documentation, and <em>definitely</em> too late for us to actually change the API.</p>
<p>With that background, let me address some of the specific points that Tim raises. He asks the question, &#8220;why doesn&#8217;t Adobe&#8217;s AIR dev guide mention SQLite?&#8221;, and gives three points about why he isn&#8217;t pleased that SQLite isn&#8217;t mentioned:</p>
<h2>1. &#8220;It stinks&#8221;</h2>
<p>Of course, what I&#8217;ve said up to this point suggests that, were it not for the Google Gears announcements, Adobe might not have ever announced that we are using SQLite. I can&#8217;t speak for alternative futures, of course, but I think it&#8217;s possible that Adobe would never have mentioned SQLite in the documentation. Does that &#8220;stink&#8221; as Tim suggests? Is it discourteous? I can definitely understand the sentiment behind those expressions. I&#8217;m a firm believer in &#8220;credit where it&#8217;s due.&#8221; When I wrote the documentation, I certainly didn&#8217;t mean it as a discourtesy or to minimize my opinion of the value of SQLite that SQLite was not mentioned. I think SQLite is a great tool, and I&#8217;m very glad it exists, and that the authors have been so generous with the license.</p>
<p>On the other had, as Tim notes, Adobe has no legal obligation to acknowledge that they included source code from SQLite. Nor does Adobe have any obligation to acknowledge that a significant part of the documentation on the SQL dialect was adapted from the SQLite documentation, because the authors were even kind enough to secure public domain releases for the documentation &#8212; although I will readily admit that I did in fact adapt portions of the SQLite documentation &#8212; which was very helpful because it saved me a lot of duplicate effort!</p>
<p>So, were we intentionally trying to hide the fact that it was SQLite? No, although we chose not to advertise the fact either, for a few reasons:</p>
<ul>
<li>Our intention was to provide sufficient documentation so that a developer wouldn&#8217;t have any need to look at the SQLite documentation. (In fact, due to the short time frame for getting things done, one idea that was considered and rejected was just to point developers to the SQLite documentation for the first beta release.) With that decision made, we realized that there wasn&#8217;t any <em>absolute</em> need to make reference to SQLite.</li>
<li>In many respects, the choice of SQLite was originally considered to be an &#8220;implementation detail&#8221; &#8212; something that developers didn&#8217;t really need to know or care about. Obviously in the wake of the Google Gears announcements, there is now more reason why it <em>does</em> matter (to some developers) that Adobe chose to use SQLite.</li>
<li>
<p>In fact, when you get down to it, the choice of SQLite could <em>still</em> be considered an &#8220;implementation detail.&#8221; After all, consider what happens in the future when AIR version 5 or 10 is released. What if SQLite is no longer the best choice for an embedded database? Should AIR developers be limited by the fact that AIR is absolutely tied to SQLite? As long as the API continues to work, and the older file-format databases are supported, and older applications continue to run, how much does it matter whether the embedded database is SQLite or something else?</p>
<p>Obviously that&#8217;s not a highly likely scenario. From a practical standpoint, even if another database engine were used, it would be pretty involved to ensure backwards compatibility, both with the API and especially with the supported SQL dialect.</p>
</li>
</ul>
<p>In summary, when the time came to decide whether to explicitly mention SQLite in the documentation, it came down to this. As we all know, it&#8217;s common practice in the software industry, including at Adobe, that when a certain aspect of a feature is considered an &#8220;implementation detail&#8221; and &#8220;not important to developers,&#8221; that aspect of the feature isn&#8217;t described in the documentation. Sometimes developers find out anyway, either through their own experimentation, or through experience, or whatever. Even if Adobe didn&#8217;t announce that the AIR local database engine was based on SQLite, it&#8217;s highly likely that it would have come out sooner rather than later. That&#8217;s fine &#8212; developers can choose to use the knowledge they acquire, and Adobe can choose to change things that aren&#8217;t documented.</p>
<p>As I&#8217;ve said, at the time the documentation was being written and finalized, the word I was going on was that the fact that the engine uses SQLite is an implementation detail. I gave some thought to whether we should explicitly mention that the database uses SQLite &#8212; certainly there were advantages and disadvantages either way. The issue was discussed by me, members of management, and the lead engineer for the feature. In the end, however, for the reasons listed above, and without any knowledge (at least on my part) of the very-soon-to-be-forthcoming Google Gears alignment announcement, we decided that the priorities fell on the side of not stating that the database uses SQLite.</p>
<p>Having said all that, as a result of the announcements relating to Adobe AIR and Google Gears, it <em>is</em> public knowledge that Adobe is using SQLite. Although it may not make sense to anyone but me, that announcement &#8220;changes the balance&#8221; of priorities in my mind, so in fact at this point I agree with Tim that the benefits of mentioning in the documentation that the database uses SQLite (giving credit where it&#8217;s due, and guiding developers to other SQLite tools that might help them) outweigh the potential downsides of stating it in the documentation (the unlikely but can&#8217;t-rule-it-out-completely possible future case in which we no longer use SQLite for the underlying database engine, and the possibility of distracting/confusing developers who read the SQLite documentation and find something that&#8217;s not supported in AIR and wonder why).</p>
<p>Even as I write this, I acknowledge that my stated set of reasons, and this description of trying to find the best balance between the tradeoffs of &#8220;officially&#8221; disclosing information versus &#8220;officially&#8221; keeping information &#8220;undocumented&#8221; sounds very fuzzy. And I agree that the value of giving credit to the authors of SQLite is a compelling reason for stating in the documentation that AIR uses SQLite. I&#8217;m afraid I can&#8217;t completely communicate <a href="/articles/2007/06/11/adobe-air-local-sql-databases-and-my-role/#personal">how fast and furiously we were working to get this feature (and the associated documentation) done</a> for the beta, and consequently how we tried to make the best choices we could in a limited time frame. And again, without the smallest clue of the then-forthcoming Google Gears announcement.</p>
<p>Fortunately, as Tim points out, &#8220;this is all beta, of course, so it can change.&#8221; So, Tim, allow me to tell you that your feedback has helped us to realize that the value of giving credit to the authors of SQLite outweighs any potential drawbacks, and I will shortly be adding explicit mention of the fact that the runtime uses SQLite for its local SQL database functionality. <a href="/articles/2007/06/11/adobe-air-local-sql-databases-and-my-role/">A week ago I asked for feedback on the SQL documentation</a>, and while this wasn&#8217;t exactly what I had in mind, it is nonetheless appreciated and hopefully it&#8217;s clear that it has been taken into consideration.</p>
<h2>2. &#8220;It&#8217;s unhelpful&#8221;</h2>
<p>Tim makes the suggestion that it would be helpful to &#8220;set out exactly how AIR&#8217;s SQLite differs from the standard build.&#8221; I think that sounds like a useful suggestion; I&#8217;ve made a note to research the topic and see how difficult it would be to compile that information, and how we could usefully incorporate it into the documentation. I admit that the thought didn&#8217;t even occur to me (which doesn&#8217;t surprise me &#8212; I have some good ideas sometimes, but I certainly don&#8217;t ever have all the good ideas =).</p>
<p>Although I acknowledge that it sounds like an idea with merit, the devil&#8217;s advocate in me impels me to admit that specifying how AIR&#8217;s SQLite implementation is different from other SQLite implementations isn&#8217;t as much of a priority as some of the other tasks that I&#8217;ve got in the lineup. It turns out that there were several things that I wanted to write, and we just didn&#8217;t have time to get them all in for the beta release. Since the SQLite library is designed for use as an embedded database, and the target audience (developer-wise) for AIR is developers with web development experience, chances are the majority of the target audience for AIR hasn&#8217;t ever programmed for SQLite. That means that documentation comparing AIR&#8217;s implementation to other implementations will probably only be useful for a minority of AIR developers &#8212; which unfortunately is something that we have to take into account when we&#8217;re scheduling the &#8220;features&#8221; that are chosen to be included in the documentation.</p>
<p>Nevertheless, I do think that it&#8217;s a good suggestion, and in some ways I think that it will be useful to more advanced developers whether they&#8217;ve used SQLite or not, so I&#8217;ll see what I can do.</p>
<h2>3. Skepticism that the AIR and Google Gears APIs will align</h2>
<p>Hopefully my earlier background information has made it clear that the reason the APIs don&#8217;t align right now is really a matter of scheduling, engineering effort, design effort, and a desire on the part of both companies to get their technologies into the hands of developers, and not any sort of conspiracy. I will say that I know for certain that the effort to align the APIs is still going on.</p>
<h3>&#8220;A big hole in the AIR sandbox&#8221;</h3>
<p>Tim makes a side note at this point, that the difference between the AIR approach to SQLite and the Google Gears approach has some security implications. This is an important point, so I&#8217;ve written <a href="/articles/2007/06/21/securing-air-sql-database/">a separate post in which I&#8217;ve discussed why the two systems use different models, and how to address some of the potential security issues</a>.</p>
<h2>Summary: Tim&#8217;s wish list</h2>
<p>Going back to Tim, he concludes with a &#8220;wish list&#8221; of three things he&#8217;d like to see happen in the AIR documentation and implementation:</p>
<blockquote><ul>
<li>Proper credit for SQLite in the docs.</li>
<li>Use the Gears code - full text search could be very useful - and deliver on the promise of aligning the API.</li>
<li>Failing that, set out exactly how AIR’s SQLite differs from the standard build.</li>
</ul>
</blockquote>
<p>I&#8217;ll consider these one at a time:</p>
<h3>Proper credit for SQLite in the docs</h3>
<p>As Tim and I have both mentioned, SQLite is in the public domain, so in fact from a legal definition Adobe is already giving &#8220;proper credit&#8221; (that is, no credit required) for SQLite. I&#8217;m certain that&#8217;s not what Tim had in mind, and I&#8217;ve also mentioned that I believe it&#8217;s worthwhile to give credit to the authors of SQLite. As I&#8217;ve also said, I&#8217;m planning to add in at least a couple of prominent places a statement that AIR uses SQLite for its database functionality. If that&#8217;s not what you had in mind, Tim, please let me know.</p>
<h3>Use the Gears code - full text search could be very useful - and deliver on the promise of aligning the API.</h3>
<p>I&#8217;m 100% certain Adobe is not going to &#8220;use the [Google] Gears code,&#8221; at least not wholesale &#8212; the two products have already been developed in isolation much too much for that to work (in my opinion &#8212; but of course I&#8217;m not the engineer). Nevertheless, I agree that full text search could be very useful &#8212; I would love to see it make it in to AIR as well &#8212; and as I&#8217;ve said here and also last week, Adobe and Google are continuing to work on aligning their database APIs.</p>
<h3>Failing that, set out exactly how AIR’s SQLite differs from the standard build.</h3>
<p>This statement is actually a bit misleading, I think, since I&#8217;m certain Google Gears doesn&#8217;t use a 100% &#8220;standard&#8221;, out of the box SQLite build. (For that matter, I&#8217;m not sure what a &#8220;standard&#8221; SQLite build would be, since the whole point of SQLite is to be an embedded database, built into another product, and not to stand on its own.)</p>
<p>All that notwithstanding, as I&#8217;ve mentioned I have now assigned myself the task of researching the changes that we&#8217;ve made from what someone who&#8217;s used SQLite in another product might expect, and (time permitting) to add a section to the documentation describing those differences.</p>
<h2>Conclusion</h2>
<p>I realize this whole post is long, and meanders quite a bit, and probably doesn&#8217;t show the degree of concrete explanation (or completely serious consideration) that might be desirable. I believe that we made the decisions we made for good reasons, using the information we had available at the time. I&#8217;m also glad that we&#8217;ve only released a beta and not the final version yet, and I&#8217;m glad that Tim&#8217;s post caused me and others in Adobe to sit up and take notice, and reconsider some of our decisions in light of the new information that&#8217;s become available since the time when we previously made them.</p>
<p>And once again, if anyone has thoughts or suggestions about the AIR local SQL database documentation, please don&#8217;t hesitate to share them. I&#8217;ll try not to post an essay in response to each one =)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/06/19/air-sql-docs-dont-mention-sqlite-my-response/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>AIR, local SQL databases, and my role</title>
		<link>http://probertson.com/articles/2007/06/11/adobe-air-local-sql-databases-and-my-role/</link>
		<comments>http://probertson.com/articles/2007/06/11/adobe-air-local-sql-databases-and-my-role/#comments</comments>
		<pubDate>Mon, 11 Jun 2007 21:37:56 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[local SQL database]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/06/11/adobe-air-local-sql-databases-and-my-role/</guid>
		<description><![CDATA[As everyone knows, today Adobe released a public beta of AIR (formerly "Apollo"). As you likely know, since it was announced last week, one of the big new features in this release is an integrated database engine that allows AIR applications to create and use local SQL databases. I'm really excited about this, both because it's really awesome to be able to access a database directly from ActionScript, and (on a personal level) because it means I can finally talk about what I've been working on for the last couple of months. Yes, in fact, my latest assignment at Adobe primarily involves working on the AIR local SQL database functionality.]]></description>
			<content:encoded><![CDATA[<p>As everyone knows, today Adobe released a public beta of AIR (formerly &#8220;Apollo&#8221;). As you likely know, since it was announced last week, one of the big new features in this release is an integrated database engine that allows AIR applications to create and use local SQL databases.</p>
<p>Okay, that sounds really boring. But I don&#8217;t mean it to. I&#8217;m actually <em>incredibly</em> excited by this, because it makes it a lot easier for people like me, with web app experience but not desktop app experience, to create data-driven apps and store persistent data using techniques that I&#8217;m familiar with.</p>
<p>And, on a personal note, it means that I finally get to talk about what I&#8217;ve been working on for the last couple of months. If you actually follow my web site, you&#8217;ve probably picked up on the fact that I was heavily involved in the ActionScript-related documentation for the Flash CS3 release. Well, naturally, now that Flash CS3 is out the door, I&#8217;ve been moved onto another project &#8212; onto Apollo/AIR, specifically.</p>
<p>More specifically, since I&#8217;ve been programming SQL databases for many years, as part of my web app development work, I got pegged (well, I actually volunteered) to do the documentation and samples for the local SQL databases feature.</p>
<p>When I first read the spec for the feature, I was completely floored. I was expecting some minimal support for a few things, but what we&#8217;ve got is much more than I could come up with use cases for. Want a good idea of the breadth of the functionality that&#8217;s available? Spend some time reading &#8220;<a href="http://livedocs.adobe.com/labs/flex/3/langref/localDatabaseSQLSupport.html">SQL support in local databases</a>&#8221; (it&#8217;s an appendix of the AIR language reference). Views? Indexes? Triggers? They&#8217;re in there.</p>
<p>In case you don&#8217;t have a free few hours, I&#8217;ll just point out my favorite parts of the feature. These will probably be most meaningful if you&#8217;ve already faced the joy and pain of working with web-database apps, especially with an OOP language:</p>
<ul>
<li><code><a href="http://livedocs.adobe.com/labs/flex/3/langref/flash/data/SQLStatement.html#itemClass">SQLStatement.itemClass</a></code>: This was my immediate favorite. You specify a class, and SELECT statement result rows are automatically converted into instances of that class (saving lots of boilerplate code to loop through results and turn rows into instances of some other class). If I could have done this in ASP.NET, I&#8217;d probably have saved about 25% of the total code I wrote.</li>
<li><code><a href="http://livedocs.adobe.com/labs/flex/3/langref/flash/data/SQLStatement.html#prepare()">SQLStatement.prepare()</a></code> and <code><a href="http://livedocs.adobe.com/labs/flex/3/langref/flash/data/SQLStatement.html#parameters">SQLStatement.parameters</a></code>: Now that I&#8217;ve spent some time building apps and working with the code, I&#8217;ve gotten a lot of respect for this method. Basically, this is the way to create the equivalent of pre-compiled stored procedures for your AIR app.</li>
<li><code><a href="http://livedocs.adobe.com/labs/flex/3/langref/flash/data/SQLResult.html#lastInsertRowID">SQLResult.lastInsertRowID</a></code>: I had to lobby long and hard for this one, which, since I&#8217;m a remote employee, meant <em>lots</em> of email exchanges. Finally I managed to clearly articulate my reason, and sure enough, persistence paid off. If you&#8217;ve created a database app, chances are you&#8217;ve run into the case where you INSERT a row, and you need to get back the auto-generated primary key so that you can insert a related row. The <em>wrong</em> way to do it is <code>SELECT MAX(id_column) FROM table</code>. The right way, in AIR, is to use <code>lastInsertRowID</code>.</li>
</ul>
<p>I&#8217;m excited that I can talk about this now. I&#8217;ve got some samples, practices, and information that I&#8217;m looking forward to sharing. I&#8217;ll start with an answer to a question that I&#8217;ve seen asked around (well, mostly I&#8217;ve just seen misinformation, not people asking whether it&#8217;s right) about the relationship between the AIR local SQL database API and the Google Gears SQL database API:</p>
<ul>
<li>Does Apollo &#8220;include&#8221; part of Google Gears? - No. There is no shared code between AIR and Google Gears (with the possible exception noted in the next answer).</li>
<li>What do AIR and Google Gears have in common, then? - Both AIR and Google Gears let you create applications that access databases located on a users local machine. Both AIR and Google Gears chose to use SQLite, a free, public domain embedded SQL database engine, to provide that functionality. So whatever code AIR uses that hasn&#8217;t been modified from SQLite, is the same as the code that Google Gears uses that hasn&#8217;t been modified in its implementation of SQLite.</li>
<li>What&#8217;s this about AIR including the same database API as Google Gears? - To be honest, although I&#8217;ve been involved in the AIR database API for a while, the first I heard of Google Gears&#8217; database API was when the public announcements were made. Thinking back, I see now that discussions were going on for a while, and I even unknowingly provided some support to the management team and others who were involved in that discussion. Right now, although the underlying database engines are based on the same engine, since SQLite is written in C, any implementation that doesn&#8217;t use C/C++ needs to write its own API. The two implementations (Adobe&#8217;s and Google&#8217;s) weren&#8217;t developed together, and at this point (from what I&#8217;ve seen) the two APIs are pretty different. Case in point: synchronous versus asynchronous database operations. In Google Gears, data access operations are synchronous &#8212; calls to the database are blocking, meaning the runtime freezes at the line of code that called the database until the result is returned. In AIR, on the other hand, all data operations are asynchronous &#8212; you call <code>SQLStatement.execute()</code> to run a query, and when the result comes back an event listener function is called (at which point the result data can be accessed). That alone means a big difference in how you write code to work with the two systems.</li>
<li>So wait a minute, what about the whole &#8220;Adobe and Google are working together on the database API&#8221; thing? - Adobe and Google <em>are</em> having &#8220;discussions,&#8221; and (from what I&#8217;ve heard) the plan is to hopefully make the APIs the same or similar enough that a developer who writes data access code for Google Gears will have an easy time writing data access code for AIR (and vice versa). In addition, since the SQL part of both runtimes really is dependent on SQLite much more than the particular runtime implementation, and SQL code probably is interchangeable between the two runtimes, assuming the same database schema etc.</li>
</ul>
<p>So from me, and the other engineers and stakeholders inside Adobe, please try out the local SQL database functionality of Apollo, and <strong>please</strong> let us know what we can do to make it better. In particular, let me know what is missing or what you&#8217;d like to see in terms of documentation and samples &#8212; but don&#8217;t limit yourself to that. <em>Please share your comments/suggestions!</em></p>
<h2 id="personal">On a more personal note&#8230;</h2>
<p>I&#8217;m really excited about this. I really just can&#8217;t say in words how excited I am. When I decided to accept an offer to work full-time for Adobe, one of the first &#8220;regrets&#8221; that crossed my mind was when I considered that it was highly likely that I wouldn&#8217;t be doing any more database programming (since my work involves dealing with ActionScript, and up to now there hasn&#8217;t really been any direct database access from ActionScript). So I was excited to say the least when I heard about this feature and it was decided that I&#8217;d get to work on it.</p>
<p>Suffice it to say, this has been a pretty busy time. This feature was actually slated to appear in a later release, but at the near-last minute the decision was made to get it done in time for the public beta. That meant a lot of writing and application-building in a hurry! Then two weeks and a private beta release later, a group of people including me, engineers and QEs, and other interested folks, went through a few rounds of discussions on what was missing and what we could do to make the API better. The result, which of course still isn&#8217;t finished, is what you can download today.</p>
<p>And, although she isn&#8217;t a developer and doesn&#8217;t use Apollo/AIR at all, it&#8217;s an understatement to say that my wife is glad to see this beta out the door, if only because it means I don&#8217;t have to work evenings any more (it&#8217;s been a <strong>very</strong> busy month+ =).</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/06/11/adobe-air-local-sql-databases-and-my-role/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Book Review: ActionScript 3.0 Cookbook</title>
		<link>http://probertson.com/articles/2007/04/03/actionscript-3-cookbook-review/</link>
		<comments>http://probertson.com/articles/2007/04/03/actionscript-3-cookbook-review/#comments</comments>
		<pubDate>Tue, 03 Apr 2007 17:30:16 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Book reviews]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/04/03/actionscript-3-cookbook-review/</guid>
		<description><![CDATA[With the release of Flex 2 and ActionScript 3.0, I started to watch for new books coming out. Admittedly the numbers have been smaller than I expected, but the first book to hit the shelves &#8212; one I&#8217;ve been anticipating with enthusiasm &#8212; is the ActionScript 3.0 Cookbook by Joey Lott, Darron Schall, and Keith [...]]]></description>
			<content:encoded><![CDATA[<p>With the release of Flex 2 and ActionScript 3.0, I started to watch for new books coming out. Admittedly the numbers have been smaller than I expected, but the first book to hit the shelves &#8212; one I&#8217;ve been anticipating with enthusiasm &#8212; is the ActionScript 3.0 Cookbook by Joey Lott, Darron Schall, and Keith Peters.</p>
<h2>Book summary</h2>
<p>This book obviously covers ActionScript 3.0, the (as of this writing) most current version of ActionScript. ActionScript 3.0 is used in Adobe Flex, including Adobe&#8217;s Flex Builder tool; it is also the language used in the not-yet-but-soon-to-be-released Adobe Flash CS3 (a.k.a. &#8220;Blaze&#8221; or version 9). However, since the book was written primarily while Flex was in beta, and Flash was not even released as a public alpha, all the recipes that involve the IDE refer specifically to Flex Builder. The book is written and organized in the O&#8217;Reilly &#8220;cookbook&#8221; format, where each chapter includes several &#8220;recipes&#8221; written as a problem, a solution to the problem, and a discussion/explanation of the solution. I think of books like this as &#8220;task-based reference&#8221; books &#8212; they&#8217;re meant to be used like a reference, that you can look up something you want when you need it &#8212; but they show how to accomplish a particular task rather than showing how to use a particular language element. That way, if you know you want to do something in particular (e.g. &#8220;simulate rolling dice in ActionScript&#8221;) but don&#8217;t know which methods or properties you would use to accomplish the task, you can just look it up in the book and it will tell you.</p>
<h2>What I liked best</h2>
<p>There are several aspects of this book that offer a lot of value. The ones which stood out most to me are:</p>
<h3>Coverage of specific use cases and more advanced functionality</h3>
<p>Some parts of ActionScript 3.0 have very obvious uses&#8212;the DropShadowFilter class, for example, has a pretty obvious use. However, there are several aspects of the language (such as the Bitmap class, the ByteArray class, the DisplacementMap filter, the ConvolutionFilter, etc.) that provide very &#8220;open-ended&#8221; functionality. There are lots of different things you can do with them, but you have to know what they are and understand some particular programming topic (like graphics manipulation or working with byte data) in order to make use of them. This book describes how to perform some of the tasks that can be performed using these &#8220;open-ended&#8221; classes. This, in my opinion, is the perfect use of the cookbook format.</p>
<p>In the topics where it shines, this book really shines. I was very impressed with the sophistication of many of the topics that are covered (for example, topic 4.10 &#8220;Cards&#8221;).</p>
<h3>Supplemental code library</h3>
<p>The book has a significant library of supplemental code (available as a free download). Several of the recipes use the code in this library to accomplish their tasks. For example, the solution to the recipe &#8220;Simulating Dice&#8221; is to &#8220;use the NumberUtilities.random() method [from the supplemental code library] to generate random numbers in the desired range.&#8221; In truth I can see plusses and minuses to this approach. It definitely saves time for the reader &#8212; if you&#8217;re on a deadline and trying to build that Dungeons &amp; Dragons simulator then having the code already written is a big benefit. It also saves pages in the book, and avoids the need for in-depth explanations (and nearly-redundant explanations, such as those for &#8220;Simulating a coin toss&#8221; and &#8220;Simulating dice&#8221;) since all the book needs is a few lines demonstrating how to call the method in the supplemental code. However, if you&#8217;re the reader who wants to learn more, or to understand the principles behind the solution as well as the code needed to carry out those principles, you&#8217;re left feeling pretty empty. I think one possible compromise (which isn&#8217;t done) might be to have a more in-depth explanation for such sections, perhaps showing a few relevent lines of code extracted from the code library, demonstrating how the code library works and how you might adapt it or build your own similar solution.</p>
<h3>Breadth of topic coverage</h3>
<p>The ActionScript 3.0 documentation that comes with Flex 2 includes two main parts: the <a href="http://livedocs.macromedia.com/flex/201/langref/">reference documentation</a>, and a book called &#8220;<a href="http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/js/html/wwhelp.htm?href=Part5_ProgAS_155_1.html">Programming ActionScript 3.0</a>.&#8221; However, due to various factors there are several topics that aren&#8217;t covered in &#8220;Programming ActionScript 3.0&#8221; in the Flex 2 release. These include topics such as working with TextField objects, filters, and bitmap manipulation, among others. The &#8220;ActionScript 3.0 Cookbook&#8221; can help to fill in these gaps because it does provide coverage of some of those &#8220;missing&#8221; topics. Admittedly, one of the reasons those topics aren&#8217;t covered in the Flex 2 documentation is because they are largely irrelevent for a Flex-only application&#8212;for example, in Flex you use the TextArea component or TextInput component to display text, rather than just a TextField component. In any case, they do get some coverage in the &#8220;ActionScript 3.0 Cookbook.&#8221; As a side note, several new chapters are being added to &#8220;Programming ActionScript 3.0,&#8221; to be released with the next version of Flash, covering many of these parts of ActionScript that aren&#8217;t commonly used in Flex, such as text fields, movie clips, more on display programming, video, sound, filters, and so on.</p>
<h2>Room for improvement</h2>
<p>As you may have gathered from the previous section, one way I judge a computer book is how well it supplements the manufacturer-provided documentation rather than just rehashing the same material (see <a href="#disclaimers">disclaimer</a>). I also think it&#8217;s important for a book to be consistent to its purpose. If it&#8217;s supposed to be a reference, it should just be a reference. If it&#8217;s supposed to be an instructional book written as a series of lessons, it should stick to that format. With a topic like ActionScript there&#8217;s no way a single book can be all these things, so I think it&#8217;s important for the book to stick to what it does best, and let other books fill in other roles.</p>
<p>As the preceding paragraph implies, I have some disagreements with this book in terms of its overlap with the ActionScript 3.0 documentation and its consistency with its stated goal of being a &#8220;cookbook.&#8221;</p>
<h3>Too much redundancy with the official documentation</h3>
<p>The question I kept asking myself as I was reading through this book is &#8220;what is a cookbook, really?&#8221; In my mind, a &#8220;cookbook&#8221; is a book whose topics are more &#8220;edgy&#8221; or involved than what you might find in the core documentation. It should cover how to accomplish specific tasks that aren&#8217;t easily figured out and aren&#8217;t found elsewhere (again, especially not in the main documentation). It should also include &#8220;hacks&#8221; or workarounds to accomplishing things that aren&#8217;t readily available using the built-in functionality of the language. After all, I can learn (for example) the syntax for writing a class or the syntax for adding a display object to the screen by reading the built-in documentation, so why would I need to buy a cookbook to tell me how? On the other hand, the built-in documentation doesn&#8217;t (and likely will never) tell me how to do more specific implementation tasks, like &#8220;simulating rolling dice&#8221; or &#8220;creating a graphical texture,&#8221; but they&#8217;re common enough programming problems that those are topics I&#8217;d expect to find in a cookbook.</p>
<p>Admittedly, when I first started working with ActionScript 3.0, one of the first thoughts that came to me was &#8220;I wonder what they&#8217;re going to put in the ActionScript Cookbook.&#8221; ActionScript 3.0 by itself is a big improvement over the previous version, and many of the things that used to require workarounds are really straightforward now &#8212; so I wondered what they&#8217;d do to replace all of those topics in the book. Unfortunately it looks like they didn&#8217;t do anything to replace them.</p>
<p>As I mentioned in the &#8220;good&#8221; section, there are lots of topics covered in this book that fit squarely in what I consider to be an appropriate cookbook topic. But there are also plenty of topics that I think should have been left in the built-in documentation rather than needing to repeat them in the ActionScript 3.0 Cookbook. Some key examples are topics related to basic syntax. For example, &#8220;Creating a Custom Class&#8221; and its related topics &#8220;Creating Properties that Behave as Methods,&#8221; &#8220;Creating Static Methods,&#8221; &#8220;Creating Subclasses,&#8221; etc. All of these topics are covered in the built-in documentation, both in a basic form and in greater depth than this book can afford. In addition, these aren&#8217;t topics that a person is going to need to look up frequently. Chances are, a person who&#8217;s new to ActionScript or who&#8217;s been using it for a while and wants to &#8220;move up&#8221; to using custom classes will need that information. However, once a person has created a handfull of custom classes, they&#8217;re not going to need to look up the syntax in the book any more&#8212;they&#8217;ll already know it or else they&#8217;ll just look at a class they created, etc. So there&#8217;s little benefit to that content being provided in this book.</p>
<h3>Too much discussion on some topics</h3>
<p>This is related to the previous criticism. For example, I said that I thought it was redundant for the ActionScript 3.0 Cookbook to have a recipe for &#8220;Creating a Custom Class&#8221; since that topic is covered in detail in the in-product documentation. However, suppose the publisher wants to fill up the topic list. Or suppose a person who&#8217;s &#8220;moving up&#8221; to creating custom classes has read the chapter on creating a custom class in Programming ActionScript 3.0, and has a decent understanding of the concepts, but just can&#8217;t remember the syntax. I admit that there could be some value in having a quick reference place to turn to to find the syntax for creating a custom class. However, at that point the person doesn&#8217;t want to read through four pages of explanation about creating a custom class &#8212; they just want to see the recipe solution and copy it into their own code. Unfortunately, this book could do that, but it doesn&#8217;t. Rather than just give a nice model of a custom class, it spends four pages talking about it. The section on display programming is even more bulky &#8212; while they might justifiably have had several one-page-or-less-each recipes on things like &#8220;adding a display object to the display list,&#8221; &#8220;removing an object from the display list,&#8221; &#8220;reordering objects on the display list,&#8221; etc., the book spends 14 pages talking about what the display list is and how it works. That&#8217;s nice, but it&#8217;s not the point of this book in my opinion. The built-in documentation has even more thorough, detailed explanations about what the display list is, what types of objects can be used, etc. If the cookbook wants to do its readers a service, it should trim that fat, which would make it easier to find the specific method name or syntax &#8212; a quick resource to turn to for those &#8220;I know I&#8217;ve seen this before but I can&#8217;t quite remember how to do it&#8221; sorts of questions.</p>
<h2>Conclusion</h2>
<p>In summary, I have mixed feelings about this book. When it&#8217;s good, it really shines&#8212;the sections that go into more depth or into a more advanced topic than Adobe&#8217;s ActionScript 3.0 documentation are really valuable. However, a significant part of the book is redundant with the documentation, doesn&#8217;t cover it in as much detail as the built-in documentation, but covers it in so much detail that the benefits of the &#8220;cookbook&#8221; format are lost.</p>
<h2>Book details</h2>
<ul>
<li>Title: ActionScript 3.0 Cookbook (On <a href="http://www.amazon.com/ActionScript-3-0-Cookbook-Joey-Lott/dp/0596526954">Amazon.com</a>) (<a href="http://www.oreilly.com/catalog/actscpt3ckbk/index.html">Publisher&#8217;s page</a>) </li>
<li>Authors: Joey Lott, Darron Schall, and Keith Peters </li>
<li>Publisher: O&#8217;Reilly </li>
<li>Copyright year: 2007</li>
<li>ISBN 10: 0-596-52695-4 </li>
<li>ISBN 13: 978-0-596-52695-5 </li>
</ul>
<h2 id="disclaimers">Disclaimers</h2>
<ol>
<li>As a contract employee, I helped write the Flex 2 ActionScript documentation, including one chapter and parts of other chapters in &#8220;Programming ActionScript 3.0&#8221; as well as a handful of samples for the ActionScript language reference. I now work as a full-time employee for Adobe, and one of my current roles is as lead writer of &#8220;Programming ActionScript 3.0&#8221; for the Flash version 9 release&#8212;so I obviously I am not unbiased about the Adobe-provided ActionScript documentation. </li>
<li>I received this book at a heavily discounted price in exchange for writing this review. While it&#8217;s impossible to remove myself from that detail completely, I have tried my best to make this an unbiased review. Want to know how to get discounted books in exchange for making reviews? Contact your <a href="http://www.adobe.com/cfusion/usergroups/">local Adobe Users&#8217; Group</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/04/03/actionscript-3-cookbook-review/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flash 8 Advanced: Another sample chapter (Video)</title>
		<link>http://probertson.com/articles/2006/10/30/flash-8-advanced-sample-chapter-video/</link>
		<comments>http://probertson.com/articles/2006/10/30/flash-8-advanced-sample-chapter-video/#comments</comments>
		<pubDate>Mon, 30 Oct 2006 20:40:38 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2006/10/30/flash-8-advanced-sample-chapter-video/</guid>
		<description><![CDATA[I just discovered that another sample chapter of my book, this time the chapter on Flash Video, has been made available by the publisher.
The book is &#8220;Macromedia Flash 8 Advanced: Visual QuickPro Guide&#8221; (Peachpit Press), by Russell Chun and me.
The chapter is chapter 2, &#8220;Working with Video.&#8221; It covers converting video to FLV format (in [...]]]></description>
			<content:encoded><![CDATA[<p>I just discovered that another sample chapter of my book, this time the chapter on Flash Video, has been made available by the publisher.</p>
<p>The book is &#8220;Macromedia Flash 8 Advanced: Visual QuickPro Guide&#8221; (Peachpit Press), by Russell Chun and me.</p>
<p>The chapter is chapter 2, &#8220;Working with Video.&#8221; It covers converting video to FLV format (in depth), adding Flash elements/overlays/controls to a video, and rotoscoping with Flash video.</p>
<p>The chapter has been released as part of the <a href="http://labs.adobe.com/technologies/digitaleditions/library/">sample eBook Library</a> that Adobe has released in conjunction with the <a href="http://labs.adobe.com/technologies/digitaleditions/">beta preview of the Adobe Digital Editions eBook reader</a>. You can download the chapter from the <a href="http://labs.adobe.com/technologies/digitaleditions/library/">Sample eBook Library page</a> (you may need to install the reader first &#8212; I&#8217;m not sure since I had already installed it before I went to the library page).</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2006/10/30/flash-8-advanced-sample-chapter-video/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flash 8 Advanced: sample chapter on Adobe design center</title>
		<link>http://probertson.com/articles/2006/08/03/flash-8-advanced-sample-chapter/</link>
		<comments>http://probertson.com/articles/2006/08/03/flash-8-advanced-sample-chapter/#comments</comments>
		<pubDate>Thu, 03 Aug 2006 15:38:07 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2006/08/03/flash-8-advanced-sample-chapter/</guid>
		<description><![CDATA[In case you&#8217;re curious about scripting sound in Flash 8 ActionScript, or you just want to see a sample of a Flash book, Adobe recently posted a sample chapter (well, actually half a chapter) from my book &#8220;Macromedia Flash 8 Advanced: Visual QuickPro Guide&#8221; in their site&#8217;s design center.
The chapter that was chosen (I&#8217;m not [...]]]></description>
			<content:encoded><![CDATA[<p>In case you&#8217;re curious about scripting sound in Flash 8 ActionScript, or you just want to see a sample of a Flash book, Adobe recently posted a <a href="http://www.adobe.com/designcenter/tutorials/fla8at_controlsound/">sample chapter (well, actually half a chapter) from my book &#8220;Macromedia Flash 8 Advanced: Visual QuickPro Guide&#8221;</a> in their site&#8217;s design center.</p>
<p>The chapter that was chosen (I&#8217;m not sure whether Adobe or Peachpit selected this particular chapter) is Chapter 9, which covers sound control in ActionScript. This chapter is actually mostly the work of co-author Russell Chun. While I updated the code for the exercises to ActionScript 2, and made relevent updates to the text for Flash 8, the main ideas for the examples and much of the text were not written by me. (But don&#8217;t get me wrong &#8212; it&#8217;s still great information &#8212; I just want to give credit where it&#8217;s due.)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2006/08/03/flash-8-advanced-sample-chapter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent silence and Flash 8 book</title>
		<link>http://probertson.com/articles/2005/09/28/my-flash-8-book/</link>
		<comments>http://probertson.com/articles/2005/09/28/my-flash-8-book/#comments</comments>
		<pubDate>Wed, 28 Sep 2005 15:53:06 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2005/09/28/my-flash-8-book/</guid>
		<description><![CDATA[Anyone who&#8217;s read more than one of my articles knows I don&#8217;t lack for words. So why has the usually verbose (at least in post length, if not frequency) Paul Robertson been so quiet lately? Sorry, no big secret, but a big announcement I guess (at least it&#8217;s big for me). I&#8217;ve been working on [...]]]></description>
			<content:encoded><![CDATA[<p>Anyone who&#8217;s read more than one of my articles knows I don&#8217;t lack for words. So why has the usually verbose (at least in post length, if not frequency) Paul Robertson been so quiet lately? Sorry, no big secret, but a big announcement I guess (at least it&#8217;s big for me). I&#8217;ve been working on a book about Flash 8. I&#8217;ve been doing this in addition to working full time at my day job, so you may imagine, that means any extra time for anything (like personal writing, or even playing with my kids) has been literally nonexistant.</p>
<p>Anyway, that&#8217;s my excuse, and I apologize if it&#8217;s caused you any pain. Maybe once I&#8217;ve finished the book (not done yet, but getting very close) I&#8217;ll write a bit more about what it&#8217;s been like to work on a book. It&#8217;s certainly been a learning process for me, of course with the new Flash content, but also with becoming more efficient at using Word and Fireworks (the automation features of both programs are now well-used on my computer). And of course I&#8217;ve learned a lot about what it&#8217;s like to work with a publisher, too.</p>
<p>For the curious, the book is <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321349644/">Macromedia Flash 8 Advanced for Windows and Macintosh: Visual QuickPro Guide</a>, published by Peachpit Press. Since it is one of their &#8220;Visual QuickPro Guides&#8221; series, it is very task-focused &#8212; definitely more of a task-based reference than a sit-down-and-read book. This is the fourth edition of the book, although it is the first edition that I&#8217;ve worked on. Russell Chun is the principal author of the book; my job has been to update the existing material and add new material for Flash 8. That doesn&#8217;t sound like a lot (at least it doesn&#8217;t to me when I say it that way), but in truth (in my obviously very biased opinion) I think this edition is a significant update to the book. Nearly every chapter has significant new or updated content, practically every task has been updated at least to some extent, plus there is a new chapter on manipulating bitmaps (mostly using the BitmapData class, plus some things on filters).</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2005/09/28/my-flash-8-book/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
