<?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>The Morphic Group &#187; Adobe AIR</title>
	<atom:link href="http://www.themorphicgroup.com/blog/category/technology/adobeair/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.themorphicgroup.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 22 Feb 2010 18:20:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Awesome to the (Max 2008)</title>
		<link>http://www.themorphicgroup.com/blog/2008/11/26/awesome-to-the-max-2008/</link>
		<comments>http://www.themorphicgroup.com/blog/2008/11/26/awesome-to-the-max-2008/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 14:38:37 +0000</pubDate>
		<dc:creator>Unknown Morphician</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[Adobe Max 2008]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://www.themorphicgroup.com/blog/?p=58</guid>
		<description><![CDATA[In the last couple of days, I decided to go through my notes, collect all the presentation files (powerpoints, pdfs and zips) and find blogs that reference the keynotes. Essentially I wanted to reflect and review "the Happening" that was Adobe Max 2008, my first Max. For the most part I was impressed with this, [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><img src="http://www2.themorphicgroup.com/pictures/HeaderMax.jpg" alt="" width="600" height="145" /></p>
<p class="MsoNormal">In the last couple of days, I decided to go through my notes, collect all the presentation files (powerpoints, pdfs and zips) and find blogs that reference the keynotes. Essentially I wanted to reflect and review "the Happening" that was Adobe Max 2008, my first Max.</p>
<p class="MsoNormal">For the most part I was impressed with this, my first, Adobe convention. It did not fail to inspire and to inform developers and designers on the future of Adobe and their products. In fact, when I got home I wanted to buy the latest Creative Suite right away, based on the feeling that I'm missing out on new and exciting features. Call it the rabid consumer in me. Like all the conventions I've attended in the past, I feel that most of the session only skimmed the surface of what I expected to learn. Keep in mind that I've attended Flash in the Can three times and FlashForward last year. The big difference is the session security lock up. You had to be assign to you time slot session via your id card. If you changed your mind, you had to log in to the system and change your schedule. In other conventions, you could wonder around to another session if the assigned session you were slated to attend went south. I can understand this method reduces the congestion and interruptions of people running around and crashing into the middle of a presentation.  My hat goes off to anyone who prepares and presents ideas to a group as large as the Max crowd or any crowd for that matter.</p>
<p>These are the sessions that impressed me the most in no particular order:<br />
<strong> The Flex Architecture Faceoff</strong> -  "to be or not to be" using a Framework. It had as much drama as a Shakespeare play - Starring Todd Anderson, Josh Noble, Chafic Kaznoun and Yakov Falin. I only wish it could have lasted a bit longer. Chafic and Yakov voiced their disdain for using a framework in projects. The idea being that they contain a lot of code that can be unnecessary. They found that an "al a carte" setup with a smaller, tighter group of developers is best for their projects. Ideally using a blackbox approach, passing data providers, is what one should strive for. Other suggestions include passing events on data changes rather than using data binding and using code generation. If there was an opposing side to this argument, it was held by both Josh and Todd. They touted that frameworks are best in large group project where developer level may vary. It is also a means to standardize the work/code. This makes it easier for another developer to maintain the project after the fact. Cairngorm was the framework most referenced in the discussion. There was also a discussion on using Prana with Cairngorm (<a href="http://www.pranaframework.org/" target="_blank">http://www.pranaframework.org/</a>), to implement inversion of control and dependency injection. From what I understand you can swap out services willy nilly and test object instances via xml file. I heard something about this from the Flex show Podcast. Never used it, but I should definitely try it out. There was a reference to using PureMVC (<a href="http://puremvc.org/" target="_blank">puremvc.org</a>). No doubt it was a lively discussion. At the end of the session, I think everyone was in agreement on a few points, on when to use and not use a framework. Both sides voiced sensible opinions. Those who attended benefited from their knowledge.</p>
<p><strong>Google Maps with Flash/Air applications</strong>: More dynamic views of the map content (3D), Embed video and animation assets. Now support Air... What I got out of this session- I'm interested in building an Air Application using this library verses MapQuest's library.</p>
<p><strong>Adobe XDCE - Air User Experience Mode</strong>l - Demos on Aggregators, Utilities, Media Consumers... Probably the most impressive application demo - the International Herald Tribune - Basically brings the New York Times layout and design to Adobe Air. What I got out of this session, ideas on Air applications that could be built.</p>
<p><strong>Flex framework features to support large applications</strong>:  Build the case for the Marshall Plan - Dividing the work between sub application domains / different versions of Flex Framework. This plan will start to be implemented from Flex 3.2 on up to newer versions. Many limitations - No strong typing, No Managers/Singletons, Security issues, and Remote Object Data services have serializing issues. The idea is to support legacy frameworks from this point forward when updating legacy projects cannot be accomplished. What I got the most out of this session was the idea of using modules, RSL to break up application and make applications faster.</p>
<p><strong>Session on 2Advanced</strong>: I learned that a company that started around the Internet Crash of 2000 happened can still survive and thrive by having employees multitask. I was very impressed with their work ethic and their creative portfolio.</p>
<p><strong>The major keynotes</strong> on Monday and Tuesday focused on The Flash Platform and sneak peeks - Flash Player 10, Adobe Catalyst (Thermo), Adobe Air 1.5, Gumbo (Flex Builder 4)  The major trends - Client and Cloud computing, Social computing, Devices and desktop computing.   They had a small mention of Adobe Alchemy, which allows you to run C/C++ code into Actionscript (hmm interesting).<br />
Links (good accounts of the major keynotes):<br />
<a href="http://flashthusiast.com/2008/11/17/liveblogging-max-2008-day-1-general-session-keynote-click-refresh/#more-102" target="_blank">http://flashthusiast.com/2008/11/17/liveblogging-max-2008-day-1-general-session-keynote-click-refresh/#more-102</a><br />
<a href="http://flashthusiast.com/2008/11/18/liveblogging-max-sneak-peeks-and-awards-refresh-yo/" target="_blank">http://flashthusiast.com/2008/11/18/liveblogging-max-sneak-peeks-and-awards-refresh-yo/</a><br />
<a href="http://blogs.adobe.com/pdehaan/2007/10/adobe_max_2007_keynote_day_2_e.html" target="_blank">http://blogs.adobe.com/pdehaan/2007/10/adobe_max_2007_keynote_day_2_e.html</a></p>
<p><img src="http://www2.themorphicgroup.com/pictures/KeyNoteMax.jpg" alt="Max Keynote" width="300" height="215" /></p>
<p>I am really thankful that my company (TMG) allowed me to attend this conference. It was great to finally meet my fellow talented Morphicians from the West Coast. This was the crème al la crème of conferences, a way to see what can and will be next in our industry.</p>
<p><img src="http://www2.themorphicgroup.com/pictures/GroupMax.jpg" alt="" width="300" height="175" /></p>
<p class="MsoNormal">Please feel free to respond with comments or any thoughts on Max 2008.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.themorphicgroup.com/blog/2008/11/26/awesome-to-the-max-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Detroit Presentation (Adobe AIR)</title>
		<link>http://www.themorphicgroup.com/blog/2008/10/09/detroit-presentation-adobe-air/</link>
		<comments>http://www.themorphicgroup.com/blog/2008/10/09/detroit-presentation-adobe-air/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 15:57:59 +0000</pubDate>
		<dc:creator>Joey</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.themorphicgroup.com/blog/?p=55</guid>
		<description><![CDATA[The presentation on Adobe AIR in Detroit (technically in Canton, MI) went very well. Thanks to Deborah for helping to organize the event for Refresh Detroit and for bringing together her group and the Detroit Area Adobe User Group for the event. For those in attendance I've just posted the files for the demo application. [...]]]></description>
			<content:encoded><![CDATA[<p>The presentation on Adobe AIR in Detroit (technically in Canton, MI) went very well. Thanks to Deborah for helping to organize the event for Refresh Detroit and for bringing together her group and the Detroit Area Adobe User Group for the event. For those in attendance I've just posted the files for the demo application. You can download them from <a title="http://www.themorphicgroup.com/presentations/2008/airflex/download.zip" href="http://www.themorphicgroup.com/presentations/2008/airflex/download.zip" target="_blank">http://www.themorphicgroup.com/presentations/2008/airflex/download.zip</a>. The code is not commented since I just threw it together and since it is quite simple. It does use standard patterns, and it should be fairly simple to figure out. However, if you have questions you may post them here as comments. Please note that since I'm traveling it might take a little while before I can address your questions. Also, comments on our blog are moderated, and your comments won't show up until one of the administrators can approve your comment (sometimes takes a while since we have to sift through the rest of the fake comments that get posted.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.themorphicgroup.com/blog/2008/10/09/detroit-presentation-adobe-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unique Local Connection Names</title>
		<link>http://www.themorphicgroup.com/blog/2008/05/30/unique-local-connection-names/</link>
		<comments>http://www.themorphicgroup.com/blog/2008/05/30/unique-local-connection-names/#comments</comments>
		<pubDate>Fri, 30 May 2008 15:06:13 +0000</pubDate>
		<dc:creator>Joey</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.themorphicgroup.com/blog/?p=24</guid>
		<description><![CDATA[Occasionally I have the sense that I might be doing something as a workaround that is completely unnecessary, as though I'm jumping through hoops, listening for an exact sequence of one hundred events, and then squinting my eyes and tilting the monitor just right in order to assign text to a text field when I [...]]]></description>
			<content:encoded><![CDATA[<p>Occasionally I have the sense that I might be doing something as a workaround that is completely unnecessary, as though I'm jumping through hoops, listening for an exact sequence of one hundred events, and then squinting my eyes and tilting the monitor just right in order to assign text to a text field when I can achieve the same thing simply and directly with one line of code. All out of ignorance that there is a simpler way. This might be one of those occasions. If it is then it wouldn't be the first.</p>
<p>In this case I had a requirement to create a unique name to use when connecting a LocalConnection. The idea is that two .swf files need to communicate over this LocalConnection, and both of them need to know the name of the connection. Seems simple enough. I could just hard code the same value into both .swf files. However, the deal is that these two .swf files exist in the same HTML page, and I also would like to be able to open more than one instance of the HTML page in different browser windows. If the name of the connection is hard coded into the .swf files then it will work for one instance of the page, but subsequent instances will throw errors because the connection will already be in use. In such cases the error might be something like the following (which is particularly unhelpful in diagnosing the actual error since it doesn't really indicate what caused the error.)</p>
<p>Error #2044: Unhandled statusEvent:. level=error, code=</p>
<p>Note that you might see this error in other cases, and it doesn't necessarily indicate that the solution described in this post is appropriate. This error could be caused by lots of different scenarios. For example, you would see this error if you were trying to send requests across domains and the .swf files weren't properly configured (see allowDomain() in the LocalConnection documentation.) Probably the best way to determine the actual cause is to listen for status events on all LocalConnection object, and log the status codes. However, in this particular case the errors were because an .swf (in a new HTML window) was trying to establish a connection using the same name as a pre-existing connection.</p>
<p>One obvious solution to this would be to create a unique name using JavaScript, and then I can pass that in to each of the .swf files using FlashVars. That would allow each HTML page to create a unique name and pass in the same name to each of the .swf files, ensuring that those two .swf files can communicate over the same channel, but other .swf files in other pages wouldn't conflict. That would work except that in this particular case one of the .swf files is not embedded directly in the HTML page, and it does not have access to the JavaScript in the HTML page. This is because one of the two .swf files is embedded inside another plugin that is, itself embedded in the HTML, and that plugin doesn't have a way to pass a value from the HTML page to the Flash Player instance it embeds.</p>
<p>Therefore, the solution I'm using follows. Note that we'll refer to the .swf files as sending.swf and receiving.swf. In this case sending.swf is the instance embedded in the HTML page directly, and receiving.swf is embedded in the plugin.</p>
<ol>
<li>Initially receiving.swf calls connect() for a LocalConnection object using a hard coded value of _defaultConnection.</li>
<li>Receiving.swf's local connection client defines a method called setNewConnectionName(), which accepts a string parameter. When this method is called it first calls close() for the LocalConnection object, and then it calls connect(), using the parameter value.</li>
<li>Once both .swfs are loaded into their respective players sending.swf creates a new, unique connection name. You could use any algorithm to create a unique name. In this case I use the following: var connectionName:String = "_" + (new Date()).getTime();</li>
<li>Then sending.swf calls send("_defaultConnection", "setNewConnectionName", connectionName); for the LocalConection object.</li>
<li>After that point sending.swf always calls send() with the new, unique connection name.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.themorphicgroup.com/blog/2008/05/30/unique-local-connection-names/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Custom AIR Badge</title>
		<link>http://www.themorphicgroup.com/blog/2008/05/15/custom-air-badge/</link>
		<comments>http://www.themorphicgroup.com/blog/2008/05/15/custom-air-badge/#comments</comments>
		<pubDate>Thu, 15 May 2008 15:38:23 +0000</pubDate>
		<dc:creator>Joey</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.themorphicgroup.com/blog/?p=8</guid>
		<description><![CDATA[If you're creating a custom AIR badge for a seamless install then you'll need to load the air.swf files from the Adobe Website (http://airdownload.adobe.com/air/browserapi/air.swf) and call methods on the .swf once it has loaded. This is clunky for a few reasons: 1. Loading the .swf in order to call methods requires loading the .swf into [...]]]></description>
			<content:encoded><![CDATA[<p>If you're creating a custom AIR badge for a seamless install then you'll need to load the air.swf files from the Adobe Website (http://airdownload.adobe.com/air/browserapi/air.swf) and call methods on the .swf once it has loaded. This is clunky for a few reasons:</p>
<p>1. Loading the .swf in order to call methods requires loading the .swf into the same ApplicationDomain as the badge itself, which is unfamiliar to many developers</p>
<p>2. Once the .swf is loaded you need to call methods from the content property of the Loader used to load the .swf. Since the content property is typed as DisplayObject you'll have to downcast to Object, and then you'll have to call methods without compile-time checking</p>
<p>As a solution to this you can instead define a class that hides all of the clunkiness. The following is an example of such a class. (This is an adaptation of a class I wrote for AIR in Action.)</p>
<pre><code>
package com.themorphicgroup.air.utilities {
    import flash.display.Loader;
    import flash.system.LoaderContext;
    import flash.system.ApplicationDomain;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.net.URLRequest;

    public class AirBadgeService extends EventDispatcher {

        private var _loader:Loader;
        private var _service:Object;

        public function AirBadgeService() {

            _loader = new Loader();
            var context:LoaderContext = new LoaderContext();
            context.applicationDomain = ApplicationDomain.currentDomain;
            _loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
           var swf:String = "http://airdownload.adobe.com/air/browserapi/air.swf";
           var request:URLRequest = new URLRequest(swf);
            _loader.load(request, context);
        }

        private function initHandler(event:Event):void {
            _service = _loader.content;
            dispatchEvent(new Event(Event.COMPLETE));
        }

        public function getStatus():String {
            return _service.getStatus();
        }

        public function getApplicationVersion(applicationId:String,
                                                          publisherId:String,
                                                          callback:Function):void {
            _service.getApplicationVersion(applicationId, publisherId, callback);
        }

        public function installApplication(url:String,
                                                   runtimeVersion:String,
                                                   parameters:Array = null):void {
            _service.installApplication(url, runtimeVersion, parameters);
        }

        public function launchApplication(applicationId:String,
                                                     publisherId:String,
                                                     parameters:Array = null):void {
            _service.launchApplication(applicationId, publisherId, parameters);
        }

    }
}
</code></pre>
<p>Then all you have to do is construct an instance of AirBadgeService, listen for the complete event, and call the methods.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.themorphicgroup.com/blog/2008/05/15/custom-air-badge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe AIR Book</title>
		<link>http://www.themorphicgroup.com/blog/2008/01/15/adobe-air-book/</link>
		<comments>http://www.themorphicgroup.com/blog/2008/01/15/adobe-air-book/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 18:11:30 +0000</pubDate>
		<dc:creator>Joey</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.themorphicgroup.com/blog/?p=14</guid>
		<description><![CDATA[I'm writing a new Adobe AIR book along with Sam Ahn. It's going to be specifically for Flash and Flex developers who want to use AIR to build desktop applications. We're working with Manning, which is a publisher I've never worked with before. I think they've published high quality titles, though, and I think they'll [...]]]></description>
			<content:encoded><![CDATA[<p>I'm writing a new Adobe AIR book along with Sam Ahn. It's going to be specifically for Flash and Flex developers who want to use AIR to build desktop applications. We're working with Manning, which is a publisher I've never worked with before. I think they've published high quality titles, though, and I think they'll do a good job with the AIR title as well. You can read about the book at the <a title="book's site" href="http://www.manning.com/lott" target="_blank">book's site</a>. Oh, and we have a fancy press release about this as well, which you can read in <a title="the news room" href="http://www.themorphicgroup.com/newsroom/AdobeAIR.pdf" target="_self">the news room</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.themorphicgroup.com/blog/2008/01/15/adobe-air-book/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
