<?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>Architect, Engineer, Tech Enthusiast - Hasan Otuome &#187; Flex</title>
	<atom:link href="http://technophi.com/category/adobe/flex/feed/" rel="self" type="application/rss+xml" />
	<link>http://technophi.com</link>
	<description>personal weblog of a tech addict</description>
	<lastBuildDate>Wed, 23 Nov 2011 18:04:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Developing Scalable Mobile Video Chat Applications</title>
		<link>http://technophi.com/2011/10/10/developing-scalable-mobile-video-chat-applications/</link>
		<comments>http://technophi.com/2011/10/10/developing-scalable-mobile-video-chat-applications/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 19:08:54 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Flash Platform]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=801</guid>
		<description><![CDATA[I&#8217;m making the assets and workbook from my lab at Adobe MAX available for download. The attached ZIP contains the following: L2709_Presentation.ppt L2709_Workbook.pdf FlashP2PLib.fxpl MAX2011MobileVideoChat.fxp EyeChat.fxp EyeChatDesktop.fxp The last two projects are completed versions that you can use for testing or to skip ahead. I plan to follow up with posts related to the P2P [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m making the assets and workbook from my lab at Adobe MAX available for download. The <a href="http://labs.otuome.com/go/max2011/dsmvca">attached ZIP</a> contains the following:</p>
<ul>
<li>L2709_Presentation.ppt</li>
<li>L2709_Workbook.pdf</li>
<li>FlashP2PLib.fxpl</li>
<li>MAX2011MobileVideoChat.fxp</li>
<li>EyeChat.fxp</li>
<li>EyeChatDesktop.fxp</li>
</ul>
<p>The last two projects are completed versions that you can use for testing or to skip ahead. </p>
<p>I plan to follow up with posts related to the P2P logic used in this sample application. Any questions, let me know. Thanks to all who attended!!</p>
<p><a href="http://labs.otuome.com/go/max2011/dsmvca">L2709_DSMVCA.zip</a></p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Developing Scalable Mobile Video Chat Applications" data-url="http://technophi.com/2011/10/10/developing-scalable-mobile-video-chat-applications/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton801" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2FnYCs51&amp;via=heroizm&amp;text=Developing%20Scalable%20Mobile%20Video%20Chat%20Applications&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2011%2F10%2F10%2Fdeveloping-scalable-mobile-video-chat-applications%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2011/10/10/developing-scalable-mobile-video-chat-applications/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Using Owned Native Window Functionality with Spark Windows</title>
		<link>http://technophi.com/2011/04/06/using-owned-native-window-functionality-with-spark-windows/</link>
		<comments>http://technophi.com/2011/04/06/using-owned-native-window-functionality-with-spark-windows/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 00:23:22 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[FITC]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[LAFO]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=776</guid>
		<description><![CDATA[The release of AIR 2.6 brought about a lot of enhancements and features. One of which was owned native windows. What&#8217;s special about this is it makes it easy to have a main window that owns other windows, which is ultra-useful for applications that make use of multiple windows for things like tool palettes, property [...]]]></description>
			<content:encoded><![CDATA[<p>The release of AIR 2.6 brought about a lot of <strong><a href="http://j.mp/fGhkVJ">enhancements and features</a></strong>. One of which was <strong><a href="http://j.mp/g7BGQF">owned native windows</a></strong>. What&#8217;s special about this is it makes it easy to have a main window that owns other windows, which is ultra-useful for applications that make use of multiple windows for things like tool palettes, property inspectors, etc. </p>
<p>The only problem is this new functionality only works out of the box for NativeWindow instances. A Spark Window, however, manages its NativeWindow internally and does not currently include support for the new owned window logic. Now, you could subclass Window and override <em>commitProperties</em> to add in the functionality but, that&#8217;s neither desired nor maintainable.  </p>
<p>Why does it even matter? Because a Spark Window is skinnable and if you&#8217;ve already taken the time to build an application using skinnable Windows, you don&#8217;t want to labor over the changes necessary just to use this functionality. </p>
<p>So, I chose to take a different approach because I&#8217;m confident that the AIR SDK will eventually include support for ownable Spark Windows. Until then, I&#8217;m using an <strong><em>OwnableWindow</em></strong> interface that all of my Window subclasses I want to be owned are required to implement. This way I can take advantage of the new functionality in the least obtrusive way possible. </p>
<p>Here&#8217;s the code for OwnableWindow:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> labs<span style="color: #000066; font-weight: bold;">.</span>otuome<span style="color: #000066; font-weight: bold;">.</span>air<span style="color: #000066; font-weight: bold;">.</span>myapp<span style="color: #000066; font-weight: bold;">.</span>view<span style="color: #000066; font-weight: bold;">.</span>panel
<span style="color: #000000;">&#123;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span><span style="color: #000066; font-weight: bold;">.</span>NativeWindow<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Event</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span>NativeWindowDisplayStateEvent<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">public</span> interface OwnableWindow
   <span style="color: #000000;">&#123;</span>
      <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> windowOwner<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>NativeWindow<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> windowOwner<span style="color: #000000;">&#40;</span> <span style="color: #004993;">value</span><span style="color: #000066; font-weight: bold;">:</span>NativeWindow <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
      <span style="color: #339966; font-weight: bold;">function</span> respondToOwnerWindowActivated<span style="color: #000000;">&#40;</span> event<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Event</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #339966; font-weight: bold;">function</span> respondToOwnerWindowMinimizedOrRestored<span style="color: #000000;">&#40;</span> event<span style="color: #000066; font-weight: bold;">:</span>NativeWindowDisplayStateEvent <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #339966; font-weight: bold;">function</span> respondToOwnerWindowClosing<span style="color: #000000;">&#40;</span> event<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Event</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Now, in my Spark Window subclass I implement the interface like so:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> labs<span style="color: #000066; font-weight: bold;">.</span>otuome<span style="color: #000066; font-weight: bold;">.</span>air<span style="color: #000066; font-weight: bold;">.</span>myapp<span style="color: #000066; font-weight: bold;">.</span>view<span style="color: #000066; font-weight: bold;">.</span>panel
<span style="color: #000000;">&#123;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span><span style="color: #000066; font-weight: bold;">.</span>NativeWindow<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span><span style="color: #000066; font-weight: bold;">.</span>NativeWindowDisplayState<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Event</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">MouseEvent</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span>NativeWindowDisplayStateEvent<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> mx<span style="color: #000066; font-weight: bold;">.</span>events<span style="color: #000066; font-weight: bold;">.</span>FlexEvent<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> spark<span style="color: #000066; font-weight: bold;">.</span>components<span style="color: #000066; font-weight: bold;">.</span>Button<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> spark<span style="color: #000066; font-weight: bold;">.</span>components<span style="color: #000066; font-weight: bold;">.</span>RichText<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #3f5fbf;">/**
    * Spark Window component subclass.
    * @author Hasan Otuome
    */</span>
   <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> FloatingPanelView <span style="color: #0033ff; font-weight: bold;">extends</span> FloatingPanelUI implements OwnableWindow
   <span style="color: #000000;">&#123;</span>
      <span style="color: #009900; font-style: italic;">///////////////////////////////////////////////////////////////////////////</span>
      <span style="color: #009900; font-style: italic;">// PRIVATE PROPERTIES</span>
      <span style="color: #009900; font-style: italic;">///////////////////////////////////////////////////////////////////////////</span>
      <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _panelTitle<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">String</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _windowOwner<span style="color: #000066; font-weight: bold;">:</span>NativeWindow<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//////////////////////////////////////////////////////////////////////////</span>
      <span style="color: #009900; font-style: italic;">// PUBLIC PROPERTIES</span>
      <span style="color: #009900; font-style: italic;">/////////////////////////////////////////////////////////////////////////</span>
      <span style="color: #000000;">&#91;</span>SkinPart <span style="color: #000000;">&#40;</span>required=<span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> header<span style="color: #000066; font-weight: bold;">:</span>Button<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
      <span style="color: #000000;">&#91;</span>SkinPart <span style="color: #000000;">&#40;</span>required=<span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> toggle<span style="color: #000066; font-weight: bold;">:</span>Button<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
      <span style="color: #000000;">&#91;</span>SkinPart <span style="color: #000000;">&#40;</span>required=<span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> contentTitle<span style="color: #000066; font-weight: bold;">:</span>RichText<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
      <span style="color: #3f5fbf;">/**
      * Sets the panel's title. 
      * @param value
      */</span>		
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> panelTitle<span style="color: #000000;">&#40;</span> <span style="color: #004993;">value</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">String</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
      <span style="color: #000000;">&#123;</span>
           _panelTitle = <span style="color: #004993;">value</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
      <span style="color: #3f5fbf;">/**
      * Allows you to specify an owner for this Spark 
      * Window instance. Used only until the Flex SDK 
      * adds support for owned native windows to Spark 
      * Windows.
      */</span>		
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> windowOwner<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>NativeWindow
      <span style="color: #000000;">&#123;</span>
           <span style="color: #0033ff; font-weight: bold;">return</span> _windowOwner<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> windowOwner<span style="color: #000000;">&#40;</span> <span style="color: #004993;">value</span><span style="color: #000066; font-weight: bold;">:</span>NativeWindow <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
      <span style="color: #000000;">&#123;</span>
           _windowOwner = <span style="color: #004993;">value</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
      <span style="color: #009900; font-style: italic;">///////////////////////////////////////////////////////////////////////////</span>
      <span style="color: #009900; font-style: italic;">// PUBLIC METHODS</span>
      <span style="color: #009900; font-style: italic;">///////////////////////////////////////////////////////////////////////////</span>
      <span style="color: #3f5fbf;">/**
      * Constructor 
      */</span>		
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> FloatingPanelView<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
        <span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
        <span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span> FlexEvent<span style="color: #000066; font-weight: bold;">.</span>CREATION_COMPLETE<span style="color: #000066; font-weight: bold;">,</span> _onCreationComplete<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">true</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
      <span style="color: #009900; font-style: italic;">//---------- OwnableWindow implementations --------------------</span>
      <span style="color: #3f5fbf;">/**
      * Adjust the display ordering of this 
      *	instance as it relates to its owner. 
      */</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> respondToOwnerWindowActivated<span style="color: #000000;">&#40;</span> event<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Event</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
      <span style="color: #000000;">&#123;</span>
        <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span>nativeWindow<span style="color: #000066; font-weight: bold;">.</span>orderInFrontOf<span style="color: #000000;">&#40;</span> _windowOwner <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
&nbsp;
      <span style="color: #3f5fbf;">/**
      * Show/hide this instance based 
      *	on the display state of its owner. 
      */</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> respondToOwnerWindowMinimizedOrRestored<span style="color: #000000;">&#40;</span> event<span style="color: #000066; font-weight: bold;">:</span>NativeWindowDisplayStateEvent <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
      <span style="color: #000000;">&#123;</span>
        <span style="color: #0033ff; font-weight: bold;">switch</span> <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
           <span style="color: #0033ff; font-weight: bold;">case</span> <span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">.</span>beforeDisplayState == NativeWindowDisplayState<span style="color: #000066; font-weight: bold;">.</span>MINIMIZED<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>
             <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span>restore<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
             <span style="color: #0033ff; font-weight: bold;">break</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #0033ff; font-weight: bold;">case</span> <span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">.</span>afterDisplayState == NativeWindowDisplayState<span style="color: #000066; font-weight: bold;">.</span>MINIMIZED<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>
             <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span>minimize<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
             <span style="color: #0033ff; font-weight: bold;">break</span><span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #000000;">&#125;</span>
      <span style="color: #000000;">&#125;</span>
&nbsp;
      <span style="color: #3f5fbf;">/**
      * Close this instance when its owner is closed. This 
      *	will be handled automatically if the owner is 
      *	the main application window.  
      */</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> respondToOwnerWindowClosing<span style="color: #000000;">&#40;</span> event<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Event</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
      <span style="color: #000000;">&#123;</span>
        <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
      <span style="color: #009900; font-style: italic;">//////////////////////////////////////////////////////////////////////////</span>
      <span style="color: #009900; font-style: italic;">// OVERRIDES</span>
      <span style="color: #009900; font-style: italic;">/////////////////////////////////////////////////////////////////////////</span>
&nbsp;
      <span style="color: #009900; font-style: italic;">////////////////////////////////////////////////////////////////////////</span>
      <span style="color: #009900; font-style: italic;">// PRIVATE METHODS</span>
      <span style="color: #009900; font-style: italic;">///////////////////////////////////////////////////////////////////////</span>
      <span style="color: #3f5fbf;">/**
      * CREATION_COMPLETE event handler. 
      * Ensures this instance responds to 
      * display state changes of the 
      * instance's owner. 
      * @param e
      */</span>		
      <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> _onCreationComplete<span style="color: #000000;">&#40;</span> e<span style="color: #000066; font-weight: bold;">:</span>FlexEvent <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
      <span style="color: #000000;">&#123;</span>
        <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_windowOwner<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
           _windowOwner<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span> <span style="color: #004993;">Event</span><span style="color: #000066; font-weight: bold;">.</span>ACTIVATE<span style="color: #000066; font-weight: bold;">,</span> respondToOwnerWindowActivated<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">true</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           _windowOwner<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span> NativeWindowDisplayStateEvent<span style="color: #000066; font-weight: bold;">.</span>DISPLAY_STATE_CHANGE<span style="color: #000066; font-weight: bold;">,</span> respondToOwnerWindowMinimizedOrRestored<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">true</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           _windowOwner<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span> <span style="color: #004993;">Event</span><span style="color: #000066; font-weight: bold;">.</span>CLOSING<span style="color: #000066; font-weight: bold;">,</span> respondToOwnerWindowClosing<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">true</span> <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #004993;">removeEventListener</span><span style="color: #000000;">&#40;</span> FlexEvent<span style="color: #000066; font-weight: bold;">.</span>CREATION_COMPLETE<span style="color: #000066; font-weight: bold;">,</span> _onCreationComplete <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>I set the <em>windowOwner</em> property when I instantiate the class(es) and I have a skinnable Spark Window(s) that can be owned by another NativeWindow. Downside is that the z-ordering produces a noticeable flicker and only works on the 1st click of the owner window. </p>
<p>Did I have to use an interface? Not at all, but it&#8217;s nice to be able to enforce the contract and easily tear it up once it&#8217;s no longer needed. Taking a different approach? Share it&#8230;</p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Using Owned Native Window Functionality with Spark Windows" data-url="http://technophi.com/2011/04/06/using-owned-native-window-functionality-with-spark-windows/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton776" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2Fllns05&amp;via=heroizm&amp;text=Using%20Owned%20Native%20Window%20Functionality%20with%20Spark%20Windows&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2011%2F04%2F06%2Fusing-owned-native-window-functionality-with-spark-windows%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2011/04/06/using-owned-native-window-functionality-with-spark-windows/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using ANT to Compile a Flex Mobile Project for iOS</title>
		<link>http://technophi.com/2011/03/08/using-ant-to-compile-a-flex-mobile-project-for-ios/</link>
		<comments>http://technophi.com/2011/03/08/using-ant-to-compile-a-flex-mobile-project-for-ios/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 02:53:33 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[FITC]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[LAFO]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ANT]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=656</guid>
		<description><![CDATA[It&#8217;s 3am. You have a sexy Flex mobile project that takes full advantage of the Hero SDK and its Spark mobile components. You&#8217;re dying to deploy to iPhone and iPad but unfortunately, you either have to build your app using Adobe&#8217;s iPhone packager via the command line interface (CLI), wait until Flash Builder includes a [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s 3am. You have a sexy Flex mobile project that takes full advantage of the Hero SDK and its Spark mobile components. You&#8217;re dying to deploy to iPhone and iPad but unfortunately, you either have to build your app using Adobe&#8217;s iPhone packager via the command line interface (CLI), wait until Flash Builder includes a GUI that supports this scenario, switch to another IDE (FDT, etc) or re-factor the app from Flex to Flash for compilation via Flash CS5. Nothing&#8217;s particularly appealing. </p>
<p><strong>Enter: ANT to the rescue!</strong></p>
<p>By creating an ANT build script, you can alleviate all of the above concerns and stay super-flexible at the same time. Here&#8217;s a template that I&#8217;ve been using lately with great success:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">default</span>=<span style="color: #ff0000;">&quot;4. Package Application&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;[Your Flex Project Name]&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
	<span style="color: #808080; font-style: italic;">&lt;!-- Framework properties --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;FLEX_HOME&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;[/path/to/your/flex/4.5/sdk]&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;AIR_GLOBAL&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${FLEX_HOME}/frameworks/libs/air/airglobal.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;ADL&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${FLEX_HOME}/bin/adl&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;ADT&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${FLEX_HOME}/lib/adt.jar&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;PFI&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${FLEX_HOME}/lib/pfi.jar&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;FLEX_TASKS&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${FLEX_HOME}/ant/lib/flexTasks.jar&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;LOCALE&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;en_US&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Project properties --&gt;</span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;project_root&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;[/path/to/your/flex/mobile/project]&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;class_path&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${project_root}/src&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;lib_path&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${project_root}/libs&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;splash_path&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${class_path}/Default.png&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_name&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;[YourApp]&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_root_dir&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_type&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;mxml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;assets_dir_name&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;[name_of_your_assets_dir]&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;debug_mode&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Certificate properties --&gt;</span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;cert_loc&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/[path/to/your/certs]&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;ios_keystore&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${cert_loc}/[your_cert_name].p12&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;ios_pass&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;[your_cert_password]&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;ios_provisioning&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${cert_loc}/[your_provisioning_profile].mobileprovision&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Application properties --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;swf_file&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_name}.swf&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;air_file&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_name}.air&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;ipa_file&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_name}.ipa&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_descriptor&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${class_path}/${app_name}-app.xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;main_class&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${class_path}/${app_name}.${app_type}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;build_dir&quot;</span> <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/build&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;debug_dir&quot;</span> <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/build/debug&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;publish_dir&quot;</span> <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${app_root_dir}/build/deploy&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;assets_dir&quot;</span> <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${class_path}/${assets_dir_name}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;output_loc&quot;</span> <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${publish_dir}/${swf_file}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Use the Flex ANT tasks for easier compilation --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;taskdef</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;mxmlc&quot;</span> <span style="color: #000066;">classname</span>=<span style="color: #ff0000;">&quot;flex.ant.MxmlcTask&quot;</span> <span style="color: #000066;">classpath</span>=<span style="color: #ff0000;">&quot;${FLEX_TASKS}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Clean existing directories --&gt;</span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;1. Cleanup Directories&quot;</span> <span style="color: #000066;">description</span>=<span style="color: #ff0000;">&quot;clean up&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${debug_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${publish_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${build_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Create required directories --&gt;</span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;2. Build New Directories&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;1. Cleanup Directories&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${build_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${debug_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${publish_dir}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Compile SWF to build-directory for packaging --&gt;</span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;3. Compile SWF&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;2. Build New Directories&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mxmlc</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">file</span>=<span style="color: #ff0000;">&quot;${main_class}&quot;</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">output</span>=<span style="color: #ff0000;">&quot;${output_loc}&quot;</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">locale</span>=<span style="color: #ff0000;">&quot;${LOCALE}&quot;</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">static-rsls</span>=<span style="color: #ff0000;">&quot;false&quot;</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">accessible</span>=<span style="color: #ff0000;">&quot;false&quot;</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">configname</span>=<span style="color: #ff0000;">&quot;airmobile&quot;</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">debug</span>=<span style="color: #ff0000;">&quot;${debug_mode}&quot;</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> </span>
<span style="color: #009900;">			<span style="color: #000066;">maxmemory</span>=<span style="color: #ff0000;">&quot;512m&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;source-path</span> <span style="color: #000066;">path-element</span>=<span style="color: #ff0000;">&quot;${class_path}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;compiler.library-path</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${FLEX_HOME}/frameworks&quot;</span> <span style="color: #000066;">append</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;include</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;libs/*&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/compiler.library-path<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;library-path</span> <span style="color: #000066;">file</span>=<span style="color: #ff0000;">&quot;${FLEX_HOME}/frameworks/locale/${LOCALE}&quot;</span> <span style="color: #000066;">append</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;library-path</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${lib_path}&quot;</span> <span style="color: #000066;">includes</span>=<span style="color: #ff0000;">&quot;*.swc&quot;</span> <span style="color: #000066;">append</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;external-library-path</span> <span style="color: #000066;">file</span>=<span style="color: #ff0000;">&quot;${AIR_GLOBAL}&quot;</span> <span style="color: #000066;">append</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/mxmlc<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Package the application to an ipa file &amp; save it in the publish directory --&gt;</span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;4. Package Application&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;3. Compile SWF&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;java</span> <span style="color: #000066;">jar</span>=<span style="color: #ff0000;">&quot;${ADT}&quot;</span> <span style="color: #000066;">fork</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-package&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-target&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;ipa-test&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-provisioning-profile&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${ios_provisioning}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
      			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-storetype&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;pkcs12&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-keystore&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${ios_keystore}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-storepass&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${ios_pass}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${ipa_file}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${app_descriptor}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${output_loc}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-C&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${class_path}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${splash_path}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;-C&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${class_path}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${assets_dir}/icons/.&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/java<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p><strong>UPDATED 3/23/11:</strong> changed the <em>Package Application</em> target to use ADT vs PFI now that <a href="http://j.mp/fcxhhD">AIR 2.6 is official</a>.</p>
<p>You should only have to modify the values wrapped in brackets [ ] to match your system setup. Once that&#8217;s done, you&#8217;ll need to tweak your application&#8217;s descriptor file (ie, myapp-app.xml) as follows:</p>
<p><strong>#1 Modify the initialWindow&#8217;s content value to match the output path from your ANT script:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>[This value will be overwritten by Flash Builder in the output app.xml]<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/content<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>becomes:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/path/to/your/application.swf<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/content<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p><strong>#2 Add the following iOS-required data, either before or after the Android data section:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;iPhone<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;InfoAdditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><span style="color: #339933;">&lt;![CDATA[</span>
<span style="color: #339933;">&lt;key&gt;UIDeviceFamily&lt;/key&gt;</span>
<span style="color: #339933;">&lt;array&gt;</span>
<span style="color: #339933;">&lt;string&gt;1&lt;/string&gt;</span>
<span style="color: #339933;">&lt;string&gt;2&lt;/string&gt;</span>
<span style="color: #339933;">&lt;/array&gt;</span>
<span style="color: #339933;">]]&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/InfoAdditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;requestedDisplayResolution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>high<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/requestedDisplayResolution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/iPhone<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>After that, you should be able to compile your app using the ANT script without problem from any IDE that supports ANT or even from the CLI. This certainly isn&#8217;t the only way to accomplish this, it&#8217;s just my take on it. Feel free to hack away at it and share what you come up with. </p>
<p>If you should decide to bypass the template and build a script from scratch, here are a few caveats to remember:</p>
<ul>
<li>update your application descriptor to use the output SWF path from your ANT script instead of the default placeholder text provided by Adobe</li>
<li>add the appropriate iOS tags to your descriptor</li>
<li>modify the ANT template to point to your system specific config (SDK, project, certs)</li>
<li>don&#8217;t forget to add your certificate&#8217;s password</li>
<li>remember to load the airmobile-config.xml (configname=airmobile vs air)</li>
<li>change <code>ipa-test</code> to <code>ipa-app-store</code> before publishing to the App Store.</li>
</ul>
<p>Checkout some of the related resources for alternatives to tackling the same problem and just general information on developing AIR applications for iOS devices.</p>
<p>RELATED RESOURCES<br />
<a href="http://www.ivanalvarez.com/2010/10/flex-4-in-ios-3/">http://www.ivanalvarez.com/2010/10/flex-4-in-ios-3/</a><br />
<a href="http://www.terrenceryan.com/blog/post.cfm/compiling-flex-hero-apps-with-mxmlc-in-ant">http://www.terrenceryan.com/blog/post.cfm/compiling-flex-hero-apps-with-mxmlc-in-ant</a><br />
<a href="http://blogs.adobe.com/cantrell/archives/2010/09/packager-for-iphone-refresher.html">http://blogs.adobe.com/cantrell/archives/2010/09/packager-for-iphone-refresher.html</a><br />
<a href="http://help.adobe.com/en_US/air/build/WS901d38e593cd1bac1e63e3d128fc240122-7ff2.html">http://help.adobe.com/en_US/air/build/WS901d38e593cd1bac1e63e3d128fc240122-7ff2.html</a><br />
<a href="http://help.adobe.com/en_US/air/build/WSBE9908A0-8E3A-4329-8ABD-12F2A19AB5E9.html">http://help.adobe.com/en_US/air/build/WSBE9908A0-8E3A-4329-8ABD-12F2A19AB5E9.html</a><br />
<a href="http://help.adobe.com/en_US/as3/iphone/air_deviphoneapps.pdf">http://help.adobe.com/en_US/as3/iphone/air_deviphoneapps.pdf</a></p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Using ANT to Compile a Flex Mobile Project for iOS" data-url="http://technophi.com/2011/03/08/using-ant-to-compile-a-flex-mobile-project-for-ios/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton656" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2FmBegzV&amp;via=heroizm&amp;text=Using%20ANT%20to%20Compile%20a%20Flex%20Mobile%20Project%20for%20iOS&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2011%2F03%2F08%2Fusing-ant-to-compile-a-flex-mobile-project-for-ios%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2011/03/08/using-ant-to-compile-a-flex-mobile-project-for-ios/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google Analytics for Air Applications</title>
		<link>http://technophi.com/2010/12/09/google-analytics-for-air-applications/</link>
		<comments>http://technophi.com/2010/12/09/google-analytics-for-air-applications/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 05:47:06 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=591</guid>
		<description><![CDATA[After uncovering very little info on the subject, I decided to write about how you can use Google Analytics (GA) to monitor usage of an AIR application. Implementation isn&#8217;t complex but it does require putting some thought into what you actually want to track since you&#8217;re using something meant for websites to monitor a desktop [...]]]></description>
			<content:encoded><![CDATA[<p>After uncovering very little info on the subject, I decided to write about how you can use Google Analytics (GA) to monitor usage of an AIR application. Implementation isn&#8217;t complex but it does require putting some thought into what you actually want to track since you&#8217;re using something meant for websites to monitor a desktop application.</p>
<p>First thing you want to do is to <a href="http://analytics.google.com">signup for a GA account</a> or create a tracking account that can be used by your AIR app if you&#8217;ve already signed up for GA. As part of the tracking account creation, you&#8217;ll supply a domain to track which should be related to your application but doesn&#8217;t have to be. I&#8217;d advise it to be though because it keeps everything cohesive by grouping your app usage metrics with your product site metrics. If you&#8217;ve done everything correctly, you&#8217;ll now have access to a unique web property ID that maps to your newly created tracking account. This will be very important later on.</p>
<p>Now that you&#8217;ve got your tracking account setup, it&#8217;s wise to take the time to create your conversion goals. These goals are completely up to you but they need to be defined to allow GA to calculate goal conversion metrics for you. I personally consider the following goals essential to any desktop application:</p>
<ul>
<li>Downloads</li>
<li>Installs</li>
<li>Trials</li>
<li>Purchases</li>
<li>Registrations</li>
<li>Errors</li>
</ul>
<p>With the exception of Downloads, all of the above will be tracked via your AIR application through the definition of pageview patterns and application events. When you create your conversion goals you have the option to set the goal&#8217;s type as a URL destination which is perfect for generating your pageview patterns because it allows you to specify a goal URL. This URL now becomes the trigger for this metric. So, anytime GA registers a hit on the specified URL it also registers a hit on the corresponding goal. GA allows you to create up to 20 goals split into 4 sets. Here&#8217;s what the goal config would look like for a goal that tracks # of registrations via a virtual URL:</p>
<p><a href="http://technophi.com/wp-content/uploads/technophi_ga_goal_config_20101209.png"><img src="http://technophi.com/wp-content/uploads/technophi_ga_goal_config_20101209-300x222.png" alt="" title="technophi_ga_goal_config_20101209" width="300" height="222" class="aligncenter size-medium wp-image-598" /></a></p>
<p>Once you&#8217;ve setup your conversion goals, you&#8217;re pretty much done on the GA side. You can now take the JS embed code that GA generates for you and add it to all the physical pages of your product website before moving on to your AIR application.</p>
<p>Now that the GA side is setup, you can concentrate your efforts on the AIR side of things. First on the AIR todo list is to grab the latest GA library SWC from the <a href="http://code.google.com/p/gaforflash/downloads/list">gaforflash project site</a>. Once you&#8217;ve done that, you want to add the SWC to the library path of your Flex or Flash project. With the SWC on your library path, you can now start wiring your application&#8217;s events and user interactions to your pageview patterns that you previously defined.</p>
<p>In a project that I&#8217;m currently working on, I chose to tackle this through the use of a value object (VO) that transports the tracking data collected throughout my application to a proxy that handles data submission to GA. The VO includes read/write properties for everything required by the GA methods supplied via the SWC, as well as, static constants for the pageview patterns that I want to track:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">package labs.<span style="color: #006600;">otuome</span>.<span style="color: #006600;">air</span>.<span style="color: #006600;">myapp</span>.<span style="color: #006600;">model</span>.<span style="color: #006600;">vo</span>.<span style="color: #006600;">google</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #808080; font-style: italic;">/**
	 * Value object representing 
	 * application analytics data.
	 * @author Hasan Otuome
	 */</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AnalyticsData
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">///////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// PRIVATE PROPERTIES</span>
		<span style="color: #808080; font-style: italic;">//////////////////////////////////////////////////////////////////////</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// PUBLIC PROPERTIES</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">//------------------- Track Types ---------------------------------//</span>
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const <span style="color: #0066CC;">URL</span>:<span style="color: #0066CC;">String</span> 			= <span style="color: #ff0000;">'myapp_pageViewTrack'</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const EVENT:<span style="color: #0066CC;">String</span> 		= <span style="color: #ff0000;">'myapp_eventTrack'</span>;
		<span style="color: #808080; font-style: italic;">//------------------- Virtual URLs ---------------------------------//</span>
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const <span style="color: #0066CC;">INSTALL</span>:<span style="color: #0066CC;">String</span> 		= <span style="color: #ff0000;">'/app/installed'</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const TRIAL:<span style="color: #0066CC;">String</span> 		= <span style="color: #ff0000;">'/app/trial'</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const PURCHASE:<span style="color: #0066CC;">String</span> 		= <span style="color: #ff0000;">'/app/purchase'</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const REGISTRATION:<span style="color: #0066CC;">String</span> 	= <span style="color: #ff0000;">'/app/registered'</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const HELP:<span style="color: #0066CC;">String</span> 		= <span style="color: #ff0000;">'/view/help'</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const BUG:<span style="color: #0066CC;">String</span> 			= <span style="color: #ff0000;">'/report/bug'</span>;
		<span style="color: #808080; font-style: italic;">/**
		 * The type of data this instance 
		 * represents, either AnalyticsData.VIEW 
		 * or AnalyticsData.EVENT. 
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">type</span>:<span style="color: #0066CC;">String</span>;
		<span style="color: #808080; font-style: italic;">/**
		 * The data value to associate with this track. 
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> value:<span style="color: #0066CC;">Object</span>;
		<span style="color: #808080; font-style: italic;">//------------------- Event-only ---------------------------------//</span>
		<span style="color: #808080; font-style: italic;">/**
		 * For event tracks, a custom event category. 
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> category:<span style="color: #0066CC;">String</span>;
		<span style="color: #808080; font-style: italic;">/**
		 * For event tracks, the action related to the event. 
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> action:<span style="color: #0066CC;">String</span>;
		<span style="color: #808080; font-style: italic;">/**
		 * For event tracks, a custom label to 
		 * associate with the event. 
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> label:<span style="color: #0066CC;">String</span>;
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// PUBLIC METHODS</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">/**
		 * Constructor 
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AnalyticsData<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// OVERRIDES</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// PRIVATE METHODS</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>And here&#8217;s the GA proxy class:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">package labs.<span style="color: #006600;">otuome</span>.<span style="color: #006600;">air</span>.<span style="color: #006600;">myapp</span>.<span style="color: #006600;">model</span>.<span style="color: #006600;">proxy</span>.<span style="color: #006600;">google</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">analytics</span>.<span style="color: #006600;">AnalyticsTracker</span>;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">analytics</span>.<span style="color: #006600;">GATracker</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">DisplayObject</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> labs.<span style="color: #006600;">otuome</span>.<span style="color: #006600;">air</span>.<span style="color: #006600;">myapp</span>.<span style="color: #006600;">model</span>.<span style="color: #006600;">proxy</span>.<span style="color: #006600;">AbstractProxy</span>;
	<span style="color: #0066CC;">import</span> labs.<span style="color: #006600;">otuome</span>.<span style="color: #006600;">air</span>.<span style="color: #006600;">myapp</span>.<span style="color: #006600;">model</span>.<span style="color: #006600;">vo</span>.<span style="color: #006600;">google</span>.<span style="color: #006600;">AnalyticsData</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">puremvc</span>.<span style="color: #006600;">as3</span>.<span style="color: #006600;">interfaces</span>.<span style="color: #006600;">IProxy</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	 * The &lt;code&gt;AnalyticsProxy&lt;/code&gt; class 
	 * provides access to the AnalyticsData, which 
	 * contains all of the associated analytics data. 
	 * 
	 * @author Hasan Otuome (core)
	 */</span>	
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AnalyticsProxy <span style="color: #0066CC;">extends</span> AbstractProxy <span style="color: #0066CC;">implements</span> IProxy
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// PRIVATE PROPERTIES</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">/**
		 * The GA tracker object. 
		 */</span>		
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _googleAnalyticsTracker:AnalyticsTracker;
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// PUBLIC PROPERTIES</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">/**
		 * Reference to class name for framework caching. 
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const <span style="color: #0066CC;">NAME</span>:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">'AnalyticsProxy'</span>;
		<span style="color: #808080; font-style: italic;">/**
		 * The web property ID associated with this application. 
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const GOOGLE_ANALYTICS_PROPERTY_ID:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">'UA-12346578-1'</span>;
		<span style="color: #808080; font-style: italic;">/**
		 * Returns the AnalyticsData.
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> track<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:AnalyticsData<span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">return</span> getData<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> as AnalyticsData; <span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// PUBLIC METHODS</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">/**
		 * Constructor
		 *  
		 * @param aName
		 * @param aData
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AnalyticsProxy<span style="color: #66cc66;">&#40;</span> aName:<span style="color: #0066CC;">String</span>, aData:<span style="color: #0066CC;">Object</span>=<span style="color: #000000; font-weight: bold;">null</span> <span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span> aName, aData <span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">/**
		 * Starts the GA tracker. 
		 * @param displayObject
		 * @param debug
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> initializeGoogleTracker<span style="color: #66cc66;">&#40;</span> displayObject:DisplayObject, debug:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">false</span> <span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			_googleAnalyticsTracker = <span style="color: #000000; font-weight: bold;">new</span> GATracker<span style="color: #66cc66;">&#40;</span> displayObject, GOOGLE_ANALYTICS_PROPERTY_ID, <span style="color: #ff0000;">'AS3'</span>, <span style="color: #000000; font-weight: bold;">false</span> <span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">/**
		 * Submits the analytics data to 
		 * the analytics tracking service.
		 */</span>		
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> submitUsageData<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>track.<span style="color: #0066CC;">type</span> <span style="color: #66cc66;">&amp;&amp;</span> track.<span style="color: #006600;">value</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>track.<span style="color: #0066CC;">type</span><span style="color: #66cc66;">&#41;</span>
				<span style="color: #66cc66;">&#123;</span>
					<span style="color: #b1b100;">case</span> AnalyticsData.<span style="color: #0066CC;">URL</span>:
						_trackPageView<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
						<span style="color: #b1b100;">break</span>;
					<span style="color: #b1b100;">case</span> AnalyticsData.<span style="color: #006600;">EVENT</span>:
						_trackEvent<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
						<span style="color: #b1b100;">break</span>;
				<span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// OVERRIDES</span>
		<span style="color: #808080; font-style: italic;">/////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">/**
		 * Proxy registration handler.
		 */</span>
		override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onRegister<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			debugTrace<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'[ AnalyticsProxy :: onRegister() ]'</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">data</span> = <span style="color: #000000; font-weight: bold;">new</span> AnalyticsData<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">// PRIVATE METHODS</span>
		<span style="color: #808080; font-style: italic;">////////////////////////////////////////////////////////////////////</span>
		<span style="color: #808080; font-style: italic;">/**
		 * Submits a virtual page view. 
		 */</span>		
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _trackPageView<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>_googleAnalyticsTracker<span style="color: #66cc66;">&#41;</span> 
			<span style="color: #66cc66;">&#123;</span>
				_googleAnalyticsTracker.<span style="color: #006600;">trackPageview</span><span style="color: #66cc66;">&#40;</span> track.<span style="color: #006600;">value</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// reset the VO</span>
				track.<span style="color: #0066CC;">type</span> = <span style="color: #000000; font-weight: bold;">null</span>;
				track.<span style="color: #006600;">value</span> = <span style="color: #000000; font-weight: bold;">null</span>;
				track.<span style="color: #006600;">category</span> = <span style="color: #000000; font-weight: bold;">null</span>;
				track.<span style="color: #006600;">action</span> = <span style="color: #000000; font-weight: bold;">null</span>;
				track.<span style="color: #006600;">label</span> = <span style="color: #000000; font-weight: bold;">null</span>;
			<span style="color: #66cc66;">&#125;</span>	
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">/**
		 * Submits a virtual event. 
		 */</span>		
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _trackEvent<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>_googleAnalyticsTracker<span style="color: #66cc66;">&#41;</span> 
			<span style="color: #66cc66;">&#123;</span>
				_googleAnalyticsTracker.<span style="color: #006600;">trackEvent</span><span style="color: #66cc66;">&#40;</span> track.<span style="color: #006600;">category</span>, track.<span style="color: #006600;">action</span>, track.<span style="color: #006600;">label</span>, <span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#40;</span>track.<span style="color: #006600;">value</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// reset the VO</span>
				track.<span style="color: #0066CC;">type</span> = <span style="color: #000000; font-weight: bold;">null</span>;
				track.<span style="color: #006600;">value</span> = <span style="color: #000000; font-weight: bold;">null</span>;
				track.<span style="color: #006600;">category</span> = <span style="color: #000000; font-weight: bold;">null</span>;
				track.<span style="color: #006600;">action</span> = <span style="color: #000000; font-weight: bold;">null</span>;
				track.<span style="color: #006600;">label</span> = <span style="color: #000000; font-weight: bold;">null</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>In this scenario, the GA tracker is initialized at application startup and from there, anytime usage data needs to be relayed to GA, the VO tied to the proxy is updated and then the submitUsageData() method is called. </p>
<p>That&#8217;s all there is to it. If it seems eerily similar to <a href="http://code.google.com/apis/analytics/docs/tracking/flashTrackingIntro.html">GA implementations for browser-based SWFs</a>, that&#8217;s because it&#8217;s pretty much the same except usage from AIR apps is currently unsupported by Google or Adobe. Even still, it&#8217;s nice to know that AIR developers don&#8217;t have to be left out in the cold completely. </p>
<p>One additional thing to note, it can take up to 24hrs before you&#8217;re able to see the analytics data via your GA dashboard but after that period just look under the Content and Goals tabs and you should start seeing data trickle in for all your virtual pageviews and events.</p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Google Analytics for Air Applications" data-url="http://technophi.com/2010/12/09/google-analytics-for-air-applications/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton591" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2FkQQgLS&amp;via=heroizm&amp;text=Google%20Analytics%20for%20Air%20Applications&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2010%2F12%2F09%2Fgoogle-analytics-for-air-applications%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2010/12/09/google-analytics-for-air-applications/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>BlackBerry PlayBook &#8211; Calling All Developers</title>
		<link>http://technophi.com/2010/11/17/blackberry-playbook-calling-all-developers/</link>
		<comments>http://technophi.com/2010/11/17/blackberry-playbook-calling-all-developers/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 19:35:34 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[BlackBerry]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[FITC]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[LAFO]]></category>
		<category><![CDATA[PlayBook]]></category>
		<category><![CDATA[RIM]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=566</guid>
		<description><![CDATA[Unless you&#8217;ve been sleeping under a rock for the past month, you&#8217;ve probably heard that Research In Motion (RIM), creator of the infamous BlackBerry smartphone, is soon to release an entry into the tablet market: The BlackBerry PlayBook. This device will definitely have an impact on the future of tablet-based computing. Here&#8217;s some preliminary info [...]]]></description>
			<content:encoded><![CDATA[<p>Unless you&#8217;ve been sleeping under a rock for the past month, you&#8217;ve probably heard that Research In Motion (RIM), creator of the infamous BlackBerry smartphone, is soon to release an entry into the tablet market: <a href="http://bit.ly/cJRTU5">The BlackBerry PlayBook</a>. This device will definitely have an impact on the future of tablet-based computing. Here&#8217;s some preliminary info regarding the PlayBook:</p>
<p><strong>Features:</strong><br />
1 GHz dual core processor<br />
1 GB RAM<br />
Pair PlayBook with your BlackBerry smartphone via Bluetooth<br />
Uses the same tech Cisco uses to power the World Wide Web (QNX)<br />
Dual HD cameras (3MP front cam/5MP rear cam)<br />
Video codecs supported: 1080p, h.264, mp4, wmv<br />
HDMI video out<br />
micro USB + HDMI<br />
Weighs < 1lb (400g)<br />
Multitouch gestures (4 touch points)<br />
802.11 a/b/g/n WiFi<br />
Support for POSIX, Open GL, BB 6, WebKit, Flash, Java and AIR</p>
<p>The feature set alone should tempt you and if you're already developing apps with Flash Builder 4, PlayBook dev is as simple as adding another SDK in your config properties and setting up the VMWare simulator for testing. Once you're set up, create a new AS3 project and code away. When you compile your project, the AS3 is compiled into a SWF which is then converted to a BAR file before launching inside the simulator. There are even <a href="http://bit.ly/b1pv0p">techniques to convert your APKs from your Android projects to the BAR format</a>.</p>
<p>RIM is serious about helping you get started with your PlayBook development career. They&#8217;ve compiled a ton of resources to help you get up and running. Here&#8217;s a short list:</p>
<p><a href="http://bit.ly/b3sRVR">us.blackberry.com/developers/tablet/devresources.jsp</a><br />
<a href="http://bit.ly/d8s1X3">supportforums.blackberry.com/t5/Tablet-OS-SDK-for-Adobe-AIR/bd-p/tablet</a><br />
<a href="http://bit.ly/bNGrZz">devblog.blackberry.com</a><br />
<a href="http://bit.ly/aKjOSG">labs.adobe.com/technologies/flash/blackberrytabos</a><br />
<a href="http://bit.ly/9X4iYR">adobe.com/devnet/devices/articles/blackberry_tablet_os_sdk.html</a></p>
<p>And, RIM not only wants you developing applications, they want you earning money as well. Some of the features of their monetization program include:<br />
- Carrier billing, credit card and PayPal in over 70 countries and 21 currencies<br />
- 70/30 revenue split (70% Developer/30% RIM)<br />
- In-app payments (unlockables, powerups, etc)</p>
<p>They&#8217;re also arming you with an integrated advertising service that allows you to earn even more revenue from your PlayBook adventures. Here&#8217;s a brief overview of the ad service&#8217;s features:<br />
- 60/40 revenue split (60% Developer/40% RIM)<br />
- Ability to leverage RIMs existing vendor network to get you earning more ad revenue faster<br />
- Maintain full control over which ads you want to display<br />
- Benefit from an open/transparent platform whose goal is to enable devs to generate revenue</p>
<p>Now, if you&#8217;re still undecided, RIM is even offering a FREE PlayBook. That&#8217;s right FREE!! Full details <a href="http://bit.ly/bJYJc7">here</a>. The basics are create a PlayBook app, submit it to BlackBerry AppWorld and once it&#8217;s approved, you&#8217;ll get a free PlayBook when it ships!!</p>
<p>The excitement surrounding the PlayBook is most definitely brewing so, I strongly encourage you to take advantage of RIM&#8217;s generosity to join the forefront of this new mobile application revolution.</p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="BlackBerry PlayBook &#8211; Calling All Developers" data-url="http://technophi.com/2010/11/17/blackberry-playbook-calling-all-developers/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton566" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2FjmlB6j&amp;via=heroizm&amp;text=BlackBerry%20PlayBook%20%26%238211%3B%20Calling%20All%20Developers&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2010%2F11%2F17%2Fblackberry-playbook-calling-all-developers%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2010/11/17/blackberry-playbook-calling-all-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex 4 &#8211; Base64 Image Decompression and Decoding</title>
		<link>http://technophi.com/2010/08/18/flex-4-base64-image-decompression-and-decoding/</link>
		<comments>http://technophi.com/2010/08/18/flex-4-base64-image-decompression-and-decoding/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 12:04:11 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=536</guid>
		<description><![CDATA[If you ever run into a situation where you need/want to work with Base64-encoded images using AMF, here&#8217;s an example of the process involved in retrieving the encoded data packed with GZip compression from the backend. Source view is enabled on the SWF and the AMFPHP service used are included as well. To view the [...]]]></description>
			<content:encoded><![CDATA[<p>If you ever run into a situation where you need/want to work with Base64-encoded images using AMF, here&#8217;s an example of the process involved in retrieving the encoded data packed with GZip compression from the backend. Source view is enabled on the SWF and the AMFPHP service used are included as well. </p>
<p>To view the demo in its own window, click <a href="http://technophi.com/examples/base64/Base64Decompressor.html">here</a>.<br />
<br/></p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_Base64Decompressor_1294421976"
			class="flashmovie"
			width="955"
			height="600">
	<param name="movie" value="/examples/base64/Base64Decompressor.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/examples/base64/Base64Decompressor.swf"
			name="fm_Base64Decompressor_1294421976"
			width="955"
			height="600">
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Flex 4 &#8211; Base64 Image Decompression and Decoding" data-url="http://technophi.com/2010/08/18/flex-4-base64-image-decompression-and-decoding/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton536" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2Fm554lR&amp;via=heroizm&amp;text=Flex%204%20%26%238211%3B%20Base64%20Image%20Decompression%20and%20Decoding&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2010%2F08%2F18%2Fflex-4-base64-image-decompression-and-decoding%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2010/08/18/flex-4-base64-image-decompression-and-decoding/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flash Builder 4 &#8211; Java Heap Space Issues</title>
		<link>http://technophi.com/2010/08/12/flash-builder-4-java-heap-space-issues/</link>
		<comments>http://technophi.com/2010/08/12/flash-builder-4-java-heap-space-issues/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 01:10:51 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=528</guid>
		<description><![CDATA[If you ever experience a message like &#8220;Error: Java Heap Space&#8221; when building, cleaning or generating a bin-release for a project in Flash Builder 4, try the following as a remedy: 1. Open the following files: a) /install_dir/sdks/3.5.0/bin/jvm.config b) /install_dir/sdks/4.0.0/bin/jvm.config 2. Locate the following line found under # Arguments to VM: java.args=-Xmx384m -Dsun.io.useCanonCaches=false 3. Increase [...]]]></description>
			<content:encoded><![CDATA[<p>If you ever experience a message like &#8220;Error: Java Heap Space&#8221; when building, cleaning or generating a bin-release for a project in Flash Builder 4, try the following as a remedy:</p>
<p>1. Open the following files:<br />
	a) /install_dir/sdks/3.5.0/bin/jvm.config<br />
	b) /install_dir/sdks/4.0.0/bin/jvm.config</p>
<p>2. Locate the following line found under # Arguments to VM:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">java.args=-Xmx384m -Dsun.io.useCanonCaches=<span style="color: #c20cb9; font-weight: bold;">false</span></pre></div></div>

<p>3. Increase the memory size to a larger value like the following example:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">java.args=-Xmx512m -Dsun.io.useCanonCaches=<span style="color: #c20cb9; font-weight: bold;">false</span></pre></div></div>

<p>The max you set this value to is determined by your available memory along with some workflow considerations but this should alleviate your heap issues and smooth out Flash Builder compilations considerably&#8230;</p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Flash Builder 4 &#8211; Java Heap Space Issues" data-url="http://technophi.com/2010/08/12/flash-builder-4-java-heap-space-issues/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton528" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2FiGWSE1&amp;via=heroizm&amp;text=Flash%20Builder%204%20%26%238211%3B%20Java%20Heap%20Space%20Issues&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2010%2F08%2F12%2Fflash-builder-4-java-heap-space-issues%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2010/08/12/flash-builder-4-java-heap-space-issues/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Running Android on an iPhone 3G</title>
		<link>http://technophi.com/2010/06/13/running-android-on-an-iphone-3g/</link>
		<comments>http://technophi.com/2010/06/13/running-android-on-an-iphone-3g/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 08:49:22 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flash Platform]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=500</guid>
		<description><![CDATA[Ran across this video from the iDroid team @ linuxoniphone.blogspot.com that demonstrates an iPhone 3G dual-booting iOS and Android. The demo covers several typical usage scenarios like web browsing, music playback, SMS and making phone calls. Looks stable enough for me to turn my 3Gs into a pimped out iOS/Android test device in a couple [...]]]></description>
			<content:encoded><![CDATA[<p>Ran across this video from the iDroid team @ <a href="http://linuxoniphone.blogspot.com/">linuxoniphone.blogspot.com</a> that demonstrates an iPhone 3G dual-booting iOS and Android. The demo covers several typical usage scenarios like web browsing, music playback, SMS and making phone calls. Looks stable enough for me to turn my 3Gs into a pimped out iOS/Android test device in a couple of weeks. Enjoy!</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/5yO2KQHkt4A&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;hl=fr_FR&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/5yO2KQHkt4A&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;hl=fr_FR&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"></embed></object></p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Running Android on an iPhone 3G" data-url="http://technophi.com/2010/06/13/running-android-on-an-iphone-3g/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton500" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2FiQMSrh&amp;via=heroizm&amp;text=Running%20Android%20on%20an%20iPhone%203G&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2010%2F06%2F13%2Frunning-android-on-an-iphone-3g%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2010/06/13/running-android-on-an-iphone-3g/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple vs. Adobe &#8211; Hero&#8217;s Perspective</title>
		<link>http://technophi.com/2010/05/06/apple-vs-adobe-heros-perspective/</link>
		<comments>http://technophi.com/2010/05/06/apple-vs-adobe-heros-perspective/#comments</comments>
		<pubDate>Thu, 06 May 2010 18:59:11 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[FITC]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[LAFO]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=576</guid>
		<description><![CDATA[After reading Steve Job&#8217;s dismissive stance on Adobe&#8217;s Flash technology, I felt compelled to add my two cents on the subject by penning my own letter to Steve. Dear Steve, After reviewing your recent comments regarding Flash and the recent amendments to the Apple Developer TOS, I decided to share with you my response to [...]]]></description>
			<content:encoded><![CDATA[<p>After reading Steve Job&#8217;s <a href="http://www.apple.com/hotnews/thoughts-on-flash/">dismissive stance on Adobe&#8217;s Flash technology</a>, I felt compelled to add my two cents on the subject by penning my own letter to Steve.</p>
<blockquote><p>Dear Steve, </p>
<p>After reviewing your recent comments regarding Flash and the recent amendments to the Apple Developer TOS, I decided to share with you my response to a few of your positions. First, with regards to 3.3.1, Apple should only do QA based on app quality and NOT on app origin. Are we to seriously believe that an iPhone app built with Unity, Flash, etc. pails in comparison technologically to one built via Xcode? Are we to further believe that there are ABSOLUTELY NO poorly written Obj-C apps in the app store? If so, where are the benchmarks and metrics to support these claims? </p>
<p>Logical decisions are typically made based on data collection in some form or fashion. In the absence of such information, those “logical” decisions are eventually revealed to be more subjective in nature vs. being purely objective. Again, if there is data to support the claims against iPhone apps developed in Flash and compiled to *.ipa, please point us to that data.</p>
<p>Now, as to your assertion that Flash is the #1 reason Macs crash, again, we&#8217;d like to see empirical data that supports this claim. Having used apple desktop and laptop computers for more than a decade, I&#8217;d have to respectfully disagree with you. I&#8217;ve personally experienced kernel panics resulting from locked up processes with non-Flash applications (eg, iTunes, Safari, etc). To my knowledge, iTunes makes no use of Flash but yet it has caused my system to enter into a kernel panic on several occasions. Are we still to believe that Flash is the only big bad wolf lurking in the OSX forest? I seriously hope that&#8217;s not your intention. Will your position change when Adobe produces a Flash Player version that takes full advantage of hardware acceleration? I certainly hope so because then we&#8217;ll know that you&#8217;re truly the visionary tech leader that we all hope you to be.</p>
<p>Does this absolve the Flash development community from doing our part to improve the situation? NO!!! Unfortunately, many Flash apps are created by would-be developers that have no clue about memory management, garbage collection and the like. It is far too easy to create Flash apps that consume all of a browser&#8217;s memory, don&#8217;t close properly and eventually obstruct a user. But, I submit that this same fact holds true regardless of the language or platform used to create said applications. In other words, sloppy coding is the problem not the technology. This is from the perspective of a developer fluent in several languages including Obj-C and ActionScript.</p>
<p>I understand you have your business goals and a board of directors to please, but I implore you to work with Adobe rather than against them. Work with Google, Facebook and the like to make the future of technology truly open which benefits us all. Ultimately, we MUST support a free market economy in order to achieve this technological utopia, the results of which will be exponential growth that lasts for a millennium. Yes, it truly can be that explosive. The only thing standing in the way is our present day greed for money and power.</p>
<p>I sincerely hope that you soften your stance and work with the other technology leaders to usher us into that state of tech bliss&#8230; <img src='http://technophi.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>P E A C E</p>
<p>Hasan</p></blockquote>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Apple vs. Adobe &#8211; Hero&#8217;s Perspective" data-url="http://technophi.com/2010/05/06/apple-vs-adobe-heros-perspective/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton576" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2Fm39300&amp;via=heroizm&amp;text=Apple%20vs.%20Adobe%20%26%238211%3B%20Hero%26%238217%3Bs%20Perspective&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2010%2F05%2F06%2Fapple-vs-adobe-heros-perspective%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2010/05/06/apple-vs-adobe-heros-perspective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading Flash Builder</title>
		<link>http://technophi.com/2010/03/01/upgrading-flash-builder/</link>
		<comments>http://technophi.com/2010/03/01/upgrading-flash-builder/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 04:46:56 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=438</guid>
		<description><![CDATA[Whether you&#8217;re upgrading because you&#8217;re using BETA versions that change rather frequently or upgrading to the next major release, you don&#8217;t want to lose all your hard work invested in configuring your setup. Here&#8217;s how I handle it and hopefully it&#8217;s useful to you. If you have other cool ways to persist workflows between upgrades, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://technophi.com/wp-content/uploads/ol_upgrade_flashbuilder.png"><img src="http://technophi.com/wp-content/uploads/ol_upgrade_flashbuilder.png" alt="" title="upgrading flashbuilder" width="603" height="351" class="aligncenter size-full wp-image-440" /></a></p>
<p>Whether you&#8217;re upgrading because you&#8217;re using BETA versions that change rather frequently or upgrading to the next major release, you don&#8217;t want to lose all your hard work invested in configuring your setup. Here&#8217;s how I handle it and hopefully it&#8217;s useful to you. If you have other cool ways to persist workflows between upgrades, please share them.</p>
<h4>Workspaces</h4>
<p>I&#8217;ve created a <strong>workspaces</strong> folder in a custom directory on my HD where I store all the workspaces I like to use with Eclipse-based IDEs. I separate them by IDE and then by purpose. So for Flash Builder, my workspace hierarchy is like this:</p>
<pre>
/workspaces
  /_fb4
    /air
    /as
    /flash
    /flex
</pre>
<p>This is where all of my IDE preferences and workbench layout settings are stored. Centralizing them here allows me greater flexibility when upgrading since I never have to worry about any changes to installation procedures overwriting my custom settings. Nevertheless, I backup my workspaces prior to upgrading and since their small text files it only takes a second to archive.</p>
<h4>Documents Directory</h4>
<p>On OSX, the Flash Builder installer creates an <strong>Adobe Flash Builder 4</strong> directory in your Documents directory. The installation instructions advise you to uninstall any previous versions of Flash Builder before installing the new version. Following this advice will delete this folder if it already exists. So, be sure to back this up prior to uninstalling your current version. That way you can cherry pick anything you need after installing the new version.</p>
<h4>Applications Directory</h4>
<p>You should also backup up your program installation in your Applications directory for the same reasons as with the folder in your Documents directory. If you&#8217;ve heavily modified your install with additional plugins, etc., this is vital!</p>
<h4>Plugin Restoration</h4>
<p>Where are all my cool plugins? They got wiped during the upgrade process but if you followed my advice and backed everything up, you&#8217;ll be back up and running in a minute or two. There are generally (2) locations where plugin info is stored for Flash Builder. If you pull the data from your backups and place them in the following locations, you should have full access to all your plugins post-upgrade (provided they still work with the latest release) </p>
<p>#1 &#8211; /Documents/Adobe Flash Builder 4/.metadata/.plugins<br />
#2 &#8211; /Applications/Adobe Flash Builder 4/plugins</p>
<p>Although this post is slanted more towards upgrading on OSX, it should be similar for other operating systems. Any issues, let me know&#8230;</p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Upgrading Flash Builder" data-url="http://technophi.com/2010/03/01/upgrading-flash-builder/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton438" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fj.mp%2FlJQBCH&amp;via=heroizm&amp;text=Upgrading%20Flash%20Builder&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http%3A%2F%2Ftechnophi.com%2F2010%2F03%2F01%2Fupgrading-flash-builder%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://technophi.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://technophi.com/2010/03/01/upgrading-flash-builder/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

