<?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>Cranky Bit &#187; AIR</title>
	<atom:link href="http://blog.crankybit.com/tags/adobe/air/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.crankybit.com</link>
	<description>Take a byte out of tech!</description>
	<lastBuildDate>Wed, 09 Mar 2011 17:23:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Notes: Improved Flash Remoting and Adobe AIR Integration in ColdFusion 9</title>
		<link>http://blog.crankybit.com/notes-max09-improved-flash-remoting-and-air-in-cf9/</link>
		<comments>http://blog.crankybit.com/notes-max09-improved-flash-remoting-and-air-in-cf9/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 00:57:25 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[MAX2009]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/?p=334</guid>
		<description><![CDATA[These notes are taken at Adobe MAX 2009. You can use HTTPService, WebService, RemoteObject components in Flex to pull data in different ways. Now what about ColdFusion 9? ColdFusion&#8217;s Flash Remoting has been improved. So Flash applications that have ColdFusion 9 as a backend will interact much faster, and it can handle circular references. There [...]]]></description>
			<content:encoded><![CDATA[<p>These notes are taken at Adobe MAX 2009.</p>
<p>You can use HTTPService, WebService, RemoteObject components in Flex to pull data in different ways. Now what about ColdFusion 9?</p>
<p>ColdFusion&#8217;s Flash Remoting has been improved. So Flash applications that have ColdFusion 9 as a backend will interact much faster, and it can handle circular references.</p>
<p>There is now direct data translation between ActionScript and CF types, instead of previously having an intermediate Java layer that handled this. This involves changes in services-config.xml, but no code changes are required in your apps. Support for the old style remoting is still present for backward compatibility.</p>
<p>So how much faster is it? Drastically faster. Easily x9 faster, and that increases as the number of transactions occurs, according to the whitepaper Adobe has released about it.</p>
<p><strong>BlazeDS.</strong> ColdFusion 9 is now integrated with BlazeDS as the default installation.</p>
<p><strong>Configuration File.</strong> Services-Config.xml is now split into 4 files. There are a handful of ColdFusion-specific properties under the channel definition now. An &#8220;enable-small-messages&#8221; property is there and should be set to &#8220;false&#8221;. This is important for the new Flash Remoting in CF9, because BlazeDS&#8217;s default is &#8220;true&#8221;. </p>
<p>There is an AMFChannel component in Flex for the new Flash Remoting (Note: You can alternatively tell the AMFChannel component to have enableSmallMessages=&#8221;false&#8221;). Finally, the endpoint class is changed for the new CF9 one.</p>
<p><strong>Offline AIR apps with ColdFusion 9</strong></p>
<p>Now the fun stuff. ColdFusion 9 has an ORM for AIR! Build offline AIR apps without the SQL mess and conflict handling. There is a CF-AIR persistent framework for SQLite on the client side. CF keeps track of all updates to local database and synchronizes with the server, including conflict resolution.</p>
<p>By having ORM on the client- and server-side, these two are integrated through the CF-AIR persistent framework.</p>
<p>In the application code for the demo, there were customer.cfc and address.cfc persistent objects. Then a sync CFC is used for providing the fetch and sync functions for communication with the AIR client.</p>
<p>Step #1: Create the persistent CFCs.</p>
<p>Step #2: Create the sync CFC. He called it custmgr.cfc. The CFC has implements=&#8221;ISyncManager&#8221; as an attribute. Then you have fetch() and sync() methods that handle the transactions. Here you can provide your logic for handling certain scenarios, such as conflicts.</p>
<p>Step #3: On client side, create equivalent AS classes that map to the CFC via the [RemoteClass(alias="")] metadata tag.</p>
<p>Step #4: Use the CF-built AIR libraries provided to fetch data from server, with the SyncManager component. It&#8217;s very simple, practically just point it to the sync CFC and do a fetch() method. To work with the database, you then openSession() and can create new AS objects and call save() on the session to insert/update/etc.  Finally, using commit() will commit the results and invoke the sync() process.</p>
<p>On the client side, it can receive conflict notification and receive both versions of the data so that you can decide what to do with the conflict.</p>
<p>It is very exciting to have some help implementing synchronization without having to purchase LCDS. Using the CF9/AIR integration libraries will be very nice.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/notes-max09-improved-flash-remoting-and-air-in-cf9/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Notes: What&#8217;s Coming in AIR 2</title>
		<link>http://blog.crankybit.com/notes-max09-whats-coming-in-air-2/</link>
		<comments>http://blog.crankybit.com/notes-max09-whats-coming-in-air-2/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 00:32:09 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[MAX2009]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/?p=329</guid>
		<description><![CDATA[These are notes taken at MAX 2009. This is obviously subject to change before AIR 2 is launched. Multi-touch gestures. This is especially useful for Flash&#8217;s new ability to compile down to iPhone, but it will even work on tablets or laptops that support multi-touch, such as the track pad on MacBooks. Opening Files. There [...]]]></description>
			<content:encoded><![CDATA[<p>These are notes taken at MAX 2009. This is obviously subject to change before AIR 2 is launched.</p>
<p><strong>Multi-touch gestures.</strong> This is especially useful for Flash&#8217;s new ability to compile down to iPhone, but it will even work on tablets or laptops that support multi-touch, such as the track pad on MacBooks.</p>
<p><strong>Opening Files.</strong> There is now a File.openWithDefaultApplication() method which does just what it says. So you can open data document of any type in its native app from your AIR app, i.e. open a Word document in Word from your AIR app. Executables are blacklisted, such as *.exe, *.bat, or other executables.</p>
<p><strong>File &#8220;downloaded&#8221;.</strong> You can use myFile.downloaded=true to set the bit on a file that will notify the user with a message like, &#8220;This file has been downloaded from the Internet. Are you sure you want to open it?&#8221; the first time it opens.</p>
<p><strong>Volume Detection.</strong> Listen for mounting and unmounting of volumes. Query system for volume info. So this gives you the ability to work with external volumes including optical media or attached cameras.</p>
<p><strong>Native processes.</strong> You can start native processes outside of AIR, or even reference it and launch it. This includes passing in arguments and utilizing stdin, stdout, stderr! Now, you can&#8217;t use this ability from an app that has been installed straight from an AIR file. You have to have the app in a native installer. This way, someone on a Mac won&#8217;t try to run an app that wants to run a Windows executable, or something similar. In the demo, the Mac screenshot process was invoked, and in another demo, Spotlight functionality was invoked and its output was incorporated into the app!</p>
<p><strong>File promises.</strong> Ability to tell the OS about files you don&#8217;t have yet. Gives you the ability to drag and drop files in cases when they are on the network or Internet.</p>
<p><strong>Listening on a socket.</strong> Ability for inter-application communication. Better protocol support (such as FTP). Networking utilities. You just use ServerSocket.bind() and ServerSocket.listen() methods in conjunction with an event listener to act on activity. Demonstrated it with an HTTP proxy app called HTTPeek (on Google Code). Very fast. Handles the socket connection well.</p>
<p><strong>Advanced Networking.</strong> Get network information. Support for IPv6. UDP support. A DNS resolver. More coming.</p>
<p><strong>Audio Encoding.</strong> Surprisingly, this wasn&#8217;t supported before. Now you can encode data directly from the microphone.</p>
<p><strong>Global Error Handling.</strong> You can now catch all uncaught errors and error events in your app. This is useful because on a client that does not have the debugger version of Flash, the app will just stop working. With this global error handling feature, you can log the errors to a file or over the network, or do other things.</p>
<p><strong>Accessibility.</strong> Functionality from Flash Player 10 will now be supported in AIR. It has 28 accessible Flex components, supporting MSAA (Microsoft Active Accessibility) in JAWS or Microsoft Narrator, for example.</p>
<p><strong>JavaScript Profiling.</strong> Can access profiling information via Aptana.</p>
<p><strong>Optimization.</strong> Lower memory consumption, lower CPU utilization especially when the app is idle.</p>
<p><strong>Misc.</strong> Improved printing. SQLite supports nested transactions. Exit even on shutdown (can now see when the event is not cancelable). Various WebKit enhancements.</p>
<p>Flex 3 will work for AIR 2, but Flex 4 with Flash Builder 4 will be a cleaner, more set up approach for developing AIR 2. You&#8217;ll have to overlay AIR 2 SDK on your Flex Builder 3 installation if you want to develop for AIR 2 in Flex 3.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/notes-max09-whats-coming-in-air-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tom Yager Praises AIR</title>
		<link>http://blog.crankybit.com/tom-yager-praises-air/</link>
		<comments>http://blog.crankybit.com/tom-yager-praises-air/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 18:44:17 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[General Web Dev.]]></category>
		<category><![CDATA[IT Industry]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/tom-yager-praises-air/</guid>
		<description><![CDATA[Tom Yager, writer of the Ahead of the Curve column in InfoWorld, wrote up a nice article about AIR entitled AIR gets rich apps right. Touting Adobe&#8217;s credentials through their past record, he indicated that Adobe is a great candidate for accomplishing what AIR is intended to do: Get that web technology to the desktop [...]]]></description>
			<content:encoded><![CDATA[<p>Tom Yager, writer of the <a href="http://weblog.infoworld.com/yager/" target="_blank">Ahead of the Curve</a> column in InfoWorld, wrote up a nice article about AIR entitled <a href="http://weblog.infoworld.com/yager/archives/2008/04/air_gets_rich_a.html" target="_blank">AIR gets rich apps right</a>. Touting Adobe&#8217;s credentials through their past record, he indicated that Adobe is a great candidate for accomplishing what AIR is intended to do: Get that web technology to the desktop environment untethered from the web browser.</p>
<p>I&#8217;ve always loved Tom Yager and find his columns very interesting (although the Intel/AMD discussions lose my interest). It&#8217;s great to see him praising AIR.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/tom-yager-praises-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notes: Adobe AIR Local Data Storage Options</title>
		<link>http://blog.crankybit.com/notes-adobe-air-local-data-storage-options/</link>
		<comments>http://blog.crankybit.com/notes-adobe-air-local-data-storage-options/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 17:13:10 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[General Web Dev.]]></category>
		<category><![CDATA[Webinars]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/notes-adobe-air-local-data-storage-options/</guid>
		<description><![CDATA[The following are my notes during the Adobe AIR Local Data Storage Options webinar that was presented during Adobe Developer Week. It was presented by Greg Hamer and the slides and demo code are already online. Before getting started, note how Microsoft and Adobe are taking two different approaches: Microsoft is trying to bring the [...]]]></description>
			<content:encoded><![CDATA[<p>The following are my notes during the Adobe AIR Local Data Storage Options webinar that was presented during <a href="http://adobe.com/go/2008_developer_week" target="_blank">Adobe Developer Week</a>. It was presented by Greg Hamer and the slides and demo code are already <a href="http://halcyonsolutions.net/presos/08/airsql/" target="_blank">online</a>.</p>
<p>Before getting started, note how Microsoft and Adobe are taking two different approaches: Microsoft is trying to bring the .Net desktop development community to the web. Adobe is conversely trying to bring web developers to the desktop! (<a href="http://www.news.com/8301-10784_3-9789007-7.html" target="_blank">Kevin Lynch</a>)</p>
<p>There are four main options for AIR local storage: Local Shared Objects, File System, Encrypted Local Store, and the embedded SQLite database. Shared Objects are available in the Flash Player as well; all of these options are obviously available in AIR. Note that the data size limitation for Shared Objects does not exist in the AIR runtime!</p>
<p><strong>Performance considerations.</strong> Shared Objects read and write very quickly. File system access and encrypted local stores are typically be slow in writing. Embedded SQLite databases are typically the best combination of speed and random access of items. Greg highlighted the AIR_LocalStorage_Demo app created by Jason Williams that demonstrates the speeds of the four storage methods.</p>
<p><strong>Local Shared Objects.</strong> You can serialize memory resident data structures. Great! However, it runs in <em>synchronous</em> mode.</p>
<p><strong>Encrypted Local Store.</strong> Used to store sensitive data. The price is the slow write speeds.  Also runs in synchronous mode. All data is serialized using ByteArray.</p>
<p><strong>File System. </strong>Obviously important for management of documents. Can run in sync and async mode. The File and FileStream objects work together to point to a file and read/write data. The File object helps remove you from the pain of dealing with Mac vs. Windows environments with properties like File.userDirectory, File.documents.Directory, File.desktopDirectory, etc. It also has methods for opening Open and Save dialog boxes native to the environment as well as copying/moving/deletion methods.</p>
<p><strong>Embedded SQLite Database.</strong>  Nice thing about them is that they are self-contained in a single file and require no external software installation to begin using them (support is built into the AIR runtime). Even supports transactions. And the database supports large amounts of data: SQLite has a theoretical limit of over 2TB. Supports ANSI-SQL 92.</p>
<p>However, it&#8217;s not a full-blown enterprise database server, obviously. So you lose things like stored procedures, enforcing data type constraints, foreign key constraints, and primary keys must be integers. It also isn&#8217;t a multiuser environment.</p>
<p><strong>Session evaluation. </strong>I am unhappy to say that I was disappointed with the session. It was high-level, the coverage of code samples (when they weren&#8217;t passed over completely) consisted of merely reading the code back to us. I recommend viewing the recording if you have zero knowledge of data storage in Flex and AIR, as it would serve as a decent first-baby-step introduction for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/notes-adobe-air-local-data-storage-options/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>iPhone AIR?</title>
		<link>http://blog.crankybit.com/iphone-air/</link>
		<comments>http://blog.crankybit.com/iphone-air/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 22:16:03 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[General Web Dev.]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[iPod/iPhone]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/iphone-air/</guid>
		<description><![CDATA[So, with Apple preparing to hold an iPhone Software Roadmap event this Thursday, people are eagerly anticipating news about how Apple will handle an SDK for the iPhone environment. Many developers were frustrated&#8211;and many web developers had our curiosities pleasantly piqued&#8211;when Apple initially announced that &#8220;software&#8221; would be available for the iPhone in the form [...]]]></description>
			<content:encoded><![CDATA[<p>So, with Apple preparing to hold an <a href="http://www.appleinsider.com/articles/08/02/27/apple_to_hold_iphone_software_roadmap_media_event_next_week.html" target="_blank">iPhone Software Roadmap event</a> this Thursday, people are eagerly anticipating news about how Apple will handle an SDK for the iPhone environment.</p>
<p>Many developers were frustrated&#8211;and many web developers had our curiosities pleasantly piqued&#8211;when Apple initially announced that &#8220;software&#8221; would be available for the iPhone in the form of Ajax web applications. Naturally, many of the disappointed folks were irritated because the web platform is something that they&#8217;re entirely unfamiliar with, probably having backgrounds in Objective C or something similar; probably a minority were disappointed because their target application legitimately could not be powered by HTML and Ajax.</p>
<p>That said, it is indeed a very thought-provoking concept: Using web technology as your application environment. As most web developers will attest to, there honestly isn&#8217;t that much that a typical application does that cannot be accomplished with web technology. With the advent of Ajax frameworks, applications built with web technology can have very similar responsiveness and dynamics of a &#8220;classic&#8221; application. Especially when you remove the burden of cross-browser compatibility, in the iPhone&#8217;s case.</p>
<p>But with the iPhone/iPod Touch scenario, it is irritating that the application <em>has</em> to reside in Safari and <em>has</em> to be loaded off the web. It almost feels as if Apple was trying to push something that wasn&#8217;t&#8230;quite&#8230;ready. Something like <a href="http://www.adobe.com/go/air" target="_blank">AIR</a>!</p>
<p>AIR accomplishes everything that Apple was suggesting for the iPhone environment, but for the desktop. Use web technology, but write a &#8220;compiled&#8221;, stand-alone application that really doesn&#8217;t even have to use the web. Use HTML. Use Ajax. Use Flex and Flash. Have a nice encapsulated application on your desktop. Especially when you throw the Flash technology into the platform, it is now a very capable environment for a large variety of applications, without being constrained to the browser. Wouldn&#8217;t it be great if that same cross-platform environment, AIR, worked on the iPhone as well?</p>
<p>Oops, Flash technology isn&#8217;t currently supported by the iPhone. That is actually another source of contention. And the AIR environment <u>does</u> lose some of its punch without Flash and Flex, even though its HTML/Ajax implementation can do a very decent job with most typical applications.</p>
<p>Steve Jobs has <a href="http://www.apple.com/pr/library/2007/06/11iphone.html" target="_blank">made it clear</a> that he likes the idea of web technology powering iPhone apps. Now, consider some of the  facts. Apple announces the iPhone SDK will be released in February, and then fails to deliver. Meanwhile, Flash still isn&#8217;t found on the iPhone, and Adobe &#8220;invents the wheel&#8221; by getting web technology to drive native apps through its work with AIR. Is there a common theme with these events? Perhaps something like: <em><strong>Are Apple and Adobe working together to get the much-needed Flash technology onto the iPhone and, subsequently, releasing an SDK that uses AIR technology, with hooks into the iPhone system just like AIR currently has hooks into the Linux, Windows, and Mac OS X desktop operating systems? </strong></em></p>
<p>It wouldn&#8217;t be the first time Apple has had to wait for its partners, or take the heat for them. For instance, Apple has clearly been taking a lot of heat for many factors of the iPhone that are clearly not in Apple&#8217;s interest, but in AT&amp;T&#8217;s.</p>
<p>And this scenario would fit the circumstances around Adobe&#8217;s development of AIR. Adobe has been working on AIR since well before the iPhone was released, but AIR wasn&#8217;t officially released until <em>February 25, 2008. </em>Even if Apple and Adobe <u>were</u> working closely together, there just hasn&#8217;t been enough time for AIR to get released <em>and </em>hooks to be developed to provide iPhone-specific functionality in AIR. Adobe has understandably concerned itself with its own business first. With that done, attention can turn to Apple to support them in concluding their own business.</p>
<p>Of course, this prediction is a reflection of my own desires as much as it fits the circumstances. As a developer that uses Adobe technology including Flex and AIR, and an Apple enthusiast for more than 20 years, I would love to see things happen this way. Undoubtedly we will have a clearer idea of Apple&#8217;s iPhone development roadmap after this Thursday.</p>
<p>As if the thought of an &#8220;iPhone AIR&#8221; isn&#8217;t confusing enough. <img src='http://blog.crankybit.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/iphone-air/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SQLite Manager for Firefox</title>
		<link>http://blog.crankybit.com/sqlite-manager-for-firefox/</link>
		<comments>http://blog.crankybit.com/sqlite-manager-for-firefox/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 12:32:58 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[General Web Dev.]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/sqlite-manager-for-firefox/</guid>
		<description><![CDATA[With AIR development looming on my horizon, it&#8217;s nice to see SQLite database apps popping up. Now there is even a SQLite Manager plugin for Firefox!! I&#8217;d say its most clunky aspect is data entry, but otherwise it&#8217;s very decent.]]></description>
			<content:encoded><![CDATA[<p>With AIR development looming on my horizon, it&#8217;s nice to see SQLite database apps popping up. Now there is even a <a href="https://addons.mozilla.org/en-US/firefox/addon/5817" target="_blank">SQLite Manager</a> plugin for Firefox!!</p>
<p>I&#8217;d say its most clunky aspect is data entry, but otherwise it&#8217;s very decent. <img src='http://blog.crankybit.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/sqlite-manager-for-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Infinite Loop of AIR</title>
		<link>http://blog.crankybit.com/an-infinite-loop-of-air/</link>
		<comments>http://blog.crankybit.com/an-infinite-loop-of-air/#comments</comments>
		<pubDate>Thu, 11 Oct 2007 23:15:30 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[General Web Dev.]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/an-infinite-loop-of-air/</guid>
		<description><![CDATA[Okay, sorry for the dorky play on words. In addition to AIR getting an article from Oliver Goldman over at Dr. Dobb&#8217;s, the AIR app called Spaz&#8211;one of the AIR Developer Derby winners&#8211;and its developer, Ed Finkler, got some attention via an interview over at Ars Technica&#8217;s Infinite Loop journal. Spaz gets more time in the [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, sorry for the dorky play on words. In addition to AIR getting an <a target="_blank" href="http://www.ddj.com/architect/202401085">article</a> from Oliver Goldman over at Dr. Dobb&#8217;s, the AIR app called <a target="_blank" href="http://funkatron.com/spaz">Spaz</a>&#8211;one of the AIR Developer Derby winners&#8211;and its developer, Ed Finkler, got some <a target="_blank" href="http://arstechnica.com/journals/apple.ars/2007/10/11/twitter-with-spaz-air-interview-with-dev-ed-finkler">attention via an interview</a> over at Ars Technica&#8217;s Infinite Loop journal.</p>
<p>Spaz gets more time in the Twitter limelight, and Ed talked up the benefits of AIR. Good job, Ed! I haven&#8217;t had a chance to read the whole interview yet, but look forward to reading it soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/an-infinite-loop-of-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leveraging ColdFusion With AIR</title>
		<link>http://blog.crankybit.com/leveraging-coldfusion-with-air/</link>
		<comments>http://blog.crankybit.com/leveraging-coldfusion-with-air/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 21:48:00 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[General Web Dev.]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/leveraging-coldfusion-with-air/</guid>
		<description><![CDATA[AIR does not have a CFML engine. ColdFusion cannot be packaged within AIR apps. Traditionally, we use CF to generate the UI. However, in AIR, typically the UI is pre-designed and packaged. How does ColdFusion fit in, then? Use ColdFusion apps directly, use ColdFusion as the data provider, or use ColdFusion as the data provider [...]]]></description>
			<content:encoded><![CDATA[<p>AIR does not have a CFML engine. ColdFusion cannot be packaged within AIR apps. Traditionally, we use CF to generate the UI. However, in AIR, typically the UI is pre-designed and packaged. How does ColdFusion fit in, then?</p>
<p>Use ColdFusion apps directly, use ColdFusion as the data provider, or use ColdFusion as the data provider <em>and </em>as a UI provider.</p>
<p>To use a <strong>CF web app directly</strong>, just wrap it in a frameset. This is so kludgy, I can hardly stand it. But it will work to put your web app in a desktop app at some basic level. I suppose it could be handy since it hides the URL, it can make a more kiosk-ish look. Could also be useful if <em>part</em> of your app is a normal app, but part of it should mimic the web app exactly and you don&#8217;t want to rewrite anything.</p>
<p>Better to use <strong>CF as a data provider</strong>.  ColdFusion is best at connecting with other systems, connecting to remote DBs, etc. Then communicate with web services, XML, flash remoting, JSON.  There is nothing new here, at this point, you just build typical connectivity that AJAX or Flash would use.</p>
<p>Flash remoting would probably be the best when using Flex. Provides a handy proxy-like access to your CFC.  Web services can also be done very easily with Flex.</p>
<p>Now, how about HTML/JavaScript (AJAX) in AIR? CFAjaxProxy, XMLHttpRequest, or plain HTTP (CF returns the data in XML, JSON, or text).</p>
<p><strong>CFAjaxProxy. </strong>Makes a CFC available inside AIR app. Creates a JS proxy for a CF component. So on the CF side, you use cfajaxproxy, point it to a CFC, and instantiate the CFC in JS. Now, some initialization code is required. It is generated by the cfajaxproxy tag. So just copy the literal HTML/JavaScript generated by cfajaxproxy, and drop that into your HTML for AIR (just change the URL to the CFC to be the absolute URL; cfajaxproxy will write it as a relative URL).</p>
<p>It wouldn&#8217;t hurt to just write some basic AJAX code on the web, using cfajaxproxy, and then copy that to your AIR HTML.</p>
<p>Now what about <strong>taking your apps offline</strong>? Well, you&#8217;ll need to identify what is going to work offline, and store offline data (either to the filesystem or to a local database). Decide how the app will go offline: Modal (distinct offline/online mode, user driven, easiest to implement), or modeless (seamless offline/online mode, most of data is stored locally, better user experience but more work for the developer). Then, synchronization strategy: Manual sync, background client-driven sync, or server-driven sync.</p>
<p>Synchronization and online/offline management can be improved. They will describe more at the sneak peak session. Code samples will be at his website, <a href="http://coldfused.blogspot.com" target="_blank">http://coldfused.blogspot.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/leveraging-coldfusion-with-air/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Working With Persistent Data in AIR</title>
		<link>http://blog.crankybit.com/working-with-persistent-data-in-air/</link>
		<comments>http://blog.crankybit.com/working-with-persistent-data-in-air/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 20:43:55 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/working-with-persistent-data-in-air/</guid>
		<description><![CDATA[Why care about caching data on the client? There are 3 types of apps out there: Thin Client (HTML/JavaScript to web browser), Thick Client (Word, Excel, etc), Smart Client (RIA, a hybrid between the thick and the thin). Thin client and smart client both allow ease of deployment, but offline capability and access to hardware [...]]]></description>
			<content:encoded><![CDATA[<p>Why care about caching data on the client? There are 3 types of apps out there: Thin Client (HTML/JavaScript to web browser), Thick Client (Word, Excel, etc), Smart Client (RIA, a hybrid between the thick and the thin). Thin client and smart client both allow ease of deployment, but offline capability and access to hardware resources is problematic for the thin client.</p>
<p>AIR allows web technology to be deployed directly to the desktop.  Flex, flash, PDF, HTML, JavaScript, CSS, Ajax.  Always starts with a root document (HTML or SWF). HTML may contain PDF or SWF. Both have renderer, VM, and DOM.  Code between the VMs can interoperate.  All can be display in native OS chrome. And you can persist data locally (hence this preso!).</p>
<p>Storage models: Local shared objects, encrypted local store, file system, embedded SQL database.</p>
<p><strong>Local shared objects.</strong> There are in package flash.net.*.  Used to serialize memory resident data structures. Runs in synchronous mode. This is a monolithic storage model. So it is fine for writing huge amounts of data, but when going to retrieve a single entry out of thousands, can take a proportionately long time.</p>
<p><strong>Encrypted local store.</strong> In package flash.filesystem.*. Used to store sensitive data. Runs in synchronous mode also. All data is serialized using ByteArray. So it&#8217;s like blob storage with keys. A ByteArray is like an in-memory stream of information. So you take an array, put it in a ByteArray, then add the ByteArray to the encrypted local store. This encrypted local store is just this space that is available to you based on the application and user.  And it is faster at accessing the record you want. But the point isn&#8217;t that it&#8217;s faster at accessing records; the point is that it is doing security to make sure no one can read it without authorization.</p>
<p><strong>File system.</strong> In package flash.filesystem.*. Provides random access to file system data. Can be asynchronous or synchronous. Two main components: File and FileStream. File represents a path to a particular file or directory. Completely OS-independent. FileStream does the actual work. Handles binary, object, text data.</p>
<p>Path handling: nativePath(), canonicalize(), resolvePath().</p>
<p>Cataloging: userDirectory(), desktopDirectory(), documentsDirectory(), applicationResourceDirectory(), applicationStorageDirectory(). File info (size, createDate, etc). copyTo(), moveTo(), etc. upload(), download(), send(), etc.  browse(), browseForDirectory(), etc.</p>
<p>FileStream implements the IDataInput/IDataOutput APIs. Can put binary data in &#8212; readBytes(), writeBytes(), readInt(), writeInt(), readDouble, writeDouble, etc.  Can do AMF3/AMF0 object serialization &#8212; readObject(), writeObject().</p>
<p><strong>Embedded SQL Database.</strong>  Self-contained factor is nice. You have no external dependencies; it will work the same on any OS. Each database is stored completely within a single file. Zero setup. No configuration or administration required. It just starts working.  No server process required, no need for an administrator to create the database and user accounts. Handles transactions! Has a large capacity: Theoretical limit of over 2TB.</p>
<p>Package is in flash.data.*. Can be asynchronous and synchronous.  Uses SQLConnection and SQLStatement.</p>
<p>SQLConnection. Establishes connection state, configuration, transactions, schema access. In async mode, also creates its own background thread. So you can create five SQLConnections to run five database operations simultaneously.</p>
<p>SQLStatement. Does CRUD operations. Does parameters, paging, and custom result row data types.</p>
<p>The database functionality is VERY fast. Can work with thousands&#8211;millions&#8211;of records in less than 1 second. Data reads are even faster.</p>
<p>SQLConnection: open(), attach(). The attach() will allow you to run queries on tables across multiple databases. Comes in handy during certain circumstances. Handled not too unlike SQL Server, when you are referencing an external database in your SQL statements.</p>
<p>SQLStatement.getResult() &#8212; Returns a SQLResult object.</p>
<p>SQLResult: data() returns an array of objects that contain each row of the result. complete() indicates if you pulled the whole result set. lastInsertRowID() is self-explanatory. rowsAffected() is also self-explanatory.</p>
<p>Note! Putting data on disk via the database can be slow <em>sometimes</em>. Recognize that it is a 6-step process: (1) Acquire shared lock on the database. (2) Acquire a RESERVED lock on the database. (3) In-memory rollback journal is updated. (4) Contents of rollback journal are physically written to disk. (5) Acquire an EXCLUSIVE lock to the database. (6) Write all modifications for the DB to the disk.</p>
<p>At this rate, you&#8217;re probably only going to get 5-6 database transactions per second.  Maybe as many as 20 on a high-end box. So the key is to put MANY database operations all in a single transaction.</p>
<p><strong>Transactions.</strong> SQLConnection manages the transaction. Use SQLConnection.begin() to start the transaction. Then, commit() and rollback() work as expected.</p>
<p><strong>Storage classes. </strong>There are numbers (int/real), text, and blobs.</p>
<p><strong>Affinity.</strong> Declaring a data type on a column determines the column&#8217;s affinity. You&#8217;re saying, &#8220;I want this field to be stored like this.&#8221; However, if you send a string to a field that should be a number, it won&#8217;t throw an error, it will just put it in there as a string.  Supports ActionScript affinities of boolean, date, int. Next beta should support XML, XMLList, Object, etc.  But currently, you can put arrays or objects in with blob, which will then treat it like a ByteArray.</p>
<p><strong>Introspection.</strong> Access to the table/view, column, index, and trigger information, including the SQL used to create the entity. But you can do selective loading, i.e. I want to see the tables in this database. Just use SQLConnection.loadSchema(). Will return a SQLSchemaResult that has tables, views, triggers, and indexes. These are all arrays of objects with the associated values.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/working-with-persistent-data-in-air/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AIR Tips and Tricks</title>
		<link>http://blog.crankybit.com/air-tips-and-tricks/</link>
		<comments>http://blog.crankybit.com/air-tips-and-tricks/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 19:28:45 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/air-tips-and-tricks/</guid>
		<description><![CDATA[Window API. Lightweight windows are nice because they won&#8217;t appear in the taskbar/dock.  Utility windows don&#8217;t even have title bars and are nice for toolbars or similar things. You can have transparent windows so that the only content you&#8217;ll see is the Flex/HTML content you put in there. Transparent windows require that you build your [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Window API.</strong> Lightweight windows are nice because they won&#8217;t appear in the taskbar/dock.  Utility windows don&#8217;t even have title bars and are nice for toolbars or similar things. You can have transparent windows so that the only content you&#8217;ll see is the Flex/HTML content you put in there.</p>
<p>Transparent windows require that you build your own functionality for window handling: Closing, minimizing, moving, resizing, etc. Now, when you use custom chrome, you can use Scale-9 in Flash/Flex to make it really easy to handle how resizing of the graphic works. You can do this with the &lt;mx:canvas&gt; tags in Flex.</p>
<p><strong>HTML Control.</strong> WebKit is entirely integrated into the Flash Rendering Pipeline. Using the bridge, you can use functionality in either JavaScript or ActionScript and use it in the other environment: AS called within JavaScript; JavaScript called within AS.</p>
<p><strong>File I/O. </strong>Full read/write access within the access provided the user running the OS. Have asynchronous and synchronous versions of the API. So quick and small file access can be done in a synchronous manner quickly, and longer access can be done asynchronously to maintain a quality user experience. Use standard native file dialogs: Save, select, select multiple, directory.</p>
<p>File I/O can save not just text/binary stuff, but you can read/write serialized AS objects. So, you can create an AS object with the info you need, then very rapidly write it out and have it very easy to read back in as that object.  Just use the writeObject() method of the filestream! Similarly, just use loadObject() when reading.  To make this work, you <u>will</u> need to add a tad of metadata to the object to make it work. Another caveat, the data will not be human-readable. But if human-readability is not important, this is much more rapid for writing a lot of data than it would be to save in some text or XML format and needing methods to write out and read back in the data.</p>
<p>Another solution could be to write this kind of data to the database via the database API. But sometimes that may be overkill, plus this can write files anywhere.</p>
<p><strong>Database.</strong> A fully-embedded SQLite database engine. You&#8217;re accessing a <u>local database</u>. This is not for accessing remote databases. To do that, you&#8217;ll want a webservice that provides access to that database.  This database support is great for providing online/offline support. You can sync the information locally and then just utilize the local version.</p>
<p>One note: Every database function will be a separate transaction. If you have hundreds/thousands of database functions to perform, wrap them into one transaction so that the filesystem can do the file transaction more efficiently. In his sample, writing 1,000 database records took 2.3 seconds with no transactions; it took 0.1 second with transactions.</p>
<p>When handling database connectivity, you will: (a) Point to the database file. (b) If it doesn&#8217;t exist, do the code to create the database. (c) Do your database statements.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/air-tips-and-tricks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eBay&#8217;s Lessons Learned on AIR</title>
		<link>http://blog.crankybit.com/ebays-lessons-learned-on-air/</link>
		<comments>http://blog.crankybit.com/ebays-lessons-learned-on-air/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 22:34:01 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[General Web Dev.]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/ebays-lessons-learned-on-air/</guid>
		<description><![CDATA[eBay has an AIR app for managing your eBay activity. Launched during MAX 2007, even though it has been around since last year&#8217;s MAX. They learned things from it. First, recognize that desktop apps have much more power than a web app. Why doesn&#8217;t everyone do them then? Desktop apps are a lot more expensive [...]]]></description>
			<content:encoded><![CDATA[<p>eBay has an AIR app for managing your eBay activity. Launched during MAX 2007, even though it has been around since last year&#8217;s MAX. They learned things from it.</p>
<p>First, recognize that desktop apps have much more power than a web app. Why doesn&#8217;t everyone do them then? Desktop apps are a lot more expensive to build! Web apps have been getting more expensive as standards of quality rise, but they&#8217;re still cheaper than full-fledged desktop apps.</p>
<p>eBay built a fully-functioning prototype in just 3 months. Here are some lessons learned.</p>
<p><strong>1. Start with a good foundation.</strong> They started the AIR app because they had already been building web services and API for eBay. So all they really had to do is build a UI. All the web service hype from 2002 was indeed hype, but now, five years later, the concept is finally coming together in a very key and important way. These web services are a great way to connect desktop apps to the web. Store your business logic in the web services that the desktop apps can access.</p>
<p><strong>2. Design takes a long time.</strong> Of the first 3 months, six weeks were spent on design alone. Why? (a) AIR offers a lot of freedom. If it was more restrictive, it would have been more straightforward. <img src='http://blog.crankybit.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  (b) They were pioneering things. There is not a prescribed manner to address a lot of the questions that come up. (c) Expectations have been raised for user experience.</p>
<p><strong>3. Betas are really useful.</strong> I mean <em>real</em> betas, not marketing betas. They have thousands of users in the beta program and they get tons of feedback.</p>
<p><strong>4. The most important AIR feature is&#8230; Freedom from constraints of the browser. </strong>No frustrating back button. No location bar.</p>
<p><strong>5. Users don&#8217;t care about software platforms.</strong> A <u>good</u> platform, like AIR, just gets out of the way. Installation, auto software update, startup,  etc. Beta users haven&#8217;t complained about these kinds of things&#8211;the kinds of things that typically hinder Java apps or some other platforms.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/ebays-lessons-learned-on-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AIR APIs</title>
		<link>http://blog.crankybit.com/air-apis/</link>
		<comments>http://blog.crankybit.com/air-apis/#comments</comments>
		<pubDate>Sun, 30 Sep 2007 02:47:13 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[General Web Dev.]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/air-apis/</guid>
		<description><![CDATA[Here are some notes regarding some of the APIs for AIR that were showcased at the on AIR Bus Tour in Chicago. Window API Multi-window support. Transparent windows. Z-Ordering. All of the various aspects of OS windows can be applied to your AIR windows. When you use transparent windows with no chrome, the arrow will [...]]]></description>
			<content:encoded><![CDATA[<p>Here are some notes regarding some of the APIs for AIR that were showcased at the on AIR Bus Tour in Chicago.</p>
<p><strong>Window API</strong></p>
<p>Multi-window support. Transparent windows. Z-Ordering. All of the various aspects of OS windows can be applied to your AIR windows. When you use transparent windows with no chrome, the arrow will click through the transparent part of images as well. Nice.</p>
<p><strong>File I/O</strong></p>
<p>Reading and writing of files. No problem. Can launch native file dialogs. Can handle selection, selecting multiples, directories, etc. Async and sync versions of the APIs.  Would use async API if you&#8217;re doing very heavy processing.</p>
<p><strong>Database Support</strong></p>
<p>SQLite embedded database. Zero setup, uses a single file. Not for accessing remote databases. This is for using a completely local database. Easily storing data in a database format, but in a local manner.  He didn&#8217;t show any examples of this. <img src='http://blog.crankybit.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p><strong>Drag and Drop / Clipboard</strong></p>
<p>System level drag and drop support is there! AIR app to AIR app, or AIR app to OS app and back again. Or to the desktop. Can use it for handling URLs, files, text, or even AS objects.  When marking something as draggable, you can assign one or many &#8220;transfer formats&#8221;. So when you drag an item to another app, if it doesn&#8217;t accept one data type, perhaps it will recognize another data type. For instance, if you have an image and a text transfer format, the receiving app may not like the image format, but it recognizes the text format, so it proceeds without a problem.</p>
<p><strong>Service Monitoring</strong></p>
<p>Handles the online/offline support. Will monitor the network interface for changes. Will detect not just network connectivity, but you can test access to a particular service. Do I have access to http://my.address.com/myservice?</p>
<p><strong>Conclusion</strong></p>
<p>These APIs work in JavaScript too because of the bridge, but it all works very well in Flex.  Daniel Dura was the presenter, and hit site at <a href="http://www.danieldura.com" target="_blank">http://www.danieldura.com</a> has a lot of AIR information.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/air-apis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>on AIR Bus Tour: Chicago</title>
		<link>http://blog.crankybit.com/on-air-bus-tour-chicago/</link>
		<comments>http://blog.crankybit.com/on-air-bus-tour-chicago/#comments</comments>
		<pubDate>Sun, 30 Sep 2007 01:38:13 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[General Web Dev.]]></category>

		<guid isPermaLink="false">http://blog.crankybit.com/on-air-bus-tour-chicago/</guid>
		<description><![CDATA[I went to the on AIR Bus Tour in Chicago tonight. Here are my notes from the main presentation. Enabling more powerful RIAs: Need good runtime performance. This was improved with AS3. Need good development model. Flash is scary for developers. So Flex enables developers to write Flash apps in code. Bridged gap between Flash [...]]]></description>
			<content:encoded><![CDATA[<p>I went to the on AIR Bus Tour in Chicago tonight. Here are my notes from the main presentation.</p>
<p>Enabling more powerful RIAs: Need good runtime performance. This was improved with AS3.  Need good development model. Flash is scary for developers. So Flex enables developers to write Flash apps in code. Bridged gap between Flash and developers. Finally, need a desktop runtime. This is where AIR comes in. Web is great, but sometimes you need that desktop connectivity.</p>
<p>AIR tries to be &#8220;webby&#8221;. So, it&#8217;s cross-platform, has an easy install experience. Basically a web-enabled desktop experience. And can use Flash, but can also use your standard HTML/JavaScript skills. And can even combine Flash and JavaScript together with a bridge. So do JavaScript when you want, because it&#8217;s more comfortable, but then tap into some Flash functionality when it is needed because you can&#8217;t do it from JavaScript. Even supplies a local database functionality: SQLite. So that mentality in web development, which means an expectation to have database connectivity, can continue in the desktop app.</p>
<p><strong>Timeframe. </strong>Flex 3 Beta and CF 8 Beta have already come and gone, so has AIR Beta 1. At MAX, we&#8217;ll see AIR Beta 2, and of course we already have CF 8 proper.  AIR 1.0 is scheduled for sometime in the beginning of 2008, as is Flex Builder 3.</p>
<p><strong>Deployment.</strong> Typical web apps just get put on the webserver and you send the URL. An AIR file is just a zip-based package similar to Java, so you could send the AIR file, but that would require that the user has the AIR runtime installed. As a solution, there is an &#8220;Express&#8221; installation that is web-based (<a href="http://cornilliac.com/machblog/index.cfm?event=showEntry&amp;entryId=BB5967F0-3048-7802-93A814E581EB8CEB" target="_blank">not hard</a> to do). You send them a link to your app, and it will install the app but also check that the user has the runtime. This addresses the issue of deploying to users who do not currently have AIR on their PC.</p>
<p>Once installed, the AIR app is no different than any other app on the platform it was installed in. In OS X, it appears as a Universal app; in Windows, it is a normal executable. It appears in the Start Menu or Applications folder. If it crashes, it dies on its own, it doesn&#8217;t bring down all AIR apps. And so on.</p>
<p>Remember <a href="http://www.adobe.com/go/air" target="_blank">http://www.adobe.com/go/air</a>. That address will always point to all things AIR.</p>
<p><strong>Add&#8217;l Notes.</strong> The FileTypes node in your application.xml file will let you specify your own filetypes that will be registered with the filesystem! So if your app generates a particular file, you can have your files be double-clickable and open in your AIR app. The AIR runtime is <u>not</u> just a webpage on the desktop. It really is an integrated desktop experience.</p>
<p><strong>JavaScript Development.</strong> Developing AIR in HTML/JavaScript is very easy, even though you can&#8217;t do it with a built-in functionality that Flex Builder has, as long as you use the SDK stuff Adobe provides. The JavaScript bridge makes it pretty easy to access the Flash-specific functionality. The key in development is just using the ADL and ADT command-line tools that are provided for free. Point ADL to your application.xml file, and it compiles it and runs it on the spot. No problem! We wrote an HTML/JavaScript app that takes some user input and writes it to a file on the desktop in only 6 vital JavaScript lines of code.</p>
<p><strong>Aptana.</strong> They recommended Aptana as a great IDE for doing HTML/JavaScript development for AIR, since it has some AIR-specific support. Good to know! I love Aptana already, so that is convenient!</p>
<p>This concluded the initial walkthroughs of developing AIR in Flex and JavaScript. This is exactly what I was looking for to understand the basics of AIR development, which took some of the &#8220;scary&#8221; mystery out of it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.crankybit.com/on-air-bus-tour-chicago/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

