<?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>SavageLook.com &#187; ActionScript3</title>
	<atom:link href="http://savagelook.com/blog/category/actionscript3/feed" rel="self" type="application/rss+xml" />
	<link>http://savagelook.com/blog</link>
	<description>Blowing your mind, one line of code at a time</description>
	<lastBuildDate>Tue, 15 May 2012 13:27:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Gonzo, an open source markdown editor</title>
		<link>http://savagelook.com/blog/actionscript3/gonzo-an-open-source-markdown-editor</link>
		<comments>http://savagelook.com/blog/actionscript3/gonzo-an-open-source-markdown-editor#comments</comments>
		<pubDate>Wed, 20 Jul 2011 14:34:40 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[markdown]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3237</guid>
		<description><![CDATA[Meet Gonzo, a lightweight markdown editor written for Adobe Air for desktop<p><a href="http://savagelook.com/blog/actionscript3/gonzo-an-open-source-markdown-editor">Gonzo, an open source markdown editor</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h2>Gonzo</h2>
<ul>
<li><a href="https://github.com/downloads/tonylukasavage/Gonzo/Gonzo_0.1.0_alpha.air">Gonzo 0.1.0 alpha release Air installer</a></li>
<li><a href="https://github.com/tonylukasavage/Gonzo">Gonzo on Github</a></li>
</ul>
<p>Gonzo is a lightweight, open source markdown editor written for Adobe Air for desktop using Flex 4 and AS3.  Its a stripped-to-the-bone application that serves one purpose: helping you deliver well formed and easy to proofread web content.</p>
<p><img src="http://savagelook.com/blog/wp-content/uploads/2011/07/gonzo_final.jpg" alt="Gonzo, the lightweight markdown editor" title="" /></p>
<h2>Why use markdown, I already know HTML?</h2>
<p>Rather than drone on about the pros and cons of each, I&#8217;ll just present you with a simple example. You let me know which version you would rather proofread.</p>
<h3>HTML version</h3>
<pre class="code"><code>&lt;h2&gt;Here's a header&lt;/h2&gt;

&lt;p&gt;Here's some content in a paragraph. And here's a link to &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; and another to my &lt;a href="https://github.com/tonylukasavage"&gt;Github&lt;/a&gt; account.&lt;/p&gt;

&lt;p&gt;And here's another paragraph
    &lt;blockquote&gt;this time it contains a blockquote&lt;/blockquote&gt;
&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;One of these lists' syntax&lt;/li&gt;
    &lt;li&gt;has the following attributes:&lt;/li&gt;
    &lt;li&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;b&gt;intrusive&lt;/b&gt;&lt;/li&gt;
            &lt;li&gt;&lt;b&gt;ugly&lt;/b&gt;&lt;/li&gt;
            &lt;li&gt;&lt;b&gt;very hard to read&lt;/b&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;which one do you think it is?&lt;/li&gt;
&lt;/ul&gt;
</code></pre>
<p></p>
<h3>Markdown version</h3>
<pre class="code"><code>## Here's a header

Here's some content in a paragraph. And here's a link to [Google][] and another to my [Github][] account.&lt;/p&gt;

And here's another paragraph
&gt; this time it contains a blockquote

* One of these lists' syntax
* has the following attributes:
    * intrusive
    * ugly
    * very hard to read
* which one do you think it is? 

[Google]: http://www.google.com
[Github]: https://github.com/tonylukasavage
</code></pre>
<p></p>
<h2>Why should you use Gonzo?</h2>
<p>Well, unless you are writing content for the web, you probably shouldn&#8217;t.  Gonzo is written specifically for those who want to leverage the readability of markdown over HTML when publishing web content.  So whether you are writing a WordPress blog post, editing a wiki, or even just an answering a question on <a href="http://stackoverflow.com">StackOverflow</a>, Gonzo can make your life a whole lot easier.</p>
<p>In the spirit of markdown, I&#8217;ve added just enough features to increase efficiency while maintaining a content-driven writing experience. The idea is to only add features necessary for making web publishing easier.  All the effort saved by not implementing useless features was redirected into usability.</p>
<h2>Just Give Me The Feature List Already</h2>
<p>Yeah, I tend to skip the text and go right for the feature list too. Kudos to anyone who actually read the previous content before coming here.</p>
<ul>
<li><strong>Live HTML preview</strong> &#8211; You can actually see the raw and rendered HTML generated by your markdown in a preview pane.</li>
<li><strong>Multi-tab editing</strong> &#8211; Edit many documents at the same time.</li>
<li><strong>Cross platform</strong> &#8211; Works on any desktop that supports Adobe Air. </li>
<li><strong>Keyboard and (context) menu shortcuts</strong> &#8211; Creating markdown is even easier now with multiple was to create it.</li>
<li><strong>HTML Export</strong> &#8211; Export your generated HTML to a file so it can easily be uploaded or shared.</li>
<li><strong>Cheat Sheet</strong> &#8211; integrated markdown cheat sheet for beginners and vets alike.</li>
</ul>
<h2>Coming soon&#8230;</h2>
<p>This is the list of features I personally would like to have, as I&#8217;m the only user so far. Please let me know what <em>you</em> think would be a good addition to Gonzo&#8217;s functionality.</p>
<ul>
<li><strong>yfrog integration</strong> &#8211; Wouldn&#8217;t it be nice to browse to a file on your desktop, upload it as an image, and get a markdown link placed in your document in one click?  I think so too.</li>
<li><strong>bit.ly integration</strong> &#8211; see above </li>
<li><strong>Markdown toolbar shortcuts</strong> &#8211; Just in case the keyboard, context menu, and native menu shortcuts aren&#8217;t enough&#8230;</li>
<li><strong>Preferences</strong> &#8211; Let users set things like fonts, colors, editor sizes, and eventually maybe even theming. </li>
<li><strong>Local settings</strong> &#8211; For persisting preferences between Gonzo sessions</li>
</ul>
<p>What else do you have in mind?</p>
<h2>Want to Contribute?</h2>
<p>Good! Like most open source projects, ongoing development will be heavily motivated by contributions and feedback from its community of developers and users. While Gonzo will continue to grow as I use and find features I want, its going to be you who determines if it matures into an application for the masses.</p>
<p>There&#8217;s a number of ways you can contribute:</p>
<ul>
<li>Use it and let me know what you think.
<ul>
<li>What is it missing?</li>
<li>What am I doing wrong</li>
<li>What am I doing right?</li>
</ul>
</li>
<li>Fork <a href="https://github.com/tonylukasavage/Gonzo">Gonzo on Github</a>, start hacking away, and send me some pull requests. I&#8217;m very open to help, but bear in mind that its lightweight nature and usability should not be sacrificed for the sake of features.</li>
<li>Design help is very welcome. I&#8217;m a dev through and through, so it will remain spartan in frills unless someone else decides to add the polish.</li>
</ul>
<h2>Summary</h2>
<p>There&#8217;s a lot to come yet for Gonzo. I still need to get the wiki up and running for basic docs.  I may even take the time to make a web page for it if it garners enough interest. Or none of this could happen and I could just continue to use it myself. Only time and feedback will tell.</p>
<p>If you do start using or hacking Gonzo, you can let me know here, on <a href="https://github.com/tonylukasavage/Gonzo">Github</a>, or on <a href="http://twitter.com/tonylukasavage">Twitter</a>.  I&#8217;d love to hear about your experience. In the meantime I&#8217;ll continue using it to write my web content and keep improving it as I see fit.</p>
<p>Oh, and this entire post was written in markdown using Gonzo.  Here&#8217;s a link to the <a href="http://savagelook.com/misc/gonzo.md.text">original markdown</a> for the blog post.</p>
<p><a href="http://savagelook.com/blog/actionscript3/gonzo-an-open-source-markdown-editor">Gonzo, an open source markdown editor</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3237"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/actionscript3/gonzo-an-open-source-markdown-editor/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Taking Notes on Node.js using Gonzo</title>
		<link>http://savagelook.com/blog/actionscript3/taking-notes-on-node-js-using-gonzo</link>
		<comments>http://savagelook.com/blog/actionscript3/taking-notes-on-node-js-using-gonzo#comments</comments>
		<pubDate>Wed, 22 Jun 2011 15:56:42 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[gonzo]]></category>
		<category><![CDATA[markdown]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3164</guid>
		<description><![CDATA[Taking my very new markdown editor, Gonzo, for a test drive at a Node.js meetup<p><a href="http://savagelook.com/blog/actionscript3/taking-notes-on-node-js-using-gonzo">Taking Notes on Node.js using Gonzo</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h2>Gonzo</h2>
<div style="clear:both;"></div>
<hr style="margin=:0px; padding:0px;"/>
<p>In case you haven&#8217;t heard me talking about it on <a href="http://twitter.com/#!/tonylukasavage">Twitter</a>, I&#8217;m creating my own markdown editor called <a href="https://github.com/tonylukasavage/Gonzo">Gonzo</a>. If you don&#8217;t know what markdown is, read up on it at <a href="http://daringfireball.net/projects/markdown/syntax">John Gruber&#8217;s (creator) blog</a>.  It was created as a way to make web based writing more readable from a writer&#8217;s perspective.  </p>
<p>Here&#8217;s some of the highlights of the VERY young <strong>Gonzo</strong>:</p>
<ul style="padding-bottom:15px;">
<li>Its open source and <a href="https://github.com/tonylukasavage/Gonzo">hosted on Github</a></lI>
<li>Its written using Adobe Air for desktop, Flex 4, and AS3</lI>
<li>The markdown to HTML parsing is done using <a href="https://gist.github.com/648771">Charles Strahan&#8217;s Showdown.as</a></lI>
<li>Uses <a href="http://gskinner.com/blog/archives/2007/04/free_extension.html">Grant Skinner&#8217;s StringUtils.as</a></lI>
<li>Its <strong>3 days old</strong> as of the publishing date of the article</lI>
<li>It generates HTML as you type markdown and shows it live in a preview panel</lI>
<li>Counts your words for those web writers trying to hit quotas</lI>
</ul>
<h2>Test Run</h2>
<hr style="margin:0px; padding:0px;"/>
Last night I took <strong>Gonzo</strong> for its maiden voyage in &#8220;production.&#8221; I went to a meetup of the <a href="http://www.meetup.com/Pittsburgh-JavaScript-Developers/">Pittsburgh Javascript Developers</a> and discussed <a href="http://nodejs.org/">Node.js</a>.  I&#8217;ve never looked at Node.js before as server side Javascript always seemed like the avenue of a one trick pony.  After shedding my preconceived notions, it became apparent that using one language throughout your entire technology stack could work miracles with your efficiency.  But its young, alpha, and it changes a lot.  </p>
<p>Rather than ramble on from a beginner&#8217;s stand point, I&#8217;ll leave you with the notes I took last night at the meetup using <strong>Gonzo</strong>.  First, I&#8217;ll show you the notes as I entered into <strong>Gonzo</strong>.  Like I said at the beginning, if markdown is unfamiliar, <a href="http://daringfireball.net/projects/markdown/syntax">read up</a>.  Just one glance shows you how much more readable and editable it is than typical HTML markup.</p>
<h2>My Notes in Markdown</h2>
<hr style="margin:0px; padding:0px;"/>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">## Node.js 
&nbsp;
### Overview
&nbsp;
* Server side JS. 
* HTTP/TCP built in
* non-blocking, event driven, 1 thread (launches process into event queue)
* not suitable for CPU intensive work
* Node.js is alpha and changes a lot between revisions
* for unix, not Windows friendly
* everything is a callback and gets its own process
	* lots of nested callbacks
* has to run from command line, no GUI for management.
* you can use it as a scripting language like ruby or perl
	* does not have to be event driven if ran this way.
* Having it server side allows you to use JS up and down your whole technology stack
&nbsp;
### NPM
&nbsp;
* Node package managaer
* A lot like CPAN for perl
&nbsp;
### Modules
&nbsp;
* [100's of modules](https://github.com/joyent/node/wiki/modules)
* examples
	* Sizzle
		* DOM selections and traversing
	* Paperboy
		* serves static files
	* Jade 
		* templating engine
	* ExpressJS
		* web framework
		* use it to deliver RESTful services
	* zombie headless browser
		* useful for testing Node driven services
		* assertions against returned data
		* DOM traversing is all custom code (why?!)
	* Coffeescript
	* multiple cores w/ web workers
	* Node Inspector
		* debugger
			* breakpoints
			* call stack
			* watch expressions
		* command line
		* runs in a webkit browser
		* based on google's v8 engine
&nbsp;
### Basic Server
&nbsp;
	var http = require(&quot;http&quot;);
&nbsp;
	http.createServer(function (request, response) {
		response.writeHead(&quot;Content-Type: &quot;text/html&quot;);
		response.write(&quot;&lt;html&gt;&lt;/html&gt;&quot;);
		response.end();		
	}).listen(8081);
&nbsp;
### Emitters
&nbsp;
Emitters are used to counter nesting of code. Should probably use constants to define emitter names. Add parameters afer emitter name in `emit()` to pass to callback.
&nbsp;
	emitter.emit('eventName', param1, param2);
	emitter.on('eventName', function(param1, param2) {
		// do stuff
	});</pre></div></div>

<p>And now, through the magic of <strong>Gonzo</strong> and Showdown.as, we get to see the markdown translated into HTML.  You can then take the translated HTML and publish it to the web, allowing it to leverage any CSS and formatting your target venue has in place.  Again, notice how much more readable the markdown version is than this HTML version.</p>
<h2>My Notes Translated to HTML via Gonzo</h2>
<hr style="margin=:0px; padding:0px;"/>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h2</span>&gt;</span>Node.js<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h2</span>&gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>Overview<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Server side JS. <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>HTTP/TCP built in<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>non-blocking, event driven, 1 thread (launches process into event queue)<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>not suitable for CPU intensive work<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Node.js is alpha and changes a lot between revisions<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>for unix, not Windows friendly<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>everything is a callback and gets its own process
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>lots of nested callbacks<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>has to run from command line, no GUI for management.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>you can use it as a scripting language like ruby or perl
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>does not have to be event driven if ran this way.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Having it server side allows you to use JS up and down your whole technology stack<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>NPM<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Node package managaer<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>A lot like CPAN for perl<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>Modules<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;https://github.com/joyent/node/wiki/modules&quot;</span>&gt;</span>100's of modules<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>examples
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Sizzle
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>DOM selections and traversing<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Paperboy
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>serves static files<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Jade 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>templating engine<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>ExpressJS
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>web framework<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>use it to deliver RESTful services<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>zombie headless browser
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>useful for testing Node driven services<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>assertions against returned data<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>DOM traversing is all custom code (why?!)<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Coffeescript<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>multiple cores w/ web workers<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Node Inspector
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>debugger
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>breakpoints<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>call stack<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>watch expressions<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>command line<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>runs in a webkit browser<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>based on google's v8 engine<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>Basic Server<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span> 
&nbsp;
<span style="color: #ddbb00;">&amp;lt;</span>pre<span style="color: #ddbb00;">&amp;gt;</span><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">code</span>&gt;</span>var http = require(&quot;http&quot;);
&nbsp;
http.createServer(function (request, response) {
    response.writeHead(&quot;Content-Type: &quot;text/html&quot;);
    response.write(&quot;<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span>&quot;);
    response.end();     
}).listen(8081);
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">code</span>&gt;</span><span style="color: #ddbb00;">&amp;lt;</span>/pre<span style="color: #ddbb00;">&amp;gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>Emitters<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>Emitters are used to counter nesting of code. Should probably use constants to define emitter names. Add parameters after emitter name in <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">code</span>&gt;</span>emit()<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">code</span>&gt;</span> to pass to callback.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span> 
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">pre</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">code</span>&gt;</span>emitter.emit('eventName', param1, param2);
emitter.on('eventName', function(param1, param2) {
    // do stuff
});
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">code</span>&gt;</span></pre></div></div>

</pre>
<p>And finally below is the above generated HTML copied directly into my blog.  The CSS that governs my blog does its work on the elements and makes it look relatively web ready.  Obviously if I put a little more effort in (as I will soon), I can tailor the CSS to play well with my generated HTML.  For now, though, you can see the basic formatting applied.  So without cluttering your writing with HTML you can still effortlessly generate web ready content.</p>
<h2>Gonzo Generated HTML on my Blog</h2>
<hr style="margin:0px; padding:0px;"/>
<h2>Node.js</h2>
<h3>Overview</h3>
<ul>
<li>Server side JS. </li>
<li>HTTP/TCP built in</li>
<li>non-blocking, event driven, 1 thread (launches process into event queue)</li>
<li>not suitable for CPU intensive work</li>
<li>Node.js is alpha and changes a lot between revisions</li>
<li>for unix, not Windows friendly</li>
<li>everything is a callback and gets its own process
<ul>
<li>lots of nested callbacks</li>
</ul>
</li>
<li>has to run from command line, no GUI for management.</li>
<li>you can use it as a scripting language like ruby or perl
<ul>
<li>does not have to be event driven if ran this way.</li>
</ul>
</li>
<li>Having it server side allows you to use JS up and down your whole technology stack</li>
</ul>
<h3>NPM</h3>
<ul>
<li>Node package managaer</li>
<li>A lot like CPAN for perl</li>
</ul>
<h3>Modules</h3>
<ul>
<li><a href="https://github.com/joyent/node/wiki/modules">100's of modules</a></li>
<li>examples
<ul>
<li>Sizzle</p>
<ul>
<li>DOM selections and traversing</li>
</ul>
</li>
<li>Paperboy
<ul>
<li>serves static files</li>
</ul>
</li>
<li>Jade
<ul>
<li>templating engine</li>
</ul>
</li>
<li>ExpressJS
<ul>
<li>web framework</li>
<li>use it to deliver RESTful services</li>
</ul>
</li>
<li>zombie headless browser
<ul>
<li>useful for testing Node driven services</li>
<li>assertions against returned data</li>
<li>DOM traversing is all custom code (why?!)</li>
</ul>
</li>
<li>Coffeescript</li>
<li>multiple cores w/ web workers</li>
<li>Node Inspector
<ul>
<li>debugger</p>
<ul>
<li>breakpoints</li>
<li>call stack</li>
<li>watch expressions</li>
</ul>
</li>
<li>command line</li>
<li>runs in a webkit browser</li>
<li>based on google's v8 engine</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>Basic Server</h3>
<pre><code>var http = require("http");

http.createServer(function (request, response) {
    response.writeHead("Content-Type: "text/html");
    response.write("&lt;html&gt;&lt;/html&gt;");
    response.end();
}).listen(8081);
</code></pre>
<h3>Emitters</h3>
<p>Emitters are used to counter nesting of code. Should probably use constants to define emitter names. Add parameters after emitter name in <code>emit()</code> to pass to callback.</p>
<pre><code>emitter.emit('eventName', param1, param2);
emitter.on('eventName', function(param1, param2) {
    // do stuff
});
</code></pre>
<div style="height:15px;"></div>
<h2>Screenshot of Gonzo in Action</h2>
<hr style="margin=:0px; padding:0px;"/>
<a href="http://savagelook.com/blog/wp-content/uploads/2011/06/gonzo_example.jpg" rel="shadowbox[sbpost-3164];player=img;"><img src="http://savagelook.com/blog/wp-content/uploads/2011/06/gonzo_example-e1308748863352.jpg" alt="Gonzo in action" title="Gonzo in action" width="700" height="474" class="alignnone size-full wp-image-3169" /></a></p>
<h2>Summary and TODO</h2>
<hr style="margin:0px; padding:0px;"/>
RIght now what is shown here is basically the extent of <strong>Gonzo's</strong> functionality.  It's very young, but I plan to develop it aggressively.  After this post, all of my blog content will likely first be written in markdown in <strong>Gonzo</strong>.  I welcome contributors to the <a href="https://github.com/tonylukasavage/Gonzo">Gonzo Github repository</a>, but in all honesty, I'd wait a week or two before joining in.  Its likely to change A LOT over that period of time.  </p>
<p>I'll end with the current TODO list for Gonzo.  Please feel free to add your own idea in the comments.</p>
<ul>
<li>Add ability to edit and apply CSS within Gonzo</li>
<li>More robust "project" environment to allow grouping of markdown and CSS with generated HTML</li>
<li>Spell Checker, likely via <a href="http://labs.adobe.com/technologies/squiggly/">Squiggly</a></li>
<li>Major UI polish <em>(gonna need help here)</em></li>
<li>Create Mac and Windows native downloads on the <a href="https://github.com/tonylukasavage/Gonzo">Github site</a></li>
</ul>
<p><a href="http://savagelook.com/blog/actionscript3/taking-notes-on-node-js-using-gonzo">Taking Notes on Node.js using Gonzo</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3164"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/actionscript3/taking-notes-on-node-js-using-gonzo/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Repper for Blackberry Playbook with Full Source</title>
		<link>http://savagelook.com/blog/actionscript3/repper-for-blackberry-playbook-with-full-source</link>
		<comments>http://savagelook.com/blog/actionscript3/repper-for-blackberry-playbook-with-full-source#comments</comments>
		<pubDate>Wed, 23 Mar 2011 14:09:17 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[playbook]]></category>
		<category><![CDATA[repper]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=2679</guid>
		<description><![CDATA[Porting Repper earned me a free Blackberry Playbook. Have a look for yourself to see how easy it can be<p><a href="http://savagelook.com/blog/actionscript3/repper-for-blackberry-playbook-with-full-source">Repper for Blackberry Playbook with Full Source</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h2>The Code</h2>
<ul style="padding-top: 20px; padding-bottom: 20px;">
<li><a href="https://github.com/tonylukasavage/Repper-playbook" target="_blank">Repper-playbook on Github</a> &#8211; Full source code and Flash Builder &#8220;Burrito&#8221; project files</li>
</ul>
<p style="text-align: center;"><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/repper1.jpg" rel="shadowbox[sbpost-2679];player=img;"><img class="aligncenter size-large wp-image-2425" title="Repper for the Blackberry Playbook" src="http://savagelook.com/blog/wp-content/uploads/2011/02/repper1-1024x656.jpg" alt="Repper for the Blackberry Playbook" width="614" height="394" /></a></p>
<h2>The Overview</h2>
<p>I mentioned this week that if you hustle you can still get yourself a <a href="http://us.blackberry.com/developers/tablet/playbook_offer.jsp" target="_blank">free Blackberry Playbook</a>.  Just follow <a href="http://savagelook.com/blog/actionscript3/procrastinators-guide-to-a-free-blackberry-playbook">my procrastinator&#8217;s guide</a> and you could very well still have enough time to make it.  I also made posted a while ago the <a href="http://savagelook.com/blog/actionscript3/from-air-for-android-to-blackberry-playbook-in-seconds">incredibly simple process</a> of porting <a href="https://market.android.com/details?id=air.Repper" target="_blank">Repper</a>, my fitness calculator mobile app written with <a href="http://labs.adobe.com/technologies/flexsdk_hero/" target="_blank">Flex &#8220;Hero&#8221;</a>, to the Playbook.  If that wasn&#8217;t enough for you, here&#8217;s one more bit of charity to motivate to try and beat that March 31st, 2011 deadline to submit an app for a free Playbook.</p>
<p>In the <a href="https://github.com/tonylukasavage/Repper-playbook" target="_blank">Github link</a> at the top I&#8217;ve included the full source and project files for Flash Builder &#8220;Burrito&#8221; for Repper.  Yep, everything it took to make a Playbook app that was submitted and approved is included within.  Take a look, pull it down, load it up, and see how a simple, functional app can get you a free tablet.  If you are wondering what your time is worth in comparison to the effort necessary, the model that developers are likely to receive (16 GB) is being priced at $500.  Seems a fair trade for a few hours of your time.</p>
<table>
<tbody>
<tr>
<td>
<p><div id="attachment_2699" class="wp-caption aligncenter" style="width: 280px"><a href="https://github.com/tonylukasavage/Repper-playbook"><img class="size-medium wp-image-2699 " style="border: 1px solid black;" title="Repper on Github" src="http://savagelook.com/blog/wp-content/uploads/2011/03/github-270x300.jpg" border="1" alt="Repper on Github" width="270" height="300" /></a><p class="wp-caption-text">Repper on Github</p></div></td>
<td>
<p><div id="attachment_2700" class="wp-caption aligncenter" style="width: 310px"><a href="http://savagelook.com/blog/actionscript3/procrastinators-guide-to-a-free-blackberry-playbook"><img class="size-medium wp-image-2700 " style="border: 1px solid black;" title="Guide to a Free Playbook" src="http://savagelook.com/blog/wp-content/uploads/2011/03/guide-300x272.jpg" border="1" alt="Guide to a Free Playbook" width="300" height="272" /></a><p class="wp-caption-text">Guide to a Free Playbook</p></div></td>
</tr>
</tbody>
</table>
<p>So now you have a guide to getting a Blackberry Playbook app submitted as quickly as possible and full source code for a project that has already been approved.  Pair that with the fact that I&#8217;ve not heard of one functional app not being approved, you are completely out of excuses to not cash in on this offer.  Dig in and get it done.</p>
<p><a href="http://savagelook.com/blog/actionscript3/repper-for-blackberry-playbook-with-full-source">Repper for Blackberry Playbook with Full Source</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-2679"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/actionscript3/repper-for-blackberry-playbook-with-full-source/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Procrastinator&#8217;s Guide to a Free Blackberry Playbook</title>
		<link>http://savagelook.com/blog/actionscript3/procrastinators-guide-to-a-free-blackberry-playbook</link>
		<comments>http://savagelook.com/blog/actionscript3/procrastinators-guide-to-a-free-blackberry-playbook#comments</comments>
		<pubDate>Mon, 21 Mar 2011 21:28:23 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[playbook]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=2651</guid>
		<description><![CDATA[Its not rocket science.  In fact, if you are already handy with AS3 and/or Flex, its pretty damn simple.<p><a href="http://savagelook.com/blog/actionscript3/procrastinators-guide-to-a-free-blackberry-playbook">Procrastinator&#8217;s Guide to a Free Blackberry Playbook</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>This past week my fitness calculator app, <a href="http://savagelook.com/blog/actionscript3/from-air-for-android-to-blackberry-playbook-in-seconds">Repper</a>, was approved for the Blackberry App World.  In return for enduring Research in Motion&#8217;s arduous app submission process, I will be awarded with a free <a href="http://us.blackberry.com/playbook-tablet/" target="_blank">Blackberry Playbook</a> once they are officially released to the public.  Because I&#8217;m so pleased with this news, I thought I would share what I perceive as the easiest route to getting your hands on a free Playbook yourself.</p>
<p><span style="color: #ff0000;">You only have til March 31st to submit your app</span>, according to the <a href="http://us.blackberry.com/developers/tablet/playbook_offer.jsp" target="_blank">latest version of their offer</a>.  While this date has been pushed back a number of times, I suspect this may be the hard deadline.  You don&#8217;t need to be approved by the due date, you just need to have your app submitted.  You may think I&#8217;m exaggerating here, but creating the app is the easy part, submitting is the real pain in the ass.</p>
<p>So before I get into too many boring details, let me lay out the list of things you need to do in order to reduce the amount of surprise time sucks you will encounter:</p>
<ul>
<li><a href="https://appworld.blackberry.com/isvportal/signup/signupterms.seam?pageIndex=1&amp;cid=295177" target="_blank">Sign up to be a Blackberry vendor</a></li>
<li><a href="https://www.blackberry.com/SignedKeys/" target="_blank">Get your code signing keys</a></li>
<li><a href="http://us.blackberry.com/developers/tablet/adobe.jsp" target="_blank">Follow the getting started guide</a> for setting up your AS3/Flex development environment (or <a href="http://us.blackberry.com/developers/tablet/webworks.jsp" target="_blank">WebWorks</a> if that&#8217;s your thing)</li>
<li>Convert an existing AS3/Flex project or create a new app (<strong>IF YOU ONLY READ ONE SECTION, READ THIS</strong>)</li>
<li><a href="http://docs.blackberry.com/en/developers/deliverables/23959/Signing_your_application_1422721_11.jsp" target="_blank">Sign</a> and submit your app to the Blackberry App World through the <a href="https://appworld.blackberry.com/isvportal/home/login.seam?pageIndex=1&amp;cid=296029" target="_blank">vendor portal</a>.</li>
<li>Wait for approval</li>
</ul>
<p>The steps necessary are listed in a very specific order to maximize efficiency, particularly becoming a vendor and getting code signing keys.  Read the section below detailing each step to find out why.  So again, <strong>DO THE STEPS IN ORDER</strong>, it will save you time in the end.</p>
<h2>Sign up to be a Blackberry vendor</h2>
<p>This is simple enough. You just need to fill out a form with relevant personal information do that Blackberry has a record of who you are.  In the early stages of this process you actually needed to submit a notarized letter, if you were an individual and not a company, in order to complete the registration.  From what I understand this is no longer required so it should make your life a little easier.</p>
<p><span style="color: #ff0000;">Blackberry is also waiving their usual $200 registration fee for developers during this period</span>.  So whether or not you plan to hit this deadline, it may be worthwhile just to sign up and get in for free.</p>
<p>You will do this first because this process may take a few business days to complete.  They review the vendor registration submissions and Blackberry has not been terribly quick with approvals at any step in this process.  In fact, that is the most common complaint about the app submission process so far is simply how long it takes to complete.  So get this done first and don&#8217;t wait for approval to move on to the next step.</p>
<h2>Get your code signing keys</h2>
<p>This is another step that is as simple as filling out forms, but again requires Blackberry&#8217;s intervention to approve.  Also bear in mind that the code signing key you will receive will only work on one workstation once registered and cannot be transfered to another workstation.  You have to request another key is you want it to work on another workstation.  I have requested 2 keys thus far and both have taken at least 2 business days to arrive via email.</p>
<p><span style="color: #ff0000;">Like the last step, get this done now and don&#8217;t wait for the key to arrive to move on</span>.  Hopefully by the time you are ready to submit your app to the App World you&#8217;ll have received your vendor approval and signing key.</p>
<h2>Follow the Getting Started Guide</h2>
<p>I&#8217;m not going to go into a great deal of detail here because the Blackberry documentation lays it out very well.  Just follow <a href="http://us.blackberry.com/developers/tablet/adobe.jsp" target="_blank">the guide found here</a> and you&#8217;ll be fast on your way to your Blackberry Playbook &#8220;Hello, World!&#8221;.</p>
<p>One thing to keep in mind is that you must be building against the 0.9.4 SDK. I initially made the mistake of hanging on to the old 0.9.3 SDK and Blackberry has requested that I rebuild against the latest version before being able to make my app available on the App World.  Its not a huge deal, but will require you to go through the whole app update process if you don&#8217;t do it right the first time.  That said, they still extended me the offer of the free Playbook without yet having made this change.</p>
<h2>Create your app</h2>
<p>I know, I&#8217;m trivializing what sounds like a big step.  But here&#8217;s the thing: <span style="color: #ff0000;">I&#8217;ve not heard of one Playbook app that has been turned down due to perceived usefulness or quality</span>.  The only apps that I have heard being rejected are ones that actually don&#8217;t work.  This is common in the case of people trying to implement multitouch or gesture support when the simulator does not properly emulate the behavior.</p>
<p>In other words, put together a simple application that is useful to a niche group.  Or better yet, convert an existing AS3 or Flex Hero project to a Playbook app.  Check out <a href="http://savagelook.com/blog/actionscript3/from-air-for-android-to-blackberry-playbook-in-seconds">my prior post to see how I did this in literally seconds</a>.</p>
<p>For me, Repper was a no brainer.  It is a simple fitness calculator that determines your 1-15 rep max on exercises.  It was originally built using Flex Hero in Air for Android.  Its currently available on the <a href="https://market.android.com/details?id=air.Repper" target="_blank">Android Market</a> if you wanna take a look at it there.  You can see there is no rocket science.  Blackberry has no high expectations for the functionality of an app for which developers have no device.  KISS is the key factor here.  Wait til you have one of these Playbooks in your hand before you try to get really creative with it.</p>
<p>Don&#8217;t get me wrong, I&#8217;m not encouraging fart app development here.  I&#8217;m just saying that at this point in the game Blackberry is happy handing out Playbooks to competent, motivated developers.  The quality of this one app is not what they are banking on.  They are hoping that with their generous gesture that they may woo more than a handful of mobile developers to spend their time on Blackberry Playbook apps rather than iPad or Android tablets.</p>
<p>In short, no excuses.  Create a useful, simple app.  Its not that hard and you know it.</p>
<h2>Submit your app to the App World</h2>
<p>Before digging into the specifics of the submission and signing process, here&#8217;s the things you&#8217;ll need:</p>
<ul>
<li>Your signing certificate (CSJ file)</li>
<li>A less than 4000 character description of your app</li>
<li>A 480&#215;480 product image for the App World</li>
<li>At least one screenshot that is no larger than 640&#215;640</li>
<li>An 86&#215;86 PNG icon, which includes a 5 pixel transparent buffer around it.  This effectively makes the icon content 76&#215;76 or less.</li>
</ul>
<p>First you are going to sign your release build of your application using your CSJ signing certificate.  This is an intimidating and somewhat complex process.  I highly suggest picking from the choices at the bottom of their <a href="http://docs.blackberry.com/en/developers/deliverables/23959/Signing_your_application_1422721_11.jsp" target="_blank">code signing guide</a> and following them to the letter.  I personally had no problems with the workflow for signing apps through Flash Builder 4.5 &#8220;Burrito&#8221;, but I&#8217;ve heard that some people had issues.  The safest route might be to follow the command line instructions for the entire process.  Again I emphasize, follow the instructions to the letter and don&#8217;t try to frankenstein multiple guides together, it makes it harder to troubleshoot the issues.</p>
<p>After you have successfully signed your app, you just need to submit it to the App World through the <a href="https://appworld.blackberry.com/isvportal/home/login.seam?pageIndex=1&amp;cid=297207" target="_blank">vendor portal</a>. Just go to &#8220;Manage Products&#8221; and click the &#8220;Add Product&#8230;&#8221; button.  You will be walked through the steps necessary to submit your signed BAR app file.  So long as you have all the items I mentioned above in the list, and a successfully signed app, it should be pretty smooth sailing.  Finding these things out during the submission process was quite frustrating.</p>
<p>Carve out at least an hour for the above process, because it will take some time.  The code signing can be especially time consuming from the command line, but it seems to be the one sure fire way to get the app successfully signed.</p>
<p>If you followed my advice and became a vendor and requested your signing keys first, you won&#8217;t find yourself waiting for days once you&#8217;ve reached this part of the process&#8230; like I did.</p>
<h2>Wait for approval</h2>
<p>Now that you finally have your app submitted, you just have to sit back and relax&#8230; and relax&#8230;. and relax&#8230; and do your taxes&#8230; and ge your car inspected&#8230; and renew your driver&#8217;s license&#8230; you get the idea.  It takes a LONG time to get approved.  I&#8217;ve not heard of anyone getting their first app approved in under 2.5 weeks, with many waiting as long as 7.  But once again, as long as you get the app submitted before the deadline, you are still eligible for the free Playbook.</p>
<p>Once you finally do get approved you&#8217;ll receive an email telling you as much.  It may also include additional steps you must take in order for your app to be made available in the App World, like mine did.  Shortly following this, for me it was a day later, you&#8217;ll receive a congratulations notice for your free Playbook.  Included in this email should be a link to a purchase order for your Playbook with a cost of $0.00.  <span style="color: #ff0000;">I have not heard of a single case where an app was approved but the developer did not receive a free Playbook offer</span>.  Fill it out, send it in, and join us in the patient wait for the release date.</p>
<p>Hope you follow these steps and find yourself with your very own free Blackberry Playbook too!  Let me know if you happen upon success yourself.</p>
<p><a href="http://savagelook.com/blog/actionscript3/procrastinators-guide-to-a-free-blackberry-playbook">Procrastinator&#8217;s Guide to a Free Blackberry Playbook</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-2651"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/actionscript3/procrastinators-guide-to-a-free-blackberry-playbook/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>&#8220;3D in Flash&#8221; and &#8220;Away3D 3.6 Essentials&#8221;</title>
		<link>http://savagelook.com/blog/away3d/3d-in-flash-and-away3d-3-6-essentials</link>
		<comments>http://savagelook.com/blog/away3d/3d-in-flash-and-away3d-3-6-essentials#comments</comments>
		<pubDate>Tue, 01 Mar 2011 15:31:39 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[away3dlite]]></category>
		<category><![CDATA[book]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=1741</guid>
		<description><![CDATA[Here's my take on "3D in Flash" and "Away3D 3.6 Essentials", two great references to my favorite 3D Flash engine.<p><a href="http://savagelook.com/blog/away3d/3d-in-flash-and-away3d-3-6-essentials">&#8220;3D in Flash&#8221; and &#8220;Away3D 3.6 Essentials&#8221;</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>There&#8217;s been a lot of talk as of this weekend about 3D in Flash, due to Adobe&#8217;s announcement that <a href="http://labs.adobe.com/technologies/flashplatformruntimes/incubator/">Flash Player 11 is now available at Adobe Labs</a>.  Included in Flash Player is the much anticipated &#8220;Molehill&#8221; 3D API.  To get an idea of how huge of a leap in terms of rendering this is for Flash, take a look at some of <a href="http://savagelook.com/blog/away3d/adobe-molehill-3d-api-videos">these videos</a> I posted a few months back.  Or better yet, experience it yourself by playing &#8220;Zombie Tycoon&#8221;!</p>
<p><a href="http://molehill.zombietycoon.com/" target="_blank"><img class="aligncenter size-full wp-image-2470" title="zombietycoon" src="http://savagelook.com/blog/wp-content/uploads/2011/02/zombietycoon.jpg" alt="" width="520" height="318" /></a></p>
<p>Right in step with Adobe&#8217;s announcement came one from the Away3D team.  They unveiled the alpha version of <a href="http://away3d.com/away3d-4-0-alpha-release-broomstick">Away3D 4.0 &#8220;Broomstick&#8221;</a>.  This is the first version of my favorite 3D Flash engine that leverages the power of the Adobe &#8220;Molehill&#8221; API.  Check out the <a href="http://labs.adobe.com/technologies/flashplatformruntimes/incubator/features/molehill.html">Adobe Labs page for Molehill</a> to see more of what Away3D will let you do, without having to get into the nitty, gritty details of Molehill.</p>
<p>In order to get a jump start on your Away3D development, I&#8217;d highly suggest picking up one (or both, like me) of these books: &#8220;<a href="http://www.amazon.com/gp/product/1430225416?ie=UTF8&amp;tag=httpsavagelco-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430225416">The Essential Guide to 3D in Flash</a>&#8221; and &#8220;<a href="http://www.amazon.com/gp/product/184951206X?ie=UTF8&amp;tag=httpsavagelco-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=184951206X">Away3D 3.6 Essentials</a>&#8220;.  Both are great guides to getting started with Away3D,  as well as 3D graphics in Flash in general.  While no longer the latest and greatest, they will undoubtedly continue to give great insight for aspiring Away3D developers.</p>
<p><a href="http://away3d.com" target="_blank"><img class="aligncenter size-full wp-image-2480" title="Away3D 4.0 &quot;Broomstick&quot;" src="http://savagelook.com/blog/wp-content/uploads/2011/02/broomstick-splash-e1298993088737.jpg" alt="Away3D 4.0 &quot;Broomstick&quot;" width="615" height="189" /></a></p>
<p>As these are both great texts, I&#8217;m not going to put their attributes side by side and compare every detail.  Instead I&#8217;m just going to point out the highlights of each.  You really can&#8217;t go wrong with either.</p>
<h2><strong>&#8220;Away3D 3.6 Essentials&#8221; Highlights</strong></h2>
<ul>
<li>The clearest highlight is without question the <span style="color: #ff0000;">choice of technical reviewer&#8230; Tony Lukasavage (see also, me).</span></li>
<li>Matthew Casperson is the author and his <a href="http://www.brighthub.com/hubfolio/matthew-casperson.aspx" target="_blank">brighthub.com work</a> was the home for some of my earliest lessons in Away3D. Great demos and tutorials.</li>
<li>Gives an extremely detailed look at the objects in Away3D, even laying out the initialization objects for many of the classes.  May not sound like a big deal, but Away3D makes heavy use of init objects for class constructors.  The only way to know how to use them without a reference is to go digging through the source.</li>
<li>Answers one of the most frequently asked questions in Away3D with a simple chart: Which lights affect which materials?</li>
<li>While both books discuss and explain model animation, this book delves into the sometimes baffling territory of how to properly export rigged models from popular modeling and animation program for use with Away3D.  In most cases its not as simple or intuitive as you might expect and this little extra help can go a long way.</li>
<li>This book branches out a little further than &#8220;3D in Flash&#8221;, discussing topics like particle engines, pixelbender shaders, and postprocessing as they pertain to Away3D.</li>
</ul>
<p>&nbsp;</p>
<h2>&#8220;The Essential Guide to 3D in Flash&#8221; Highlights</h2>
<ul>
<li>The authors are none other than <a href="http://www.infiniteturtles.co.uk/blog/" target="_blank">Rob Bateman</a> and <a href="http://richardolsson.se/" target="_blank">Richard Olsson</a>, cofounder and core developer for Away3D.  There&#8217;s no disputing that getting the information from the crafters of the engine cannot be beat.</li>
<li>Includes set up instructions for <a href="https://www.cleverbridge.com/429/?affiliate=15006&amp;scope=cart&amp;cart=71011" target="_blank">FDT</a>.</li>
<li>While &#8220;Away3D 3.6 Essentials&#8221; gives a brief look at the differences between point, directional, and ambient lights, &#8220;3D in Flash&#8221; gives a very detailed description of each.  Paragraphs of information and easy to grasp visuals paint a much more clear picture of just how light works.</li>
<li>Contains a great example of how you can programmatically animate rigged models.  In some cases even when you follow all the rules, imported animations don&#8217;t work quite right.  This valuable example lets you take the animation into your own hands.</li>
</ul>
<p>I could go on with more, but beyond this, its just splitting hairs.  Both books are so good it&#8217;s a great choice either way.</p>
<p>If you are serious about picking up Away3D for 3D Flash development and want the quickest path to success, either one will do just fine.  Just be sure to follow it all and actually code along with the examples.  That&#8217;s where a lot of the real value in these books lies.  And be sure you make it to the end where possibly the most important topic lies for each book: performance.  But then again, with the coming of &#8220;Molehill&#8221;, those performance concerns might not be quite so critical anymore.</p>
<p><a href="http://savagelook.com/blog/away3d/3d-in-flash-and-away3d-3-6-essentials">&#8220;3D in Flash&#8221; and &#8220;Away3D 3.6 Essentials&#8221;</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-1741"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/away3d/3d-in-flash-and-away3d-3-6-essentials/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From Air for Android to Blackberry Playbook in seconds</title>
		<link>http://savagelook.com/blog/actionscript3/from-air-for-android-to-blackberry-playbook-in-seconds</link>
		<comments>http://savagelook.com/blog/actionscript3/from-air-for-android-to-blackberry-playbook-in-seconds#comments</comments>
		<pubDate>Mon, 21 Feb 2011 16:19:49 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flash Builder 4]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[playbook]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=2418</guid>
		<description><![CDATA[How Adobe Air, fluid layouts, and Flex MXML skinning led to an effortless port from Android to the Blackberry Playbook<p><a href="http://savagelook.com/blog/actionscript3/from-air-for-android-to-blackberry-playbook-in-seconds">From Air for Android to Blackberry Playbook in seconds</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h1><span style="font-weight: bold; font-size: 16px;">Overview</span></h1>
<p style="text-align: center;"><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/repper1.jpg" rel="shadowbox[sbpost-2418];player=img;"><img class="aligncenter size-large wp-image-2425" title="Repper for the Blackberry Playbook" src="http://savagelook.com/blog/wp-content/uploads/2011/02/repper1-1024x656.jpg" alt="Repper for the Blackberry Playbook" width="614" height="394" /></a></p>
<p style="text-align: left;"><strong>NOTE</strong>: all source code is available for <a href="https://github.com/tonylukasavage/Repper" target="_blank">Repper at Github</a>.</p>
<p style="text-align: left;">The above image shows my <a href="http://savagelook.com/blog/actionscript3/repper-my-first-flex-hero-mobile-app" target="_self">Air for Android app Repper</a> ported over to the Blackberry Playbook.  The most remarkable thing about this port? It literally took about 60 seconds to complete!  Here is the shockingly simple, comprehensive list of steps I took to accomplish this:</p>
<ol>
<li>Create a new Flex mobile project in <a href="http://labs.adobe.com/technologies/flashbuilder_burrito/" target="_blank">Flash Builder &#8220;Burrito&#8221;</a> to <a href="http://docs.blackberry.com/en/developers/deliverables/25068/Install_the_BlackBerry_Tablet_SDK_1347129_11.jsp" target="_blank">target the Blackberry Playbook</a></li>
<li>Copied the project files from my original Repper project to the new project</li>
<li>Set up the <a href="http://docs.blackberry.com/en/developers/deliverables/25068/Run_app_FB45_1397696_11.jsp" target="_blank">Playbook simulator run settings</a> in my new project</li>
<li>Clicked &#8220;Run&#8221; and voila, Repper on the Playbook!</li>
</ol>
<p style="text-align: left;">All components scaled properly.  All layouts fit to the available screen space appropriately.  All orientation transitions performed as expected.  How was this achieved without having to write a single line of device specific code?  It comes down to 3 simple things: Adobe Air, fluid layouts, and vector graphics skinning via Flex MXML.</p>
<h1><span style="font-weight: bold; font-size: 16px;">Adobe Air</span></h1>
<p style="text-align: left;">Blackberry&#8217;s use of the <a href="http://us.blackberry.com/developers/tablet/adobe.jsp" target="_blank">Adobe Air SDK for its Playbook development</a> lets Flash/Air/Flex/AS3 developers leverage existing expertise and code to create apps.  The Air SDK for the Playbook also makes available QNX components to give Playbook apps a Blackberry look and feel.  You can choose from either.  This way Flex developers can use their existing paradigms and pure AS3 developers can make use of Blackberry&#8217;s QNX components.  You can even use both as Renaun Erickson details in <a href="http://renaun.com/blog/2010/12/using-mxml-with-qnx-ui-components-for-the-playbook/" target="_blank">this post</a>.</p>
<p style="text-align: left;">For me the big win was taking Repper, a <a href="http://labs.adobe.com/technologies/flexsdk_hero/" target="_blank">Flex &#8220;Hero&#8221; </a> app for Android, and porting it directly, unchanged into a working Playbook app.  The Playbook Adobe Air SDK supports Flex &#8220;Hero&#8221; so everything just worked right out of the gate.  That&#8217;s the kind of portability that lets an independent developer be extremely productive.</p>
<h1><span style="font-weight: bold; font-size: 16px;">Fluid Layout</span></h1>
<p style="text-align: left;">Using fluid layouts with little to no defined pixel dimensions is key to writing a multi-screen app.  Take a look at this excerpt from the main <a href="https://github.com/tonylukasavage/Repper/blob/master/src/views/RepperHome.mxml" target="_blank">RepperHome.mxml view</a>.</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;s:HGroup</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;landscapeGroup&quot;</span> <span style="color: #000066;">includeIn</span>=<span style="color: #ff0000;">&quot;landscape&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span></span>
<span style="color: #009900;">			  <span style="color: #000066;">paddingTop</span>=<span style="color: #ff0000;">&quot;{this.height*0.03}&quot;</span> <span style="color: #000066;">paddingBottom</span>=<span style="color: #ff0000;">&quot;{this.height*0.03}&quot;</span> <span style="color: #000066;">paddingLeft</span>=<span style="color: #ff0000;">&quot;{this.height*0.03}&quot;</span></span>
<span style="color: #009900;">			  <span style="color: #000066;">paddingRight</span>=<span style="color: #ff0000;">&quot;{this.height*0.03}&quot;</span> <span style="color: #000066;">gap</span>=<span style="color: #ff0000;">&quot;{this.height*0.03}&quot;</span> <span style="color: #000066;">verticalAlign</span>=<span style="color: #ff0000;">&quot;middle&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:SkinnableContainer</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;landscapeInput&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;36%&quot;</span> <span style="color: #000066;">skinClass</span>=<span style="color: #ff0000;">&quot;RepperInputSkin&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:layout<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:VerticalLayout</span> <span style="color: #000066;">paddingTop</span>=<span style="color: #ff0000;">&quot;{this.height*0.06}&quot;</span> <span style="color: #000066;">paddingLeft</span>=<span style="color: #ff0000;">&quot;{this.height*0.06}&quot;</span> </span>
<span style="color: #009900;">								  <span style="color: #000066;">paddingRight</span>=<span style="color: #ff0000;">&quot;{this.height*0.06}&quot;</span> <span style="color: #000066;">paddingBottom</span>=<span style="color: #ff0000;">&quot;{this.height*0.06}&quot;</span> </span>
<span style="color: #009900;">								  <span style="color: #000066;">gap</span>=<span style="color: #ff0000;">&quot;{landscapeInput.height*0.04}&quot;</span> <span style="color: #000066;">horizontalAlign</span>=<span style="color: #ff0000;">&quot;right&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:layout<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:HGroup</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #000066;">verticalAlign</span>=<span style="color: #ff0000;">&quot;middle&quot;</span> <span style="color: #000066;">gap</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:Label</span> <span style="color: #000066;">text</span>=<span style="color: #ff0000;">&quot;Weight&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;65%&quot;</span> <span style="color: #000066;">color</span>=<span style="color: #ff0000;">&quot;0x000000&quot;</span> <span style="color: #000066;">fontWeight</span>=<span style="color: #ff0000;">&quot;bold&quot;</span> <span style="color: #000066;">fontSize</span>=<span style="color: #ff0000;">&quot;32&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:TextInput</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;35%&quot;</span> <span style="color: #000066;">text</span>=<span style="color: #ff0000;">&quot;{inputWeight}&quot;</span> <span style="color: #000066;">keyUp</span>=<span style="color: #ff0000;">&quot;onWeightKeyUp(event)&quot;</span> <span style="color: #000066;">restrict</span>=<span style="color: #ff0000;">&quot;0-9.&quot;</span> </span>
<span style="color: #009900;">							 <span style="color: #000066;">contentBackgroundColor</span>=<span style="color: #ff0000;">&quot;0xffffff&quot;</span> <span style="color: #000066;">color</span>=<span style="color: #ff0000;">&quot;0x000000&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:HGroup<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:HGroup</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #000066;">verticalAlign</span>=<span style="color: #ff0000;">&quot;middle&quot;</span> <span style="color: #000066;">gap</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:Label</span> <span style="color: #000066;">text</span>=<span style="color: #ff0000;">&quot;# of reps&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;65%&quot;</span> <span style="color: #000066;">color</span>=<span style="color: #ff0000;">&quot;0x000000&quot;</span> <span style="color: #000066;">fontWeight</span>=<span style="color: #ff0000;">&quot;bold&quot;</span> <span style="color: #000066;">fontSize</span>=<span style="color: #ff0000;">&quot;32&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:TextInput</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;35%&quot;</span> <span style="color: #000066;">text</span>=<span style="color: #ff0000;">&quot;{inputReps}&quot;</span> <span style="color: #000066;">keyUp</span>=<span style="color: #ff0000;">&quot;onRepsKeyUp(event)&quot;</span> <span style="color: #000066;">restrict</span>=<span style="color: #ff0000;">&quot;0-9&quot;</span></span>
<span style="color: #009900;">							 <span style="color: #000066;">contentBackgroundColor</span>=<span style="color: #ff0000;">&quot;0xffffff&quot;</span> <span style="color: #000066;">color</span>=<span style="color: #ff0000;">&quot;0x000000&quot;</span> <span style="color: #000066;">focusIn</span>=<span style="color: #ff0000;">&quot;textinput1_focusInHandler(event)&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:HGroup<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:Button</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">&quot;Rep It&quot;</span> <span style="color: #000066;">click</span>=<span style="color: #ff0000;">&quot;recalculate();&quot;</span> <span style="color: #000066;">chromeColor</span>=<span style="color: #ff0000;">&quot;#111111&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:SkinnableContainer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;local:VDataGroup</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;32%&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #000066;">dataProvider</span>=<span style="color: #ff0000;">&quot;{repValues1}&quot;</span> <span style="color: #000066;">itemRenderer</span>=<span style="color: #ff0000;">&quot;RepperEntry&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;local:VDataGroup</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;32%&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #000066;">dataProvider</span>=<span style="color: #ff0000;">&quot;{repValues2}&quot;</span> <span style="color: #000066;">itemRenderer</span>=<span style="color: #ff0000;">&quot;RepperEntry&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:HGroup<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p style="text-align: left;">If you look at every component and container in this chunk of Flex MXML you&#8217;ll notice that no defined pixel dimensions are used.  Every component&#8217;s size is determined using percentages or data bindings.  I&#8217;m not going to lie, specifying dimensions in this manner will take more time and requires a bit of trial and error to get right.  It helps if you do it with the expectation that another, dissimilar device will be using this same layout in the future.  I did, and in this case the little bit of extra forethought paid off huge in terms of portability.</p>
<p>Because of design via fluid layouts, Repper appears properly in both portrait and landscape orientation on the Blackberry Playbook with no additional effort.</p>
<h1><span style="font-weight: bold; font-size: 16px;">Vector Graphics via Flex MXML Skinning</span></h1>
<p style="text-align: left;">The final factor that made Repper such a breeze to port to the Playbook was Flex Hero&#8217;s ability to create vector graphics via Flex MXML.  By utilizing this capability you can create skins for your components that scale as the app scales.  No external artwork of any kind is necessary.  While this is not ideal for designers or highly stylized apps, a developer like me loves it.  </p>
<p>Here&#8217;s another excerpt from Repper.  This time it shows how I used fluid dimensions once again to create vector graphic skins for my <a href="https://github.com/tonylukasavage/Repper/blob/master/src/RepperEntry.mxml" target="_blank">RepperEntry</a> components via the <a href="https://github.com/tonylukasavage/Repper/blob/master/src/RepperEntrySkin.mxml" target="_blank">RepperEntrySkin.mxml class</a></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;s:Rect</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;background&quot;</span> <span style="color: #000066;">x</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">y</span>=<span style="color: #ff0000;">&quot;{this.height/6}&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;66%&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #000066;">radiusX</span>=<span style="color: #ff0000;">&quot;10&quot;</span> <span style="color: #000066;">radiusY</span>=<span style="color: #ff0000;">&quot;10&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:filters<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:DropShadowFilter</span> <span style="color: #000066;">blurX</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">blurY</span>=<span style="color: #ff0000;">&quot;16&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:filters<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:stroke<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:SolidColorStroke</span> <span style="color: #000066;">weight</span>=<span style="color: #ff0000;">&quot;3&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:stroke<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:fill<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:LinearGradient</span> <span style="color: #000066;">rotation</span>=<span style="color: #ff0000;">&quot;-90&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:GradientEntry</span> <span style="color: #000066;">color</span>=<span style="color: #ff0000;">&quot;#bbbbbb&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:GradientEntry</span> <span style="color: #000066;">color</span>=<span style="color: #ff0000;">&quot;#ffffff&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:LinearGradient<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:fill<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:Rect<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:Rect</span> <span style="color: #000066;">x</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">y</span>=<span style="color: #ff0000;">&quot;{this.height/6}&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;66%&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;60%&quot;</span> <span style="color: #000066;">radiusX</span>=<span style="color: #ff0000;">&quot;10&quot;</span> <span style="color: #000066;">radiusY</span>=<span style="color: #ff0000;">&quot;10&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:filters<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:DropShadowFilter</span> <span style="color: #000066;">blurX</span>=<span style="color: #ff0000;">&quot;8&quot;</span> <span style="color: #000066;">blurY</span>=<span style="color: #ff0000;">&quot;8&quot;</span> <span style="color: #000066;">angle</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:filters<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:stroke<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:SolidColorStroke</span> <span style="color: #000066;">weight</span>=<span style="color: #ff0000;">&quot;3&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:stroke<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:fill<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #808080; font-style: italic;">&lt;!--- @private --&gt;</span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:LinearGradient</span> <span style="color: #000066;">rotation</span>=<span style="color: #ff0000;">&quot;-90&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:GradientEntry</span> <span style="color: #000066;">color</span>=<span style="color: #ff0000;">&quot;#000000&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;s:GradientEntry</span> <span style="color: #000066;">color</span>=<span style="color: #ff0000;">&quot;#444444&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:LinearGradient<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #808080; font-style: italic;">&lt;!-- &lt;s:SolidColor color=&quot;#333333&quot;/&gt; --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:fill<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/s:Rect<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>As you can see, percentages and binding are used to create skins for my components that are appropriately scaled regardless of the dimensions of the device.  Not having to create skin resources for each device and orientation is a tremendous time saver.  Especially for someone like myself who has no patience or talent for it.  </p>
<h1><span style="font-weight: bold; font-size: 16px;">Summary</span></h1>
<p>Lesson for the day: with a little forethought and a penchant for Adobe Air, magic can happen.  OK, maybe not magic, but you&#8217;ll have more time to explore the possibility of creating magic now that you won&#8217;t be wasting it on porting your mobile apps.  Yes, I know, I&#8217;ve griped a bit lately about Flex Hero on <a href="http://twitter.com/#!/tonylukasavage" target="_blank">twitter</a>, but there are undoubtedly some things it does very well.  </p>
<p>In fact, if you think about it, anyone that openly supports Adobe and their efforts to create a viable cross-platform mobile development environment has done very well with it.  I&#8217;m trying to think of who isn&#8217;t supporting it?  Who&#8217;s at the &#8220;core&#8221; of the issue?  I feel like day to day they are trying to keep the doctor away.  Supporting Adobe should be as appealing as American pie.  Oh well, hopefully some day they will have their thinking jolted like Isaac Newton did from a falling piece of fruit.  </p>
<p><a href="http://savagelook.com/blog/actionscript3/from-air-for-android-to-blackberry-playbook-in-seconds">From Air for Android to Blackberry Playbook in seconds</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-2418"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/actionscript3/from-air-for-android-to-blackberry-playbook-in-seconds/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Good, The Bad, and The Ugly of Flex &#8220;Hero&#8221;</title>
		<link>http://savagelook.com/blog/actionscript3/the-good-the-bad-and-the-ugly-of-flex-hero</link>
		<comments>http://savagelook.com/blog/actionscript3/the-good-the-bad-and-the-ugly-of-flex-hero#comments</comments>
		<pubDate>Tue, 08 Feb 2011 15:50:09 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=2265</guid>
		<description><![CDATA[The good, the bad, and the ugly of mobile development with Flex "Hero" and Air for Android<p><a href="http://savagelook.com/blog/actionscript3/the-good-the-bad-and-the-ugly-of-flex-hero">The Good, The Bad, and The Ugly of Flex &#8220;Hero&#8221;</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h1><span style="font-weight: bold; font-size: 16px;">Disclaimer</span></h1>
<p>This article is from the perspective of someone whose AS3 and Flex experience is measured in months.  This is meant to show those who aren&#8217;t long time Flash developers what they can expect with <a href="http://labs.adobe.com/technologies/flexsdk_hero/" target="_blank">Flex &#8220;Hero&#8221;</a>, <a href="http://labs.adobe.com/technologies/flashbuilder_burrito/" target="_blank">Flash Builder &#8220;Burrito&#8221;</a>, and <a href="http://www.adobe.com/products/air/" target="_blank">Air for Android</a>.  But I didn&#8217;t go in alone, the Adobe community is full of smart and helpful people, just check my <a href="http://twitter.com/#!/tonylukasavage/following" target="_blank">Twitter follower list</a> to see some of the names that helped.  Particular thanks to <a href="http://twitter.com/#!/killerspaz" target="_blank">@killerspaz</a>, <a href="http://twitter.com/#!/jesterxl" target="_blank">@jesterxl</a>, and <a href="http://twitter.com/#!/jonbcampos" target="_blank">@jonbcampos</a>.</p>
<h1><span style="font-weight: bold; font-size: 16px;">Overview</span></h1>
<p>Recently I wrapped up my first Flex &#8220;Hero&#8221; Air for Android app, <a href="https://market.android.com/details?id=air.Repper" target="_blank">Repper</a>.  You can read my <a href="http://savagelook.com/blog/?p=2215" target="_blank">earlier blog post</a> about it to download, get source code, or just learn more about it.  I learned a lot about mobile development and deployment, but I want to talk specifically about Flex &#8220;Hero&#8221; and Flash Builder &#8220;Burrito&#8221;.  Here&#8217;s this developer&#8217;s experience and perspective with using Adobe&#8217;s workflow for mobile development.</p>
<h1><span style="font-weight: bold; font-size: 16px;">The Good</span></h1>
<ul>
<li> <strong>The Flash Builder &#8220;Burrito&#8221; workflow</strong> for building Android apps is fantastic.  It was a breeze to setup a basic project and be testing it live on my Droid X.  Some of the specific things I really liked were:
<ul>
<li>Pre-built templates for projects, components, skins, item renderers, and more speed up the development process</li>
<li>Built-in emulation for various Android devices</li>
<li>Testing on a device is very easy to set up</li>
<li>Managing Flex states through the Design View can be helpful in visualing layouts</li>
<li>Offers the familiarity and plugins of Eclipse</li>
</ul>
</li>
<li><strong>ViewNavigator and View</strong> make navigating through applications using multiple views simple.  Using simple functions like pushView() and popView() you can move through your application and pass data with ease.  Check out these posts for a more in depth look at this powerful and intuitive interface:
<ul>
<li><strong>Mihia Corlan</strong> &#8211; <a href="http://corlan.org/2011/01/12/understanding-flex-mobile-views-and-viewnavigator/" target="_blank">Understanding Flex Mobile View and ViewNavigator</a></li>
<li><strong>Brian Rinaldi</strong> &#8211; <a href="http://www.remotesynthesis.com/post.cfm/passing-data-across-views-in-flex-mobile" target="_blank">Passing Data Across Views in Flex Mobile</a></li>
</ul>
<p><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/views.jpg" rel="shadowbox[sbpost-2265];player=img;"><img class="aligncenter size-full wp-image-2283" title="ViewNavigator" src="http://savagelook.com/blog/wp-content/uploads/2011/02/views.jpg" alt="ViewNavigator" width="554" height="311" /></a></li>
<li><strong>PersistenceManager</strong> alleviates the hassle of trying to manage data between view states by using Local Shared Objects. Even when your mobile OS decides to close your app for memory or power shortages, the PersistenceManager will preserve your designated data.  Check Jonathan Campos&#8217;s post on it for more details: <a href="http://www.unitedmindset.com/jonbcampos/2010/11/01/flex-4-5-persistencemanager/" target="_blank">Flex 4.5 PersistenceManager</a></li>
<li><strong>Flex 4 skinning</strong> is pretty damn nice, especially for someone like me who is about 95% developer, 5% designer.  Using MXML and AS3 you can create design and graphics for your components, keeping them separate from your UI&#8217;s layout and logic.  This means you can effectively create vector skins using the AS3 drawing classes.  No more importing images just to create gradients and rounded corners.  Not as big a win for designers, but the pure developers out there will love this. Check out <strong>Ryan Frishberg&#8217;s</strong> article for more details: <a href="http://www.adobe.com/devnet/flex/articles/flex4_skinning.html" target="_blank">Introducing skinning in Flex 4</a>.  The screenshot showing Repper below highlights entirely programmatic design.</li>
<p style="text-align: left;"><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/landscape2.png" rel="shadowbox[sbpost-2265];player=img;"><img class="aligncenter size-full wp-image-2286" title="Repper with Flex 4 Skinning" src="http://savagelook.com/blog/wp-content/uploads/2011/02/landscape2.png" alt="Repper with Flex 4 Skinning" width="410" height="230" style="border:1px solid #000000;"/></a></p>
<li><strong>Multiscreen development</strong> potential is very appealing and Adobe is working to grow it further.  Christian Cantrell&#8217;s demo video below shows what Adobe Air is capable of in terms of &#8220;code once, deploy everywhere.&#8221;  Android, iPhone, iPad, Blackberry Playbook, Desktop, and web are all valid targets for your single code base.  While this is very exciting, it is also very young.  Take this all with a grain of mobile salt as this topic shows up again in the &#8220;Ugly&#8221; section.</li>
<p><iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/22vicDlzmkI" frameborder="0" allowfullscreen></iframe></p>
<h1><span style="font-weight: bold; font-size: 16px;">The Bad</span></h1>
<ul>
<li><strong>Lack of native component support</strong> can be a deal breaker for some people building mobile apps.  Its not for me nor for lots of people who are comfortable building their own components, but many want the native experience.  But all hope is not lost with the following AS3 libraries available that emulate native components:</li>
<table>
<tr>
<td style="vertical-align:middle; text-align:center;">
<a href="http://savagelook.com/blog/wp-content/uploads/2011/02/as3_iphone_components_small.jpg" rel="shadowbox[sbpost-2265];player=img;"><img src="http://savagelook.com/blog/wp-content/uploads/2011/02/as3_iphone_components_small-300x194.jpg" alt="" title="as3_iphone_components_small" width="300" height="194" class="aligncenter size-medium wp-image-2301" style="vertical-align:center;"/></a><br /><strong>Nick Jonas</strong> &#8211; <a href="http://code.google.com/p/as3iphonecomponents/" target="_blank">as3iphonecomponents</a></td>
<td style="vertical-align:middle; text-align:center;"><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/1959316ym.png" rel="shadowbox[sbpost-2265];player=img;"><img src="http://savagelook.com/blog/wp-content/uploads/2011/02/1959316ym-189x300.png" alt="" title="1959316ym" width="189" height="300" class="aligncenter size-medium wp-image-2302" /></a><br /><strong>Kevin Hoyt</strong> &#8211; <a href="http://xperiments.es/blog/en/as3-android-flash-components/" target="_blank">android-components</a></td>
</tr>
</table>
<li><strong>Flex &#8220;Hero&#8221; is missing some core components</strong> that mobile developers will be expecting to be present. I for one was not expecting to have to build a modal select list from scratch.  Unfortunately, though, Flex &#8220;Hero&#8221; does not contain the mobile equivalent of a combobox.  You can create it with their scrollable List component paired with a semi-transparent background, but it would be nice to have this out of the box.  Other notable absentees are sliders and tabbed layouts.</li>
<li><strong>Not all native APIs are supported.</strong>  While this should be expected in a cross platform framework, it can sometimes lead to unexpected roadblocks.  In my case, I have only numeric input in my app.  I wanted to default the soft keyboard to the numeric keyset.  Unfortunately this is not possible in Air for Android.  It takes some AS3 parlor tricks just to keep the soft keyboard closed when you don&#8217;t want it open on a TextInput focus.  There&#8217;s even more to worry about with Apple development, but I&#8217;ll mention that in the &#8220;Ugly&#8221; section.</li>
<li><strong>Simple things can be complicated.</strong> Take for example closing an app when a user leaves with the back button.  Seems easy enough, but it takes 3 event handlers to do it properly and even this method is <a href="http://blog.everythingflex.com/2010/10/13/exiting-an-air-on-android-application/" target="_blank">not without its problems</a>.  Check out the code I used below, thanks to <a href="http://www.flashrealtime.com/tip-close-your-android-air-app-on-back-button/" target="_blank">Tom Krcha</a>:

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">protected <span style="color: #000000; font-weight: bold;">function</span> mobileapplication1_creationCompleteHandler<span style="color: #66cc66;">&#40;</span>event:FlexEvent<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><span style="color: #0066CC;">Capabilities</span>.<span style="color: #006600;">cpuArchitecture</span>==<span style="color: #ff0000;">&quot;ARM&quot;</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ACTIVATE</span>, handleActivate, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
		NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">DEACTIVATE</span>, handleDeactivate, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
		NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_DOWN</span>, handleKeys, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handleActivate<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
	NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">systemIdleMode</span> = SystemIdleMode.<span style="color: #006600;">KEEP_AWAKE</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handleDeactivate<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
	NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">exit</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handleKeys<span style="color: #66cc66;">&#40;</span>event:KeyboardEvent<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>event.<span style="color: #006600;">keyCode</span> == Keyboard.<span style="color: #006600;">BACK</span><span style="color: #66cc66;">&#41;</span>
		NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">exit</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

</li>
<li><strong>Debugging on a device can be tricky.</strong>  So tricky in fact that I never got it working.  In all fairness, I didn&#8217;t try to diagnose it any further after the getting the initial error because the app I was building was so simple.  But the fact remains that it didn&#8217;t work out of the box for me.  Maybe your experience will be different and I welcome anyone to call me an idiot and tell me what I did wrong.</li>
</ul>
<h1><span style="font-weight: bold; font-size: 16px;">The Ugly</span></h1>
<ul>
<li><strong>Universal mobile device support is minimal at this point.</strong> Android is covered pretty well up through the Air 2.5 SDK, but iPhone/iPad only support Air up to version 2.0.2 via the <a href="http://labs.adobe.com/technologies/packagerforiphone/" target="_blank">Adobe Packager for iPhone</a>.  This leaves out key APIs like camera support and video/sound capture, not to mention the bevy of <a href="http://labs.adobe.com/wiki/index.php/Packager_for_iPhone:Release_Notes" target="_blank">bugs and gotchas</a> that you have to watch out for.  The workflow for deploying apps to iOS devices with the packager is also no picnic.  While the Blackberry Playbook is proudly supporting the Adobe developer community, there&#8217;s been no official announcement, though there has been mention, of Flash or Air being on Blackberry smart phones.
<p>Long and short, you aren&#8217;t going to be hitting the widest part of the market when compared to other mobile frameworks like Appcelerator or PhoneGap.  And even if you do, I&#8217;ve experienced first hand how users can be put off by having to install Adobe Air on their phone for the sake of an app.  <span style="color:#ff0000;">Until Air for mobile devices support becomes more common place, it may be viewed as an unnecessary evil by many mobile users</span>.
</li>
<li><strong>Performance can be a problem for even the simplest apps.</strong>  This for me is the most critical area that needs to be improved before people will take Air seriously as a mobile framework.  Simple things like view transitions, scrolling, button interactions, etc&#8230; have a noticeable sluggishness that users won&#8217;t stand for.  Even the cream of the crop among Flex Hero apps, like <a href="http://www.unitedmindset.com/jonbcampos/" target="_blank">Jonathan Campos&#8217;s</a> nearly 100K user base NetFlix <a href="https://market.android.com/details?id=air.com.unitedmindset.QueueManager" target="_blank">Queue Manager</a>, is not immune to these problems.  Though a majority of the comments are very complimentary, the few detractors have a very common message: we don&#8217;t want to install Adobe Air and we find it slower than native apps.  Are these types of comments the whole story?  Absolutely not.  Does that mean they can be ignored?  Absolutely not.  The vocal complainers, though not always very helpful, can sometimes spur the necessary advances that can take a product to the next level.
</li>
</ul>
<h1><span style="font-weight: bold; font-size: 16px;">Summary</span></h1>
<p>Hey Adobe, fix the ugly, stay on top of the bad, and keep highlighting the good.</p>
<p>While I am far from swearing off AS3 and Flex development for mobile devices, I think Adobe has a long way to go before it will be able to bring in a significant amount of non-Adobe developers.  Their mobile platform and workflow seems as though it caters entirely to existing Flash and Flex developers.  There just doesn&#8217;t seem to be an effort to bring in new blood from the outside.  And if that remains the same, Appcelerator, PhoneGap, Sensa Touch, jQuery Mobile, or whatever other platform that comes next and engages larger cores of developers will take away valuable relevance in this land grab for mobile supremacy.</p>
<p><a href="http://savagelook.com/blog/actionscript3/the-good-the-bad-and-the-ugly-of-flex-hero">The Good, The Bad, and The Ugly of Flex &#8220;Hero&#8221;</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-2265"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/actionscript3/the-good-the-bad-and-the-ugly-of-flex-hero/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Repper: My first Flex Hero mobile app</title>
		<link>http://savagelook.com/blog/actionscript3/repper-my-first-flex-hero-mobile-app</link>
		<comments>http://savagelook.com/blog/actionscript3/repper-my-first-flex-hero-mobile-app#comments</comments>
		<pubDate>Mon, 07 Feb 2011 14:02:35 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[repper]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=2215</guid>
		<description><![CDATA[Repper, my first Flex "Hero" based Android app, calculates your 1-10 rep max on any lift.<p><a href="http://savagelook.com/blog/actionscript3/repper-my-first-flex-hero-mobile-app">Repper: My first Flex Hero mobile app</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h1><span style="font-weight: bold; font-size: 16px;">Get Repper</span></h1>
<table style="width: 100%;">
<tbody>
<tr>
<td style="vertical-align: top;">→ Download Repper from its <a href="https://market.android.com/details?id=air.Repper" target="_blank">Android Market page</a><br />
→ Full project source code available at <a href="https://github.com/tonylukasavage/Repper-Flex" target="_blank">Github</a><br />
→ Follow the conversation on <a href="http://twitter.com/#!/search/%23repper" target="_blank">Twitter (#Repper)</a><br />
→ Scan the QR code below to download from your mobile device<br />
<a href="http://savagelook.com/blog/wp-content/uploads/2011/02/repper-qr.png" rel="shadowbox[sbpost-2215];player=img;"><img class="size-full wp-image-2237" title="Repper on the Android Market" src="http://savagelook.com/blog/wp-content/uploads/2011/02/repper-qr.png" alt="Repper on the Android Market" width="150" height="150" align="center" /></a></td>
<td style="text-align: center;"><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/portrait.png" rel="shadowbox[sbpost-2215];player=img;"><img class="size-medium wp-image-2220" style="border: 1px solid #000000;" title="Repper" src="http://savagelook.com/blog/wp-content/uploads/2011/02/portrait-168x300.png" alt="Repper" width="121" height="216" /></a></td>
</tr>
</tbody>
</table>
<h1><span style="font-weight: bold; font-size: 16px;">Overview</span></h1>
<p>Repper is an <a href="http://labs.adobe.com/technologies/flexsdk_hero/" target="_blank">Adobe Flex &#8220;Hero&#8221;</a> based Android app that calculates your 1-10 rep max on any lift in the gym.  For example, you might have a workout that requires you to know your 5 rep max on the bench press, but you you only know that you can lift 275 for 1 rep. Using Repper you can get a very close approximation based on estimation methods developed by fitness specialists. Just punch in 275 for the weight and 1 for your reps and Repper will return your 2-10 rep weight estimations.</p>
<p>The application itself isn&#8217;t that exciting, I know.  The idea here was to see what the entire development and deployment cycle was like for Air for Android development.  What&#8217;s easy with Flex/AS3/Air?  What&#8217;s hard?  What are the limitations? What are the annoyances?  Where does it excel?  Where is native development or even another mobile framework better suited?  As it turns out, I generated a lot of answers to those questions.  So many so as to merit their own blog post in the near future.</p>
<p>The other concept I was testing here was multi-screen development (inspired by <a href="http://blogs.adobe.com/cantrell/archives/2010/04/one_application_five_screens.html" target="_blank">Christian Cantrell&#8217;s work</a>).  If you peruse the source code you&#8217;ll notice that all layout and skinning was done with a liquid layout in mind.  This means once I get the chance, <strong>Repper should be able to be deployed to other mobile devices like iPhone, iPads, Android tablets, or the Blackberry Playbook without much additional effort</strong>.</p>
<p>It was an interesting project and one from which I learned a great deal.  in addition to the blog post on the ups and downs of Flex &#8220;Hero&#8221; that I alluded to earlier, I plan at least a handful of smaller instructional posts on some of the technique I picked up in this experiment.  Topics will include <strong>handling portrait and landscape orientations with states, AS3 and MXML skinning, and liquid design for multiscreen projects</strong>.  There&#8217;s more to share, but that seems more than enough to start.</p>
<p>All in all, this backend developer had a great time creating something visual and usable in the mobile environment.  It won&#8217;t be long be another one of these app blog posts shows up!  </p>
<h1><span style="font-weight: bold; font-size: 16px;">Screenshots</span></h1>
<table style="width: 100%;" cellspacing="20">
<tbody>
<tr>
<td><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/splash.png" rel="shadowbox[sbpost-2215];player=img;"><img class="alignnone size-medium wp-image-2222" style="border: 1px solid #000000;" title="splash" src="http://savagelook.com/blog/wp-content/uploads/2011/02/splash-168x300.png" alt="" width="168" height="300" /></a></td>
<td><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/default.png" rel="shadowbox[sbpost-2215];player=img;"><img class="alignnone size-medium wp-image-2218" style="border: 1px solid #000000;" title="default" src="http://savagelook.com/blog/wp-content/uploads/2011/02/default-168x300.png" alt="" width="168" height="300" /></a></td>
<td><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/portrait.png" rel="shadowbox[sbpost-2215];player=img;"><img class="alignnone size-medium wp-image-2220" style="border: 1px solid #000000;" title="portrait" src="http://savagelook.com/blog/wp-content/uploads/2011/02/portrait-168x300.png" alt="" width="168" height="300" /></a></td>
</tr>
<tr>
<td><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/replist.png" rel="shadowbox[sbpost-2215];player=img;"><img class="alignnone size-medium wp-image-2221" style="border: 1px solid #000000;" title="replist" src="http://savagelook.com/blog/wp-content/uploads/2011/02/replist-168x300.png" alt="" width="168" height="300" /></a></td>
<td colspan="2"><a href="http://savagelook.com/blog/wp-content/uploads/2011/02/landscape1.png" rel="shadowbox[sbpost-2215];player=img;"><img class="alignnone size-medium wp-image-2219" style="border: 1px solid #000000;" title="landscape" src="http://savagelook.com/blog/wp-content/uploads/2011/02/landscape1-300x168.png" alt="" width="300" height="168" /></a></td>
</tr>
</tbody>
</table>
<p><a href="http://savagelook.com/blog/actionscript3/repper-my-first-flex-hero-mobile-app">Repper: My first Flex Hero mobile app</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-2215"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/actionscript3/repper-my-first-flex-hero-mobile-app/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>QR to AR: Using QR Codes to serve Augmented Reality Markers</title>
		<link>http://savagelook.com/blog/away3d/qr-to-ar-using-qr-codes-to-serve-augmented-reality-markers</link>
		<comments>http://savagelook.com/blog/away3d/qr-to-ar-using-qr-codes-to-serve-augmented-reality-markers#comments</comments>
		<pubDate>Mon, 03 Jan 2011 12:58:43 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Augmented Reality]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[flarmanager]]></category>
		<category><![CDATA[flartoolkit]]></category>
		<category><![CDATA[qr]]></category>
		<category><![CDATA[qr code]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=1472</guid>
		<description><![CDATA[Use QR codes to turn your mobile device into a flexible, reusable augmented reality marker<p><a href="http://savagelook.com/blog/away3d/qr-to-ar-using-qr-codes-to-serve-augmented-reality-markers">QR to AR: Using QR Codes to serve Augmented Reality Markers</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h1>The Demo</h1>
<p>Scan 1 of the 4 QR codes below with your mobile device.  Here&#8217;s an <a href="http://www.androidzoom.com/android_applications/shopping/barcode-scanner_clh.html" target="_blank">Android Barcode app</a> and <a href="http://www.iphoneness.com/iphone-apps/5-best-barcode-iphone-applications/" target="_blank">a couple iPhone apps</a> if you don&#8217;t already have one.  </p>
<table cellpadding="10">
<tr>
<td><img src="http://chart.apis.google.com/chart?cht=qr&#038;chs=150x150&#038;chl=http://savagelook.com/ar/markers/patt001.png"/></td>
<td><img src="http://chart.apis.google.com/chart?cht=qr&#038;chs=150x150&#038;chl=http://savagelook.com/ar/markers/patt002.png"/></td>
<td><img src="http://chart.apis.google.com/chart?cht=qr&#038;chs=150x150&#038;chl=http://savagelook.com/ar/markers/patt003.png"/></td>
<td><img src="http://chart.apis.google.com/chart?cht=qr&#038;chs=150x150&#038;chl=http://savagelook.com/ar/markers/patt004.png"/></td>
</tr>
</table>
<p>The resulting link will take you to an augmented reality image marker.  It doesn&#8217;t mean much by itself, but take a look at what can be done with this <span style="color:#ff0000;">&#8220;QR to AR&#8221; method</span>:<br />
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="600" height="488" src="http://www.youtube.com/embed/bnY5aJSL4Bg" frameborder="0"></iframe></p>
<h1>The Overview</h1>
<p><strong>NOTE:</strong> If you are totally unfamiliar with augmented reality, check out these previous posts: <a href="http://savagelook.com/blog/away3d/away3d-augmented-reality">Augmented Reality</a> and <a href="http://savagelook.com/blog/away3d/away3dlite-augmented-reality-free-camaro">Augmented Reality with Away3dlite</a>.</p>
<p>What&#8217;s one of the biggest blockers to augmented reality taking off?  <span style="color:#ff0000">The difficulty in distributing the augmented reality markers</span> necessary to make the technology work.  If you&#8217;ve seen an augmented reality site, you&#8217;ve read the off-putting instructions to print an image to a sheet of paper to hold in front of your webcam.  If you are a massive publication like Esquire, then its not so big of an issue.   </p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/wp2z36kKn0s?fs=1&amp;hl=en_US&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wp2z36kKn0s?fs=1&amp;hl=en_US&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object> </p>
<p>But if you have no problem distributing AR markers, you probably aren&#8217;t reading this and don&#8217;t need my help.  But if you do, you might want to try the &#8220;QR to AR&#8221; method of distribution shown at the top of this post.  You should always offer the method of printing your AR marker, but with the widespread use of mobile technology, this is another viable method.</p>
<p>In short, the positive is that this method is easy to distribute and is more likely to be tried than with the &#8220;print this marker&#8221; method.  The negative is that augmented reality is already a technology that depends heavily on a quality image.  Consider the following when attempting to use the &#8220;QR to AR&#8221; method:  </p>
<ul>
<li>Mobile phones can add difficulty with their reflective and glowing surface</li>
<li>Good lighting and webcam quality is critical for the best possible augmented reality experience</li>
<li>Disable auto-orient on your device, if possible, otherwise the image will turn when your phone does</li>
</ul>
<p><span style="color:#ff0000;">This isn&#8217;t necessarily meant as a practical solution</span> to augmented reality marker distribution and use, just a simple attempt to think outside the box.  Hopefully it encourages people smarter than me to think of even more clever ways to bring augmented reality to the masses.</p>
<p>Special thanks to all techs involved here: <a href="http://words.transmote.com/wp/flarmanager/">FLARManager</a>, <a href="http://www.libspark.org/wiki/saqoosha/FLARToolKit/en">FLARToolkit</a>, <a href="http://away3d.com/">Away3D</a>, and my trusty Droid X using the <a href="http://code.google.com/p/zxing/">Barcode Scanner app from Zxing</a>.</p>
<p><a href="http://savagelook.com/blog/away3d/qr-to-ar-using-qr-codes-to-serve-augmented-reality-markers">QR to AR: Using QR Codes to serve Augmented Reality Markers</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-1472"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/away3d/qr-to-ar-using-qr-codes-to-serve-augmented-reality-markers/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Shit My Twitter Says: Xmas Edition</title>
		<link>http://savagelook.com/blog/actionscript3/shit-my-twitter-says-xmas-edition</link>
		<comments>http://savagelook.com/blog/actionscript3/shit-my-twitter-says-xmas-edition#comments</comments>
		<pubDate>Fri, 24 Dec 2010 14:47:28 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[adobe molehill]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[my thoughts]]></category>
		<category><![CDATA[rockbox]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=1782</guid>
		<description><![CDATA[My pre-Christmas digest of my view of the Twitterverse.<p><a href="http://savagelook.com/blog/actionscript3/shit-my-twitter-says-xmas-edition">Shit My Twitter Says: Xmas Edition</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>This is my list of favorites from Twitter for the past week.  Be sure to take a look at not just the links, but the people posting up the great content.  Some heavy hitters on the list this week.</p>
<h2 style="text-decoration:underline;"><a href="http://aerys.in/retour-de-max-2010#Quake-3-HD-demonstration">Quake 3D Environment running in Flash</a></h2>
<table>
<tr>
<td>tweeted by: <a href="http://twitter.com/#!/thibault_imbert">@thibault_imbert</a><br />
Aerys shows off Minko, their tool for developing 3D applications for the Flash platform.  This demo in particular is cool because they were members of the <a href="http://savagelook.com/blog/away3d/adobe-molehill-3d-api-videos">Adobe &#8220;Molehill&#8221; 3D API</a> prerelease program.  </p>
<p>Take a look to see the future of 3D in Flash, in a very familiar format.  That&#8217;s right, Quake 3D right there in your browser.
</td>
<td>
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="240" height="195" src="http://www.youtube.com/embed/lpsHen2Dy4I" frameborder="0"></iframe>
</td>
</tr>
</table>
<hr /></p>
<h2 style="text-decoration:underline;"><a href="http://www.autohotkey.com/">AutoHotkey</a></h2>
<p>tweeted by: <a href="http://twitter.com/#!/ryancanulla">@johnlindquist</a><br />
AutoHotkey is a free, open source utility to let you hotkey just about anything in Windows.  Let&#8217;s you streamline and customize your Windows experience as much as you want.  Here&#8217;s a brief list of hightlights:</p>
<ul>
<li>Automate almost anything by sending keystrokes and mouse clicks.</li>
<li>You can write a mouse or keyboard macro by hand or use the macro recorder.</li>
<li>Expand abbreviations as you type them. For example, typing &#8220;btw&#8221; can automatically produce &#8220;by the way&#8221;.</li>
<li>Remap keys and buttons on your keyboard, joystick, and mouse.</li>
<li>Create custom data-entry forms, user interfaces, and menu bars.</li>
</ul>
<hr /></p>
<h2 style="text-decoration:underline;"><a href="http://seantheflexguy.com/blog/2010/12/19/control-your-computer-with-your-brain-using-actionscript-api-update/">Control Your Computer With Your Brain in AS3</a></h2>
<p>tweeted by: <a href="http://twitter.com/#!/seantheflexguy">@seantheflexguy</a></p>
<table>
<tr>
<td style="vertical-align:top; padding-right:10px;"><object id="ThinkGearBlogPost" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="320" height="240" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="allowScriptAccess" value="sameDomain" /><param name="allowFullScreen" value="false" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><param name="src" value="http://www.seantheflexguy.com/video/ThinkGearBlogPost.swf" /><param name="name" value="ThinkGearBlogPost" /><param name="allowfullscreen" value="false" /><embed id="ThinkGearBlogPost" type="application/x-shockwave-flash" width="320" height="240" src="http://www.seantheflexguy.com/video/ThinkGearBlogPost.swf" name="ThinkGearBlogPost" bgcolor="#ffffff" quality="high" allowfullscreen="false" allowscriptaccess="sameDomain" align="middle"></embed></object></td>
<td style="vertical-align:top;">
Sean Moore blogs about his exploits with <a href="http://www.neurosky.com/">NeuroSky&#8217;s Mindset</a> headset, a USB device that actually reads brainwaves (EEG) as user input.  It comes complete with a free, open source API for developing your own applications that use the headset.  Also there&#8217;s a sort of brain emulator that allows you to develop against the API without even buying the headset.</p>
<p>Check out this blog post, and <a href="http://seantheflexguy.com/blog/2009/12/30/neurosky-mindset-brain-computer-interface-actionscript-3-0-api/">his previous one on the topic</a>, to get a look at this incredibly cool technology.
</td>
</tr>
</table>
<hr /></p>
<table>
<tr>
<td style="vertical-align:top;">
<h2 style="text-decoration:underline;"><a href="http://joelhooks.com/2010/12/20/write-high-quality-unit-tested-actionscript-3-for-fun-and-profit/">Write high quality unit tested AS3 for fun and profit&#8230;</a></h2>
<p>tweeted by: <a href="http://twitter.com/#!/jhooks">@jhooks</a></p>
<p>A great assessment of unit testing resources, particularly as they relate the Actionscript 3 programming.  The insights on the high points and pitfalls of test driven development are well worth the read.</p>
<p>&#8220;As with all code, complexity is easy. It is the default. Elegant simplicity is much more difficult.&#8221;
</td>
<td><iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=FFFFFF&#038;IS2=1&#038;npa=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=httpsavagelco-20&#038;o=1&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;asins=0131495054" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</td>
</tr>
</table>
<hr /></p>
<h2 style="text-decoration:underline;"><a href="http://jquerymobile.com/">jQuery Mobile</a></h2>
<p>tweeted by: <a href="http://twitter.com/#!/mesh">@mesh</a></p>
<table>
<tr>
<td><a href="http://www.amazon.com/gp/product/0596155441?ie=UTF8&#038;tag=httpsavagelco-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596155441"><img src="http://savagelook.com/blog/wp-content/uploads/2010/12/ipad-palm-300x175.png"/></a></td>
<td style="vertical-align:top; padding-left:15px;">From the framework that made Javascript tolerable comes a version specially built for the unique needs of mobile developers.  Enter jQuery Mobile.  </p>
<p>My favorite part about this framework, other than the familiar syntax, is the upfront honesty about its compatibility.  Check out the compatibility chart on the &#8220;Platforms&#8221; page for more details.</td>
</tr>
</table>
<hr /></p>
<h2 style="text-decoration:underline;"><a href="http://www.rockbox.org/">Rockbox</a></h2>
<p>tweeted by: <a href="http://twitter.com/#!/bit101">@bit101</a><br />
Rockbox is an open source firmware for mp3 players, written from scratch.  What this means is that you can load open source, totally customizable firmware onto the supported MP3 player of your choice.  This includes the following (with many more unstable ports):</p>
<table>
<tr>
<td style="width:380px;">
<ul>
<li>Apple iPods (lots of versions)</li>
<li>Archos</li>
<li>Cowon</li>
<li>iriver</li>
<li>Olympus</li>
<li>Packard Bell</li>
<li>SanDisk</li>
<li>Toshiba</li>
</ul>
</td>
<td><a href="http://www.amazon.com/gp/product/B001FA1O0O?ie=UTF8&#038;tag=httpsavagelco-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B001FA1O0O"><img src="http://savagelook.com/blog/wp-content/uploads/2010/12/doom.jpg" alt="Doom on iPod" title="Doom on iPod" width="240" height="219" class="alignnone size-full wp-image-1822" /></a></td>
</tr>
</table>
<p>So what can you do with it?  You can customize the interface, use <a href="http://themes.rockbox.org/">themes</a>, watch movies, or even <a href="http://www.rockbox.org/wiki/PluginDoom">play Doom</a>.  Yes, Doom on your MP3 player.  Badass. </p>
<hr /></p>
<p><a href="http://savagelook.com/blog/actionscript3/shit-my-twitter-says-xmas-edition">Shit My Twitter Says: Xmas Edition</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-1782"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/actionscript3/shit-my-twitter-says-xmas-edition/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! -->
