<?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>Distractable &#187; Coding</title>
	<atom:link href="http://distractable.net/category/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://distractable.net</link>
	<description>embracing distractions of the digital age</description>
	<lastBuildDate>Mon, 05 Jul 2010 00:35:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Refactored Draw Code in SlickJS (Again)</title>
		<link>http://distractable.net/coding/refactored-draw-code-in-slickjs-again/</link>
		<comments>http://distractable.net/coding/refactored-draw-code-in-slickjs-again/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 00:35:01 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sidelab]]></category>
		<category><![CDATA[slickjs]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1491</guid>
		<description><![CDATA[Late last week I refactored the draw code in Slick JS (http://github.com/sidelab/slick) again. I&#8217;ve been pretty frustrated that I didn&#8217;t get the drawing logic right first time, but I think I&#8217;ve come to terms with it. Here are the major changes. Invalidation (request to repaint) on demand functionality change Prior to this update, parts of [...]]]></description>
			<content:encoded><![CDATA[<p>Late last week I refactored the draw code in Slick JS (<a href="http://github.com/sidelab/slick">http://github.com/sidelab/slick</a>) again.  I&#8217;ve been pretty frustrated that I didn&#8217;t get the drawing logic right first time, but I think I&#8217;ve come to terms with it.  Here are the major changes.</p>
<p><span id="more-1491"></span><strong>Invalidation (request to repaint) on demand functionality change</strong><br />
Prior to this update, parts of the code that needed the display would request that the display updates itself with an invalidate command &#8211; something other old Delphi custom control writers would probably recognise.  This was starting to become inefficient, and while I tried a few different ways of improving the performance &#8211; you know like using setTimeout and clearTimeout to prevent lots of redraws nothing really worked out.  </p>
<p>The draw operation is now done in an setInterval callback which is set to fire every 40ms (basically equating to 25fps for draw).  Yes, I know that all of you smarty pants out there will say this was obviously the way to go, but for some reason I thought I could implement an on-demand drawing system better (that maxed out at a 25fps draw rate).  Anyway, lesson learned &#8211; the animation loop is in and it&#8217;s working really well.</p>
<p>Essentially, the invalidate command still exists and is used to inform a SLICK.Graphics.View (api doc to come) that something is actively requiring redraws (such as a panning or pinch zoom operation).  That just triggers a flag that means we need to lay off heavy buffer redraws while this is going on. </p>
<p><strong>Created a ViewLayer &#8220;class&#8221; in addition to View</strong><br />
Prior to this refactoring, the tiling and mapping classes extended the functionality contained in the View.  However, things were starting to be come a little unwieldy and seperate drawing operations weren&#8217;t terribly well encapsulated.  As such I introduced a ViewLayer to serve as a mechanism for encapsulating that draw code.  Essentially, a ViewLayer has a z-index and can be buffered or unbuffered (i.e. it draws directly to the View canvas as opposed to an offscreen buffer, which is then drawn across).  Since creating the ViewLayer class I have been able to encapsulate nicely a Radar Overlay, a cross hair Overlay, copyright text for the maps, etc and most importantly been able to implement zooming behaviour for the maps in a way that provides the experience that we are all used to (I&#8217;ll post more on this later).  Anyway, I&#8217;m very happy with the result and if anyone want to checkout the code &#8211; feel free to have a look on Github.  The following modules are probably of most interest:</p>
<ul>
<li><a href="http://github.com/sidelab/slick/blob/master/src/js/graphics.js">http://github.com/sidelab/slick/blob/master/src/js/graphics.js</a></li>
<li><a href="http://github.com/sidelab/slick/blob/master/src/js/tiling.js">http://github.com/sidelab/slick/blob/master/src/js/tiling.js</a></li>
<li><a href="http://github.com/sidelab/slick/blob/master/src/js/mapping/ui.js">http://github.com/sidelab/slick/blob/master/src/js/mapping/ui.js</a></li>
</ul>
<p>Right, onto implementing the RouteOverlay to enable displaying a route on a map&#8230;</p>
<p>Any questions, comments, etc, then feel free to leave something below or comment over on Github (I think you can do that)&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/refactored-draw-code-in-slickjs-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Two Javascript Libraries: Slick and Grunt</title>
		<link>http://distractable.net/coding/introducing-two-javascript-libraries-slick-and-grunt/</link>
		<comments>http://distractable.net/coding/introducing-two-javascript-libraries-slick-and-grunt/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 02:05:05 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sidelab]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1488</guid>
		<description><![CDATA[I&#8217;ve been particularly quiet on the blog and twitter of late, primarily given I have been working very hard pulling on two javascript libraries (well it was one, but I&#8217;m separating them &#8211; you know they were causing trouble). While I won&#8217;t go into a lot of detail here, as there is still a lot [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been particularly quiet on the blog and twitter of late, primarily given I have been working very hard pulling on two javascript libraries (well it was one, but I&#8217;m separating them &#8211; you know they were causing trouble).  While I won&#8217;t go into a lot of detail here, as there is still a lot more work to do, I will try and give a brief introduction to both and why on earth I&#8217;m writing yet another javascript library.</p>
<p><span id="more-1488"></span>As someone who is passionate about <a href="/tag/mobile">cross platform mobile development</a> when it came time to build a mapping application, I believed very strongly this could be done using cross-platform, web-based techniques.   Additionally, I am complete agreement with http://jonathanstark.com/blog/>Jonathan Stark</a> regarding his take on <a href="http://jonathanstark.com/blog/2010/04/05/phonegap-vs-titanium-mobile-et-al/">why you should write cross-platform mobile apps using web techniques</a>.  I&#8217;d recommend getting <a href="http://www.bookdepository.co.uk/book/9780596805784/Building-iPhone-Apps-with-HTML-CSS-and-JavaScript">his book</a>, BTW.  Anyway, I&#8217;m getting off track &#8211; basically the goal is to write a mapping application in such a way that it could be deployed natively using any of the <a href="coding/cross-platform-mobile-mapping-challenge-results-part-1/">cross platform mobile frameworks</a> out there.  So what tools do you have to do that?</p>
<p>Well, I guess let&#8217;s start with what we do have.  For the user interface we can probably choose either <a href="http://jqtouch.com/">jQTouch</a> or <a href="http://code.google.com/p/iui/">iUI</a> (or <a href="www.sencha.com/products/touch/">Sencha Touch</a> if you are currently* writing an opensource app).  When the dust clears from Sencha&#8217;s unveiling I may try and do a comparison of the pros and cons of each of these, but not now &#8211; suffice to say they will all do the job quite nicely.</p>
<p>So, we got some UI elements, what else do we need &#8211; oooh I know, a map!  Well mapping APIs are pretty much written in javascript so they should all work right, well, yes, kind of, but at the same time no.  The current suite of javascript mapping toolkits are very much geared towards mouse driven interfaces and don&#8217;t really cater for touch interfaces (i.e. no pinch and zoom).  And while I did hack around with javascript API of the <a href="http://decarta.com/">deCarta mapping platform</a> that is being used by my current client, it really didn&#8217;t cut the mustard.  Why not?  Well primarily, because the majority of those older API&#8217;s have had to cater for a lot of older browsers and to their credit they have done very impressive things to get online maps to where they are today &#8211; but it&#8217;s time to cut out the fat.</p>
<p><strong>Enter SLICK</strong><br />
<a href="http://github.com/sidelab/slick">http://github.com/sidelab/slick</a><br />
Slick was primarily born to create a HTML5 canvas based tiling map layer to meet the needs of the mapping application that I am currently writing. But I don&#8217;t like writing things that can only be used for one thing.  As such, I&#8217;ve tried to nicely abstract and provide useful wrappers for capturing touch events and building sliding tiling interfaces of different kinds.  I even started to write some UI components, but I&#8217;m going to rip those out because they don&#8217;t belong (I might create a SLICK UI lib, but we&#8217;ll see how we go).  </p>
<p>In the first instance, Slick was very much built on jQuery (and it definitely still relies on it in certain places).  I have, however, come to realize (through frustration) that building a dependency in like jQuery is a pretty dangerous thing and a simple thing like the different ways jQuery handles ajax calls between 1.3.2 and 1.4.2 can definitely stuff you around.  As such, I am in the process of decoupling reliance on jQuery.  I don&#8217;t love it any less, it&#8217;s just that Slick can&#8217;t need it.  So what do I miss most about not have jQuery?  Selectors &#8211; no, I miss them, but I can always integrate Sizzle.  Really simple AJAX calls &#8211; no, they betrayed me ;(  The thing I miss most in not having jQuery is <a href="http://api.jquery.com/jQuery.extend/">jQuery.extend</a>.</p>
<p><strong>Enter GRUNT</strong><br />
<a href="http://github.com/sidelab/grunt">http://github.com/sidelab/grunt</a><br />
I need an extend mechanism, and while I searched for a javascript library that provided just the core requirements for building a javascript library (extend, ajax, etc) I couldn&#8217;t find one anywhere (please let me know if you know of one).   As such, I started integrating some of the core useful jQuery stuff into Slick.  Then I thought, hang on, I&#8217;m just doing what everyone else is doing, so I stopped.  I then started removing core modules / functions that I was using from Slick and putting them into a new library that I have called Grunt (it does the Grunt work).   The extend mechanism is implemented as per the jQuery one (if any brave souls think they can write a better, one I&#8217;d be happy to see the library forked).  I&#8217;ve also implemented ajax handling from the ground up (which needs quite a bit more work).  There&#8217;s some XPath wrappers and other stuff, so if you are interested, then have a look.</p>
<p><strong>Use at your own risk</strong><br />
At the moment, both SLICK and GRUNT are very much works in progress.  In the areas that I&#8217;m using them extensively they are both quite stable, but I expect that people will be able to break them with relative ease in different usage scenarios.  If you are feeling brave / bored, however, I would love feedback on either library (GRUNT will likely die if I can find someone who has already invested effort in creating a similar base library).  Additionally, once things get a little less busy for me (which is currently looking like sometime in 2012, I hope to put together some demos for Slick showing what it can do).</p>
<p>In the interim, feedback welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/introducing-two-javascript-libraries-slick-and-grunt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come on Brisbane &#8211; Let&#8217;s RHoK Sydney</title>
		<link>http://distractable.net/coding/come-on-brisbane-lets-rhok-sydney/</link>
		<comments>http://distractable.net/coding/come-on-brisbane-lets-rhok-sydney/#comments</comments>
		<pubDate>Wed, 26 May 2010 00:36:34 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[events]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1465</guid>
		<description><![CDATA[Through the wonder&#8217;s of twitter I found out about the Random Hacks of Kindness event that is going down in Sydney in about a week and a half&#8217;s time (Saturday June 5 &#8211; Sunday June 6). Personally, I think this is one of the better hackathon&#8217;s I have seen organised as it&#8217;s not only about [...]]]></description>
			<content:encoded><![CDATA[<p>Through the wonder&#8217;s of twitter I found out about the <a href="http://rhoksydney.eventbrite.com/">Random Hacks of Kindness</a> event that is going down in Sydney in about a week and a half&#8217;s time (Saturday June 5 &#8211; Sunday June 6).  Personally, I think this is one of the better hackathon&#8217;s I have seen organised as it&#8217;s not only about talented devs getting together, but also about building apps that can potentially make the world a better place.  Something I&#8217;m sure we&#8217;d all like to get involved with.</p>
<p><span id="more-1465"></span>Personally I&#8217;d love to see a strong Brisbane contingent hit Sydney and put a few teams together to showcase the talent that is kicking around up here, and all for a good cause.  There&#8217;s definitely a few people that I have in mind, and yes, I&#8217;ll probably be hunting you down <img src='http://distractable.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Thanks to <a href="http://squigglemum.com/">SquiggleMum</a> for giving me the green light to go and participate in what I think is going to be an awesome experience &#8211; just having a look around at flights, it looks like it would be about $100 each way with Virgin Blue. But interested to see what other people can find around the place if we do manage to get a few people together.</p>
<p>Come on, you know you want to &#8211; <a href="http://rhoksydney.eventbrite.com/">register for the event</a>.  If you can&#8217;t go to the event, and still feel like making a difference to the world, maybe you should think about sponsoring a child through either <a href="http://www.compassion.com.au/">Compassion</a> or <a href="http://worldvision.com.au/">World Vision</a> (both excellent Child Aid organisations).</p>
<p><em>Oh, and I forgot to mention, the event is free (thanks to some kind sponsors) with food and drink provided.  Now, if you need more than that, you are just being hard to please.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/come-on-brisbane-lets-rhok-sydney/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>If I Could Forget a Programming Language</title>
		<link>http://distractable.net/coding/forget-a-programming-language/</link>
		<comments>http://distractable.net/coding/forget-a-programming-language/#comments</comments>
		<pubDate>Mon, 24 May 2010 11:36:21 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[opinion]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1448</guid>
		<description><![CDATA[As I get back into &#8220;coding for money&#8221; again after a couple of years of being paid to manage people, projects, technology, etc. I am once again diving into different languages to look at what are going to be the truly productive and innovative languages over the next few years. As I do this, I [...]]]></description>
			<content:encoded><![CDATA[<p>As I get back into &#8220;coding for money&#8221; again after a couple of years of being paid to manage people, projects, technology, etc. I am once again diving into different languages to look at what are going to be the truly productive and innovative languages over the next few years.  As I do this, I reflect on some of the syntax and library clutter in my mind from having coded in a number of languages over the years, and wonder which of those I&#8217;d be most happy to forget (Johnny Mnemonic style) to make room for the new ones&#8230;</p>
<p><span id="more-1448"></span>Well, here we go, and just as a side note I&#8217;ve flip-flopped between windows and web programming so it&#8217;s going to be a mix of both.</p>
<p><strong>Windows: Borland C++ Builder (C++)</strong><br />
Used for windows development.  Clunky syntax and a very poor cousin compared to Delphi.  It sucked almost as much as I did back then.  While we owe a lot to C and C++, I doubt we owe very much to Borland&#8217;s variant.</p>
<p>Verdict: <em>Forgettable</em></p>
<p><strong>Windows: Borland Delphi</strong><br />
Anyone who knows me, knows not to get me started on Delphi.  One of the great object-oriented programming languages + supporting toolkits of our time &#8211; largely due to the genius of <a href="http://en.wikipedia.org/wiki/Anders_Hejlsberg">Anders Hejlsberg</a>.  Sadly Delphi could never stand up against the momentum of Visual Basic, and has largely disappeared into history.  Pity, it was simple to do the simple things and proportionally difficult to do the difficult things &#8211; you could even embed ASM if you were feeling ambitious. </p>
<p>Verdict: <em>Unforgettable</em></p>
<p><strong>Web: Perl</strong><br />
I certainly learned a lot about coding for the web from Perl, and while the language itself is not as popular today as it once was, it&#8217;s still pretty solid.  As tempting as it is to write that the language is forgettable just to stir up a good friend of mine, Perl has done too much for the web just to belittle it for the sake of my own amusement (it was close though).</p>
<p>Verdict: <em>Unforgettable</em></p>
<p><strong>Web: Cold Fusion</strong><br />
I have to admit, I&#8217;m in two minds with regards to Cold Fusion.  It was a language that didn&#8217;t really do anything too special out-of-the-box but what you could do was just super simple to do.  Additionally, as the product did mature and became a J2EE web app you could do cool things like access java libraries, etc, so that was pretty nifty.   Still, I think I could afford to forget&#8230;</p>
<p>Verdict: <em>Forgettable</em></p>
<p><strong>Web: ASP.NET</strong><br />
By rights, DOT.NET should have been the holy grail of web application development for me.  The C# language was built by my old Delphi friend &#8211; Microsoft wooed him to the dark side <img src='http://distractable.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  and it promised a real re-thinking of application development in general.  Somewhere along the way, though it seemed to lose it&#8217;s way.  I got into ASP.NET at 2.0 and you could do some cool things then, but then Microsoft felt the need to implement AJAX coding in a completely half-baked way and I had flashbacks to the holy wars of Delphi vs Visual Basic.  There is no doubt that .NET is a big deal, and I built some pretty good web apps using that technology, but it wasn&#8217;t thanks to the patterns and practices promoted by Microsoft.  If you are going to code in .NET then I&#8217;d recommend checking out a local alt.net group for using the technology effectively.</p>
<p>Verdict: <em>Forgettable</em></p>
<p><strong>Web: Javascript</strong><br />
To close out the languages that I have coded in professionally, javascript definitely deserves a mention.  It&#8217;s the poor orphan language that nobody thought would amount to anything but with some talented and outspoken people like <a href="http://ejohn.org/">John Resig</a> and <a href="http://www.crockford.com/">Douglas Crockford</a> massaging, promoting and educating people how to use it, it&#8217;s become one of the great enablers of the modern web application.  Honestly, whatever server-side language you decide to use, make sure you skill up in javascript.  I&#8217;ve never trusted server-side javascript generators and even if you use them you should know what you are dealing with in terms of the code they generate.  For some fun, why not check out server-side javascript goodness like <a href="http://www.nodejs.org/">node.js</a> or <a href="http://www.jaxer.org/">jaxer</a>.</p>
<p>Verdict: <em>Unforgettable</em> or <em>Forget at your peril</em></p>
<p><strong>The Potential Replacements</strong></p>
<p>Currently I&#8217;m using (or looking at) the following languages, and only time will tell whether they will be deemed life-changing and unforgettable, or as <a href="http://en.wikipedia.org/wiki/Arnold_Rimmer">Rimmer</a> would say &#8220;languages I&#8217;ve met&#8221; (note: creative license).</p>
<ul>
<li><a href="/tag/python">Python</a> (with <a href="/tag/django">Django</a>) &#8211; unforgettable for speed and general arrogance of the language <img src='http://distractable.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Ruby &#8211; never intended to use, but things have a funny way of working out.  Jury&#8217;s out.</li>
<li><a href="/tag/groovy">Groovy</a> &#8211; definitely unforgettable &#8211; closures I love you.  But not more than <a href="http://squigglemum.com/">SquiggleMum</a> &#8211; if that were true I&#8217;d be a dead man.</li>
<li>&lt;Insert unforgettable functional programming language here&gt; &#8211; preferably not JVM based, suggestions welcome.</li>
</ul>
<p>Feel free to step in and defend your beloved languages if you feel an injustice has been done, or leave your language baggage in the form of a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/forget-a-programming-language/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Cross Platform Mobile Mapping Challenge Results &#8211; Part 1</title>
		<link>http://distractable.net/coding/cross-platform-mobile-mapping-challenge-results-part-1/</link>
		<comments>http://distractable.net/coding/cross-platform-mobile-mapping-challenge-results-part-1/#comments</comments>
		<pubDate>Mon, 17 May 2010 23:34:26 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1405</guid>
		<description><![CDATA[Last week I started a 5 day exercise to re-evaluate the various frameworks that are at the disposal of developers for the purpose of iPhone and Android cross platform mobile development. This time, the focus was on what the various frameworks had to offer if I was to build a mapping application for multiple different [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I started a <a href="/coding/5-day-cross-platform-mobile-mapping-application-challenge/">5 day exercise</a> to re-evaluate the various frameworks that are at the disposal of developers for the purpose of <a href="/coding/iphone-android-web-application-frameworks/">iPhone and Android cross platform mobile development</a>.  This time, the focus was on what the various frameworks had to offer if I was to build a mapping application for multiple different mobile platforms.</p>
<p>This is part 1 of the wrap up from that week &#8211; a comparison of the native bridges for cross platform iPhone and Android web app development.</p>
<p><span id="more-1405"></span>The three candidate frameworks that were compared last week were PhoneGap, RhoMobile and Appcelerator.  Each of the products takes a slightly different approach to native device integration, so while all three appear very similar on the surface they do have distinct differences.  The right platform for you will largely depend on the style of application you are building and your preferred coding style.  Without further ado, let&#8217;s take a look at an overview of each of the frameworks.  After that, we&#8217;ll have a look at which framework I have decided to take forward to develop a mapping application and why.</p>
<p><strong>PhoneGap</strong><br />
<a href="http://www.phonegap.com/">phonegap.com</a><br />
PhoneGap is a native bridging framework in the purest sense.  It is an enabler for accessing the native capabilities of a multitude of devices using web technologies as much as possible.  You can write web applications with hooks into the native capabilities of the device in your javascript code.  Structure your application well and you should be able to support progressive enhancement using those additional native capabilities.  Once you have done this, you should very easily be able to make your application available through both the device application stores and online at a url of your choosing.</p>
<p><strong>Choose PhoneGap If&#8230;</strong></p>
<ul>
<li>You are a writing (or have written) a mobile web application or site and want to access the native application stores and/or the native capabilities on a number of devices.</li>
<li>You have experience with HTML / CSS / Javascript technologies, and the neither of the differential offerings in Rhodes (Rhomobile) or Titanium (Appcelerator) appeal to you.</li>
</ul>
<p><strong>Rhodes by Rhomobile</strong><br />
<a href="http://rhomobile.com/products/rhodes/">http://rhomobile.com/products/rhodes/</a><br />
While in my <a href="/coding/iphone-android-web-application-frameworks/">previous post comparing mobile web frameworks</a> I shyed away from Rhodes due to a preference for Python over Ruby, I gave it a more solid shot this time.   While it took longer to gain familiarity with the framework due to the extensive use of Ruby and Rails-like architecture, once you get the hang of it you can definitely appreciate some of what Rhomobile are trying to provide you in a mobile application framework.</p>
<p>Whereas PhoneGap take a very bare-bones framework approach to a native bridging framework, Rhodes provides an architecture for building data-driven mobile apps that will be very familiar to developers who are familiar with Rails or similar MVC frameworks.   Additionally, Rhomobile provide a number of additional services that can enable you to create a mobile application with supporting data stores without having to look beyond their <a href="http://rhohub.com/">RhoHub</a> and <a href="http://rhomobile.com/products/rhosync/">RhoSync</a> products.   While I have a strong preference for using server-side solutions such as <a href="/tag/appengine/">AppEngine</a> for providing the remote component pieces of a mobile application, and wiring it all together myself, there are times when using something like RhoHub could definitely be appealing.  There are some <a href="http://rhohub.com/pricing">costs associated with using RhoHub</a> though, so make sure you investigate these before jumping in boots and all. </p>
<p><strong>Choose Rhodes If&#8230;</strong></p>
<ul>
<li>You have experience with Rails and the Ruby language and are looking to create mobile applications.</li>
<li>You are interested in created a data-driven mobile application and are looking for a framework that is geared strongly towards supporting those kind of apps.</li>
</ul>
<p><strong>Titanium Appcelerator</strong><br />
<a href="http://www.appcelerator.com/products/titanium-cross-platform-application-development/">http://www.appcelerator.com/</a><br />
Titanium is probably one of the most ambitious of the native bridges that I looked at in any sort of depth.  Appcelerator&#8217;s pitch is slightly different to the other frameworks in that they are pushing to achieve <em>Cross Platform Native Development</em> &#8211; both for desktop and mobile operating systems.  This is definitely a big task, given the progressive nature of the mobile SDKs especially.   With the amount of work that is required to support native controls and application components on a device, Titanium doesn&#8217;t yet have the same breadth of device support that both PhoneGap and Rhodes have &#8211; currently they support both iPhone and Android, and a Blackberry beta is scheduled for release soon.  I don&#8217;t consider this a problem right now, as I&#8217;m taking quite a blinkered view to cross platform support myself at this stage prioritizing iPhone and Android above all other platforms.</p>
<p>Coding in Titanium is definitely a pleasant experience, as development is done completely with javascript.  Additionally, framework components make the task of developing the app quite a straightforward process with a nice UI for starting and logging in your applications while developing.   Plus the buzz of seeing a native control created from writing javascript rather than Objective-C feels very good indeed.</p>
<p><strong>Choose Titanium If&#8230;</strong></p>
<ul>
<li>You really want to develop a cross-platform native mobile application using javascript, rather than Objective-C.</li>
<li>Are focused primarily on iPhone and Android handsets (and soon Blackberry).</li>
</ul>
<p><strong>Impacts for a Mapping Application</strong><br />
While I started the week looking for something in one of the frameworks that would differentiate one framework from another for building a mapping application, I didn&#8217;t really find one in particular.  Both Rhodes and Titanium are pushing the envelope and offer native mapping controls for various platforms (Rhodes does have wider device support currently), both implementations only provide support for displaying a map and pinning annotations on the map at a particular latitude and longitude.  Satisfactory for some apps, but I need to go further than that.  </p>
<p>Additionally, not suprisingly both frameworks support native maps for Google Maps only out of the box, and the complication I have is that in this instance I need to develop for the deCarta mapping platform (despite my love of other things Google &#8211; <a href="/tag/appengine/">AppEngine</a>, <a href="/tag/android/">Android</a>, Wave, etc).</p>
<p><strong>Mobile Web Application Framework of Choice (for me)</strong><br />
Firstly, let me say this was not an easy decision to make, a number of factors contributed to my decision.  Based on the evaluation I completed, my experience over the 5 days regarding what could be achieved in each of the frameworks and how, and additionally my understanding of each product&#8217;s roadmap moving forwards I will be going with (drum-roll please&#8230;): <a href="http://rhomobile.com/products/rhodes">Rhodes</a>.  Here&#8217;s why:</p>
<ul>
<li>Despite not being a Rails user (or avid fan), what was offered through the MVC framework that underpins Rhodes does support the creation of scalable, maintainable cross-platform mobile web applications.</li>
<li>Titanium provided quite a significant distraction with the access to native controls in their framework, until I sat back and remembered that wasn&#8217;t <em>my core focus</em>.  Appcelerator are offering <strong>mobile cross platform native development</strong>, whereas my focus is on <strong>mobile cross platform web development</strong>.  The titanium approach is very appealling right now, but in a couple of years I believe will be less necessary.</li>
<li>While PhoneGap provides excellent component pieces for bridging a web application to the native capabilities of a device, the Rhodes architecture (once I had the hang of it) offerred a little more.</li>
<li>Finally, and probably most importantly, I had some conversations with <a href="http://twitter.com/adamblum">Adam Blum</a> regarding the direction in which they are wanting to take Rhodes and Rhomobile in general.  From those conversations, I was able to see some alignment between this application (and future application) goals and their roadmap &#8211; which is quite exciting.</li>
</ul>
<p><strong>Questions? Clarification?</strong><br />
If you have any questions, or if I haven&#8217;t provided enough detail on any of the points please feel free to leave a comment below.  Additionally, if you are involved with development of either PhoneGap, Rhodes or Titanium and I have missed the mark on anything, please leave a comment below to clarify.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/cross-platform-mobile-mapping-challenge-results-part-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>5 Day Cross Platform Mobile Mapping Application Challenge</title>
		<link>http://distractable.net/coding/5-day-cross-platform-mobile-mapping-application-challenge/</link>
		<comments>http://distractable.net/coding/5-day-cross-platform-mobile-mapping-application-challenge/#comments</comments>
		<pubDate>Sun, 09 May 2010 23:12:22 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1384</guid>
		<description><![CDATA[Well, I&#8217;m now officially out of the corporate world and Sidelab has been in business for a week now . On the cards for this week are 5 days of non-chargeable work (eek) that I have allotted to determine whether a mobile mapping application can be implemented using some of the iPhone and Android mobile [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;m now officially out of the corporate world and <a href="http://www.sidelab.com/">Sidelab</a> has been in business for a week now <img src='http://distractable.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .  On the cards for this week are 5 days of non-chargeable work (eek) that I have allotted to determine whether a mobile mapping application can be implemented using some of the iPhone and Android mobile development toolkits that are currently available (PhoneGap, AppCelerator, RhoMobile, etc).  Targeted platforms at this stage are iPhone and Android only. </p>
<p>To add an extra layer of complexity I will be doing this using the <a href="http://www.decarta.com/">deCarta Mapping Platform</a> rather than Google Maps, as I&#8217;ve had some experience with the deCarta platform in the past and found it to be technically very good.</p>
<p><span id="more-1384"></span>To get started, here is the rough schedule I have worked out for the week:</p>
<p><strong>Day One and Two &#8211; Identify Best Fit for Purpose Cross Platform Toolkit</strong></p>
<ul>
<li>High level investigation implementing mapping application in what I believe are the current top three cross-platform mobile frameworks:
<ul>
<li><a href="http://phonegap.com/">PhoneGap</a></li>
<li><a href="http://appcelerator.com/">Appcelelerator</a></li>
<li><a href="http://rhomobile.com/">Rhomobile</a></li>
</ul>
<p><em>Basic goal is to have a simple tiling map display implemented using each toolkit.  Ideally in the deCarta platform.</em>
</li>
<li>Identify potential barriers for later-stage implementation, and push the boundaries a bit.</li>
</ul>
<p><strong>Day Three &#8211; UI Toolkit Investigation</strong></p>
<ul>
<li>Investigate most suitable HTML UI toolkit for implementing a slick UI that behaves itself on both iPhone and Android. Current candidates are:
<ul>
<li><a href="http://jqtouch.com/">jQTouch</a></li>
<li><a href="http://code.google.com/p/iui/">iUI</a></li>
</ul>
</li>
</ul>
<p><strong>Day Four &#8211; Push &#8220;Most Promising&#8221; Platform</strong><br />
Based on the results of days one to three, push the selected development framework plus supporting mobile web UI (if required &#8211; would be of little use in Appcelerator) to try and anticipate future problems that might occur in a cross-platform approach to a mapping application.</p>
<p><strong>Day Five &#8211; Compare back against deCarta Native iPhone API</strong><br />
deCarta do have an iPhone API available as a Beta &#8211; available from their <a href="http://devzone.decarta.com/">devzone</a> (registration required).  Some comparisons will be done against the general feel of the iPhone native application vs a cross-platform alternative to determine if and where usability is compromised using a cross-platform approach.</p>
<p><em>I&#8217;ll be attempting to post an update of each day / phases results so if you wish to keep up-to-date with progress, please <a href="http://feeds.feedburner.com/distractable" title="Subscribe to Distractable">subscribe to the Distractable feed</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/5-day-cross-platform-mobile-mapping-application-challenge/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google AppEngine Language Performance Comparison Followup</title>
		<link>http://distractable.net/coding/google-appengine-language-performance-comparison-followup/</link>
		<comments>http://distractable.net/coding/google-appengine-language-performance-comparison-followup/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 12:43:07 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[cloudcomputing]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1264</guid>
		<description><![CDATA[After writing a post that has recently sparked some controversy, I felt that it was only proper to offer up some more observations about the way various languages perform at a baseline (yes &#8211; read hello world style applications) on Google AppEngine. The primary purpose of both this post, and my previous post on comparing [...]]]></description>
			<content:encoded><![CDATA[<p>After writing a post that has recently sparked some controversy, I felt that it was only proper to offer up some more observations about the way various languages perform at a <strong>baseline</strong> (yes &#8211; read hello world style applications) on Google AppEngine.  The primary purpose of both this post, and my previous post on <a href="/coding/google-appengine-java-vs-python-performance-comparison/">comparing Google AppEngine language performance</a> is to show that while Google offer Java on AppEngine, the performance of Java Applications for low-traffic (or growing) sites may not be what you are expecting on day one.</p>
<p><span id="more-1264"></span><strong>Updated Response Time Graphs (1 minute Pingdom Check Interval)</strong><br />
<div id="attachment_1275" class="wp-caption alignleft" style="width: 310px"><a href="http://distractable.net/wp-content/uploads/2010/04/gaelyk-test-app-response-times.png" rel="lightbox[1264]" title="Gaelyk Test App Response Times"><img src="http://distractable.net/wp-content/uploads/2010/04/gaelyk-test-app-response-times-300x225.png" alt="Gaelyk Test App Response Times" title="Gaelyk Test App Response Times" width="300" height="225" class="size-medium wp-image-1275" /></a><p class="wp-caption-text">Gaelyk Test App Response Times</p></div></p>
<div id="attachment_1276" class="wp-caption alignleft" style="width: 310px"><a href="http://distractable.net/wp-content/uploads/2010/04/lift-test-app-response-times.png" rel="lightbox[1264]" title="Lift Test App Response Times"><img src="http://distractable.net/wp-content/uploads/2010/04/lift-test-app-response-times-300x225.png" alt="Lift Test App Response Times" title="Lift Test App Response Times" width="300" height="225" class="size-medium wp-image-1276" /></a><p class="wp-caption-text">Lift Test App Response Times</p></div>
<div id="attachment_1278" class="wp-caption alignleft" style="width: 310px"><a href="http://distractable.net/wp-content/uploads/2010/04/python-test-app-response-times.png" rel="lightbox[1264]" title="Python Test App Response Times"><img src="http://distractable.net/wp-content/uploads/2010/04/python-test-app-response-times-300x225.png" alt="Python Test App Response Times" title="Python Test App Response Times" width="300" height="225" class="size-medium wp-image-1278" /></a><p class="wp-caption-text">Python Test App Response Times</p></div>
<div id="attachment_1277" class="wp-caption alignleft" style="width: 310px"><a href="http://distractable.net/wp-content/uploads/2010/04/python-test-app-response-times-variant.png" rel="lightbox[1264]" title="Python Test App Response Times Variant"><img src="http://distractable.net/wp-content/uploads/2010/04/python-test-app-response-times-variant-300x225.png" alt="Python Test App Response Times Variant" title="Python Test App Response Times Variant" width="300" height="225" class="size-medium wp-image-1277" /></a><p class="wp-caption-text">Python Test App Response Times Variant (1000ms max y-axis)</p></div>
<p><strong>Reading the Updated Graphs</strong><br />
As you can see, the graphs this time around are presented slightly differently, with separate graphs for Grails, Lift and Python.  Additionally, the graphs shown here showing data from Pingdom after <a href="/coding/google-appengine-java-vs-python-performance-comparison/comment-page-1/#comment-729">setting a request interval of 1 minute as per Sean Gilligan&#8217;s suggestion</a>.  On each of the graphs, the line colouring is as follows:</p>
<ul>
<li><strong>Red:</strong> The average response time for the 450 requests sampled</li>
<li><strong>Orange:</strong> The average response time + 2 standard deviations to help detecting the outliers</li>
<li><strong>Blue:</strong> The actual response time for the sample</li>
</ul>
<p>So, what do the new graphs show us?  Firstly, when doing an apples and apples comparison (see below for more information) with Gaelyk and Lift we can see that Gaelyk actually performs a little better.   Whether or not this is going to be the case consistently I cannot say &#8211; but we can see that the Lift framework tests are producing loading requests more frequently.  In reality, I believe this is a variable factor caused by sharding requests to different JVM instances and running the tests again could quite potentially yield different results.</p>
<p>Secondly, the Python response times still kick the pants off the JVM test apps, but please read on as I try to put some context around this statement as this isn&#8217;t an in-depth Python vs Java language performance shootout&#8230;</p>
<p><strong>Clearing up a few things</strong><br />
Given some of the comments that I saw on Reddit, YCombinator, etc, I guess I should probably clear a few things up (or at least try):</p>
<ul>
<li>The <a href="/coding/google-appengine-java-vs-python-performance-comparison/" title="<br />
Google AppEngine – Java vs Python Performance Comparison">original post</a> wasn&#8217;t meant to be an in-depth comparison of language performance on Google AppEngine.  Sorry if you felt that the title of the post misrepresented the content.  The focus of the post was to demonstrate the impact of the &#8220;Loading Requests&#8221; on AppEngine &#8211; sadly titling the post probably wouldn&#8217;t have brought the problem to many people&#8217;s attention&#8230;</li>
<li>As I point out in <a href="/coding/google-appengine-java-vs-python-performance-comparison/comment-page-1/#comment-720">one of my comments on the previous post</a> the original post paints Gaelyk in an undeservedly bad light, as I wasn&#8217;t really doing an &#8220;apples and apples&#8221; comparison between Gaelyk and Lift.  The lift test site for the previous site was an established site as opposed to a fledgling.  This has been rectified in these tests and I am now using a recently created Hello World Lift Testbed.  This is particular important to me because&#8230;</li>
<li>I consider both <a href="http://groovy.codehaus.org/">Groovy</a> and the <a href="http://gaelyk.appspot.com/">Gaelyk Groovy AppEngine Framework</a> some of the most elegantly executed pieces of coding that I have seen.  Basically, I really like both of them, and because of this I would be very happy if I could create scalable web applications on AppEngine using them.</li>
<li>My definition of a scalable application, means that it performs as well if it is serving 1,000,000+ as it does if it is serving 1.  Usually the challenge is catering for the 1,000,000+, however, with the situation here our application <strong>does not scale</strong> to a smaller number of users.  I&#8217;m not sure how to get an application to 1,000,000+ users if it doesn&#8217;t perform well for a few.</li>
<li>I don&#8217;t think Python is better than any JVM based language.  Right now though it does offer faster baseline response times on AppEngine.</li>
</ul>
<p><strong>Conclusions</strong><br />
Loading requests are still a problem for JVM based sites / applications hosted on AppEngine.  The good news is that the ability to reserve a JVM for your application is on the <a href="http://code.google.com/appengine/docs/roadmap.html">AppEngine Development Roadmap</a> so hopefully we should see it in an upcoming release soon.  Additionally, while not encouraged by the AppEngine team using a cron job or external service such as <a href="http://www.pingdom.com/">Pingdom</a> to keep your application alive will help minimize the occurrence of loading requests, but you will have to make sure you are polling once a minute as once every 5 just doesn&#8217;t cut the mustard.</p>
<p>If, however, you are a Java/Groovy/Scala/etc user and have gotten to the point where you don&#8217;t think you can consider AppEngine for deploying your web site / application there are alternatives.  One that was suggested to me was <a href="http://www.stax.net/">Stax</a> which does look pretty good.</p>
<p>As for me, I&#8217;m definitely not at that point &#8211; I intend on pushing ahead with AppEngine as there aren&#8217;t too many cloud platforms that offer scalability to the point that AppEngine does &#8211; but that&#8217;s a conversation for another time.  Additionally, I intend on trying to build a small tool to help keep your AppSpot application &#8220;warm&#8221; (despite the appengine&#8217;s team&#8217;s advice).  </p>
<p>If you are interested in getting an update on this tool when it&#8217;s finished, or would like to keep in touch with AppEngine and other articles, please <a href="http://feeds.feedburner.com/distractable" title="Subscribe to Distractable">subscribe to the Distractable feed</a>.</p>
<p><strong>Update 2009-04-29:</strong><br />
I mentioned Stax as an alternative that is available to AppEngine for Cloud deployed Java apps, and it is probably worth noting that while it isn&#8217;t yet available, <a href="http://www.vmforce.com/">VMforce</a> looks like a really interesting option too.  </p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/google-appengine-language-performance-comparison-followup/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Google AppEngine &#8211; Java vs Python Performance Comparison</title>
		<link>http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/</link>
		<comments>http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 12:31:29 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1207</guid>
		<description><![CDATA[I am quite convinced that Google AppEngine is a very significant piece of &#8220;cloud computing&#8221; technology. More than other cloud components, it has been designed to scale from small, low request count websites to the big suckers. That is, until you come across your first Loading Request in the world of the AppEngine Java (and [...]]]></description>
			<content:encoded><![CDATA[<p>I am quite convinced that Google AppEngine is a very significant piece of &#8220;cloud computing&#8221; technology.  More than other cloud components, it has been designed to scale from small, low request count websites to the big suckers.  That is, until you come across your first <a href="http://code.google.com/appengine/kb/java.html#What_Is_A_Loading_Request">Loading Request</a> in the world of the AppEngine Java (and friends &#8211; Scala, Groovy, etc).</p>
<p><span id="more-1207"></span>I found out about Loading Requests in AppEngine, when I pushed my first <a href="http://gaelyk.appspot.com/">Gaelyk</a> application to it&#8217;s home on AppEngine.  I&#8217;ve been keeping an eye on the performance of my sites and applications using <a href="http://pingdom.com/">Pingdom monitoring</a>, and unfortunately I saw something that made me feel a little sad when I saw the results.</p>
<p><img src="http://distractable.net/wp-content/uploads/2010/04/appengine_language_performance.png" alt="" title="AppEngine Platform Performance Comparison" width="600" height="450" class="alignnone size-full wp-image-1217" /></p>
<table>
<tr>
<td><strong>Platform</strong></td>
<td align="right"><strong>Avg Response</strong></td>
<td align="right"><strong>Slow Average</strong></td>
<td align="right"><strong>Fast Average</strong></td>
</tr>
<tr>
<td>AppEngine Vosao CMS (JVM Java)</td>
<td align="right">1380 ms</td>
<td align="right">2063 ms</td>
<td align="right">938 ms</td>
</tr>
<tr>
<td>AppEngine Lift Framework (JVM Scala)</td>
<td align="right">506 ms</td>
<td align="right">600 ms</td>
<td align="right">438 ms</td>
</tr>
<tr>
<td>AppEngine Gaelyk Site (JVM Groovy)</td>
<td align="right">11,597 ms</td>
<td align="right">12,776 ms</td>
<td align="right">10,565 ms</td>
</tr>
<tr>
<td>AppEngine Site Proxy (Python)</td>
<td align="right">504 ms</td>
<td align="right">713 ms</td>
<td align="right">372 ms</td>
</tr>
</table>
<p>Comparing the performance of my Gaelyk skeleton site (WIP @ <a href="http://sparkz.distractable.net/">sparkz.distractable.net</a>) with my own (pretty rough) <a href="/coding/beefing-up-self-hosted-wordpress-with-google-appengine/">Python AppEngine Proxy</a>, the <a href="http://www.vosao.org/">Vosao CMS</a> running the <a href="http://www.sidelab.com/" title="Sidelab - Pervasive Computing">Sidelab</a> site, and the <a href="http://lift-example.appspot.com/">Lift examples on AppEngine</a> you can see that Gaelyk really lags behind in terms of performance. </p>
<p><em><strong>Update 2010-04-25:</strong> As comments around the place have suggested, note that the Scala Lift vs Groovy Gaelyk isn&#8217;t really an apples vs apples comparison.  In my view this is primarily because I was running tests against the established appspot lift samples.  I provided more detail on this in <a href="#comment-720" title="More on Scala Lift vs Groovy Gaelyk">a comment below</a></em></p>
<p>Now, I had pretty much decided that I was going to use Groovy and Gaelyk in some future projects, but these loading requests really throw a cat amongst the pigeons.  I believe some people are using cron jobs to keep the AppEngine JVM warm and prevent it from unloading, but this practice is discouraged by Google (understandably).  Considering also that my pingdom check interval is 5 minutes if it&#8217;s unloading between those requests, then I don&#8217;t hold much hope until Google do something about this.</p>
<p>To that end, there are a number of things in the pipeline that will probably help things along.  The ability to precompile was introduced in AppEngine 1.2.8, and while it does make a difference when you enable it looking at my detailed pingdom logs requests are still taking almost 10 seconds to complete.  Additionally, there is an issue worth starring that if implemented will hopefully <a href="http://code.google.com/p/googleappengine/issues/detail?id=2456">enable people to reserve a JVM instance</a>.  Doing this would bring response times of my very simple Gaelyk app down to around the 250ms time.  Hurrah.</p>
<p>In the meantime though, I think I have to seriously consider either going back to Python for AppEngine development or investigate <a href="http://www.scala-lang.org/">Scala</a> and <a href="http://liftweb.net/">Lift</a>.  Any opinions?  I definitely know more people who are passionate about Scala, but really, it&#8217;s still JVM based and definitely nowhere near as mature as Python.  Excuse me now while I wipe my tears shed for Groovy and Gaelyk away.</p>
<p>While I&#8217;m doing that though, here are a couple of other useful resources on the topic:</p>
<ul>
<li><a href="http://github.com/garyburd/app-eng-cold-start-test">http://github.com/garyburd/app-eng-cold-start-test</a></li>
<li><a href="http://stackoverflow.com/questions/2111496/google-app-engine-loading-requests-happen-very-frequently">Google App Engine Loading Requests Happen Very Frequently @ StackOverflow</a></li>
</ul>
<p><strong>Update 2010-04-25:</strong> I have posted a <a href="/coding/google-appengine-language-performance-comparison-followup/">follow up to this post</a> in an effort to clear up a few points of confusion.  Additionally, it looks at the whether making requests to your site every minute (instead of every 5 minutes) reduces the impact of a loading request.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Appcelerator Release Titanium 1.0</title>
		<link>http://distractable.net/coding/appcelerator-release-titanium-1-0/</link>
		<comments>http://distractable.net/coding/appcelerator-release-titanium-1-0/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 15:17:52 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1040</guid>
		<description><![CDATA[It&#8217;s been a while since I posted my comparison of the various iPhone and Android Web Application Frameworks, and quite a few things have changed since that time. Nothing completely disruptive or game changing, but things are definitely moving along. The latest piece of news that I just received an email about is Appcelerator&#8217;s 1.0 [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while since I posted my comparison of the various <a href="/coding/iphone-android-web-application-frameworks/">iPhone and Android Web Application Frameworks</a>, and quite a few things have changed since that time.  Nothing completely disruptive or game changing, but things are definitely moving along.</p>
<p>The latest piece of news that I just received an email about is <a href="http://www.appcelerator.com/products/titanium-mobile-application-development/">Appcelerator&#8217;s 1.0 release of its Titanium platform</a>, which is obviously a bit of a milestone for the guys over there at Appcelerator.</p>
<p><span id="more-1040"></span>In conjunction with the 1.0 release, they also announced their professional subscription package for the Titanium platform which is currently being offered at a $199 per developer per month subscription fee (with discounts for annual subscriptions).  I&#8217;m not sure whether this is priced right, although I can definitely see the serious work that the team at Appcelerator are putting into both building their product and community, and those things don&#8217;t come for free. So at some point they do need to generate some revenue if they are going to be a sustainable business &#8211; and I hope they achieve this.</p>
<p>I guess from my own perspective as someone who is about to <a href="/thoughts/time-to-leave-the-corporate-nest/">leave the corporate world</a> and start building my own development company (web applications, mobile apps, digital innovation strategy, etc) it just seems a bit more than I could fork out for in the early days.  I think $49 per month I would think about, and probably even deal with not getting access to certain extra benefits, but without the big corporate budgets or VC funding the $1699 for a year subscription (per developer) isn&#8217;t going to happen in the first year.  Remembering, however, the effort that Appcelerator are putting into their community it probably isn&#8217;t going to be such a problem anyway &#8211; not at least if you are a semi-resourceful kind of individual.</p>
<p>I think with the appearance of a supporting financial model (which admittedly the other players such as <a href="http://phonegap.com/">PhoneGap</a> and <a href="http://rhomobile.com/">RhoMobile</a> also have &#8211; paid training and commercial app licencing arrangements respectively) combined with the obvious ongoing commitment to their product and community development, Appcelerator are quickly establishing themselves as the one to watch.  Despite my <a href="/coding/iphone-android-web-application-frameworks/">interest in the myriad of web based mobile frameworks and supporting toolsets</a> out there, if Appcelerator are going to make the task of web standards based mobile development clear and simple, thereby offering a real alternative to native Objective-C development (yuck) on the iPhone I&#8217;ll definitely buy (metaphorically at this stage) tickets on that train.</p>
<p>I&#8217;ll be building a couple of test applications over the next week or two, so happy to provide updates on my thoughts of the 1.0 release if anyone is interested.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/appcelerator-release-titanium-1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beefing Up Self-Hosted WordPress with Google AppEngine</title>
		<link>http://distractable.net/coding/beefing-up-self-hosted-wordpress-with-google-appengine/</link>
		<comments>http://distractable.net/coding/beefing-up-self-hosted-wordpress-with-google-appengine/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 12:35:27 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[ideas]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=755</guid>
		<description><![CDATA[Well it&#8217;s 2010, and I definitely had a distractable end to 2009 (with a distinct lack of blogging). So to kick off 2010, I thought I&#8217;d start trying to get a few of the &#8220;low hanging fruit&#8221; ideas that I&#8217;ve had over the last six months written and working. The first of those will be [...]]]></description>
			<content:encoded><![CDATA[<p>Well it&#8217;s 2010, and I definitely had a distractable end to 2009 (with a distinct lack of blogging).  So to kick off 2010, I thought I&#8217;d start trying to get a few of the &#8220;low hanging fruit&#8221; ideas that I&#8217;ve had over the last six months written and working.</p>
<p>The first of those will be an experiment using Google&#8217;s AppEngine as a front-end proxy to a less robust website, hosted on low-cost hosting.  Whilst not sure, I&#8217;ve got a feeling that I&#8217;ll be able to give my self-hosted wordpress blog a layer of resilience with some app-engine mem-caching goodness.</p>
<p><span id="more-755"></span>The basic principle behind the idea is to implement a simple site proxy on Google AppEngine and make use of AppEngine&#8217;s memcache to provide relief to the rather cheap shared hosting that I currently run this blog on.  In this way, should I ever write an extremely compelling post then my blog won&#8217;t get smashed by the SlashDot / Digg effect.  The diagram below illustrates in very simple terms the relationship between the sites.</p>
<p><img src="http://blog.distractable.net/wp-content/uploads/2010/01/appengine-proxy-architecture2.png" alt="appengine-proxy-architecture" title="appengine-proxy-architecture" width="500" height="165" class="alignnone size-full wp-image-764" /></p>
<p>So, basically:</p>
<ul>
<li>The AppEngine application passes through all GET request through to the parent site, storing a copy of the page in memcache before serving the content back.   If the specific url was already memcached then that it is returned from the AppEngine site without a round-trip to the parent server.</li>
<li>POST requests are result in a cache-clear for the url, then the round-trip to the parent server.  Then the request is handled in the same manner as a GET request.</li>
<li>I&#8217;m thinking a plugin for the wordpress site is required, so that when I approve comments using the administration facility (I don&#8217;t think this should go through the AppEngine application) the WordPress site can instruct the front-end to clear the cache.</li>
</ul>
<p>That&#8217;s the concept in a nutshell, and as <a href="http://twitter.com/glenmaddern/status/6428971715">pointed out by Glen Maddern</a> when I mentioned I was thinking about this on Twitter, the same application should be able to act as a front-end layer for sites other than just WordPress Blogs.  Static sites would just work.   Web applications are likely to be more problematic, which is good, as I&#8217;m really not in the business of creating tools to stand up a phishing site easily.</p>
<p>In terms of my own personal setup, I plan to <a href="http://www.distractable.net/">www.distractable.net</a> to the AppEngine application, and leave <a href="http://distractable.net/">distractable.net</a> pointing at the shared hosting.  I&#8217;d probably go the other way around if AppEngine supported naked domains, but it doesn&#8217;t.</p>
<p>Would really appreciate any feedback on this idea, including those nice curly situations that are likely to make the whole thing fall in a heap <img src='http://distractable.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I&#8217;ll make sure I update the post with progress updates on how the coding is going &#8211; hopefully, if I can keep the blinkers on, then it should be done in a week or so.  The source will be kept at <a href="http://github.com/DamonOehlman/appengine-proxy">GitHub</a>, so feel free to watch the repo if you like to keep up-to-date that way.</p>
<p><strong>UPDATE 11/01/2010:</strong><br />
Looks like there is already a project that is attempting to use AppEngine in a similar way, but as a downstream proxy for browsing.  I am unfortunately not fluent in the native tongue of the maintainer of the project, but if you would like to take a look here is a link to the project:</p>
<p><a href="http://code.google.com/p/gappproxy/">GAppProxy Project on GoogleCode</a></p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/coding/beefing-up-self-hosted-wordpress-with-google-appengine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
