<?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</title>
	<atom:link href="http://distractable.net/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>Google&#8217;s Wifi Data Scraping &#8211; Impact to Developers</title>
		<link>http://distractable.net/business/google-wifi-data-scraping-developer-impact/</link>
		<comments>http://distractable.net/business/google-wifi-data-scraping-developer-impact/#comments</comments>
		<pubDate>Wed, 19 May 2010 23:48:10 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[corporate trust]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1437</guid>
		<description><![CDATA[While many would argue that Google&#8217;s recent issue with accidentally collecting wifi packet data from public broadcasting networks will have minimal impact to developers, I disagree. Having just left a corporate environment in which I would occasionally get to chat with the CIO regarding the pros and cons of some current technology trends, such as [...]]]></description>
			<content:encoded><![CDATA[<p>While many would argue that Google&#8217;s recent issue with <a href="http://googleblog.blogspot.com/2010/05/wifi-data-collection-update.html">accidentally collecting wifi packet data from public broadcasting networks</a> will have minimal impact to developers, I disagree. </p>
<p>Having just left a corporate environment in which I would occasionally get to chat with the CIO regarding the pros and cons of some current technology trends, such as cloud computing, which would also include discussions around the enterprise suitability of those solutions, I can tell you &#8211; <em>accidents</em> like this are going to have an impact.</p>
<p><span id="more-1437"></span>It&#8217;s getting to the point now where people would call me a Google Fanboy.  I&#8217;m passionate about Google&#8217;s <a href="/tag/appengine">AppEngine</a> as one of the few solutions that has actually got <a href="/tag/cloudcomputing">cloud development and scalability</a> right, I recently gave up my <a href="/tag/iphone">iPhone</a> for an <a href="/tag/android/">Android</a> handset, and I&#8217;m genuinely interested and excited by new languages like <a href="http://golang.org/">go</a>.  </p>
<p>All this passion regarding the technical capability of these Google products is going to amount to very little, however, when I come to pitch an AppEngine solution to the corporate that have just left (which I <em>had</em> intended to do).  </p>
<p>Whilst largely unrelated, the Google datascraping incident will only increase the level of distrust (or at least questions around security practices) around many of Google&#8217;s offerings &#8211; especially cloud solutions, and while the words in the official post from Google all make sense (and I hope genuine) will mean very little when the majority of articles already read &#8220;Google steals private data&#8221;.</p>
<p>From the official post:</p>
<blockquote><p>
The engineering team at Google works hard to earn your trust—and we are acutely aware that we failed badly here. We are profoundly sorry for this error and are determined to learn all the lessons we can from our mistake.
</p></blockquote>
<p>You bloody better.  You&#8217;ve certainly made things tougher for me when it comes to pushing your solutions.  Honestly, I&#8217;m not sure what&#8217;s required here.  I don&#8217;t doubt that Google engineers rock, but it&#8217;s time for beta &#8220;features&#8221; such as Wifi data collection to be caught before releasing products into production environments.</p>
<p>&#8230; I think I just lost my fanboy status <img src='http://distractable.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/business/google-wifi-data-scraping-developer-impact/feed/</wfw:commentRss>
		<slash:comments>0</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>Mobile Phishing Scams &#8211; A Business and Consumer Blind Spot?</title>
		<link>http://distractable.net/business/mobile-phishing-scams/</link>
		<comments>http://distractable.net/business/mobile-phishing-scams/#comments</comments>
		<pubDate>Thu, 06 May 2010 12:22:36 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1333</guid>
		<description><![CDATA[While businesses and security professionals have done a great deal of work to educate consumers about online security, it seems to me that processes used by business are not of the same standard for the mobile channel. This feeling was confirmed for me today when I received an SMS titled &#8220;**IMPORTANT MESSAGE**&#8221; from my bank [...]]]></description>
			<content:encoded><![CDATA[<p>While businesses and security professionals have done a great deal of work to educate consumers about online security, it seems to me that processes used by business are not of the same standard for the mobile channel.</p>
<p>This feeling was confirmed for me today when I received an SMS titled &#8220;**IMPORTANT MESSAGE**&#8221; from my bank saying I need to contact them.  While I&#8217;m not going to tell you who I bank with (it was one of the big four banks in Australia), I will take you through my experience and attempt to highlight the weak points in the approach, as well as suggest what I think could be done to improve the process.</p>
<p><span id="more-1333"></span><strong>The Current Customer to Bank Mobile Interaction</strong><br />
First we have the message from the bank highlighting to me there is a problem:</p>
<pre>+61427xxxxxx:
**IMPORTANT MESSAGE**
Please call the Foobar Bank
urgently on 1800 xxx xxx
option 1, option 1 quoting
Ref No. 555M. Do not reply
via SMS to this message.</pre>
<p>Right, ok. If I received an email like this, there would be a number of checks I should perform to attempt to determine the authenticity of the message.  This would probably include <em>at least</em> the following:</p>
<ul>
<li>Check that the sender of the message is a recognized source</li>
<li>Check that the call to action in the message is one that can be verified as valid.</li>
</ul>
<p>OK, so let&#8217;s apply those checks:</p>
<p><strong>Valid Sender Check:</strong> Even though I blanked out the sender phone number, I can assure you I did a <a href="#consumer-protection">search on the bank&#8217;s website</a> for existence of this number, but could not find it.  Admittedly it will be the phone number that is given to the SMS gateway at the bank, which no-one really thinks is important &#8211; <strong>yet</strong>/.</p>
<p><strong>Trusted Call to Action:</strong> Applying the same search to the phone number that I was instructed to call, did turn up a reference to it on the bank&#8217;s website; however, the document retrieved was a news article that was dated 2002 and a lot can happen in 8 years.</p>
<p>Anyway, feeling wary but somewhat reassured that I had at least found the number on the bank&#8217;s website I gave them a call, proceeded through the prompts, waited on hold for a bit, and then finally talked to an operator.  After greetings, etc, we got onto the process of identifying the problem and who I am (I&#8217;m definitely paraphrasing a bit here).</p>
<table cellpadding='2' cellspacing='0' border='0'>
<tr>
<td><strong>Operator:</strong></td>
<td>Hello, can you please tell me the reference number that you were quoted?</td>
</tr>
<tr>
<td><strong>Me:</strong></td>
<td>Yes, it was 555M.</td>
</tr>
<tr>
<td><strong>Operator:</strong></td>
<td>Right, that&#8217;s an issue related to your Mastercard.  So if you provide the number on the card, sir, we can look into the problem.</td>
</tr>
<tr>
<td colspan="2"><em>Thoughts of how dodgy that would be if that was asked online go through my head, but I remember that the people in the call centre are working to a script that has been provided by the organisation..</em></td>
</tr>
<tr>
<td><strong>Me:</strong></td>
<td>Um, ok.  The number is 5353 xxxx xxxx xxxx.<br />
</tr>
<tr>
<td><strong>Operator:</strong></td>
<td>Ah, yes, Damon.  <em>(actually the nice lady called me Damien, which can be pretty annoying at the best of times.  But anyway, I digress.</em></td>
</tr>
<tr>
<td><strong>Me:</strong></td>
<td>Yes, that&#8217;s right. <em>Even though she said the name wrong, at least I had some extra confirmation that I was talking to the bank &#8211; or at least a group of thieves who at least had my name.</em></td>
</tr>
<tr>
<td><strong>Operator:</strong></td>
<td>And now Damon, if you can just provide your date of birth so we can validate your identity.</td>
</tr>
<tr>
<td><strong>Me:</strong></td>
<td>Yep, no problem, it&#8217;s XX/XX/1977.  <em>In poker terms, I was all in (well kind of).  Standing back from the table I waited to see if the operator could tell me more that would make me feel assured that I was talking to the bank.</em></td>
</tr>
<tr>
<td><strong>Operator:</strong></td>
<td>Ah, yes sir.  We just noticed that there were a number of transactions being placed online and we wanted to confirm those with you.  We&#8217;ve placed a lock on your card in the interim.  I&#8217;ll just go through those now with you. </td>
</tr>
<tr>
<td colspan="2"><em>The operator then proceeded to rattle off a number transactions that I had placed online over the last couple of days online, which I then confirmed were onces I had actually placed.  This, at least, gave me the reassurance that I was in fact talking to the bank.</em></td>
</tr>
<tr>
<td><strong>Operator:</strong></p>
<td>Alright then, given all those transactions are ok, we&#8217;ll release the lock on the card and you&#8217;ll be able to continue using it.</td>
</tr>
<tr>
<td><strong>Me:</strong></td>
<td>OK &#8211; thankyou.</td>
</tr>
<tr>
<td colspan="2"><em>Phone call ends.</td>
</tr>
</table>
<p><strong>Problems with Bank&#8217;s current approach</strong><br />
Well it feels like stating the obvious, but here&#8217;s a quick summary.</p>
<ul>
<li>No evidence of the sender number anywhere on the bank&#8217;s website.  Would it be so bad to put it somewhere on a page appropriately titled to provide some consumer confidence?</li>
<li>Same with the call to action phone number.  While it was on the website, it was in an old news release and I&#8217;m sure even banks let 1800 numbers lapse from time to time.  Put in on the same page as the sender number.</li>
<li>I was asked to provide my credit card number as the first piece of information required to validate my identity &#8211; surely there are other pieces of information that can be requested to validate this.  Maybe ask for my full name to find the account.  My address, last four digits on the card, date of birth can probably serve as lightweight validators, and I&#8217;m sure something else can provide some trust that I am who I say I am.</li>
</ul>
<p><strong>Mobile Phishing &#8211; Consumer Protection</strong><br />
As a consumer, I would definitely encourage you to check the numbers in the SMS.  The way I did this was very simple, and just involves using doing a search in google for the number and telling google to only search one site in particular.   The easiest way to do this I find, is supply the site command in the string.  For example, if you wanted to find references to phishing on my site (there aren&#8217;t many) you would simply enter the search string below into google.</p>
<pre>phishing site:.distractable.net</pre>
<p>Apply the same technique to your banks website, using the the phone number formatted in a few different ways to see if you can find it.  As I previously stated, you should be able to find the number in a current page on the site, and that would ideally be titled something that lets you the consumer know it&#8217;s a number that is used in SMS communications.</p>
<p><strong>Closing Remarks</strong><br />
This experience that both businesses and consumers still have quite a bit to learn with regards to phishing (myself included) and while we are taking steps to tackle it in various channels, other channels are applying process that is archaic by comparison.  Ironically, the section of the bank that sent the communication and was behind the call to action number was the bank&#8217;s &#8220;Security&#8221; section &#8211; honestly, I would expect better from one of Australia&#8217;s big four bank&#8217;s specialist security areas.  </p>
<p>Implementing this stuff isn&#8217;t rocket science, and while I&#8217;m sure there will be conferences and junkets to discuss the impact of mobile devices on security, a lot can be done right now to improve the situation.  Additionally, I&#8217;m definitely not a security expert &#8211; just a coder who doesn&#8217;t like to write apps that can be <strikeout>hacked</strikeout>cracked.  If you have alternate views or similar stories, please feel free to comment below.  We can probably even play guess the bank if you like <img src='http://distractable.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Other Reading</strong></p>
<ul>
<li>Sonic Wall have a <a href="http://www.sonicwall.com/phishing/">good phishing quiz</a> which is worth having a look at &#8211; I definitely smiled when I hit question 4.</li>
<li>The Sophos blog has a good article on an <a href="http://www.sophos.com/blogs/gc/g/2009/01/23/bank-sms-text-phishing/">actual phishing scam that occurred in Texas</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/business/mobile-phishing-scams/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cloud Computing Australia &#8211; Amazon EC2 available in Singapore</title>
		<link>http://distractable.net/tech/cloud-computing-australia-amazon-ec2-available-in-singapore/</link>
		<comments>http://distractable.net/tech/cloud-computing-australia-amazon-ec2-available-in-singapore/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 11:31:19 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[cloudcomputing]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=1317</guid>
		<description><![CDATA[Today is a fantastic day for advocates of cloud computing in Australia (and the whole Asia Pacific region actually). Finally the Asia Pacific region has a presence for cloud computing (not just cloud content). Great job Amazon. In the past few years the lack of a geographically close (and thus virtually closer) hasn&#8217;t worried me [...]]]></description>
			<content:encoded><![CDATA[<p>Today is a fantastic day for advocates of cloud computing in Australia (and the whole Asia Pacific region actually).  Finally the Asia Pacific region has a presence for cloud computing (not just cloud content).  </p>
<p>Great job Amazon.  In the past few years the lack of a geographically close (and thus virtually closer) hasn&#8217;t worried me too much, but as I am now starting an <a href="http://www.sidelab.com/">Australian software development company that provides services in the cloud</a> &#8211; it does.</p>
<p><span id="more-1317"></span>Both smaller companies and larger corporates are starting to consider the cloud for deployment of different types of services.  While I certainly don&#8217;t expect that core enterprise systems will be deployed to the cloud by large conservative organisations just yet, there is a great deal of potential that can be gained from building certain application or services for cloud deployment.</p>
<p>For small businesses and innovative corporates in the US and Europe using cloud computing has been an option for some quite a few years now.  For companies in the Asia Pacific region, however, there are still a few hurdles to overcome before it becomes truly viable.  In my opinion for Australian business there are two things that still cause some wariness when it comes to cloud services:</p>
<p>Firstly, there is the network latency to reach their cloud architecture if it is hosted in either the US or Europe.   In some cases having hosting in those regions is OK or even an advantage, but when you are primarily developing a service for a local market it really doesn&#8217;t make a lot of sense.  With Amazon providing EC2 services in Singapore, that goes a long way to helping with latency from Australia and the rest of the region.</p>
<p>Secondly, there is the issue of privacy which from what I understand of the issue relates specifically to <a href="http://www.privacy.gov.au/materials/types/infosheets/view/6583#npp9">&#8220;Transborder data flows&#8221; in the the National Privacy Principles</a>.  Whether this is genuinely an issue from a legal standpoint is not something I can comment on.  I can, however, confirm that I have observed that Australian corporates that I have been involved with would prefer to see personal information kept onshore.</p>
<p>Obviously, having the servers in Singapore won&#8217;t alleviate privacy concerns if you were to suggest storing customer data in the cloud.  Considering alternative approaches for application construction, however, might enable the use of the cloud infrastructure without compromising on the security of data.  </p>
<p>Designing applications with that kind of architecture will be something that I&#8217;ll be focusing on with <a href="http://www.sidelab.com/">Sidelab</a>.  With the amount of work that is required in the IT space over the next 10 years, it&#8217;s definitely time work smarter at building our applications for scalability, and I believe the cloud has a very important part to play in that.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/tech/cloud-computing-australia-amazon-ec2-available-in-singapore/feed/</wfw:commentRss>
		<slash:comments>0</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>
	</channel>
</rss>
