<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7272788501680923873</id><updated>2012-01-14T06:56:06.611-08:00</updated><category term='mobile'/><category term='british airways'/><category term='twitter'/><title type='text'>Love the Fear</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-6232693666959216580</id><published>2010-09-16T05:25:00.000-07:00</published><updated>2010-09-16T06:13:45.382-07:00</updated><title type='text'>Lies, Damned Lies &amp; Mobile Statistics</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;The mobile industry is one of many which seems utterly obsessed with statistics.  It doesn't matter what they are about, someone will horribly abuse them to make a point.  There are plenty of statistics which show that Apple has an absolutely unassailable market position, just as there are plenty which show that Apple has a relative low market penetration.  You can use these however you want to justify any position you wish to take.  The problem is that it can be very difficult to see through ill-conceived headlines and soundbites.&lt;br /&gt;&lt;br /&gt;In the past week, I've been confronted with statistics which just didn't seem to add up.  Firstly on Twitter, Ewan MacLeod retweeted (original Tweet by Ken Shimada) this message:&lt;br /&gt;&lt;a href="http://twitter.com/kei_shimada/status/24344277211"&gt;http://twitter.com/kei_shimada/status/24344277211&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote style="display: inline !important; "&gt;&lt;b&gt;on iPhone: BCN reports that 22.6% of July mobile handset sales were Smartphones. 80% of them were iOS based, and the remaining were Android.&lt;/b&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;I was surprised by this.  We all know that iPhone and Android sell well, but they're not the only players, and frankly I don't believe that RIM and Nokia each only sell such a small amount as to be negligible in the stats.  I replied with:&lt;div&gt;&lt;a href="http://twitter.com/rival/status/24361145816"&gt;http://twitter.com/rival/status/24361145816&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;@kei_shimada @ew4n There were no BlackBerry sales? My Mobile magazine keeps telling me that BB Bold and Curve top contract lists&lt;/b&gt;&lt;/blockquote&gt;This is true.  I get Mobile Magazine through the post every fortnight.  Each issue contains a breakdown of UK retails sales for the previous week, both prepay and postpay.  Postpay top ten is always dominated by RIM, and they often feature in Prepay.  Prepay is dominated by cheap Nokias.  I've never seen Apple on this list, not once.  Actually, I don't &lt;i&gt;necessarily&lt;/i&gt; read &lt;i&gt;every &lt;/i&gt;issue, but I have still never seen Apple in the UK top ten retailing handsets, and it isn't even as if their sales are divided across a wide range of phones.  I know that this is UK only data, but what I've heard &lt;i&gt;anecdotally&lt;/i&gt; is that Apple sells lots of phones, but they're still not on the list.  There is some back and forth between Ewan and myself, and then I get a reply from Ken.&lt;/div&gt;&lt;div&gt;&lt;a href="http://twitter.com/kei_shimada/status/24362041581"&gt;http://twitter.com/kei_shimada/status/24362041581&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://twitter.com/kei_shimada/status/24362041581"&gt;&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;@rival @ew4n these are Japanese stats.&lt;/b&gt;&lt;/blockquote&gt;OK, so now we're getting somewhere.  There are two problems becoming clearer to me.  Firstly, that Twitter encourages us to just write down the bare bones of what we want to say.  We don't have the space to write a lot of qualification for statistics.  Secondly that people will easily bend stats without explanation.  Ken followed this up with:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://twitter.com/kei_shimada/status/24362075883"&gt;http://twitter.com/kei_shimada/status/24362075883&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;@rival @ew4n read carefully, nobody said market share.&lt;/b&gt;&lt;/blockquote&gt;No, nobody did say market share, but the did start talking about shipping numbers.  Now that I know I'm not comparing worldwide sales and UK sales, it starts to make more sense.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ken then sent this absolute classic:&lt;/div&gt;&lt;div&gt;&lt;a href="http://twitter.com/kei_shimada/status/24362303718"&gt;http://twitter.com/kei_shimada/status/24362303718&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;@rival @ew4n not all stats are bullshit if you understand what they mean :-)&lt;/b&gt;&lt;/blockquote&gt;That is my point.  Stats are obviously not bullshit if we understand what they mean, the problem is that stats are being banded about without any qualification.  Without even mentioning which market the stats we're for.  Without any visibility of the underlying data allowing independent analysis.  Stats like this &lt;b&gt;&lt;i&gt;are bullshit.  &lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;They don't aid anyone in understanding a market, they are distortions of the truth.  &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Anyway, yesterday I found this blog on TechCrunch (yeah, I know, its my own fault).&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;a href="http://techcrunch.com/2010/09/15/will-microsoft-and-nokia-team-up-to-take-on-apple-google/"&gt;http://techcrunch.com/2010/09/15/will-microsoft-and-nokia-team-up-to-take-on-apple-google/&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Apart from the immediate nonsense of it, it has this to say.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande', Verdana, 'Lucida Sans Regular', 'Lucida Sans Unicode', Arial, sans-serif; font-size: 13px; color: rgb(39, 39, 39); line-height: 19px; "&gt;&lt;p style="line-height: 19px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p style="line-height: 19px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Nokia’s stock has been hammered by its failure to gain real traction in the high-end segment. Its US listed shares have tumbled to just under $10 a share as of Wednesday morning trading— from an all-time high of more than $60 back in June 2000. Furthermore, although Nokia proudly waves the number “260,000,” the number of Nokia smartphones sold per day according to the company, the figure distorts reality.&lt;/p&gt;&lt;p style="line-height: 19px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Nokia is scrambling to defend its market share. On the high-end it’s dwarfed by RIM, Google and Apple in the United States— Symbian only captured 2% of the smartphone market in the first quarter, according to &lt;a href="http://blog.nielsen.com/nielsenwire/online_mobile/iphone-vs-android/" style="text-decoration: none; font-weight: bold; color: rgb(0, 159, 0); "&gt;Nielsen&lt;/a&gt;. &lt;/p&gt;&lt;/blockquote&gt;&lt;p style="line-height: 19px; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The figure only distorts reality if your reality only exists in the United States.  What Evelyn Rusli is saying here is that it doesn't matter that Nokia shifts 260,000 &lt;b&gt;&lt;i&gt;smartphones&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; (not feature phones) &lt;/span&gt;&lt;i&gt;each day&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;, but that they only have 2% market share in the United States.  Yeah Evelyn, the rest of the world are just wrong and will come around to the American way of thinking.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Gartner has a more complete view of the worldwide smartphone market.  See Table 2 here &lt;/span&gt;&lt;/b&gt;&lt;a href="http://www.gartner.com/it/page.jsp?id=1372013"&gt;http://www.gartner.com/it/page.jsp?id=1372013&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana, arial, helvetica, sans-serif; font-size: 11px; "&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;Table 2&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;Worldwide Smartphone Sales to End Users by Operating System in 1Q10 (Thousands of Units)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="left" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;Company&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;1Q10&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt; Units&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;1Q10 Market Share (%)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;1Q09&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt; Units&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;1Q09 Market Share (%)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="left" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;Symbian&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;24,069.8&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;44.3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;17,825.3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;48.8&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="left" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;Research In Motion&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;10,552.6&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;19.4&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;7,533.6&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;20.6&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="left" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;iPhone OS&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;8,359.7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;15.4&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;3,848.1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;10.5&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="left" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;Android&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;5,214.7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;9.6&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;575.3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;1.6&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="left" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;Microsoft Windows Mobile&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;3,706.0&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;6.8&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;3,738.7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;10.2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="left" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;Linux&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;1,993.9&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;3.7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;2,540.5&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;7.0&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="left" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;Other OSs&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;404.8&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;0.7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;445.9&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;span lang="EN-GB"&gt;1.2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="left" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;Total&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;54,301.4&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;100.0&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;36,507.4&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="bottom" nowrap="nowrap" style="border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; list-style-image: none; list-style-position: outside; list-style-type: none; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: none; "&gt;&lt;p align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "&gt;&lt;b&gt;&lt;span lang="EN-GB"&gt;100.0&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, now we can see a much better picture.  We have actual data, not stupid headlines, not misleading quotes.  Worldwide, Nokia is in decline, but it still is by far the largest supplier of smartphones, selling just about as many handsets as iOS, Android and RIM &lt;b&gt;&lt;i&gt;put together&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;  &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal; font-style: normal;"&gt;Now, compare and contrast these three statements:&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal; font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;&lt;b&gt;&lt;blockquote&gt;on iPhone: BCN reports that 22.6% of July mobile handset sales were Smartphones. 80% of them were iOS based, and the remaining were Android&lt;/blockquote&gt;&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;blockquote&gt;Furthermore, although Nokia proudly waves the number “260,000,” the number of Nokia smartphones sold per day according to the company, the figure distorts reality.&lt;br /&gt;&lt;br /&gt;Nokia is scrambling to defend its market share. On the high-end it’s dwarfed by RIM, Google and Apple in the United States— Symbian only captured 2% of the smartphone market in the first quarter, according to Nielsen.&lt;/blockquote&gt;&lt;/b&gt;&lt;blockquote&gt;&lt;b&gt;Nokia is with world's leading manufacturer, selling 260,000 smartphones worldwide each day.&lt;/b&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;b&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;Lies, damned lies and statistics.  I once had an argument with someone who responded with "Facts?  Don't give me facts.  You can prove anything with facts."  That stopped me in my tracks, but I now think it may be a quote from something.  At the time I thought that the person was an irrational fool, but every day I'm coming round more and more to that point of view.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-6232693666959216580?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/6232693666959216580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=6232693666959216580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/6232693666959216580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/6232693666959216580'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2010/09/lies-damned-lies-mobile-statistics.html' title='Lies, Damned Lies &amp; Mobile Statistics'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-5063562191079768971</id><published>2010-04-23T06:27:00.001-07:00</published><updated>2010-04-23T06:45:35.708-07:00</updated><title type='text'>Reasons why 2010 is the year of mobile in travel</title><content type='html'>I've just read Timothy O'Neil-Dunne's essay on why &lt;a href="http://www.tnooz.com/2010/04/09/mobile/ten-reasons-why-2010-is-not-the-year-of-the-mobile-in-travel/"&gt;2010 is not the year of mobile in travel&lt;/a&gt;.  He has made several well reasoned arguments, most of which we've already thought of and addressed with the Datilo for Travel software. &lt;span style="font-style:italic;"&gt;Disclosure:  I work for Datilo Limited.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's run down his arguments, with my personal response to each issue.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"1. Platforms – the splintering of the platforms is far greater than in the PC based world and even within application platform there are so many splinter forms that the consistency of the user experience is FAR less. There are also radical differences between platform types. For example, the iPhone and the Blackberry have really different UI/UE. Good news is that 80% is concentrated onto three platforms Android, iPhone and Blackberry."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Wow - well obviously I agree with him.  This is why Datilo was developed with &lt;a href="http://www.mosync.com/"&gt;MoSync&lt;/a&gt; - a cross-platform tool for mobile applications.  This is why Datilo supports Symbian S60, Windows Mobile, Android, J2ME and Moblin. We'll have Blackberry very soon, and possibly iPhone if we can get through Apple's processes.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"2. 234 million people in the USA used a mobile device in December 2009, according to Comscore. However, only 47 million smart phones were shipped, with the number of Smartphones in actual operation estimated at 65 million vs 308 million people in the USA."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Yeah, and add on the same again just in India alone.  Datilo for Travel isn't just for Smartphones.  This is part of what we do - championing the 'feature phone', and demonstrating the 90% of Smartphone apps work just as well on much cheaper hardware.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"3. The variations in performance mean that for the vast majority of time (and this will not change in the near future) the performance of the UI due to vagaries in the network performance mean that the impatient user will often have to wait minutes for a response – similar to comparing dial up with broadband. These are theoretical speeds – I am talking about real world experience when trying to access information."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Yeah, again I agree.  This is why Datilo for Travel (and all Datilo apps) are made to run primarily offline.  The app downloads the small packet of data (often less than 100k) which is required for that user.  They can then access this when they need to and only connect when required.  More on this later.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"4. Connection breaks – you have to recover the connection and start over…. You know what I mean."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I do know what you mean Timothy, and as I've written above it is something we've directly addressed.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"5. Consistent mobile broadband speeds mean that the amount of time when a smart phone is able to actually obtain acceptable signal/performance to operate will come down significantly – we estimate that this number exceeds 40% of the time – this is based on my own experience."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Hmm, I find it better than this - maybe this is just a North American experience.  I think that we've got better connections in Europe.  I've just come back from the Pyrenees, and even up a mountain in France I got an HSPDA connection.  Still, if you're app runs offline...&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"6. Physical window aperture on the device – i.e. the ability to view the application on the screen."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So this is a UI question, and possibly in to make up the numbers.  Mobile phones have small screens, and always will do by definition.  If you just want the number of your hotel though, a small screen works well.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"7. Vision impairment – yes, this is a big deal. According to the Vision Council of America, approximately 75% of adults use some sort of vision correction. About 64% of them wear eyeglasses, and about 11% wear contact lenses, either exclusively, or with glasses. Over half of all women and about 42% of men wear glasses. Similarly, more women than men, 18% and 14% respectively, wear contacts. Of those who use both contacts and eyeglasses, 62% wear contact lenses more often."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;OK - Got me there.  I've not thought about this enough.   Expect changes in the next version.  I wear glasses myself, but for those users with very bad vision, we can improve our app.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"8. Dexterity impairment, juggling impairment."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I'm not too clear what you mean here.  If you mean that touchscreen smartphones aren't as easy to use and some people make out, then I completely agree with you.  However, we leave the choice of device to the customers.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"9. And last, by no means least, THE HIGH COST OF ROAMING. At the recent Tnooz #tcamp3 event in Berlin, I described the iPhone as the devil incarnate. For the next few years – until our favorite EU commissioner Nelly Kroes gets her way AND such moves to reduce charges are adopted by other countries – this will be the biggest impediment to adoption of travel apps."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Yep - its extortionate isn't it?  What you need is an app where you can download your data on your home network, and take it abroad with you.  If you need to update it, you can do so on your terms, and download a compressed packet with all your data in it, not surf until you get what you're looking for, and paying for all the data you don't want.&lt;br /&gt;&lt;br /&gt;Finally, we get to&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"So fighting through the clutter is not easy.&lt;br /&gt;What now becomes a characteristic is that there is no clear portal for mobile apps. The major portals of the web, going back to the early days, were the search engines and early value-added apps – eBay, Expedia et al."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is why we produce apps for businesses.  Our customers can distribute their app to their customers.  No looking around or finding misleading software.&lt;br /&gt;&lt;br /&gt;Timothy, we'd love to have a more detailed conversation with you about this 8-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-5063562191079768971?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/5063562191079768971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=5063562191079768971' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/5063562191079768971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/5063562191079768971'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2010/04/reasons-why-2010-is-year-of-mobile-in.html' title='Reasons why 2010 is the year of mobile in travel'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-9027286140674367668</id><published>2010-04-21T03:18:00.000-07:00</published><updated>2010-04-21T03:51:26.853-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='british airways'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>Great use of social mobile media</title><content type='html'>So I'm trapped, trapped I tell you, in the south of France.  I'm having to put up with 25c of brilliant sunshine, blue skies, cheap wine and Golden Virginia at €7 for 40g.  Ahh.&lt;br /&gt;&lt;br /&gt;We were hoping to fly back today.  When I got up everything looked right.  The UK and France have reopened airspace and airports, my flight was after 1pm, and the BA website said it was on.  By the time my wife got up, the flight was cancelled, and it looked like we were going to have to drive back with a three year old after all.&lt;br /&gt;&lt;br /&gt;I got onto the phone to BA, but I kept getting cut off.  The queue was absolutely full.  So whilst I'm redialling on the landline, I get my mobe out.  This is the twitter message I sent&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/rival/status/12565279468"&gt;Ahhhgghh. Flight has just been cancelled. Just get engaged tone from BA I can't even get in the queue.&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;About ten minutes later I read this&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/British_Airways/status/12565565258"&gt;@rival It will take a while to update on ba.com but you'll be able 2 make your changes on Manage My Booking (if you booked directly with us)&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Nice!  Even though I can't speak to them, I'm getting some response.  Even if it isn't very helpful.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/rival/status/12565830353"&gt;@British_Airways The update booking option is greyed out for me.&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Less than one minute later comes the reply&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/British_Airways/status/12565865160"&gt;@rival If you booked through a travel agent, they will have to make the changes otherwise, you'll need to call us UK - 0800 727 800&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Hmm, that's actually a different number.  I try it, and I'm able to join the queue.  So while I'm waiting, I read this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/British_Airways/status/12566111946"&gt;We expect to run flights to all of our longhaul destinations today from Heathrow &amp; Gatwick and our shorthaul services will resume after 1pm&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;"So why is my flight cancelled?" I think.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/rival/status/12566164055"&gt;@British_Airways So why is my 18:05 flight cancelled?&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/British_Airways/status/12566177823"&gt;We still have a large no. of aircraft, pilots &amp; cabin crew out of position,we're working around the clock to minimise any further disruption&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Good answer&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/rival/status/12566245021"&gt;@British_Airways Yeah, I understand. Thanks.&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Jack comes to find out what is going on, so I tell him that I'm talking to the pilot on Twitter.  He wants to talk to him as well.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/rival/status/12566530031"&gt;@British_Airways Jack (aged 3) asks "is it because of the voocano?"&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now the thing is, that this is a typo, not Jack having difficulty saying 'volcano'.  Anyway.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/British_Airways/status/12566731074"&gt;@rival :) Thank you for sharing Jack's new word.&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Wow, they're really putting a human face on a big corporation. Finally get through, only 45 minutes.  I genuinely think that is alright, considering.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/rival/status/12566904474"&gt;@British_Airways Wonderful talking to Kelly now. Rebooked for tomorrow. Well done BA! Very relieved I didn't book Ryanair&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I even get a retweet along the way from @JamesMerrimanUK along the way.&lt;br /&gt;&lt;br /&gt;I think that really highlights some of the ways that mobile social networking has evolved.  Its really helped me understand BA's problems and to understand that they're just people too.  Thanks BA,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-9027286140674367668?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/9027286140674367668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=9027286140674367668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/9027286140674367668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/9027286140674367668'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2010/04/great-use-of-social-mobile-media.html' title='Great use of social mobile media'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-5314944889751697589</id><published>2009-04-29T14:28:00.000-07:00</published><updated>2009-04-30T01:17:05.385-07:00</updated><title type='text'>o2Litmus Live Roadmapping</title><content type='html'>So I was at the o2litmus live roadmapping session yesterday.   Kind of interesting - some good ideas, but a lot of people there not really interacting.&lt;br /&gt;&lt;br /&gt;Anyway, there were a couple of points I've developed in esprit de l'escalier.&lt;br /&gt;&lt;br /&gt;Firstly, there was a lot of questions from o2 about the kinds of device APIs that developers want o2 to develop.  I completely understand the wholly underwhelming response the question got.  Being a mobile developer is hard - you've got a lot of different platforms, operating systems and devices your trying to support.  Coding for operator APIs is not a priority (even if they are trying to standardise). &lt;br /&gt;&lt;br /&gt;With the current challenges, all the problems are in division.  I've got my target set of handsets.  I divide these up by software platform/os/manufacturer/whatever.  This is a really big challenge, but one we're just about able to meet.  I take my 500 or so target handsets, and divide them up by these criteria. &lt;br /&gt;&lt;br /&gt;Operator APIs are problems of mulitplication.  I'm no longer breaking down these 500, but mulitplying it by each operator I'm going to support.   My problem is not 'how do I get my code to run under J2ME on a Sony Ericsson W890i?' but 'how do I get my code to run under J2ME on a Sony Ericsson W890i on 02, er and on Orange, and Vodafone while were at it.  Oh, and I need in German supporting T-Mobile APIs'.  Its too big a problem, so I'll engineer an operator agnostic solution.&lt;br /&gt;&lt;br /&gt;The second interesting point (I thought at least) was around questions of security.  Again, not a warm response until we started to discuss application signing.  I made a point that I'm building 500 different versions of my code, I'm not going to pay for signing as it will completely destroy any economic model I can come up with.  Neil seemed to be taken aback by the responses he got.  &lt;br /&gt;&lt;br /&gt;Application signing is the biggest single business problem in mobile development, and we need to formulate an appropriate response.  I understand that o2litmus doesn't require applications to be signed, but to get onto o2active, then they need to protect themselves.  This impasse is holding back a lot of innovation and bedroom developers getting their apps to the public.  Apple fixed this by having a manual screening process.  A real person at Apple looks at each application and checks it for suitable content and malware.  If it is OK, then it goes on the app store - no waiting weeks for signing or spending thousands of pounds.  We suggested that this would be a great way for o2 to go.  I even (rather cruelly) suggested that if they don't do this, then it is just because they can't bothered, which in retrospect was too strong.&lt;br /&gt;&lt;br /&gt;What I propose is that I get signed.  Approve me, trust me and give me a certificate.  I'll sign my apps myself with my certificate, and this will be o2's guarantee of quality.  I'm going through the o2litmus program - this means that if my application makes it onto o2active, then hundreds of users have downloaded my application, tested it, and will have reported problems with unsuitable content or function.  I don't need to get it signed externally to prove this anymore, the o2litmus community has done this testing already. &lt;br /&gt;&lt;br /&gt;The alternative to this is that I produce applications for Symbian S60 only.  Nokia have a very large chunk of the handset market, and S60 makes a large proportion of that.  I can produce a couple of versions for different screen sizes (maybe just 176x220 and 240x320), get them Symbian signed and onto the Ovi store for 400 million users by the end of next year.  This is going to be a much more attractive proposition to me than messing around on a per operator basis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-5314944889751697589?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/5314944889751697589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=5314944889751697589' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/5314944889751697589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/5314944889751697589'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2009/04/o2litmus-live-roadmapping.html' title='o2Litmus Live Roadmapping'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-4739605733077716885</id><published>2009-03-31T04:54:00.000-07:00</published><updated>2009-03-31T05:17:11.251-07:00</updated><title type='text'>Twitter is the new messaging bus - very cool</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oFUeRn_v7DY/SdIGikAl_fI/AAAAAAAAAA4/r15obnCCV3c/s1600-h/Gsearch.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 226px; height: 320px;" src="http://4.bp.blogspot.com/_oFUeRn_v7DY/SdIGikAl_fI/AAAAAAAAAA4/r15obnCCV3c/s320/Gsearch.png" alt="" id="BLOGGER_PHOTO_ID_5319321300729462258" border="0" /&gt;&lt;/a&gt;In a recent blog post I said that I thought that &lt;a href="http://lovethefear.blogspot.com/2009/03/who-should-buy-twitter.html"&gt;Twitter was the new TCP/IP&lt;/a&gt;.  What I meant by this is that Twitter is the messaging protocol which provides value to others, making it almost impossible to monetise in its own right.&lt;br /&gt;&lt;br /&gt;To back this up, I've spent a few hours knocking up an example.  I've built a new bot service which uses Twitter for its inputs and outputs.&lt;br /&gt;&lt;br /&gt;GSearch lets you use Twitter to search the Guardian newspaper's archive.  To use it, you need to follow 'gsearch'.  A few seconds later, it will follow you back (and increase your twitter stock, if nothing else).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To perform a search, simply send a tweet with the hashtag #gsearch and the search terms you want to look for.  The bot will read your tweet, take the search terms, search the Guardian's archive, compress the url of the first hit with Bit.ly, and send you a direct message in return.  It checks for new messages once a minute, so you should get your message back quite quickly.&lt;br /&gt;&lt;br /&gt;The point of this is to demonstate that Twitter is at the same time, enormously valuable yet impossible to monetise.  At no point during this service do you have to visit Twitter's site.&lt;br /&gt;&lt;br /&gt;This isn't a managed or supported service though - its just running on my PC.  If it is off, then its off, but if its on, then I think that it is quite a nice demo of mashing up applications using Twitter as the messaging bus.&lt;br /&gt;&lt;br /&gt;The upshot?  Perhaps the easist, most compatible mobile interface to the Guardian's web site.  Simply use your mobile twitter client of choice, and wait for your search result to come to you.&lt;br /&gt;&lt;br /&gt;Let me know what you think&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-4739605733077716885?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/4739605733077716885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=4739605733077716885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/4739605733077716885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/4739605733077716885'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2009/03/twitter-is-new-messaging-bus-very-cool.html' title='Twitter is the new messaging bus - very cool'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oFUeRn_v7DY/SdIGikAl_fI/AAAAAAAAAA4/r15obnCCV3c/s72-c/Gsearch.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-8718129509714925810</id><published>2009-03-30T06:48:00.000-07:00</published><updated>2009-03-30T06:55:33.745-07:00</updated><title type='text'>Lies, damned lies and statistics</title><content type='html'>Right, I'm not a great fan of the iPhone.  This probably stems from my deep hatred of Apple.  This posting isn't an anti-iPhone rant - I just wanted to disclose my preference in advance.&lt;br /&gt;&lt;br /&gt;About 20 minutes ago, &lt;a href="http://ow.ly/1GCQ"&gt;this post went up&lt;/a&gt;.  It states that the iPhone is only the 24th most popular phone for mobile web browsing, with Nokia taking the bulk of the honours.  The problem is that this data is enormously skewed.&lt;br /&gt;&lt;br /&gt;The source in from Bango, the mobile payment processing folk.  They've collected their statistics by phone model for February 2009 and they've reached this conclusion.&lt;br /&gt;&lt;br /&gt;Except this isn't the correct conclusion.  The conculsion is that iPhone users don't use Bango very much.  Well, this isn't a shock, iPhone users only buy apps from the Apple App Store, they don't go hunting around.  They aren't being lead by operator portals for instance. &lt;br /&gt;&lt;br /&gt;Why am I angry about this?  I don't know, other than bad maths from other bloggers I suppose.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-8718129509714925810?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/8718129509714925810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=8718129509714925810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/8718129509714925810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/8718129509714925810'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2009/03/lies-damned-lies-and-statistics.html' title='Lies, damned lies and statistics'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-314603251182553553</id><published>2009-03-29T03:24:00.001-07:00</published><updated>2009-03-29T04:25:24.899-07:00</updated><title type='text'>Who should buy Twitter?</title><content type='html'>Much has been said about potential buyers for Twitter over the last quarter.  Names have been dropped online as dead certs, and many different blogs give different reason as to why Corporation X should empty their wallets.&lt;br /&gt;&lt;br /&gt;The Motley Fool recently published their take on why &lt;a href="https://news.fidelity.com/news/news.jhtml?cat=Opinion&amp;amp;articleid=200903251359MTLYFOOLFINANCE__rx16177&amp;amp;IMG=N"&gt;Google should buy Twitter&lt;/a&gt;.  They've even predicted that it'll happen before the &lt;a href="http://www.fool.com/investing/high-growth/2009/03/04/will-google-buy-twitter-in-3-weeks.aspx"&gt;end of March 2009&lt;/a&gt;.  Waaayy back in October 2007, SmoothSpan blog was &lt;a href="http://smoothspan.wordpress.com/2007/10/03/twitter-is-virtual-blackberry/"&gt;urging RIM to get in and buy it&lt;/a&gt; before it got too expensive.&lt;br /&gt;&lt;br /&gt;So, which player do I think has been discounted in all the predictions?  Is it the same player to whom Twitter would represent the most value?  I think so, and I think it is Microsoft.&lt;br /&gt;&lt;br /&gt;Microsoft have poured billions into their online services, and are still a bit player.  Almost all of their services have a more popular version elsewhere.  The latest incarnation of Microsoft's online services, &lt;a href="http://home.live.com"&gt;Microsoft Live&lt;/a&gt; is actually quite good, but its usage seems to lag behind competitors (notably Google) in almost every respect (figures are hard to obtain, but Hotmail might still outstrip GMail in numbers of accounts).&lt;br /&gt;&lt;br /&gt;Twitter has a problem.  No, not that one.  Twitters problem isn't that it is overcrowded and the servers keep running out of capacity.  Twitters problem isn't actually that it isn't making any money.  Twitters problem is that it lies at the bottom of the food chain.&lt;br /&gt;&lt;br /&gt;Look at the number of services which have launched since Twitter started, based off Twitter.  And not just the client applications or search engines.  Applications like twanswers are able to sit higher up in the food chain, and have a great opportunity to make money, but it is Twitter which is spending the money creating the enviroment/platform/ecosystem (delete according to preference) which makes the twanswers service work.&lt;br /&gt;&lt;br /&gt;The same goes for &lt;a href="http://blellow.com/"&gt;Blellow&lt;/a&gt;.  It provides a useful and simple function - Twitter Groups - helping you sort out the million tweets in your feed.  Again, there is great potential for making money, without the expense of running the infrastructure (technical and social) behind it.&lt;br /&gt;&lt;br /&gt;So look again at Microsoft.  What Microsoft is lacking is critical mass.  The apps are fine, the brand is well known, the uptake is rubbish.  When was the last time you logged into Live, if ever? If Microsoft buy Twitter, then they are buying millions of Twitter users, and getting them to stick their noses into Microsoft online portfolio.&lt;br /&gt;&lt;br /&gt;The traditional argument against Microsoft as a purchaser of Twitter is that Microsoft won't buy it without a plan for profitability.  My argument is the complete reverse.  Microsoft are the &lt;span style="font-style: italic;"&gt;only&lt;/span&gt; people who &lt;span style="font-style: italic;"&gt;will &lt;/span&gt;buy it without a plan for profitability.  Twitter is the loss-leader which could kick-start Microsoft's portfolio back into life.  Google won't buy it, despite what anyone else says* because they &lt;span style="font-style: italic;"&gt;have &lt;/span&gt;got a plan for profitability for Twitter.  There is only one way to actually monetise Twitter, and that is to inject adverts into your feeds.  Google could do that day one.  Twitter could do that today as well.  The reason that Twitter haven't done that is because that signals the instant death of Twitter.  Twitter isn't technically sophisticated. Actually, more or less any script kiddy could put together a Twitter clone in a few hours.  If Twitter starts serving up ads in your feeds, someone else will do a better, cooler Twitter and everyone will jump ship in an instant.&lt;br /&gt;&lt;br /&gt;Twitter needs to find a buyer, we can all see that.  Microsoft are the only player with the financial clout, the need to buy the user-base, and are the only ones who will not destroy the service, but see it for what it is - the new TCP/IP.  Twitter is the protocol which transfers data between applications.  Ok - so susbsitute 'applications' for 'users', and 'data' for 'ideas' and this makes sense.  Twitters future isn't necessarily sending stupid messages to your mates, it is a general communication process, like enterprise busses for the majority.  But that is another blog for another day.&lt;br /&gt;&lt;br /&gt;* I could look really stupid if you're reading this in the future, and Google have just announced that they've bought Twitter for $100 billion.  If they have, stop using Twitter because it is about to become rubbish.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-314603251182553553?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/314603251182553553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=314603251182553553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/314603251182553553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/314603251182553553'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2009/03/who-should-buy-twitter.html' title='Who should buy Twitter?'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-6824272135129158598</id><published>2009-03-20T05:34:00.000-07:00</published><updated>2009-03-20T06:03:25.109-07:00</updated><title type='text'>Building super fast, super portable mobile maps - Part Three - Making it super fast!</title><content type='html'>So, my maps are scrolling around my mobile screen really nicely.  I'm jealous of how fast GMM is, and I can't see how they've got it so fast.&lt;br /&gt;&lt;br /&gt;Jaak Leineste again had the solution, in &lt;a href="http://lists.cloudmade.com/pipermail/dev/2009-March/000096.html"&gt;this post&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;" We have solved it with the Mgmaps lib SDK and CloudMade tiles this way, that we set up own "tile streaming" server to AWS EC2, so it has superfast connection to CM tile server, and I am doing the tile proxying there just like you describe. I must admit that I got also some inspiration from th&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;e google's mobile maps app :). &lt;/span&gt;  &lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt; You can compare different map reading options, direct 64x64 tiles or the multi-tile requests (we call it "streamed") with on-line web runner demo at&lt;/span&gt; &lt;a style="font-family: arial; color: rgb(153, 153, 153);" href="http://www.nutiteq.com/libsamples.html#BasicMapperapplication"&gt;http://www.nutiteq.com/libsamples.html#BasicMapperapplication&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="color: rgb(153, 153, 153);"&gt; . Start the app from web (it starts microemulator automatically), you see performance with default map, which is CM 64-pixel individual tiles. Select Menu &gt; Change map &gt; select CloudMade streaming (via Nutiteq) and see speed then. Difference is quite big, to say the least. Not worse than with google maps mobile."&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;So this is the secret to super-fast mapping - you have a webservice which fetches tiles for you and concatenates them into a single download.  You then pull them out of the stream.  The reason the old method is slow isn't because of the speed of my connection on my mobile, its the latency in setting up the http request.  If I've got fewer requests, then I've got a faster map.&lt;br /&gt;&lt;br /&gt;My problem was that the MoSync &lt;a href="http://www.mobilesorcery.com/docs/2.0b1/html/class_m_a_util_1_1_image_downloader.html"&gt;image downloader&lt;/a&gt; doesn't provide me access to the stream.  It just gives me a formatted PNG image I can display.  I needed to write my own downloader.&lt;br /&gt;&lt;br /&gt;MoSync does provide access to their &lt;a href="http://www.mobilesorcery.com/docs/2.0b1/html/class_m_a_util_1_1_connection.html"&gt;connection &lt;/a&gt;object however.  With this, I can have direct access to the download screen.  So with the help of Niklas and Fredrik at &lt;a href="http://www.mobilesorcery.com/"&gt;Mobile Sorcery&lt;/a&gt;, I wrote my own downloader which would retrieve tiles out of a stream.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oFUeRn_v7DY/ScOSnhvkd7I/AAAAAAAAAAw/MrWREH7-zi0/s1600-h/mmm.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 157px; height: 320px;" src="http://4.bp.blogspot.com/_oFUeRn_v7DY/ScOSnhvkd7I/AAAAAAAAAAw/MrWREH7-zi0/s320/mmm.png" alt="" id="BLOGGER_PHOTO_ID_5315253192997762994" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;I wrote my own streaming service in C#.  This takes my API key and the details of the tiles I want from CloudMade.  It fetches them in order from the CloudMade server, and returns them back to the requestor, flushing the response stream after each tile so that the client application isn't waiting needlessly.&lt;br /&gt;&lt;br /&gt;This has made a massive impact on my mapping component.  Previously it would take 30-60 seconds to get all 36 tiles.  Now I get all the tiles I need on the screen in &lt; 10 seconds, and all 36 tiles in &lt; 20 seconds.  Personally, I think that my component is at least as fast as GMM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-6824272135129158598?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/6824272135129158598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=6824272135129158598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/6824272135129158598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/6824272135129158598'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2009/03/building-super-fast-super-portable_5938.html' title='Building super fast, super portable mobile maps - Part Three - Making it super fast!'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScOSnhvkd7I/AAAAAAAAAAw/MrWREH7-zi0/s72-c/mmm.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-898646049657055849</id><published>2009-03-20T05:05:00.000-07:00</published><updated>2009-03-20T06:03:05.212-07:00</updated><title type='text'>Building super fast, super portable mobile maps - Part Two - Getting Maps onto the Screen</title><content type='html'>So, I've got a client who wants mobile maps, and I've got a supplier of map tiles.  I've signed up as a developer on &lt;a href="http://twitter.com/cloudmade"&gt;CloudMade&lt;/a&gt;, got my API key and I can see tiles.  Now I've got to get them on screen.&lt;br /&gt;&lt;br /&gt;About a 40 years ago (ok, about 25 years ago maybe) I was working out how to get my &lt;a href="http://www.stairwaytohell.com/"&gt;Acorn Electron&lt;/a&gt; to play &lt;a href="http://www.stairwaytohell.com/electron/c.html"&gt;Chess&lt;/a&gt;.  I was just hacking around more or less directionlessly, and I fell into a classic programming trap.&lt;br /&gt;&lt;br /&gt;My thought process was:  "A chessboard.  That's an 8x8 grid.  So I'll represent the board in memory with a two-dimentional array.  10 DIM BOARD[8,8]".  This seems obvious, but it is not the easiest way to implement a grid where you want things to move from one place to another place, and it isn't too quick in implementation.  For example, to calculate valid knight's moves becomes fairly complex.  If I've got a knight at [2,0] then I need to try permuations of where it can go in both dimensions.  If I created a board as a single dimension array (10 DIM BOARD[64]), then I know that valid moves are:&lt;br /&gt;&lt;br /&gt;currentLocation + 6, currentLocation + 10, currentLocation + 15, currentLocation + 17 currentLocation - 6, currentLocation -10, currentLocation - 15, currentLocation - 17&lt;br /&gt;&lt;br /&gt;provided that the result is between 0 and 64.&lt;br /&gt;&lt;br /&gt;Similar decisions are needed when you create a map grid on a mobile phone.  So, again I started with an assumption of having a 240x320 screen.  If I imagined a grid of 6x6 squares for the map tiles, then that will give me a total grid size of 384x384 - enough to cover the whole screen, plus a margin all around so that when the user scrolls, the tiles are ready.  If I create this grid as a single object array[36] then it makes life really easy when it comes to scrolling.  More on this later.&lt;br /&gt;&lt;br /&gt;So I created a class to represent a MapTile, a marshaller to handle the downloads, and a &lt;a href="http://www.mobilesorcery.com/docs/2.0b1/html/class_m_a_u_i_1_1_widget.html"&gt;Widget&lt;/a&gt; to put the map on screen.  The widget converted the location from the GPS (or location API) into a CloudMade tile reference, and then took this as a basis for calculating the references for all the other tiles.&lt;br /&gt;&lt;br /&gt;Each MapTile is responsible for formatting a URL which will get the image from the CloudMade server.  It requests a download from the marshaller, and in turn gets its image.&lt;br /&gt;&lt;br /&gt;The widget then puts each image on screen as they are downloaded, building the map.  It also handles the scrolling, where the smart decision about an array MapTile[36] pay dividends.&lt;br /&gt;&lt;br /&gt;To put the map on screen, I need to know which tile is going into the top-left corner.  I call this the 'origin tile'.  When my map starts this is the tile at MapTileArray[0].  The tile with the actual location I want to see is MapTileArray[14], which is about the middle of the screen.  I start by displaying MapTileArray[originTile] top left, and then rip through the array in order, adding 1 MOD 36 to get to the next tile.  This means when I get to MapTileArray[35] and want the next tile, I know that the next tile is MapTileArray[0].&lt;br /&gt;&lt;br /&gt;I also wanted it to prioritise which tiles to get first.  I don't want it to start with the top left tile and work sequentially though.  I wanted it to start with the tile which shows the relevant location and spiral out.  Initially, I worked on an overly complex algorithm which will calculate the order that the tiles should be downloaded in at runtime.  In the end, I got some common-sense together, and just set up the order in code.  I add each of these values to the value of the origin tile, MOD 36, and that is the order of the tiles that I want.&lt;br /&gt;&lt;br /&gt;If I'd gone with a two dimensional array, then I've got an array I want to reflect on screen.  This means that a scrolling operation doesn't mean adding to subtracting either 1 or 6 (depending on the direction of the scroll), but I've got to switch all the tiles into different locations into the array to maintain its reflection of the screen.  Massive pain.&lt;br /&gt;&lt;br /&gt;So I can scroll my map around nicely, my array is working quickly and easily.  Its a lot slower than Google Maps though, and I start to wonder why.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lovethefear.blogspot.com/2009/03/building-super-fast-super-portable_5938.html"&gt;Part Three &gt;&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-898646049657055849?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/898646049657055849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=898646049657055849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/898646049657055849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/898646049657055849'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2009/03/building-super-fast-super-portable_20.html' title='Building super fast, super portable mobile maps - Part Two - Getting Maps onto the Screen'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-6425164827467220729</id><published>2009-03-20T04:20:00.001-07:00</published><updated>2009-03-20T06:02:30.081-07:00</updated><title type='text'>Building super fast, super portable mobile maps - Part One</title><content type='html'>I've spend the last couple of weeks building mapping into one of my projects.  It is something I've resisted in the past as being too complicated, too difficult and not offering a lot of value.  However, my client wants a location based messaging solution, so maps we're a must have.&lt;br /&gt;&lt;br /&gt;My client (who shall remain nameless for now) said that it was easy.  His previous partners had done it really quickly; just mash-up Google Maps.  The problem is that this is a very web-oriented view of development.  Whilst GM are easy to mash-up in a web environment, they aren't licenced for mobile application development.  Their API is also Javascript-based, so I wasn't going to be able to use that either.&lt;br /&gt;&lt;br /&gt;So the next stop is just to hack it.  I found that many people have done this in the past.  You just need to know how Google Maps for Mobile (GMM) converts co-ordinates into map tiles, and you can build URLs to get the correct tiles.  I also discovered that everyone who had done this had quickly received 'cease-and-desist' letters from Google's lawyers.&lt;br /&gt;&lt;br /&gt;So what are the alternatives?  Yahoo! Maps are as rigidly licenced as Googles.  Microsoft are much more relaxed about accessing their geodata, but they only make tiles for the web.&lt;br /&gt;&lt;br /&gt;The issue here is the size of the tile.  Let's assume for the sake of argument that the normal size of a mobile screen is 240x320 pixels.  The tiles used on the websites are 256x256 pixels, which means that one tile will cover almost the whole screen.  If you've only got a 128x128 screen, then you've got something which is way to big, giving the developer the additional headache of working out which bit of this tile needs to be on screen.  The main problem here is that this is one download which means a big delay between hitting the button on the phone and seeing the map.  GMM has mobile-friendly map tiles sized at 64x64 pixels.  This means that I can convert my location to a single 64x64 tile, and centre my screen around this.&lt;br /&gt;&lt;br /&gt;So a quick bit of research later brought me to the &lt;a href="http://www.openstreetmaps.org/"&gt;OpenStreetMaps &lt;/a&gt;initiative.  This is crowd-sourced geo-data.  You go out with your GPS and send data about all the streets in your neighbourhood.  This becomes 'open sourced' data.  Digging a bit more lead me to &lt;a href="http://cloudmade.com/"&gt;CloudMade&lt;/a&gt;, the extension of OSM to convert their raw data into useable map tiles.&lt;br /&gt;&lt;br /&gt;CloudMade have fantastic support for mobile.  Not only do they do their tiles in 256x256 &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; 64x64 pixel tiles, but they also do their mobile tiles with high-contrast colour schemes.  Now they are extending this, so anyone can create custom cartography with their style editor.&lt;br /&gt;&lt;br /&gt;Better news seemed to be that &lt;a href="http://www.linkedin.com/in/jaaklaineste"&gt;Jaak Laineste&lt;/a&gt; has developed a J2ME component from his compay &lt;a href="http://www.nutiteq.com/"&gt;Nutiteq&lt;/a&gt;.  This wraps up all the functionality you need to make your own GMM-clone with maps from CloudMade.  This would be a massive short-cut, except that I'm not writing in J2ME; I developing in &lt;a href="http://www.mobilesorcery.com/"&gt;MoSync&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;digression&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The number one problem with mobile development is that every damn phone is a little bit different.  The purpose of Java is that you write your code once, and it will run in an identical fashion on a different platform.  The problem with this is that it has never quite been true, and for the Java you've got on your phone, this problem is magnified by a thousand times.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The problem is that you've got one body specifiying the language, and dozens of bodies implementing it.  Just as no two people will interpret a book in the same way, no two implementers make J2ME work in exactly the same way.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The upshot of this is that even when you've got your J2ME application working on your phone, there is no guarantee that it will run on anyone else's.  Or a Windows Mobile device, or in an S60 environment.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The guys at Mobile Sorcery have taken this pain away.  They've written their own API which they've tested on the handsets.  The difference with this approach is that it is one body who is managing implementation, massively improving compatibility.  You write (or port) your code in C/C++ against their API, and it will build your application for hundreds of phones.  Each of your target handsets gets a build specifically for it.  On J2ME phones, it builds a J2ME application.  On Windows Mobile devices, it builds a Windows application.  On S60 devices it builds a Symbian application.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;/digression&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Still, even without being able to use Nutiteq's mapping component, I've got a supplier of map tiles.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lovethefear.blogspot.com/2009/03/building-super-fast-super-portable_20.html"&gt;Part Two &gt;&gt;&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-6425164827467220729?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/6425164827467220729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=6425164827467220729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/6425164827467220729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/6425164827467220729'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2009/03/building-super-fast-super-portable.html' title='Building super fast, super portable mobile maps - Part One'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-3004006549251095887</id><published>2009-03-19T09:10:00.000-07:00</published><updated>2009-03-19T13:16:26.368-07:00</updated><title type='text'>The Three Roadblocks to Mobile Web</title><content type='html'>I seem to be giving this talk a lot lately, so I thought I'd pull my finger out and blog something.&lt;br /&gt;&lt;br /&gt;Many handsets have had web connections (and actual http/html connections, not just wap) for many years. On some devices its even quite good. But it has never made the penetration into normob psyche that many people predicted. I'm often asked why this is, and why I continue to evangelise on-device portals and applications over mobile web given in availablity of all-you-can-eat data plans.&lt;br /&gt;&lt;br /&gt;To illustrate my point, I distilled my thoughts down into what I call 'The Three Roadblocks to Mobile Web'.&lt;br /&gt;&lt;br /&gt;So you've built a brilliant mobile web site. Perhaps you've used one of the automated tools to rebuild your main site and represent it to a mobile user. The problem is, you're not getting any hits. What is the problem? Does your content suck? You are getting loads of traffic through traditional routes, but not through mobile. How can you get more people to your site?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;1. Having the idea&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The number 1 problem with mobile websites, is to get people to have the idea to use their phone to do some web surfer at a convenient moment. I used to use the example of someone waiting on the platform for their train, but &lt;a href="http://www.wirelesswanders.com/"&gt;Paul Golding&lt;/a&gt; recently pointed out to me that the peak time for mobile web use is between 23:00 and 00:00 - when people are in bed. Anyway, you can imagine your ideal user who is idling for a few minutes - now is the perfect time for them to visit your website. The problem here is that even when people are in this situation, even when they're playing with their phone, you've still got to get them to press that Internet button.&lt;br /&gt;&lt;br /&gt;There are a lot of people who are scared of this button. There persists &lt;insert&gt;an idea that connecting to the web is expensive and unpredictable. Even my wife, who I consider do be reasonably technical, occasionally asks me how long I've been reading that article, like it billed on connection time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Having an on-device application puts your content in view. If your content has been downloaded and cached to be read offline, then people are much more confortable about starting the app. The fear that you don't know how much it is going to cost to click the next link disappears, and your content icon is one of maybe a dozen application icons on most phones, and not one of a million billion sites.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;2. Knowing you exist&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, even if you've got someone in bed doing a bit of late night surfing. How do you get them to browse to your site? Mobile traffic isn't driven in the same way as desktop traffic. You can have all the SEO and tagging and cool tricks in the world, but the fact remains that typing a couple of keywords into that Google box you've got at the top of your browser is very quick and easy, and typing even one keyword into the Google box on your phone is more trouble than you can be bothered with, even if your really interested in the result.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;3. Getting to your site&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Traffic is driven from operator portals. Your late night surfer is going to see a couple of things on their home screen that catch their eye and click through on those. They're unlikely to go off that. If they can't be bother to search Google from their phone, they're definately not going to type your URL in.&lt;br /&gt;&lt;br /&gt;So you spend some money, and you get a keyword on a shortcode. You advertise it, and the auto-responder sends your URL back. And some people even save it. In the list of bookmarks in their browser. Out of sight, out of mind.&lt;br /&gt;&lt;br /&gt;So this is why I back on-device applications.&lt;br /&gt;&lt;br /&gt;1. It is visible - you've put your icon and your brand literally into the pockets of your readers/customers&lt;br /&gt;2. It is memorable - you're application is now in direct competition for eye-time with your user's browser. You're way up the decision making tree now.&lt;br /&gt;3. It is comfortable. I build ODPs to download and cache data in a controlled way. This isn't necessarily any less data, but it is more predictable for the user. They feel in control, and with off-line browsing there is no fear in pressing the next link.&lt;br /&gt;&lt;br /&gt;And if you're thinking of building an app store, then why are you thinking of building it as a website? Put your icon on your customers phone.&lt;br /&gt;&lt;br /&gt;I buy a &lt;span style="FONT-WEIGHT: bold"&gt;lot&lt;/span&gt; of games from GameMobile, but I wish that they'd build their own app so I can browse the latest games comfortably from my phone, rather than on line. I promise you that I for one will be hitting that 'Buy Now' button far more often.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-3004006549251095887?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/3004006549251095887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=3004006549251095887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/3004006549251095887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/3004006549251095887'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2009/03/three-roadblocks-to-mobile-web.html' title='The Three Roadblocks to Mobile Web'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-4978527252312777777</id><published>2008-10-10T07:49:00.000-07:00</published><updated>2008-10-10T08:02:38.796-07:00</updated><title type='text'>What I've got against NHibernate</title><content type='html'>Apart from being another example of too much configuration in XML?  Well Billy McCafferty has summed it up for me in his article on &lt;a href="http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx"&gt;CodeProject&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Your database should be an "implementation detail" that is defined to support your domain model, not the other way around.&lt;/blockquote&gt;No it shouldn't.  This is backwards for all but the largest businesses with lots of DBAs and data warehouses.   This is a very arrogant developer argument to make.&lt;br /&gt;&lt;br /&gt;It is more important to the business to be able to quickly and accuratly report about the business than to sell one more widget.  Getting timely and accurate information about the widgets you've sold is more important.  I know of lots of businesses who sold lots of their product and still went bust, owing to poor finanical management.  Every business has to be able to manage their cash-flow at least as well as they can sell,  and the database should represent this.  Programmers can make the program more flexible to fit in with the best design for the business, but database design should be driven by business requirements, not programmers' whimsey.&lt;br /&gt;&lt;br /&gt;In many, many cases both of these requirements will be in alignment, but not always.  Some of your objects may need to populate and be populated from multiple tables, and whilst NHibernate can support this, it does drive developers to generate a 1-1 database model matching their entities.&lt;br /&gt;&lt;br /&gt;And another thing, Billy doesn't hint at this, but says it explictly.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;it is commonly accepted by many that ORM technologies, when used correctly, are, in fact, a silver bullet for software development&lt;/blockquote&gt;No they're not - don't be stupid.  ORM technologies are a useful shortcut for developers to do less boring code, but they are not a silver bullet.  They do not replace data abstraction layers, mearly form part of it.  ORM is about being able to maintain the state of your objects in a database.  Databases do more than just store developer's objects - how arrogant is this man?&lt;br /&gt;&lt;br /&gt;Databases and DAL often perform complex data manipulation required by the business.  Sometimes you need a process which will derive data from inputs, and you need a manageable, maintainable design pattern to implement these processes with data decorators and transformation objects.  Whether you choose to put this code in NHibernate or elsewhere, then it still needs to be done.  Using NHibernate doesn't remove business requirements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-4978527252312777777?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/4978527252312777777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=4978527252312777777' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/4978527252312777777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/4978527252312777777'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2008/10/what-ive-got-against-nhibernate.html' title='What I&apos;ve got against NHibernate'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7272788501680923873.post-2377222806267532355</id><published>2008-10-10T06:23:00.000-07:00</published><updated>2008-10-10T06:48:06.443-07:00</updated><title type='text'>Dependency Injection Frameworks</title><content type='html'>Call me crazy, but I don't get why the world has gone mad, and experienced developers are in love with DI frameworks.&lt;br /&gt;&lt;br /&gt;Don't get me wrong - I get &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;IoC&lt;/span&gt;.  I can see how it helps with flexibility even if I'm not completely convinced that it reduces coupling.  You're, at best, no better off in terms of coupling, but objects can be used in new abstracted ways.&lt;br /&gt;&lt;br /&gt;I even get understand how dependency injection could potentially help this, adding another layer of abstraction on how your objects relate to each other.&lt;br /&gt;&lt;br /&gt;What gives me the fear is that you're putting your application configuration into an XML document.  That's an XML document everyone, which is going to control how your objects relate to each other; which types to create; which objects should be cast with which interfaces.  In an XML document.&lt;br /&gt;&lt;br /&gt;A document that maybe dozens of developers will be working on.  A document that is very, very unlikely to contain any comments.  A document which is not validated at design time, or build time, only at run-time.  A document which in twelve months will be unmaintainable garbage.  A document that contractors will dick with for a few weeks and then leave.  Your entire application in the hands of one XML document.  No.&lt;br /&gt;&lt;br /&gt;Lots of things DI framework providers write really scare me, and I don't scare easily.  Here's something from Winter4Net&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Fast - handles more than 20&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;mb&lt;/span&gt; configurations&lt;/blockquote&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Aarrrghhh&lt;/span&gt;!  I'm a big tough man, but even I tremble when I think that my enterprise-scale application maybe in the hands of a 20&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;mb&lt;/span&gt; XML document that no-one will be able to follow.&lt;br /&gt;&lt;br /&gt;And actually, its not just mentally-large &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;config&lt;/span&gt; documents.  Here's what the ubiquitous Nate has to say about &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Ninject&lt;/span&gt;.&lt;pre class="code"&gt;&lt;blockquote&gt;To define a conditional binding, the two fluent interfaces (binding and condition) work together. Here's an example:&lt;br /&gt;Bind&lt;iweapon&gt;().To&lt;sword&gt;();&lt;br /&gt;Bind&lt;iweapon&gt;().To&lt;shuriken&gt;().Only(When.Context.Target.HasAttribute&lt;rangeattribute&gt;());&lt;/rangeattribute&gt;&lt;/shuriken&gt;&lt;/iweapon&gt;&lt;/sword&gt;&lt;/iweapon&gt;&lt;/blockquote&gt;&lt;/pre&gt;What?  So now I'm putting business logic into configuration?  I admit that if I had to use a DI framework, then I'm attracted to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Ninject&lt;/span&gt; if only because of the whole 'it's not an XML document'&lt;br /&gt;&lt;br /&gt;How can we take this idea further?  I know!  What I'm going to invent is a really flexible configuration system which I'll process and turn into commands my CPU understands, and I'll call it F*&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;CKING&lt;/span&gt; CODE!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7272788501680923873-2377222806267532355?l=lovethefear.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethefear.blogspot.com/feeds/2377222806267532355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7272788501680923873&amp;postID=2377222806267532355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/2377222806267532355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7272788501680923873/posts/default/2377222806267532355'/><link rel='alternate' type='text/html' href='http://lovethefear.blogspot.com/2008/10/dependency-frameworks.html' title='Dependency Injection Frameworks'/><author><name>rival</name><uri>http://www.blogger.com/profile/03638869588249975838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_oFUeRn_v7DY/ScNzBNteKnI/AAAAAAAAAAM/31c-xiNBA3o/s1600-R/n804700226_28764.jpg'/></author><thr:total>0</thr:total></entry></feed>
