<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>SavageLook.com</title>
	
	<link>http://savagelook.com/blog</link>
	<description>Blowing your mind, one line of code at a time</description>
	<lastBuildDate>Thu, 16 Feb 2012 01:57:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Savagelookcom" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="savagelookcom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Path menu with Appcelerator Titanium</title>
		<link>http://savagelook.com/blog/portfolio/path-menu-with-appcelerator-titanium</link>
		<comments>http://savagelook.com/blog/portfolio/path-menu-with-appcelerator-titanium#comments</comments>
		<pubDate>Thu, 16 Feb 2012 01:57:45 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Appcelerator]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[titanium]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3486</guid>
		<description><![CDATA[The talked-about Path menu, implemented in Titanium, for iOS and Android<p><a href="http://savagelook.com/blog/portfolio/path-menu-with-appcelerator-titanium">Path menu with Appcelerator Titanium</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>Here we go again&#8230;</h2>
<div style="clear:both;"></div>
<hr style="padding:0; margin:0;"/>
<p>Yep, another cross-post from the Appcelerator blog. This time it shows off how I managed to implement the dynamic and unique <a href="https://path.com" target="_blank">Path</a> menu in Titanium. From a single code base the menu is fully functional, with native performance, on both Android and iOS. </p>
<ul style="padding-bottom:20px;">
<li><a href="http://developer.appcelerator.com/blog/2012/02/forging-titanium-episode-22-path-like-menu.html" target="_blank">Original blog post</a></li>
<li><a href="https://github.com/appcelerator-developer-relations/Forging-Titanium/tree/master/ep-022" target="_blank">Full source code on Github</a></li>
</ul>
<h2>Video</h2>
<div style="clear:both;"></div>
<hr style="padding:0; margin:0;"/>
<p><iframe src="http://player.vimeo.com/video/36846582?title=0&amp;byline=0&amp;portrait=0" width="600" height="340" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p><a href="http://savagelook.com/blog/portfolio/path-menu-with-appcelerator-titanium">Path menu with Appcelerator Titanium</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3486"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/path-menu-with-appcelerator-titanium/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3D, Sockets, and Native Android with Appcelerator Titanium</title>
		<link>http://savagelook.com/blog/portfolio/3d-sockets-and-native-android-with-appcelerator-titanium</link>
		<comments>http://savagelook.com/blog/portfolio/3d-sockets-and-native-android-with-appcelerator-titanium#comments</comments>
		<pubDate>Fri, 02 Dec 2011 14:22:05 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Appcelerator]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[threejs]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3446</guid>
		<description><![CDATA[Here's the 3 part 'Twisti' app series of screencasts I did for the Appcelerator developer blog<p><a href="http://savagelook.com/blog/portfolio/3d-sockets-and-native-android-with-appcelerator-titanium">3D, Sockets, and Native Android with Appcelerator Titanium</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>Yeah, yet another cross-post from the Appcelerator Developer blog. This was a fun one, though, where I got to show off some really cool features and functionality of the <a href="http://wiki.appcelerator.org/display/guides/Quick+Start" target="_blank">Titanium platform</a>. There&#8217;s a lot covered so it&#8217;s stretched over a 3 part series. I&#8217;ve brought them all together here for your viewing pleasure. The <b>original blog post links</b> included with each video contain links for all the source code and references associated with each video.</p>
<p>Here&#8217;s the 10 second summary of each part:</p>
<ol>
<li>Create a <a href="http://wiki.appcelerator.org/display/guides/Android+Module+Development+Guide" target="_blank">native Android module</a> to determine a device&#8217;s physical orientation as <a href="http://en.wikipedia.org/wiki/Azimuth#Navigation" target="_blank">azimuth</a>, pitch, and roll</li>
<li>Use the above data to animate and render a 3D model using a <a href="http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.UI.WebView-object" target="_blank">Titanium WebView</a> &lt;canvas&gt; and <a href="https://github.com/mrdoob/three.js/" target="_blank">Three.js</a></li>
<li>Represent this 3D model on multiple remote client devices simultaneously using high volume, realtime network communication via <a href="http://wiki.appcelerator.org/display/guides/Sockets" target="_blank">Titanium Sockets</a></li>
</ol>
<hr />
<h2>Part 1 &#8211; Native Android Module</h2>
<p><b>&gt;&gt;&gt;</b> <a href="http://developer.appcelerator.com/blog/2011/11/forging-titanium-episode-14-twisti-part-1-android-module.html">Original blog post</a><br />
<iframe src="http://player.vimeo.com/video/31868247?title=0&amp;byline=0&amp;portrait=0" width="600" height="338" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<hr />
<h2>Part 2 &#8211; 3D With Three.js</h2>
<p><b>&gt;&gt;&gt;</b> <a href="http://developer.appcelerator.com/blog/2011/11/forging-titanium-episode-15-twisti-part-2-3d-with-three-js.html">Original blog post</a><br />
<iframe src="http://player.vimeo.com/video/32102962?title=0&amp;byline=0&amp;portrait=0" width="600" height="338" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<hr />
<h2>Part 3 &#8211; Sockets</h2>
<p><b>&gt;&gt;&gt;</b> <a href="http://developer.appcelerator.com/blog/2011/12/forging-titanium-episode-16-twisti-part-3-sockets.html">Original blog post</a><br />
<iframe src="http://player.vimeo.com/video/32976053?title=0&amp;byline=0&amp;portrait=0" width="600" height="338" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p><a href="http://savagelook.com/blog/portfolio/3d-sockets-and-native-android-with-appcelerator-titanium">3D, Sockets, and Native Android with Appcelerator Titanium</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3446"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/3d-sockets-and-native-android-with-appcelerator-titanium/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forms with Appcelerator Titanium</title>
		<link>http://savagelook.com/blog/portfolio/forms-with-appcelerator-titanium</link>
		<comments>http://savagelook.com/blog/portfolio/forms-with-appcelerator-titanium#comments</comments>
		<pubDate>Fri, 14 Oct 2011 12:49:53 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Appcelerator]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[commonjs]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3429</guid>
		<description><![CDATA[A screencast on the highly unsexy, yet necessary, task of creating forms in mobile applications<p><a href="http://savagelook.com/blog/portfolio/forms-with-appcelerator-titanium">Forms with Appcelerator Titanium</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>I don&#8217;t cross post often from the <a href="http://developer.appcelerator.com/blog/" target="_blank">developer blog over at Appcelerator</a>, but people seem to be liking this screencast so I thought I&#8217;d share. I put together some code and a video showing off how you can you use cross platform design, modular Javascript, and of course, Titanium to deliver a simplified interface for creating forms in your mobile apps. Aside from it being easy for developers to implement, there&#8217;s also a special focus on making the forms as easy to navigate as possible for the end user.</p>
<p>I&#8217;ve tried not to overpopulate this blog with Appcelerator content ever since joining them as a platform evangelist. I think I&#8217;ve earned an Appcelerator post though after talking exclusively about PhoneGap and Adobe in my last one though. <img src='http://savagelook.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><iframe src="http://player.vimeo.com/video/30387041?title=0&amp;byline=0&amp;portrait=0" width="600" height="340" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></p>
<h2>Additional Resources</h2>
<ul>
<li><a href="https://github.com/appcelerator-developer-relations/Forging-Titanium/tree/master/ep-010/Forms">Forms app on Github</a></li>
<li><a href="http://developer.appcelerator.com/blog/2011/08/forging-titanium-episode-1-commonjs-modules.html">Forging Titanium Episode 1: CommonJS Modules</a></li>
</ul>
<p><a href="http://savagelook.com/blog/portfolio/forms-with-appcelerator-titanium">Forms with Appcelerator Titanium</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3429"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/forms-with-appcelerator-titanium/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adobe &amp; PhoneGap: Makes Sense, Mostly</title>
		<link>http://savagelook.com/blog/portfolio/adobe-phonegap-makes-sense-mostly</link>
		<comments>http://savagelook.com/blog/portfolio/adobe-phonegap-makes-sense-mostly#comments</comments>
		<pubDate>Mon, 10 Oct 2011 12:57:05 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[phonegap]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3370</guid>
		<description><![CDATA[Adobe acquired Nitobi... What does this mean for Adobe, PhoneGap, and mobile developers everywhere?<p><a href="http://savagelook.com/blog/portfolio/adobe-phonegap-makes-sense-mostly">Adobe &#038; PhoneGap: Makes Sense, Mostly</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 --><style>
.pquote {
			float: left;
			width: 8em;
color:#000;
			background: #ddd;
			font-weight: bold;
font-size:18px;
			padding: 0.5em 1em 0.5em 1em;
			margin: 0 0.5em 0.5em 0;
		}</p>
</style>
<h2>Adobe Acquires Nitobi</h2>
<div style="clear:both;"></div>
<p>So if you haven&#8217;t heard yet, <a href="http://www.phonegap.com/2011/10/03/nitobi-enters-into-acquisition-agreement-with-adobe-2/">Adobe acquired Nitobi</a>, the company that is responsible for PhoneGap. This was announced at Adobe&#8217;s big <a href="http://max.adobe.com/">MAX conference</a>. If you are unfamiliar with PhoneGap, then this post is going to be wildly uninteresting to you. At a high level, they provide a cross platform mobile development solution that leverages native webviews with HTML5, CSS, and Javascript to create native mobile apps.</p>
<h2>Not Hard To See Coming</h2>
<p>Well, for one thing, Adobe was obviously hedging its bets on Flash/Air&#8217;s viability in the long term with mobile when they started introducing HTML5 capabilities through <a href="http://labs.adobe.com/technologies/edge/">Edge</a>. I mean, if Adobe&#8217;s planning to offer interactive, Flash-like development with HTML5, who is going to believe that Flash itself has a real future with mobile? Or as Gizmodo put it, <a href="http://gizmodo.com/5826448/adobe-ditches-flash-for-adobe-edge">Adobe Edge may become the beginning of the end for Flash</a>. Yeah, it will likely always exist, but it is <em>not</em> the de facto standard for delivering interactive web (or mobile) content anymore.</p>
<p><iframe width="630" height="473" src="http://www.youtube.com/embed/8FnNtX73v8k" frameborder="0" allowfullscreen></iframe></p>
<p>And of course there&#8217;s the whole Adobe Air for mobile thing. Android was obliging enough to make Air a first class citizen. Install Air, run Air apps&#8230; simple. And while the Adobe Air install is a bit hefty, it&#8217;s hardly something worth worrying about with today&#8217;s storage capabilities on mobile devices.</p>
<blockquote class="pquote">
<p>&#8220;Flash has been labeled an outlaw and Air is smuggled in like an illegal immigrant&#8221;</p>
</blockquote>
<p>The more harrowing journey for Adobe has been iOS. Basically, Flash has been labeled an outlaw and Air is smuggled in like an illegal immigrant. There&#8217;s been a staring contest between Adobe and Apple for a while now, but I think it&#8217;s safe to say Adobe blinked. Apple has continually proven that is has the most marketable mobile devices available, and has done so without any back pedaling on what they will and will not allow (minus <a href="http://www.apple.com/pr/library/2010/09/09Statement-by-Apple-on-App-Store-Review-Guidelines.html">letting 3rd parties build apps</a>).</p>
<p>Something had to give if Adobe was going to get a real foothold in the mobile world, and it obviously wasn&#8217;t coming in the form of their current solutions. Enter PhoneGap&#8230;</p>
<h2>But PhoneGap is not Without Its Challenges</h2>
<p>
<div style="float:right; font-size:80%;">
<table>
<tr>
<td><img src="http://savagelook.com/blog/wp-content/uploads/2011/10/stock-senchaandjquery.jpg"/></td>
</tr>
<tr>
<td style="text-align:center;">Image by <a href="http://twitter.com/#!/tysoncadenhead">Tyson Cadenhead</a></td>
</tr>
</table>
</div>
<p>PhoneGap fills a lot of holes for Adobe, but its going to need a lot of help itself. I think PhoneGap has gone about as far as it can on its own. It has achieved its goal of abstracting most native functionality for many different mobile platforms, but starting developers are wanting more. </p>
<p>PhoneGap has no user interface components. This is <strong><em>not</em></strong> fun for new developers&#8230; or veteran ones for that matter. You need to build everything from scratch or go out and find a UI framework that works for you. The 2 front-runners, <a href="http://www.sencha.com/products/touch/">Sencha Touch</a> and <a href="http://jquerymobile.com/">jQuery Mobile</a>, bring their own glitches and idiosyncrasies. Also, now you find yourself learning 2 frameworks that have a noticeable lack of cross-over documentation. </p>
<p>There&#8217;s also a seemingly purposeful lack of direction in terms of tooling and best practices. New developers, often web developers, are left to their own devices to find the workflow that works best for them. There&#8217;s no sanctioned IDE or set of tools suggested from PhoneGap to build your mobile apps. Infinite flexibility can be a real drag when you just want to know the most effective way to get things done.</p>
<h2>But let&#8217;s put this even more plainly&#8230;</h2>
<p>What are the pros and cons of <b>PhoneGap</b>?</p>
<table>
<tr>
<td><span style="font-weight:bold; font-size:14px; color:#880000">Pros</span></td>
<td><span style="font-weight:bold; font-size:14px; color:#880000">Cons</span></td>
</tr>
<tr>
<td style="width:300px; vertical-align:top;">
<ul>
<li>Terrific mobile platform compatibility</li>
<li>It&#8217;s an open, standards-based solution</li>
<li>Ease of entry for existing web developers</li>
<li>Large existing userbase for the above reason</li>
</ul>
</td>
<td style="width:300px; vertical-align:top;">
<ul style="margin-bottom:0; padding-bottom:0;">
<li>No clear direction on UI, tooling, or best practices</li>
<li>performance is limited by webview</li>
<li>Platform disparities</li>
<li>Documentation is brief and sometimes lacking</li>
</ul>
</td>
</tr>
</table>
<p>And what are the pros and cons of <b>Adobe</b>?</p>
<table>
<tr>
<td><span style="font-weight:bold; font-size:14px; color:#880000">Pros</span></td>
<td><span style="font-weight:bold; font-size:14px; color:#880000">Cons</span></td>
</tr>
<tr>
<td style="width:300px; vertical-align:top;">
<ul>
<li>High quality tools for integrating development and design workflows</li>
<li>With Flash and Flex, they&#8217;ve been delivering visual and UI sugar for a long time now</li>
<li>They&#8217;ve been rocking interaction before &lt;canvas&gt; was in diapers</li>
<li>They run nearly identical user experiences on each platform via Flash/Air</li>
<li>Their documentation is nothing if not expansive</li>
<li>A vehemently loyal community</li>
</ul>
</td>
<td style="width:300px; vertical-align:top;">
<ul>
<li>Weak mobile platform compatibility. Android made Air a first class citizen, but we all know the story with iOS. </li>
<li>The majority of Adobe&#8217;s tools and SDKs are closed and proprietary</li>
<li>Has not seen a lot of fresh blood lured in by their current mobile development offerings</li>
<li>You gotta pick up AS3 if you want to be effective</li>
</ul>
</td>
</tr>
</table>
<p>Anyone else seeing a pretty clear yin-yang thing going on here?</p>
<h2>So What Does It All Mean?</h2>
<p>Well, for one thing, it means <a href="http://arstechnica.com/open-source/news/2011/10/phonegap-to-become-an-apache-project-as-adobe-acquires-nitobi.ars">PhoneGap is becoming an Apache project</a>. Yep, they are donating PhoneGap to Apache, which puts them one step closer to their altruistic goal of PhoneGap itself becoming obsolete. PhoneGap&#8217;s own Brian Leroux stated in his <a href="http://www.slideshare.net/brianleroux/phonegap-10">PhoneGap 1.0 presentation</a> that:</p>
<blockquote>
<p style="font-weight:bold;">&#8220;The purpose of PhoneGap is for PhoneGap to cease to exist&#8221;</p>
</blockquote>
<p>Why, oh why, did Adobe buy it then? I think it&#8217;s because they want to be your one stop shop for purchasing IDEs, frameworks, professional services, etc&#8230; Adobe is likely banking on the ongoing popularity of PhoneGap and web-based native mobile development. &#8220;Web-based native&#8221;&#8230; sounds a little like an oxymoron, but whatever.</p>
<h2>A Match Made in Heaven, Right?</h2>
<p>Sounds like a perfect match. The 2 companies seem to complement each other very well. But&#8230;</p>
<p>There&#8217;s just a few questions I still have regarding the acquisition. Rather than drone on any longer inserting my own conjecture, I&#8217;ll just list my questions here and leave them as talking points for you, my readers. </p>
<blockquote class="pquote" style="float:right;">
<p>&#8220;I can already hear the `It&#8217;s back to AS1` complaints starting&#8230;&#8221;</p>
</blockquote>
<ul>
<li>What happens to Flash/Air for mobile? It obviously won&#8217;t be forsaken, but this can&#8217;t sit real well with developers who have so far devoted themselves to this workflow.</li>
<li>How does Adobe deal with the inevitability that current developers will revolt against using Javascript? I can already hear the &#8220;It&#8217;s back to AS1&#8243; complaints starting&#8230;</li>
<li>Does Adobe even have any interest in getting existing AS3 developers using PhoneGap? I know they are saying that they weill support both solutions, but come on, someone is gonna get more love than the other.</li>
<li>How long until we finally see a defined workflow and IDE for PhoneGap. Is Dreamweaver integration the best we get?</li>
<li>What will the PhoneGap guys do next? They are actively working to put themselves out of a job, so I&#8217;m curious what the next move is.  </li>
</ul>
<h2>What&#8217;s Next?</h2>
<p>I have no clue, but it&#8217;s sure to be interesting. I&#8217;m hoping for good things on both sides as it&#8217;s only going to make mobile development in general more exciting. </p>
<p><img src="http://savagelook.com/blog/wp-content/uploads/2011/10/adobe-hearts-html5.png"/></p>
<p>Will Adobe&#8217;s ability to create great tools translate to mobile success? Will PhoneGap&#8217;s strict adherence to the open web model jive well with Adobe&#8217;s history of closed, proprietary tools? Will the inevitable merge of the open web  and existing Adobe community be a bumpy one? </p>
<p>Stay tuned&#8230;</p>
<p><a href="http://savagelook.com/blog/portfolio/adobe-phonegap-makes-sense-mostly">Adobe &#038; PhoneGap: Makes Sense, Mostly</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3370"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/adobe-phonegap-makes-sense-mostly/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>5 Annoying Things About Mac OS X Lion and How To Fix Them</title>
		<link>http://savagelook.com/blog/portfolio/5-annoying-things-about-mac-os-x-lion-and-how-to-fix-them</link>
		<comments>http://savagelook.com/blog/portfolio/5-annoying-things-about-mac-os-x-lion-and-how-to-fix-them#comments</comments>
		<pubDate>Wed, 31 Aug 2011 12:38:13 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[lion]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3348</guid>
		<description><![CDATA[Think some of the Mac OS X Lion changes are a pain? Me too. Here's how to fix them<p><a href="http://savagelook.com/blog/portfolio/5-annoying-things-about-mac-os-x-lion-and-how-to-fix-them">5 Annoying Things About Mac OS X Lion and How To Fix Them</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>So you&#8217;re running Mac OS X Lion&#8230;</h2>
<div style="clear:both;"></div>
<hr style="padding:0; margin:0;"/>
<p>Let me start by saying that among the <a href="http://www.apple.com/macosx/whats-new/features.html">250+ new features</a> added in Lion, there are some really useful ones. Some of my favorites include:</p>
<ul>
<li><strong>Accessible from App Store</strong> &#8211; The fact that the upgrade itself is accessible from the App Store is extremely convenient. Granted, you could argue that Lion is little more than the equivalent of a Windows Service Pack, which are free and automatically delivered. </li>
<li><strong>Face Time</strong> &#8211; Face Time is no longer beta as it was with Snow Leopard and is fully integrated into Lion.</li>
<li><strong>Document locking</strong> &#8211; This grants you the ability to lock documents to prevent unwanted modifications. Not groundbreaking (see &#8216;read-only&#8217;), but the stuff Lion does behind the scenes, like automatically locking old documents, is pretty nice.</li>
<li><strong>Full disk encryption</strong> &#8211; No more is only your Home path safe. As of Lion, FileVault has been totally revamped and your entire disk will now be encrypted. </li>
<li><strong>Full screen apps</strong></li>
<li><strong>Resize windows from any edge</strong></li>
</ul>
<p>In addition to these nicer features, Lion did some really annoying stuff to user interaction and the user interface. I&#8217;m all for change for the better, but most of these fall under the category of &#8220;If it ain&#8217;t broke, don&#8217;t fix it.&#8221; Fortunately, there&#8217;s ways to get back the settings you expect. Here&#8217;s 5 I specifically ran into.</p>
<div style="height:15px;"></div>
<h2>Unhide ~/Library</h2>
<hr style="padding:0; margin:0;"/>
<p>For whatever reason, Apple decided to hide your <i>~/Library</i> path. This is a real pain the ass if you find yourself in there a lot. For example, Appcelerator installs its SDK and other files in <i>~/Library/Application Support/Titanium</i>. I&#8217;m constantly tinkering in that directory and it would be nice to see it in Finder. </p>
<p>Execute this line in Terminal and you&#8217;ll have your <i>Library</i> visible once again. <strong>USERNAME</strong> is your username:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">chflags nohidden <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>USERNAME<span style="color: #000000; font-weight: bold;">/</span>Library</pre></div></div>

<div style="height:15px;"></div>
<h2>Disable &#8220;Natural&#8221; scrolling</h2>
<hr style="padding:0; margin:0;"/>
<p>Lion has included &#8220;natural&#8221; scrolling. I use quotations around &#8220;natural&#8221; because it feels anything other than natural for the average user. The content you are scrolling will now move in the direction you scroll, which is essentially the opposite of how it has always worked.</p>
<p>I have no problem with this functionality. What I do take issue with is that this was made the default behavior. To set scrolling back to the way most of us expect it, open <strong>System Settings</strong>, go to <strong>Trackpad/Mouse</strong>, and in the <strong>Scroll/Zoom</strong> tab uncheck <strong>&#8220;Scroll direction: natural&#8221;</strong>.</p>
<p><img src="https://img.skitch.com/20110831-83ricxbahiq22edfpmfncnwp6c.jpg" alt="screen" title="" /></p>
<div style="height:15px;"></div>
<h2>Fix 3 finger horizontal swipe navigation</h2>
<hr style="padding:0; margin:0;"/>
<p>The trackpad gesture I use more than any other is navigation using 3 finger swipes. I don&#8217;t even remember the last time I manually pressed the back button in a browser. No wait, yes I do. It was when I got my MacBook Air and it had Lion on it.</p>
<p>Turns out Apple mapped 2 finger horizontal swipes to its <strong>&#8220;Swipe between pages&#8221;</strong> functionality by default. Unfortunately, unless you switch this value to use 3 finger horizontal swipes, it won&#8217;t work for browser navigation. Check out the image below to see how:</p>
<p><img src="https://img.skitch.com/20110831-8unxrw8wbw5mum9ex61pmn4yha.jpg" alt="" title="" /></p>
<div style="height:15px;"></div>
<h2>Get Rid of LaunchPad</h2>
<hr style="padding:0; margin:0;"/>
<p>If I wanted what is effectively a &#8220;Show Desktop&#8221; button combined with an applications list, I&#8217;d use Windows. Just remove that thing from your Dock and be done with it.</p>
<p>Do yourself a favor. If you really want an effective way to find and run apps, check out <a href="http://www.alfredapp.com/">Alfred</a> or <a href="http://qsapp.com/">Quicksilver</a>. You can thank me later.</p>
<div style="height:15px;"></div>
<h2>Get a Fresh Restart</h2>
<hr style="padding:0; margin:0;"/>
<p>I don&#8217;t know about you, but I reboot my Mac really infrequently. When I do, though, it&#8217;s generally because I want a clean slate. I want all my apps closed and everything to go back to a fresh state. Lion disagrees with me.</p>
<p>By default Lion will remember every app you had open and make sure everything is just as you left it when you restarted your computer. For those of you who would also like a fresh restart, open <strong>System Settings</strong> and go to <strong>General</strong>. In there you just need to uncheck the <strong>&#8220;Restore windows when quitting and re-opening apps&#8221;</strong> checkbox.</p>
<p><img src="https://img.skitch.com/20110831-nugs2uasgdk7u3u51im5jw181m.jpg" alt="" title="" /></p>
<div style="height:15px;"></div>
<p><a href="http://savagelook.com/blog/portfolio/5-annoying-things-about-mac-os-x-lion-and-how-to-fix-them">5 Annoying Things About Mac OS X Lion and How To Fix Them</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3348"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/5-annoying-things-about-mac-os-x-lion-and-how-to-fix-them/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android Intents in Appcelerator</title>
		<link>http://savagelook.com/blog/portfolio/android-intents-in-appcelerator</link>
		<comments>http://savagelook.com/blog/portfolio/android-intents-in-appcelerator#comments</comments>
		<pubDate>Fri, 26 Aug 2011 18:47:42 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Appcelerator]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[intents]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3336</guid>
		<description><![CDATA[This time instead of receiving Android Intents in Appcelerator, we'll be sending them<p><a href="http://savagelook.com/blog/portfolio/android-intents-in-appcelerator">Android Intents in Appcelerator</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>Link To Full Blog Post</h2>
<div style="clear:both;"></div>
<hr style="padding:0;margin:0;"/>
<ul style="padding-top:15px;">
<li><a href="http://developer.appcelerator.com/blog/2011/08/android-intents.html"><span style="font-size:large;">Android Intents on the Appcelerator Developer Blog</span></a></li>
</ul>
<h2>Here We Go Again</h2>
<hr style="padding:0;margin:0;"/>
<p>OK, well I just did a post on how to use Android Intent Filters with Appcelerator, so why not the other side of the coin. This time you&#8217;ll learn how you can <b><i>send</i></b> Intents instead of receiving them. With this powerful native functionality you&#8217;ll be able to leverage existing apps on your Android device to do some of your heavy lifting, like sharing images, sending text, and a whole bunch of other things.</p>
<table>
<tr>
<td><img src="http://developer.appcelerator.com.s3.amazonaws.com/blog/post_images/intents/highlight.png" border="1"/></td>
<td><img src="http://developer.appcelerator.com.s3.amazonaws.com/blog/post_images/intents/text%20intent%20list_small.png" border="1"/></td>
<td><img src="http://developer.appcelerator.com.s3.amazonaws.com/blog/post_images/intents/intent%20list_small.png" border="1"/></td>
<td><img src="http://developer.appcelerator.com.s3.amazonaws.com/blog/post_images/intents/google%20plus.png" border="1"/></td>
</tr>
</table>
<p><a href="http://savagelook.com/blog/portfolio/android-intents-in-appcelerator">Android Intents in Appcelerator</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3336"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/android-intents-in-appcelerator/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Intent Filters in Appcelerator</title>
		<link>http://savagelook.com/blog/portfolio/android-intent-filters-in-appcelerator</link>
		<comments>http://savagelook.com/blog/portfolio/android-intent-filters-in-appcelerator#comments</comments>
		<pubDate>Thu, 25 Aug 2011 16:44:47 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Appcelerator]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3314</guid>
		<description><![CDATA[Use Android Intent Filters to make your Appcelerator apps receive Intents from other Android applications<p><a href="http://savagelook.com/blog/portfolio/android-intent-filters-in-appcelerator">Android Intent Filters in Appcelerator</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>Link To Full Blog Post</h2>
<div style="clear:both;"></div>
<hr style="padding:0;margin:0;"/>
<ul style="padding-top:15px;">
<li><a href="http://developer.appcelerator.com/blog/2011/08/android-intent-filters.html"><span style="font-size:large;">Android Intent Filters on the Appcelerator Developer Blog</span></a></li>
</ul>
<h2>It Starts&#8230;</h2>
<hr style="padding:0;margin:0;"/>
<p>Here&#8217;s just a cross post of my first tutorial on the <a href="http://developer.appcelerator.com/blog/" target="_blank">Appcelerator Developer Blog</a>. It details how you can use Android Intent Filters to make your Appcelerator apps receive Intents from other Android applications. For example, I&#8217;m sure if you are an Android user you are familiar with the SEND Intent list:</p>
<p><img alt="Intent List" src="http://img.skitch.com/20110824-miirycem9smeikc864q2c2gnt5.jpg" title="Intent List" width="240" height="427" /></p>
<p>With this blog post I&#8217;ll show you how you can add your app to that list. It&#8217;s a great example of how Appcelerator still leverages powerful native functionality, both visual and non-visual, while it provides a cross platform solution.</p>
<p><a href="http://savagelook.com/blog/portfolio/android-intent-filters-in-appcelerator">Android Intent Filters in Appcelerator</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3314"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/android-intent-filters-in-appcelerator/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Once, Adapt Everywhere</title>
		<link>http://savagelook.com/blog/portfolio/code-once-adapt-everywhere-mobile</link>
		<comments>http://savagelook.com/blog/portfolio/code-once-adapt-everywhere-mobile#comments</comments>
		<pubDate>Sat, 20 Aug 2011 22:14:32 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[core]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[phonegap]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3297</guid>
		<description><![CDATA["Code once, run everywhere" might not be the mentality you should have for your cross platform mobile development<p><a href="http://savagelook.com/blog/portfolio/code-once-adapt-everywhere-mobile">Code Once, Adapt Everywhere</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>CORE</h2>
<div style="clear:both;"></div>
<hr style="padding:0;margin:0;"/>
<p>For the sake of not repeating myself I&#8217;m going to refer to the phrase &#8220;code once, run everywhere&#8221; as <strong>CORE</strong> from here on in. Who knows, maybe it&#8217;ll catch on.  And on to the blog post&#8230;</p>
<p>So as you may have heard by now, I&#8217;ll be starting my new job as an <a href="">Appcelerator</a> platform evangelist on Monday. If you&#8217;ve read some of my past blog posts, you&#8217;ve probably noted that I&#8217;ve been pretty critical of cross platform mobile solutions. From a developer&#8217;s perspective, we are expecting the coveted CORE, but are often left wanting. </p>
<p>What you&#8217;ll quickly find in the world of mobile development is that cross platform does not always equal CORE. </p>
<p>Rather than bemoan the shortcomings of each mobile framework, I&#8217;d rather talk about something I heard <a href="http://twitter.com/#!/kevinwhinnery">Kevin Whinnery</a> say during the Appcelerator <a href="http://vimeopro.com/appcelerator/building-native-mobile-applications">online training videos</a>. He stated that Appcelerator does not aim to be a CORE technology, but instead a <strong>&#8220;code once, <em>adapt</em> everywhere&#8221;</strong> one. Not quite as sexy, but perhaps an even more intriguing philosophy. Let&#8217;s discuss why.</p>
<h2>Web Based vs. Appcelerator</h2>
<hr style="padding:0;margin:0;"/>
<p><em>For a quick summary of how Appcelerator is fundamentally different than web-based cross platform mobile frameworks, <a href="http://savagelook.com/blog/portfolio/phonegap-is-web-based-appcelerator-is-pure-javascript">read here</a>.</em></p>
<p>Aside from near-native performance, what&#8217;s the biggest advantage of using Appcelerator over web based mobile frameworks like <a href="http://www.phonegap.com/">Phonegap</a> or <a href="http://rhomobile.com/">Rhomobile</a>? Its ability to use the device&#8217;s native UI components. And no, I don&#8217;t mean it has UI components skinned to look like native components, like many of the web-based solutions. I mean it actually uses the platform&#8217;s native, performant UI in the app.</p>
<p>With native UI we can build apps that are indistinguishable from apps built with Objective-C or Java. The look, feel, performance, and behavior will be exactly what is expected of the given platform. Plus, we don&#8217;t have to build them ourselves. </p>
<p>To achieve this level of quality, though, <strong>you need to be willing to adapt your app, not just design for the lowest common denominator</strong>, as is often the mentality with CORE apps. Sure, you can use the iPhone&#8217;s slick Navigation Controller bar on all versions of your app, but is that what Android users are expecting? Nor would an Android Spinner be befitting of an iPhone app.</p>
<table>
<tr>
<td>
<img src="http://savagelook.com/blog/wp-content/uploads/2011/08/spinner.png" alt="Spinner" title="" /></td>
<td>
<img src="http://savagelook.com/blog/wp-content/uploads/2011/08/nav_good.png" alt="Navigation Bar" title="" /></td>
</tr>
</table>
<p>You see, in some cases, CORE apps come at the expense of the most important factor: the user experience. </p>
<h2>Why Bother?</h2>
<hr style="padding:0;margin:0;"/>
<p>Many people, particularly proponents of web based mobile development, are of the opinion that native UI components are not necessary to deliver a high quality user experience. I agree, in certain circumstances. Games, novelty utilities (think <a href="https://market.android.com/details?id=com.devuni.flashlight&amp;feature=search_result">Flashlight</a>), and otherwise simple apps are good examples that probably don&#8217;t benefit much from a native experience.</p>
<p>In my opinion, though, it&#8217;s a necessity for more complex apps, particularly ones leveraging native APIs, to use the UI that is  familiar to the device. They need to work in a simple, intuitive manner as mobile users can be quick on the trigger in deeming an app unfriendly. Those who have spent time developing for multiple platforms understand that <strong>the users of each platform have different expectations</strong>. </p>
<p>I don&#8217;t want a navigation bar in my Android app. I want my tabs at the bottom on iPhone, the top on Android. I want to press my menu button on Android to get my app&#8217;s options. I want my system buttons to look familiar. I want to pull to refresh on my iPhone. </p>
<p>Let me be clear that both Appcelerator and web-based frameworks have the ability to adapt their apps to supported platforms. And I don&#8217;t just mean churning out a basic app, I mean creating a high quality, native app. Depending on your point of view, however, one may be much more appealing than the other.</p>
<h2>Attending to the UI (Web-based)</h2>
<hr style="padding:0;margin:0;"/>
<table>
<tr>
<td>
<img src="http://savagelook.com/blog/wp-content/uploads/2011/08/jquery-mobile.png" alt="jQuery Mobile" title="" height="360" width="240"/></td>
<td>
<img src="http://savagelook.com/blog/wp-content/uploads/2011/08/hero-sencha-touch-1.0.jpg" alt="Sencha Touch" title="" /></td>
</tr>
</table>
<p>With web-based solutions, the app exists in a web view container. This means that you are effectively building a native app that consists of only a web view which hosts a web application. <strong>You have no native components with which to work</strong>. This leaves us with 2 options for building the UI of the app (super quick assessment coming): </p>
<ol>
<li>Use a 3rd party framework like <a href="http://jquerymobile.com/">jQuery Mobile</a> or <a href="http://www.sencha.com/products/touch/">Sencha Touch</a>
<ul>
<li>Pros</p>
<ul>
<li>Lots of functionality and UI components</li>
<li>Speeds up development process</li>
<li>Some, like Sencha Touch, have a very native look to their components.</li>
</ul>
</li>
<li>Cons
<ul>
<li>Web based framework UI is generally less responsive than ones created natively or with Appcelerator on mobile devices.</li>
<li>Additional learning curve for the added framework</li>
<li>You are even further removed from the native app. You now have a UI framework which sits on a native web view wrapper which then becomes a native app. Lots to know and lots of places for things to go wrong.</li>
<li>Frameworks like Sencha Touch are limited to webkit based web views (iOS, Android, BB 6.0+). This essentially removes the biggest advantage of web based frameworks, which is their compatibility.</li>
</ul>
</li>
</ul>
</li>
<li>Create the UI yourself with HTML/CSS/JS
<ul>
<li>Pros</p>
<ul>
<li>Totally customizable for any platform </li>
<li>Its easier to manage performance and UI inconsistencies when using code for only what you need to achieve</li>
<li>No additional learning curve beyond basic web dev and understanding your web based framework of choice. </li>
</ul>
</li>
<li>Cons
<ul>
<li>Much slower to develop, as you have to build your UI from scratch. The styling of the UI to look native all falls on you or external resources you can find.</li>
<li>Even for seasoned web devs, managing cross platform mobile CSS can be a daunting task. </li>
<li>All cross browser inconsistencies become your job to address, unless you use a light JS framework like <a href="http://xuijs.com/">xuijs</a> or <a href="http://zeptojs.com/">zeptojs</a>.</li>
</ul>
</li>
</ul>
</li>
</ol>
<p>So as you can see, web based mobile development encounters many of the same issues that traditional web development does. And the problem is compounded when you are trying to make these web based solutions look, feel, perform, and behave natively.</p>
<h2>Attending to the UI (Appcelerator)</h2>
<hr style="padding:0;margin:0;"/>
<p>Appcelerator apps are built differently. The extremely short version is that Appcelerator Javascript code is mapped to native symbols of the target platform. Any code that can&#8217;t be mapped to a native symbol is run through a Javascript interpreter. <a href="http://twitter.com/#!/jhaynie">Jeff Haynie</a>, CEO of Appcelerator, does a much better job of explaining it in <a href="http://stackoverflow.com/questions/2444001/how-does-appcelerator-titanium-mobile-work">this StackOverflow post</a>.</p>
<p>What this means that there are <strong>no 3rd party tools or special code necessary to create totally native components</strong>. You want a button that has native appearance and behavior on both iPhone and Android?</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> button <span style="color: #339933;">=</span> Ti.<span style="color: #660066;">UI</span>.<span style="color: #660066;">createButton</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>title<span style="color: #339933;">:</span><span style="color: #3366CC;">'test button'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<table>
<tr>
<td><img src="http://savagelook.com/blog/wp-content/uploads/2011/08/android-button.jpg" alt="Android button" title="" /></td>
<td>
<img src="http://savagelook.com/blog/wp-content/uploads/2011/08/iphone-button.jpg" alt="iPhone button" title="" /></td>
</tr>
</table>
<p>There you go, an Android and iPhone button respectively. How &#8217;bout a table view populated with sample data?</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> data <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span>title<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Row 1&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>title<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Row 2&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>title<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Row 3&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>title<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Row 4&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>title<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Row 5&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>title<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Row 6&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> table <span style="color: #339933;">=</span> Titanium.<span style="color: #660066;">UI</span>.<span style="color: #660066;">createTableView</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>data<span style="color: #339933;">:</span>data<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<table>
<tr>
<td><img src="http://savagelook.com/blog/wp-content/uploads/2011/08/android-table.jpg" alt="Android table view" title="" /></td>
<td>
<img src="http://savagelook.com/blog/wp-content/uploads/2011/08/iphone-table.jpg" alt="iPhone table view" title="" /></td>
</tr>
</table>
<p>Yep, it&#8217;s that simple. The iPhone table will even have the bounce scrolling users expect. You have the same simplicity that web based UI frameworks solutions provide, except you are additionally getting native look, feel, performance, and behavior. The components are even designable as you would expect them to be.</p>
<p>The one drawback to this simplicity is that without careful attention to your code, you can end up with a mess of interlacing UI and logic. Android has XML for layout, iOS has .nib/.xib files, web based solutions have HTML/CSS. Appcelerator, <em>for the time being</em>, relies solely on your Javascript code. Javascript MVC frameworks, like <a href="http://puremvc.org/">PureMVC</a>, and attention to best practices (as mentioned in the <a href="http://vimeopro.com/appcelerator/building-native-mobile-applications">online training videos</a>) can mitigate this risk. There are even some vague rumblings of a more declarative syntax for UI design in the future&#8230; </p>
<h2>Adaptation</h2>
<hr style="padding:0;margin:0;"/>
<p>So now that we know how UIs are built in both Appcelerator and web-based frameworks, how do we adapt them in such a way to deliver a native user experience? Despite the differences between the frameworks mentioned so far, the solution is fairly common among all frameworks. </p>
<p>While I will confidently say that Appcelerator has the abstraction that delivers the most familiar and device-specific experience, it too needs to account for usability that is not necessarily CORE. And even saying it is not CORE can be a bit of a misnomer as the same code base can be used by multiple platforms. It just requires the clever and judicious insertion of platform specific code facilitated by your mobile framework&#8217;s device identification APIs.</p>
<p>Let&#8217;s take a quick look at how Appcelerator identifies your device and can act on the information:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> osname <span style="color: #339933;">=</span> Titanium.<span style="color: #660066;">Platform</span>.<span style="color: #660066;">osname</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>osname <span style="color: #339933;">==</span> <span style="color: #3366CC;">'android'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// android specific code</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>osname <span style="color: #339933;">==</span> <span style="color: #3366CC;">'iphone'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// iphone specific code</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>osname <span style="color: #339933;">==</span> <span style="color: #3366CC;">'ipad'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// ipad specific code</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>For a more in depth example of how you can use this logic to create truly cross platform components and functionality, check out the 6 minute screencast <a href="http://developer.appcelerator.com/blog/2011/08/forging-titanium-episode-2-a-cross-platform-navigation-controller.html">&#8220;Forging Titanium: A Cross-Platform Navigation Controller.&#8221;</a> Or just watch this:</p>
<p><iframe src="http://player.vimeo.com/video/27834295?title=0&amp;byline=0&amp;portrait=0" width="600" height="375" frameborder="0"></iframe></p>
<p>And for reference, let&#8217;s look at PhoneGap&#8217;s adaptation method as well, just to show the similarities:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> platform <span style="color: #339933;">=</span> device.<span style="color: #660066;">platform</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> platform <span style="color: #339933;">==</span> <span style="color: #3366CC;">'Android'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// android specific code</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> platform <span style="color: #339933;">==</span> <span style="color: #3366CC;">'iPhone'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// iphone specific code</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> platform <span style="color: #339933;">==</span> <span style="color: #3366CC;">'BlackBerry'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// blackberry specific code</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Very similar indeed, but you need to consider the 2 prior &#8220;Attending to the UI&#8221; sections before calling them equal. Its the frequency with which you are required to apply this and other types of adaptation that affects the maintainability of your app as it grows.</p>
<h2>Minimizing Adaptation</h2>
<hr style="padding:0;margin:0;"/>
<p>It doesn&#8217;t take an expert software engineer to see that conditional checks on the device&#8217;s platform throughout your code isn&#8217;t ideal. It gets harder to maintain the more conditionals you include. It becomes apparent that we need our development framework to do most of this work for us.</p>
<p>In the case of Appcelerator, the need for conditional adaptation is minimized by the fact that you can utilize native UI components. Look back at our examples of the buttons and table views. There was no conditional code, no special handling. You get system specific components with no extra effort. </p>
<p>You really only need conditional code when you want to leverage native components that don&#8217;t have an equivalent on your other target platforms. For example, if you haven&#8217;t already, check out the <a href="http://developer.appcelerator.com/blog/2011/08/forging-titanium-episode-2-a-cross-platform-navigation-controller.html">Cross-Platform Navigation Controller video</a> above. It shows how you can use these conditionals to create navigation code that you can use seamlessly between iOS or Android.</p>
<p>Web based platforms also do a great job of creating an abstraction so that you don&#8217;t need to use conditionals for each supported platform. The problem, as discussed earlier, is that these abstractions don&#8217;t represent actual native components. They most often represent HTML/CSS/JS that are attempting to mimic native components. Worse yet, sometimes they are components that have no relation to existing native components, yet find themselves in native apps. As I said, this is a point of contention among mobile developers, and I&#8217;ll leave further discussion for the comments if necessary.</p>
<p>What web based frameworks can&#8217;t give you in native components, they provide in CSS, often applied dynamically via Javascript. The use of CSS is a double-edged sword. On one hand, you have a method of styling that not only allows you to skin your whole app, but also affords you the opportunity to gracefully degrade the styling based on the user&#8217;s device. This is why web based solutions typically support more platforms than ones like Appcelerator. Add all the bells and whistles like rounded corners, drop shadows, webkit transitions, etc&#8230; and if the device doesn&#8217;t support them, they will disappear without interrupting the user experience.</p>
<p>On the other hand, unless you are a CSS wizard with existing knowledge of CSS3 and how it applies to mobile, using it can be difficult. You can find yourself with mountains of CSS attempting to mimic components that are created with a single line of code in Appcelerator. For example, here&#8217;s a shiny iPhone button in pure CSS:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span>button<span style="color: #00AA00;">&#93;</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">&quot;Helvetica Neue&quot;</span><span style="color: #00AA00;">,</span> Helvetica<span style="color: #00AA00;">,</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1.3em</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">bold</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">97%</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">50px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#282726</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -webkit-gradient<span style="color: #00AA00;">&#40;</span> linear<span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">,</span> from<span style="color: #00AA00;">&#40;</span><span style="color: #cc00cc;">#e2e2e2</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> to<span style="color: #00AA00;">&#40;</span><span style="color: #cc00cc;">#8c8a88</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">0.5</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#acadae</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">0.5</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#82807e</span><span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">3px</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span> <span style="color: #933;">0px</span> <span style="color: #933;">1px</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc00cc;">#cecece</span><span style="color: #00AA00;">;</span>
  -webkit-background-origin<span style="color: #00AA00;">:</span> padding-box<span style="color: #00AA00;">;</span>
  -webkit-background-<span style="color: #000000; font-weight: bold;">clip</span><span style="color: #00AA00;">:</span> border-box<span style="color: #00AA00;">;</span>
  -webkit-border-radius<span style="color: #00AA00;">:</span> <span style="color: #933;">8px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span>button<span style="color: #00AA00;">&#93;</span><span style="color: #3333ff;">:hover</span><span style="color: #00AA00;">,</span> input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span>button<span style="color: #00AA00;">&#93;</span>.cancel<span style="color: #00AA00;">,</span>
input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span>button<span style="color: #00AA00;">&#93;</span><span style="color: #3333ff;">:active</span><span style="color: #00AA00;">,</span> input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span>button<span style="color: #00AA00;">&#93;</span><span style="color: #6666ff;">.cancel</span><span style="color: #3333ff;">:active </span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#fff</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span>button<span style="color: #00AA00;">&#93;</span><span style="color: #3333ff;">:hover</span><span style="color: #00AA00;">,</span> input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span>button<span style="color: #00AA00;">&#93;</span><span style="color: #6666ff;">.cancel</span><span style="color: #3333ff;">:hover </span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -webkit-gradient<span style="color: #00AA00;">&#40;</span> linear<span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">,</span> from<span style="color: #00AA00;">&#40;</span><span style="color: #cc00cc;">#aaaee5</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> to<span style="color: #00AA00;">&#40;</span><span style="color: #cc00cc;">#10006d</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">0.5</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#1F3B97</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">0.5</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#081f6f</span><span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span>button<span style="color: #00AA00;">&#93;</span><span style="color: #6666ff;">.cancel</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -webkit-gradient<span style="color: #00AA00;">&#40;</span> linear<span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">,</span> from<span style="color: #00AA00;">&#40;</span><span style="color: #cc00cc;">#5c5c5b</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> to<span style="color: #00AA00;">&#40;</span><span style="color: #cc00cc;">#1e1b16</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">0.2</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#1e1b16</span><span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">margin-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">6px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>It does the job, but man, it is really cumbersome. Again, this is all a factor of wanting to create a native experience. Some will contest that it does not need to be this complex, that as long as the UI is uniform it does not need to conform to the native expectations. This mentality, though, is typically only held by those who back mobile frameworks that are incapable of delivering that native experience.  As the local radio sports caster in Pittsburgh likes to  say, &#8220;Not hatin&#8217;, just sayin&#8217;.&#8221;</p>
<h2>Summary</h2>
<hr style="padding:0;margin:0;"/>
<p>You can&#8217;t beat web based mobile development for platform compatibility. Every mobile device has a browser that supports HTML/CSS/JS, right? You can create UIs that work on many platforms and degrade gracefully to handle lower end devices. Quality, usable apps are totally possible with these frameworks.</p>
<p>But the user doesn&#8217;t care how compatible your app is. They just want it to work, as they expect it to, on the device of their choice. In this respect, Appcelerator is unparalleled in the realm of cross platform solutions.</p>
<p>I have a strong suspicion that web based mobile technologies are only going to get better. I mean, let&#8217;s face it, the web isn&#8217;t going to be disappearing anytime soon. It will get faster, more functional, and closer to the expectations of the mobile user, just like desktop web browsers. And I, as a soon-to-be Appcelerator employee, welcome this. </p>
<p>As web based mobile development ups it game, so shall Appcelerator. Whether you&#8217;re an Appcelerator, web based, or native developer, it&#8217;s an exciting time&#8230; no matter what side of the fence you&#8217;re on.</p>
<p><a href="http://savagelook.com/blog/portfolio/code-once-adapt-everywhere-mobile">Code Once, Adapt Everywhere</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3297"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/code-once-adapt-everywhere-mobile/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sneak Peek at “Knuckle Head” for iPhone</title>
		<link>http://savagelook.com/blog/portfolio/sneak-peek-at-knuckle-head-for-iphone</link>
		<comments>http://savagelook.com/blog/portfolio/sneak-peek-at-knuckle-head-for-iphone#comments</comments>
		<pubDate>Wed, 10 Aug 2011 19:25:15 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3261</guid>
		<description><![CDATA[Here's a sneak peek at the iPhone version of Knuckle Head, built using Appcelerator.<p><a href="http://savagelook.com/blog/portfolio/sneak-peek-at-knuckle-head-for-iphone">Sneak Peek at &#8220;Knuckle Head&#8221; for iPhone</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>Knuckle Head, Take 2</h2>
<div style="clear:both;"></div>
<hr style="margin:0; padding:0;"/>
<p>Here&#8217;s a sneak peek at the soon-to-be-released iPhone version of my MMA fighter app Knuckle Head, built with <a href="http://www.appcelerator.com/" target="_blank">Appcelerator</a>. I chose to do the native <a href="https://market.android.com/details?id=com.savagelook.knucklehead&#038;feature=search_result" target="_blank">Android version</a> first, as it allowed me to iterate through versions very quickly, making changes as users gave me feedback. Now I can apply that feedback without having to go through Apple&#8217;s much slower approval process with each iteration.</p>
<p>There were 3 main drivers behind this port:</p>
<ul>
<li>The Android version has been rated really well so far, and I&#8217;ve had requests for an iPhone version.</li>
<li>I will be <a href="http://savagelook.com/blog/portfolio/appcelerators-latest-acquisition-me" target="_blank">joining the Appcelerator team</a> in a week and a half, so this seemed like a great way to sharpen my skills with it.</li>
<li>I was just curious how the download and ad fill rate numbers would stack up against each other with a niche app like this one on Android and iPhone.</li>
</ul>
<p>Also, there&#8217;s a chance I will open source this and put it all up on Github once it&#8217;s approved for the Apple App Store.  If there&#8217;s any interest let me know. If not, I&#8217;ll probably turn out some blog articles based on things I learned doing this port. The short version is that Appcelerator definitely has its quirks, but is in all likelihood going to be your fastest route to a quality iPhone app. I went from zero to complete port in about 20 hours of work.</p>
<p>And that doesn&#8217;t even get into the cross platform potential. Expect a lot of content going forward on how you can turn the &#8220;potential&#8221; of cross platform code into &#8220;actual&#8221; cross platform code using Appcelerator. </p>
<h2>Knuckle Head for iPhone video</h2>
<hr style="margin:0; padding:0;"/>
<p>So here it is, in all its water-marked, sub par quality glory. You&#8217;ll have to forgive those issues, I&#8217;m currently evaluating <a href="http://www.telestream.net/screen-flow/" target="_blank">ScreenFlow</a>. Seems like a good tool so far, but I don&#8217;t like shelling out $99 for software without playing around with it a little bit.</p>
<table style="width:100%">
<tr>
<td style="text-align:center;">
<iframe width="360" height="720" src="http://www.youtube.com/embed/4y4dFTADUY4?hd=1" frameborder="0" allowfullscreen></iframe>
</td>
</tr>
</table>
<p><a href="http://savagelook.com/blog/portfolio/sneak-peek-at-knuckle-head-for-iphone">Sneak Peek at &#8220;Knuckle Head&#8221; for iPhone</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3261"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/sneak-peek-at-knuckle-head-for-iphone/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Appcelerator’s Latest Acquisition… Me!</title>
		<link>http://savagelook.com/blog/portfolio/appcelerators-latest-acquisition-me</link>
		<comments>http://savagelook.com/blog/portfolio/appcelerators-latest-acquisition-me#comments</comments>
		<pubDate>Fri, 29 Jul 2011 13:47:06 +0000</pubDate>
		<dc:creator>Tony Lukasavage</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://savagelook.com/blog/?p=3250</guid>
		<description><![CDATA[Say hello to the latest member of the Appcelerator team<p><a href="http://savagelook.com/blog/portfolio/appcelerators-latest-acquisition-me">Appcelerator&#8217;s Latest Acquisition&#8230; Me!</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>2 Days in the Valley</h2>
<div style="clear:both;"></div>
<hr style="padding:0; margin:0;"/>
<p>Yes, the developer/blogger with no allegiance to any mobile platform has finally found a home. I spent 2 days in Silicon Valley at Appcelerator HQ meeting the crew and getting to know more about them. In that time I had the pleasure of speaking with <a href="http://twitter.com/fusion94">Tony Guntharp</a>, <a href="http://twitter.com/jhaynie">Jeff Haynie</a>, <a href="http://www.linkedin.com/in/sschwarzhoff">Scott Schwarzhoff</a>, <a href="http://twitter.com/kwhinnery">Kevin Whinnery</a>, <a href="http://twitter.com/mattapperson">Matt Apperson</a>, and <a href="http://www.linkedin.com/in/mindelusions">Anthony Decena</a>.  Needless to say, I was <strong>VERY</strong> impressed by them as individuals and as a team.</p>
<p>As it turns out, although I&#8217;ve been very critical as of late regarding Appcelerator, they respected the concerns I brought forth. They actually seemed to view them as a blessing in disguise. For every loudmouth like me there&#8217;s 100 who make no mention of their issues with the platform.</p>
<p>Major efforts are currently underway to make Appcelerator even more developer friendly. If you have not heard yet, as of the <a href="http://www.appcelerator.com/products/download/">1.2.0 release of Titanium Studio</a>, integrated mobile debugging is now free.  As you might have guessed, this was a big talking point between me and the Appcelerator guys in light of the less than complimentary <a href="http://savagelook.com/blog/portfolio/appcelerator-charging-for-integrated-debugging-phonegap-doing-it-for-free">post</a> I wrote regarding their initial charging for it, which has since been ammended.</p>
<p>In addition to free debugging, Appcelerator has made a copious amount of <a href="http://developer.appcelerator.com/on-demand-training">training videos</a> free for developers. As a compliment to their existing <a href="http://developer.appcelerator.com/apidoc/mobile/latest">API documentation</a>, <a href="http://wiki.appcelerator.org/display/guides/Home">wiki</a>, and <a href="http://developer.appcelerator.com/questions/newest">Q&amp;A section</a>, these videos are more than just a quick start.  They deal in depth with coding conventions and best practices for developing high quality Appcelerator apps.</p>
<p>So where do I fit in? I will be in the role of a Platform Evangelist. Yeah, I know, sell out.  But hey, at some point you need to pick a horse and commit. And in the advent of the incredible popularity of DOM-less Javascript (see <a href="http://nodejs.org/">Node.js</a>) and mobile development, it only made sense to pick the platform that is championing both. Plus, with the brief look I got under the hood of Appcelerator&#8217;s operations, I see nothing but <strong>exciting</strong> things coming, things I would love to be part of.</p>
<h2>Things to Come</h2>
<hr style="padding:0; margin:0;"/>
<p>What does this mean for the content of my blog? Not sure yet, but don&#8217;t count on it turning into Appcelerator-only love-fest. There&#8217;s just too many other things I&#8217;m interested in. Obviously much of my work will be geared towards Appcelerator and showing off what it can do. In doing so, though, I&#8217;ll fortunately have plenty of opportunities to demonstrate native Android and iOS code, code that can then be turned into <a href="http://www.appcelerator.com/products/titaniumplus/">Appcelerator modules</a>. Yes, it is a very interesting time indeed.</p>
<p>Stay tuned&#8230;</p>
<p><a href="http://savagelook.com/blog/portfolio/appcelerators-latest-acquisition-me">Appcelerator&#8217;s Latest Acquisition&#8230; Me!</a> is a post from: <a href="http://savagelook.com/blog">SavageLook.com</a></p>
<div class="shr-publisher-3250"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://savagelook.com/blog/portfolio/appcelerators-latest-acquisition-me/feed</wfw:commentRss>
		<slash:comments>5</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! -->

