<?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>Otuome Labs</title>
	<atom:link href="http://labs.otuome.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://labs.otuome.com</link>
	<description>Incubator for Flash Platform Specialist, Hasan Otuome</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.0.4</generator>
		<item>
		<title>Winning Strategies for Social Video</title>
		<link>http://technophi.com/2011/11/23/winning-strategies-for-social-video/</link>
		<comments>http://technophi.com/2011/11/23/winning-strategies-for-social-video/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 18:04:06 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[strategy]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=797</guid>
		<description><![CDATA[You want to take advantage of the social media revolution and you have a great a idea focused around online video. You want to experience some of the growth and success you&#8217;ve witnessed YouTube, Tout, Instagram and others achieve. What were the catalysts that made these companies and others like them take off? While there ...]]></description>
			<content:encoded><![CDATA[<p>You want to take advantage of the social media revolution and you have a great a idea focused around online video. You want to experience some of the growth and success you&#8217;ve witnessed YouTube, Tout, Instagram and others achieve. What were the catalysts that made these companies and others like them take off? </p>
<p>While there are countless reasons as to their success, I believe each benefited from similar strategies that can also improve your odds of winning.</p>
<h3>Content is King</h3>
<p>It&#8217;s a basic business principle &#8211; if you don&#8217;t have what people want they will seek it elsewhere. So where could this content come from? Well, there are (2) basic types from my perspective: </p>
<ol>
<li>Specialized</li>
<li>Generalized</li>
</ol>
<p>If your content is specialized or concentrated around a particular subject, it has to be truly compelling to gain mindshare of potential viewers as the outlets available are astounding and growing daily. </p>
<p>If your content isn&#8217;t married to a particular subject then you need an abundance to create the foundation for &#8220;sticky&#8221; sessions that will have your viewers losing track of time as they peruse your library of content which you have carefully woven together using tags, keywords, etc.</p>
<p>Specialized content may be the easiest to acquire initially but requires a greater effort to maintain over time. Your content would have to generate enough buzz that people are constantly engaging in a dialogue either on your site or around the Internet. </p>
<p>Even if that were to happen, the window of opportunity is finite. Also, the time and financial costs can become exorbitant rather quickly which has the effect of constantly diminishing your rate of return making this path an unattractive one. </p>
<p>Generalized content is typically the complete opposite, being harder to acquire initially but requiring less effort to maintain over time. How you reduce the maintenance effort is by taking advantage of the social network which is more than willing to help you in your cause. And, due to the constant advances in modern technology, this social workforce is becoming increasingly capable of sustaining your efforts.</p>
<h3>Recruit Social Videographers</h3>
<p>If you build it, they will come. Everyday more and more people are discovering the massiveness of the social network. And, because of the social nature of this network, people are looking for ways to make their presence known, to participate, to have a voice, to socialize.</p>
<p>What you must provide them is a solid platform on which to do so. If you can make it easy for potential users to either generate content or upload existing content into your system, you are well on your way. But, you also need the capability to syndicate that content across the social network. </p>
<p>The more outlets you can tap the more appealing you become to your users who are appreciative for you making their lives easier. This good-will generally equates to positive word-of-mouth which can help propel your endeavor into the stratosphere.</p>
<p>With a limitless army of social videographers now working together with you, quantity of content should never be an issue again. All you would need to do is implement any kind of quality control mechanisms, if so desired, to keep submissions inline with your overall strategy, brand, etc. At the end of the day, you&#8217;ll have a mountainous library of content while rewarding your users with a media platform for social expression. </p>
<h3>Multiscreen/Multidevice</h3>
<p>Once you have content that people want to see, you need to enable them to view it in as many configurations as possible. The more accessible your content is, the greater its reach. The potential for your content to go &#8220;viral&#8221; is dramatically increased if it&#8217;s available across all the desktop browsers, as well as, available on iOS and Android phones and tablets.</p>
<p>Guarantee the most bang for your buck by investing the time and money necessary to extend your content library to these screens and devices. You get an additional bonus if you can also extend user content generation to these devices as well. You will be glad that you did and your users will love you for it.</p>
<h3>Adapt to Tech Changes</h3>
<p>Adaptability is extremely crucial to reaping the rewards of a social media strategy. You can improve your adaptability but having a firm understanding of not only how users have communicated in the past, are communicating now but how they might communicate in the future. </p>
<p>Future communications is not only subject to end user desires and needs but also to shifts in the underlying technology that enables these communications. Some things worthwhile to remain aware of:</p>
<p>1) New mediums, screens or devices available to deliver your content (eg, TVs, kiosks, etc)<br />
2) Costs associated with the storage and delivery of your content (eg, disk space, bandwidth, etc)<br />
3) Emergence of new video codecs or license changes in existing ones</p>
<p>The list goes on and on but the key is to start thinking about those things today so they don&#8217;t bite you tomorrow.</p>
<h3>Use Twitter and Facebook to Promote</h3>
<p>So, you&#8217;ve amassed an impressive library of content that&#8217;s steadily fueled by a sea of social videographers. You&#8217;ve made your content and content generation accessible across multiple screens and devices plus you&#8217;re ready for whatever the future holds. </p>
<p>Now all that&#8217;s left to do is to help your promoters promote. Not only must you integrate Twitter and Facebook for your users so they can spread the word, but you must also engage the social network through &#8211; you guessed it, Twitter and Facebook.</p>
<p>It&#8217;s simple. The more personable you are or are perceived, the greater your reach. Remember, this is a social network so when you &#8220;mingle&#8221; with people act like it. Don&#8217;t engage contacts like a cold, callous enterprise machine. If you do, you won&#8217;t be well received. </p>
<p>On the same note, you can&#8217;t be reckless either. Instead, let your corporate ethos serve you well by ensuring all communications are refined, responsive and informative yet relaxed. You want each contact to walk away with a positive experience because it&#8217;s that experience they will share with others thereby defining your social brand.</p>
<h4>THE END</h4>
<p>These are my thoughts and I&#8217;m sticking to them. What do you think? Post a comment or question. </p>
<p>At some point I&#8217;d like to discuss revenue generation as a follow-up to this article. </p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Winning Strategies for Social Video" data-url="http://technophi.com/2011/11/23/winning-strategies-for-social-video/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton797" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http://j.mp/v5Efo9&amp;via=heroizm&amp;text=Blog:%20Winning%20Strategies%20for%20Social%20Video&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http://technophi.com/2011/11/23/winning-strategies-for-social-video/" 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/11/23/winning-strategies-for-social-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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[AIR]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[General]]></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://j.mp/nYCs51&amp;via=heroizm&amp;text=Developing%20Scalable%20Mobile%20Video%20Chat%20Applications&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http://technophi.com/2011/10/10/developing-scalable-mobile-video-chat-applications/" 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>0</slash:comments>
		</item>
		<item>
		<title>Devising a Social Media Strategy</title>
		<link>http://technophi.com/2011/05/10/devising-a-social-media-strategy/</link>
		<comments>http://technophi.com/2011/05/10/devising-a-social-media-strategy/#comments</comments>
		<pubDate>Tue, 10 May 2011 19:33:14 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[FITC]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[IT Managment]]></category>
		<category><![CDATA[LAFO]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=745</guid>
		<description><![CDATA[You&#8217;ve noticed the trend, businesses around the globe are embracing social media. Now, you want to harness that same power for your business. First, you need a social business strategy that makes sense for your business. In order to do that, you must consider the fact that times have changed. No longer can an organization ...]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve noticed the trend, businesses around the globe are embracing social media. Now, you want to harness that same power for your business. First, you need a social business strategy that makes sense for your business. In order to do that, you must consider the fact that times have changed. No longer can an organization get by on catering to market needs alone. </p>
<p>The business world today is much more empowered; empowered to act and react to dynamic changes often the moment they occur. For your organization to reap the benefits of the social media phenomenon, you must adapt and become more flexible in how you engage your customers, partners and community. To do so involves cultivating social connections that focus on solving business and customer challenges rather than the traditional PR techniques of selling your prospects on just how <strong>great</strong> you are.</p>
<p>Now that you&#8217;ve established the need for a social strategy there are a few things that should be done before you actually devise the strategy.</p>
<p><strong>A) Help the CEO formulate a social media strategy team that will include internal leaders and managers spanning the entire organization. </strong></p>
<p>The social team&#8217;s job will be to help create the strategy and oversee its implementation. As internal buy-in is critical to overall strategy success, the choices made in team selection are extremely crucial. Remember, you can&#8217;t build success on a rocky foundation.  </p>
<p>Once the team is assembled, it wouldn&#8217;t hurt to&#8230; </p>
<p><strong>B) Conduct a session with your company&#8217;s executive team where you explore social tech&#8217;s ability to and success in transforming organizations. </strong></p>
<p>Be sure to fully explore how the same and more can be realized by your organization. Once the seeds have been planted and the bosses are on board, you can start building out your strategy. And because you&#8217;re building on a solid foundation, you should really be able to maximize your competitive advantage by following sound principles catered to your unique value position. Does this guarantee you&#8217;ll be the next Facebook or Twitter? No, but it will guarantee a much better fate than just blindly approaching the socialsphere, hoping for the best.</p>
<p>Based on a recently published Forrester Research report, <strong><a href="http://www.forrester.com/rb/Research/social_business_strategy/q/id/57541/t/2">Social Business Strategy</a></strong>, there are four key ingredients to a successful social business strategy:</p>
<p><strong>#1 Know Thy Neighbor</strong><br />
There&#8217;s no way that you can create value through social engagement if you don&#8217;t truly understand who your employees and customers are, as well as, how they use social technology. According to Forrester, 62 million US adults visited a social networking site at least monthly between 2007 &#8211; 2010 representing a 50% increase in social networking usage.</p>
<p><strong>#2 Define Your Goals</strong><br />
What do you expect to achieve by becoming more social? Do you want to improve customer perception? Increase customer sat? Increase sales? Whatever the case may be, get specific, associate each goal with a strategy and detail the steps to achieve the goal. Once that&#8217;s established, review what emerging social technology trends make the most sense in support of accomplishing your goals.</p>
<p><strong>#3 Weigh the Pros and Cons</strong><br />
Determine which of your goals has the greatest output (return) for the least input (investment). Don&#8217;t get caught up in ego. Realistically assess the risk, effort and complexity of each goal/strategy so you can formulate the clearest picture of which ones should be pursued and which ones to abandon. If a project requires a high investment with very little return, it should be tossed. On the other hand, if you discover a gem of a project that essentially costs nothing to implement but yields untold riches, be smart and fast-track that one.</p>
<p><strong>#4 Pick the Right Tool for the Job</strong><br />
You&#8217;ll likely need a myriad of services to support your golden social strategy so choose wisely. Explore all your options whether it be SaaS, PaaS or even IaaS. Determine which ones integrate with your existing infrastructure the best. You ultimately want your technology selection to be the icing on your well baked plan. </p>
<p>I&#8217;ve personally found success with this approach and feel that it can effectively be applied to a variety of operational/strategical models. How about you?</p>
<p>RELATED RESOURCES<br />
<a href="http://www.forrester.com/rb/Research/social_business_strategy/q/id/57541/t/2">http://www.forrester.com/rb/Research/social_business_strategy/q/id/57541/t/2</a></p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Devising a Social Media Strategy" data-url="http://technophi.com/2011/05/10/devising-a-social-media-strategy/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton745" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http://j.mp/kp4G6E&amp;via=heroizm&amp;text=Devising%20a%20Social%20Media%20Strategy&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http://technophi.com/2011/05/10/devising-a-social-media-strategy/" 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/05/10/devising-a-social-media-strategy/feed/</wfw:commentRss>
		<slash:comments>0</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[AIR]]></category>
		<category><![CDATA[Adobe]]></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://j.mp/llns05&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://technophi.com/2011/04/06/using-owned-native-window-functionality-with-spark-windows/" 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>0</slash:comments>
		</item>
		<item>
		<title>To Offshore or Nearshore? That Is The Question!</title>
		<link>http://technophi.com/2011/04/03/to-offshore-or-nearshore-that-is-the-question/</link>
		<comments>http://technophi.com/2011/04/03/to-offshore-or-nearshore-that-is-the-question/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 15:29:14 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[IT Managment]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[offshoring]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=655</guid>
		<description><![CDATA[In recent years, outsourcing has emerged as a viable means for an organization to contract out a business function, that was previously performed in-house, to an external vendor/provider. The functions targeted can include areas such as business, knowledge or engineering processes, among others. Typically, an organization seeks to outsource in order to realize certain business ...]]></description>
			<content:encoded><![CDATA[<p>In recent years, outsourcing has emerged as a viable means for an organization to contract out a business function, that was previously performed in-house, to an external vendor/provider. The functions targeted can include areas such as business, knowledge or engineering processes, among others. Typically, an organization seeks to outsource in order to realize certain business benefits such as:</p>
<ul>
<li>Cost savings (e.g. lower taxes, cheaper labor, etc)</li>
<li>Quality improvement</li>
<li>Reduced time to market</li>
<li>Capacity management</li>
<li>Risk management/mitigation</li>
<li>Scalability</li>
</ul>
<p>During the late 90s and early 00s, there was a definite boom in offshore outsourcing a/k/a <strong>offshoring</strong> where mega-corporations were able to take advantage of large resource pools in lower cost economies due to an extremely disparate gap in wages that existed between the industrialized nations seeking to outsource and the developing nations providing the services. It was not uncommon to see companies like HP outsource their entire customer support operations to call centers in Hong Kong, Shanghai or Bangladesh. When planned effectively, those kinds of strategic business decisions have shown the potential to reap generous dividends on a relatively low-cost investment.</p>
<p>In the US, there has always been mixed emotions/views on outsourcing. Opponents claim it leads to job displacement, especially as it relates to offshoring. Supporters argue that offshoring actually lowers prices thereby yielding a greater overall economic benefit. Regardless of the position taken, the decision to offshore often carries its own set of consequences and repercussions that must be accounted for and dealt with such as:</p>
<ul>
<li>Physical distance (ie, geographic proximity, time zones, etc)</li>
<li>Quality of service</li>
<li>Language/cultural barriers</li>
<li>Security issues</li>
<li>Governmental policies/restrictions</li>
</ul>
<p>Considerations like these coupled with the recent global economic downturn and the proliferation of <strong>cloudsourcing</strong> have cooled the heels of the once agressive business strategists to take a slower, more stable approach to offshoring in particular and outsourcing in general. This change in landscape, attitude and strategy has given rise to alternatives like <strong>nearshoring</strong> and as a result, has seeded socio-economic growth in neighboring countries like Brazil, Chile, Canada and Mexico.  </p>
<p>What makes nearshoring appealing is that it allows an organization to mitigate several of the concerns/risks associated with offshoring while still reaping the benefits that an outsourcing strategy provides. By providing increased flexibility for organizational alignment, nearshoring can be an effective means to increase ROI.</p>
<p>Eventually, business strategists may shift back towards insourcing as some analysts suggest. This will especially become true as the once developing nations become more industrialized and the labor cost savings increasingly diminish. Would that signal the death of outsourcing? Hardly. I believe outsourcing is here to stay and will see increased/decreased implementation as market and economic conditions dictate. What do you think?</p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="To Offshore or Nearshore? That Is The Question!" data-url="http://technophi.com/2011/04/03/to-offshore-or-nearshore-that-is-the-question/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton655" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http://j.mp/lZgIfy&amp;via=heroizm&amp;text=To%20Offshore%20or%20Nearshore?%20That%20Is%20The%20Question!&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http://technophi.com/2011/04/03/to-offshore-or-nearshore-that-is-the-question/" 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/03/to-offshore-or-nearshore-that-is-the-question/feed/</wfw:commentRss>
		<slash:comments>0</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[AIR]]></category>
		<category><![CDATA[ANT]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[FITC]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[LAFO]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone]]></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://j.mp/mBegzV&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://technophi.com/2011/03/08/using-ant-to-compile-a-flex-mobile-project-for-ios/" 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>0</slash:comments>
		</item>
		<item>
		<title>Why IPv6 is a Big Thing</title>
		<link>http://technophi.com/2011/01/18/why-ipv6-is-a-big-thing/</link>
		<comments>http://technophi.com/2011/01/18/why-ipv6-is-a-big-thing/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 19:02:47 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[IT Managment]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=624</guid>
		<description><![CDATA[It&#8217;s the nature of the universe that all things come to an end. It&#8217;s also human nature to dread this universal fact. We tend to look at this &#8220;end&#8221; as a loss of the permanent variety and we simply hate to lose things when that loss is permanent. This feeling causes us to be resistant ...]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s the nature of the universe that <strong>all things come to an end</strong>. It&#8217;s also human nature to dread this universal fact. We tend to look at this <em>&#8220;end&#8221;</em> as a loss of the permanent variety and we simply hate to lose things when that loss is permanent. This feeling causes us to be resistant to and willfully ignorant to <em>&#8220;the end&#8221;</em>. We go on enjoying the existence of things and soon become oblivious to the fact that at some point the things we&#8217;re enjoying will cease to be. And so it has come with the Internet as we know it.</p>
<p>The Internet that we&#8217;ve become accustomed to will soon cease to exist. It&#8217;s fast-approaching that point where it can no longer exist as it does today. This is due to the fact that we&#8217;re running out of addresses under the current Internet Layer protocol, Internet Protocol version 4 (IPv4). IPv4 is responsible for relaying data across the Internet from source host to destination host based solely on their addresses. IPv4 uses 32-bit (2 to the 32nd power) addresses and can support 4.3 billion devices connected directly to the Internet. </p>
<p>Normally, 4.3 billion would seem like a massive number but with the proliferation of Internet-hungry devices, that number has become almost entirely consumed. As it stands now, less than 5% of IPv4 addresses are left unallocated to the regional Internet registries, who in turn issue them out to network operators. These network operators are then responsible for issuing them to their service subscribers. Think about that for a second, 5% of 4.3 billion. That leaves only 215 million addresses left to issue before IPv4 reaches its end. <a href="http://www.potaroo.net/tools/ipv4/">Experts</a> expect the free pool of IPv4 addresses to be depleted in a matter of weeks. So, it seems that we&#8217;ve pushed IPv4 as far as it can possibly go and we did so in only 30 years. Without diminishing the incredible nature of that thought, what will happen once that eventual day finally comes? Will we no longer be able to surf the Net, check email, buy movie or plane tickets? Hopefully not. That&#8217;s what IPv6 was created to prevent.</p>
<p>IPv6 defines a new addressing method that&#8217;s infinitely more robust than its predecessor. It uses 128-bit addresses which supports a virtually unlimited number of devices (2 to 128th power). In other words, it will take a LOT longer than 30 years to exhaust those many addresses. We&#8217;ll have enough addresses to issue our future extraterrestrial networks on the Moon and Mars. </p>
<p>To get planet Earth ready for the mandatory switch to IPv6, the <a href="http://isoc.org/wp/worldipv6day/">Internet Society is sponsoring World IPv6 Day on June 8, 2011</a>. This global trial requires participants to support native IPv6 traffic on their main Web sites on that day. Google, Yahoo and Facebook, along with leading content delivery networks like Akamai and Limelight have all committed to the IPv6 trial. In order to participate in the trial, these companies must commit to running a dual-stack deployment which will allow IPv6 traffic to run alongside IPv4 traffic without utilizing shortcuts like <a href="http://www.google.com/intl/en/ipv6/">DNS whitelisting</a>. Until now, content providers like Facebook and Google have been supporting IPv6 via dedicated addresses separate from their main traffic-heavy sites.</p>
<p>These companies aren&#8217;t the only ones that believe change is eminent. Recently, the <a href="http://www.networkworld.com/news/2010/122010-dod-strongarms-suppliers-on-ipv6.html">US Military started nudging its IT vendors to begin supporting IPv6</a> on their public facing sites. And, in September of 2010, the Office of Management and Budget <a href="http://www.networkworld.com/news/2010/092810-ipv6-obama-plan.html">mandated federal agencies to support IPv6</a> in dual-stack mode on their public facing sites by the fall of 2012. </p>
<p>The ball is definitely in motion to transition the world to the next version of the IP protocol. Hopefully this trial will prompt content providers, ISPs and manufacturers to start their transitions to IPv6 as soon as possible. As someone that&#8217;s ultimately responsible for technology and IT at my company, I am definitely excited to smoothly transition our internal and external operations over to IPv6. </p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Why IPv6 is a Big Thing" data-url="http://technophi.com/2011/01/18/why-ipv6-is-a-big-thing/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton624" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http://j.mp/iezh2E&amp;via=heroizm&amp;text=Why%20IPv6%20is%20a%20Big%20Thing&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http://technophi.com/2011/01/18/why-ipv6-is-a-big-thing/" 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/01/18/why-ipv6-is-a-big-thing/feed/</wfw:commentRss>
		<slash:comments>0</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[AIR]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></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://j.mp/kQQgLS&amp;via=heroizm&amp;text=Google%20Analytics%20for%20Air%20Applications&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http://technophi.com/2010/12/09/google-analytics-for-air-applications/" 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>0</slash:comments>
		</item>
		<item>
		<title>BlackBerry PlayBook – 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[AIR]]></category>
		<category><![CDATA[Adobe]]></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://j.mp/jmlB6j&amp;via=heroizm&amp;text=BlackBerry%20PlayBook%20&%238211;%20Calling%20All%20Developers&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http://technophi.com/2010/11/17/blackberry-playbook-calling-all-developers/" 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>Adobe Illustrator CS5 HTML Pack</title>
		<link>http://technophi.com/2010/09/13/adobe-illustrator-cs5-html-pack/</link>
		<comments>http://technophi.com/2010/09/13/adobe-illustrator-cs5-html-pack/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 20:02:52 +0000</pubDate>
		<dc:creator>Hasan Otuome</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[CS5]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[FITC]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Illustrator]]></category>
		<category><![CDATA[LAFO]]></category>

		<guid isPermaLink="false">http://technophi.com/?p=584</guid>
		<description><![CDATA[If you&#8217;ve been longing for a way to take your vector designs straight from Illustrator to Dreamweaver, you&#8217;ll want to grab the Illustrator CS5 HTML Pack from Adobe Labs. Here&#8217;s a brief rundown of some of the features: PROS Support SVG + HTML 5 - canvas - scaleable - accessible text Generate CSS3 Live, selectable ...]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve been longing for a way to take your vector designs straight from Illustrator to Dreamweaver, you&#8217;ll want to grab the <a href="http://bit.ly/aPtPzn">Illustrator CS5 HTML Pack</a> from Adobe Labs. Here&#8217;s a brief rundown of some of the features:</p>
<p>PROS</p>
<ul>
<li> Support SVG + HTML 5</li>
<p>	- canvas<br />
	- scaleable<br />
	- accessible text</p>
<li>Generate CSS3</li>
<li>Live, selectable text</li>
<p>	- use JS to manipulate</p>
<li>Lots of power to chop up designs (think PS slices)</li>
<li>CSS Export!!! (Export Selected as CSS)</li>
<p>	- export object<br />
	- export object styles<br />
	- export text styles via Character Styles tab<br />
	- export gradients!!</p>
<li>Link to exported CSS via DW</li>
<li>FREE download from Adobe Labs on 9/13 (Get it Today!!)</li>
</ul>
<p>CONS</p>
<ul>
<li>Doesn’t generate HTML; just CSS</li>
<li>IE9 can render natively; older versions have to use a plugin</li>
</ul>
<p>Would write more but I&#8217;m anxious myself so I&#8217;m off to install my copy and start creating!!!  <img src='http://technophi.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<div style="float: right; padding: 3px;"><a href="http://bufferapp.com/add" class="buffer-add-button" data-text="Adobe Illustrator CS5 HTML Pack" data-url="http://technophi.com/2010/09/13/adobe-illustrator-cs5-html-pack/" data-via="bufferapp" data-count="none">Buffer</a><script type="text/javascript" src="http://static.bufferapp.com/js/button.js"></script></div><div id="tweetbutton584" class="tw_button" style="padding: 3px;float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http://j.mp/jLA5Y2&amp;via=heroizm&amp;text=Adobe%20Illustrator%20CS5%20HTML%20Pack&amp;related=heroizm&amp;lang=en&amp;count=none&amp;counturl=http://technophi.com/2010/09/13/adobe-illustrator-cs5-html-pack/" 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/09/13/adobe-illustrator-cs5-html-pack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
