<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Tripleodeon</title>
		<link>https://tripleodeon.com</link>
		<atom:link href="https://tripleodeon.com/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>Closing The Gap Between Your Users And Their Data</title>
        <description>&lt;p&gt;In September, I was lucky enough to speak about local-first apps at the
&lt;a href=&quot;https://javascript-conference.com/&quot;&gt;International JavaScript Conference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/001.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Local-first apps are a topic very close to my heart! Here are the slides and
(tweet-shaped) notes I presented.&lt;/p&gt;

&lt;p&gt;If you’d like to comment on individual slides,
there’s a &lt;a href=&quot;https://twitter.com/jamespearce/status/1590040840092946433&quot;&gt;Twitter thread
here&lt;/a&gt;. Enjoy!&lt;/p&gt;

&lt;!--more--&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/002.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A few months ago, I left Meta and my professional life in Silicon Valley, and
started on a new adventure: living with my wife on a sail boat, Scout.&lt;/p&gt;

&lt;p&gt;Here we are, anchored by Coney Island so I could get to this conference.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/003.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It’s not every day you downsize onto a boat. One thing I did was archive my
digital footprint before I moved onboard.&lt;/p&gt;

&lt;p&gt;To do so, I categorized my local files by date and I copied them over,
year-by-year, to the archive.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/004.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I noticed a very interesting thing.&lt;/p&gt;

&lt;p&gt;During the 2000s, I had more local artifacts every year. But around 2010, the
archiving accelerated: fewer files each year.&lt;/p&gt;

&lt;p&gt;By 2021, I barely had anything to show for myself!&lt;/p&gt;

&lt;p&gt;It’s like my work just wasn’t on my computer…&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/005.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And of course, that’s exactly what had happened.&lt;/p&gt;

&lt;p&gt;My mail isn’t in .pst files any more. My photos aren’t on my hard drive. Most of
my code isn’t on my laptop.&lt;/p&gt;

&lt;p&gt;Documents, spreadsheets, designs, sketches, presentations: they’re all on
someone else’s computer now.&lt;/p&gt;

&lt;p&gt;(Sticker credit &lt;a href=&quot;https://twitter.com/chriswatterston&quot;&gt;@chriswatterston&lt;/a&gt;)&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/006.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now, after a decade, we maybe take this for granted. But it is actually pretty
cool.&lt;/p&gt;

&lt;p&gt;I can drop my laptop in the sea and it’s probably OK. Everything important is
saved on a quietly humming computer in a rack in a Google, or Apple, or Amazon
data center.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/007.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And of course, it’s easier than ever to work together: we don’t have to send
files back and forwards over email with increasingly ridiculous names to
collaborate.&lt;/p&gt;

&lt;p&gt;All you need is that fast internet connection!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/008.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Well, I don’t have time to talk about life on a boat, but let me at least say
that this is a regular sight for me. I’ve become very aware of how dependent I
am on other people’s computers.&lt;/p&gt;

&lt;p&gt;And it’s made me think about the shift that’s happened over the last decade.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/009.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Once, our devices were everything. Our electronic destiny was in our own hands.
When we built apps, they were ‘local-first’: state was always stored on the
user’s computer.&lt;/p&gt;

&lt;p&gt;The web was a useful to share and consume, but not fundamental to daily
creative workflows.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/010.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now, the pendulum has swung hard the other way. ‘Cloud-first’
intelligence, data, and business logic is nearly always hosted elsewhere.&lt;/p&gt;

&lt;p&gt;And, our devices, which aren’t just desktop computers of course, act as
thinner and dumber clients, entirely beholden to connectivity.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/011.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Despite this huge architectural shift, apps and their user experiences haven’t
often changed that much. Cloud-first Excel in 2022 looks a lot like local-first
Excel in 1997!&lt;/p&gt;

&lt;p&gt;So has it been worth it? I do wonder if we’ve lost some trade-offs as this
pendulum has swung.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/012.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pseudo management consultancy! The pros and cons for the two approaches go on
and on. It would be awesome if we could figure out the best of both worlds.&lt;/p&gt;

&lt;p&gt;But honestly, when it comes to experience, what really separates a cloud first
app from a local first app?&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/013.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now maybe I have rose-tinted nostalgia, but spinners seemed rare in the 90s.&lt;/p&gt;

&lt;p&gt;Now? You’ll spin whenever you need data that isn’t present on your device.
Which, with a cloud-first app, is… all of it.&lt;/p&gt;

&lt;p&gt;Even well-written cloud-first apps are competing with the speed of light.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/014.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;At least spinners are educational I suppose.&lt;/p&gt;

&lt;p&gt;They’re reminding us that your embattled app developer is having to fight the
laws of physics to get YOUR data onto YOUR computer.&lt;/p&gt;

&lt;p&gt;So let’s think about this from a developer perspective.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/015.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is how we architect web apps by default today.&lt;/p&gt;

&lt;p&gt;But there’s a challenge here. The user thinks they’re seeing ‘the view of
truth’, not the view of your app’s local cache. In fact the state of truth and
the supposed view of truth are a long way away from each other.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/016.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;PULL data every time there’s a new view.&lt;/p&gt;

&lt;p&gt;POLL for changes in case something happened on the server.&lt;/p&gt;

&lt;p&gt;Oh, the user makes a change? Get the change back to the server somehow, and
reconcile.&lt;/p&gt;

&lt;p&gt;PRAY that the resulting local state is consistent.&lt;/p&gt;

&lt;p&gt;Sigh. Is there another way?&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/017.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;What happens when we think local-first? What if local state is the source of
truth?&lt;/p&gt;

&lt;p&gt;Immediately the state and view of truth are right next to each other. For a
start, you can now keep them in sync at 16ms or less!&lt;/p&gt;

&lt;p&gt;We can also make the state more structured on the client.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/017.5.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You’re closing the gap between your users and their data.&lt;/p&gt;

&lt;p&gt;And local-first isn’t local-only. There’s nothing to stop us persisting that
data to the cloud.&lt;/p&gt;

&lt;p&gt;But that’s at our convenience: perhaps to save a snapshot
every now and then, rather than on the critical UI path.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/018.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://riffle.systems/essays/prelude/&quot;&gt;This&lt;/a&gt; was a super essay from four folks
at MIT (&lt;a href=&quot;https://twitter.com/geoffreylitt&quot;&gt;@geoffreylitt&lt;/a&gt;,
&lt;a href=&quot;https://twitter.com/nschiefer&quot;&gt;@nschiefer&lt;/a&gt; et al), exploring this idea.&lt;/p&gt;

&lt;p&gt;This quote in particular jumped out. Not only can we provide a better experience
for users, but it might also be easier to build these apps ourselves!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/019.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So what is this thing? It has these 4 requirements. But meeting them all is
tricky!&lt;/p&gt;

&lt;p&gt;Some state management tools provide reactivity but not structure - or assume a
cloud-first app. On the other hand, a fully-fledged RDBMS likely compromises
reactivity or footprint.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/020.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So it seems like local-first apps on the web might be a bit of a struggle.&lt;/p&gt;

&lt;p&gt;With these challenges in mind, I’ve been building a project called
&lt;a href=&quot;https://tinybase.org&quot;&gt;TinyBase&lt;/a&gt;. It explores these ideas and tries to meet
these requirements without too many trade-offs.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/021.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The zeroth thing about TinyBase is probably a bit meta until you know what the
library does - but I wanted to get it out there anyway.&lt;/p&gt;

&lt;p&gt;The clue is in the name - but yes, TinyBase is tiny!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/022.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Remember when the Ever Given got stuck in the Suez Canal last year?&lt;/p&gt;

&lt;p&gt;This little digger trying to free a monstrous ship is the perfect metaphor for
the life of a modern JavaScript developer. Why is my simple app bundle suddenly
6Mb bigger than it was the day before?&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/023.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I wanted to do my bit. TinyBase has no external dependencies. This is pretty
rare for non-trivial libraries.&lt;/p&gt;

&lt;p&gt;You get core functionality for 4Kb (compressed), or everything for 8Kb. You can
also reason about its (empty!) supply chain and security risks.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/024.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And I should say that keeping a JS library tiny takes a special type of
obsession.&lt;/p&gt;

&lt;p&gt;As a brief aside, I wrote about the experience of building a personal project
without the typical constraints or deadlines of a professional environment. It’s
been really interesting.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/025.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Back to TinyBase. One distinguishing feature is that it requires you to store
your app state in a tabular structure.&lt;/p&gt;

&lt;p&gt;Uniquely named tables, containing uniquely name rows, containing uniquely named
cells, containing strings, booleans, and numbers. That’s it.&lt;/p&gt;

&lt;p&gt;This might seem quite limiting, but unlike a real RDBMS, schemas are optional.
Each row can have different cells to the others, so you can store orthogonal
flat objects in each row. You can fit a lot of concepts into nested three-level
tabular structures.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/026.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;To work with that structure of data, there’s a completely obvious API for
setting and getting data in an out of the store. Set tables, rows, and cells,
and then read them back out.&lt;/p&gt;

&lt;p&gt;OK, so I know what you’re thinking. This is maybe not so very interesting yet.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/027.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But an opinionated data structure can be reactive. Changes to any part of a
TinyBase store can be listened for, and at any granularity.&lt;/p&gt;

&lt;p&gt;Register a listener in one part of your app, and if another part makes
changes to the relevant state, you’ll get a callback immediately.&lt;/p&gt;

&lt;p&gt;And there are all the propagations and cascades you would expect here. Changing
a cell will fire a listener for the table it’s in. Changing a whole table table
will fire any listeners for the affected cells within - and so on.&lt;/p&gt;

&lt;p&gt;But only those parts that change! TinyBase won’t waste your app’s cycles with
parts of the data that stay the same. This is one of the reasons you can only
store strings, booleans and numbers in each cell - they’re fast and easy to
check for equality.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/028.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;TinyBase doesn’t require React, but if you do use it, optional idiomatic
bindings are available.&lt;/p&gt;

&lt;p&gt;This is where the reactivity really pays off. The React hooks set up listeners,
and only cause the component to re-render when the underlying data changes.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/029.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Imagine you have a todo app: a table of rows, with text and ‘done’ flag for
each. (The JSX syntax here is illustrative).&lt;/p&gt;

&lt;p&gt;Click the flag, and the data is immediately stored. The change then
fires an event to update just the component for that cell: a surgical re-render.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/030.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tinybase.org/demos/todo-app/todo-app-v1-the-basics/&quot;&gt;Here’s a demo&lt;/a&gt;.
The store has just three rows, with text and done cells.&lt;/p&gt;

&lt;p&gt;The moment we change the data, the UI updates - and as you can see, only the row
that changed re-renders.&lt;/p&gt;

&lt;p&gt;Suffice to say that if this was coming from a server source of truth we would
naively have to send an update to the server, perhaps even re-querying the whole
table over the wire and re-rendering it all.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/031.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Whilst not a fully featured RDBMS, TinyBase does support some of the things that
you typically do with such a system:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;metrics of aggregated numeric values&lt;/li&gt;
  &lt;li&gt;indexes to look up rows quickly&lt;/li&gt;
  &lt;li&gt;relationships to associate rows to each other&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are also all reactive!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/032.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tinybase.org/demos/word-frequencies/&quot;&gt;This demo&lt;/a&gt; indexes 10,000 words
by stem, for a prefix-based autocomplete.&lt;/p&gt;

&lt;p&gt;You get an idea of how fast local-first can be. Imagine the spinners if you
loaded a new list of words from a server every time you pressed a key.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/033.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You can even express SQL-like queries (select, where, join, group-by, etc) with
an imperative dialect called TinyQL, and register listeners to render the
results - again reactively.&lt;/p&gt;

&lt;p&gt;This is new, but opens up interesting ideas for client-side analytics and rich
data-driven apps.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/034.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here’s an example of how we build up a query with TinyQL. It’s got two tables:
pets and owners. And then we set the definition to select the species of the
pet, and the name of the owner. The reactive results are just as you would
expect.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/035.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here’s a more complex example with 5 tables and relational IDs to connect them.&lt;/p&gt;

&lt;p&gt;One thing that’s notable: because this is imperative rather than
declarative SQL, the joins are all made in a programmatic loop.&lt;/p&gt;

&lt;p&gt;That’s TinyQL. Excited to see how people use this.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/036.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here are a few other demo apps that showcase the benefits of using a local-first
architecture:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://tinybase.org/demos/drawing/&quot;&gt;Drawing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tinybase.org/demos/movie-database/&quot;&gt;Movie Database&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tinybase.org/demos/car-analysis/&quot;&gt;Analytics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/037.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There’s more to TinyBase of course. It turns out 8kb can get you a lot these
days.&lt;/p&gt;

&lt;p&gt;Next I’ll be adding typed ORM APIs so you can start modeling your domain in
TypeScript.&lt;/p&gt;

&lt;p&gt;And CRDT synchronization is a stretch goal. It’ll be truly local-first if I can
pull that off!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/038.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Let’s pop back up the stack to summarize what we’ve talked about.&lt;/p&gt;

&lt;p&gt;Firstly, we talked about local-first apps. There is an alternative to having
everything locked up in a cloud, and placing more of the logic and content of
truth on a client device.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/039.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;More fine reading: I greatly recommend this article by &lt;a href=&quot;https://twitter.com/inkandswitch&quot;&gt;@inkandswitch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;They talk about a set of seven principles for local-first apps, of which this is
just one.&lt;/p&gt;

&lt;p&gt;These are all wonderful food for thought.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/040.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We also talked about what this means architecturally - bringing a relational,
reactive data store into the client, rather than having that source of truth in
the cloud.&lt;/p&gt;

&lt;p&gt;And we looked at how TinyBase might be an interesting way to do that.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/041.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I must stress that your mileage may vary. This is no panacea.&lt;/p&gt;

&lt;p&gt;Certain types of apps can never be local-first: a social network or a banking
app, to name just two! And until decentralized synchronization is more
widespread, the cloud is still pivotal for collaboration.&lt;/p&gt;

&lt;p&gt;I also think it’s not always super easy to retrofit a local-first architecture
onto an app that’s already cloud-first - at least compared to going local-first
in a more greenfield environment from the start.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/042.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But I feel like if you can make local-first work, you should give it a try.&lt;/p&gt;

&lt;p&gt;This morning’s beautiful sunrise is symbolic, because it’s easy for us to get
stuck in the status quo, following established approaches even when constraints
change and opportunities arise.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2022/ijs/043.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If you’re here, you are still early in thinking about local-first apps.&lt;/p&gt;

&lt;p&gt;And if we can pioneer new techniques that help us build more amazing user
experiences (and yes, question a few assumptions along the way) - we should do
it, and together!&lt;/p&gt;

&lt;p&gt;Thank you.&lt;/p&gt;
</description>
				<pubDate>Tue, 08 Nov 2022 00:00:00 +0000</pubDate>
				<link>https://tripleodeon.com/2022/11/closing-the-gap-between-your-users-and-their-data</link>
				<guid isPermaLink="true">https://tripleodeon.com/2022/11/closing-the-gap-between-your-users-and-their-data</guid>
			</item>
		
			<item>
				<title>Software Without Compromise</title>
        <description>&lt;p&gt;Have you ever worked on a software project and found yourself asking “if only”?
“If only I didn’t have to support this legacy codebase”. “If only my customers
were clear about what they wanted”. “If only we had more people”. Or “If only I
had more time”?&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Yes, of course you have. It’s the job. The craft of writing software is
fundamentally about handling compromise, understanding trade-offs, and knowing
when (or hoping that!) things are just good enough. At least, until the next
version! We’ll get it right then, eh?&lt;/p&gt;

&lt;p&gt;In my professional career, I’ve known this only too well. I’ve been fortunate to
work with brilliant people, but still… we have deadlines, roadmap commitments,
rapidly evolving requirements. It’s actually pretty fun, and those challenges go
with the territory.&lt;/p&gt;

&lt;p&gt;But I’ve always wondered… what would happen if you &lt;em&gt;didn’t&lt;/em&gt; have any of those
constraints? What if you had all the time you needed? If you could build exactly
what &lt;em&gt;you&lt;/em&gt; wanted? If you had the time to make your code (well, at least in your
eyes) perfect?&lt;/p&gt;

&lt;p&gt;No compromises.&lt;/p&gt;

&lt;p&gt;Over the last few years, I’ve been tinkering on
&lt;a href=&quot;http://tinybase.org/&quot;&gt;TinyBase&lt;/a&gt; in my spare time. Accountable to no-one, and
purely for my own curiosity, it’s a small project that had a chance to explore
this possibility. And today I finally launched, which is about as close to this
dream of having had “no compromises” as I could personally get.&lt;/p&gt;

&lt;p&gt;(I am fully aware that this is in the eye of the beholder! What I think is close
to perfect you may think is a hacky prototype. Bear with me, whatever your
absolute standards are!)&lt;/p&gt;

&lt;p&gt;This post is not about the details of the project itself, but about a few of
the things - both good and bad - that I experienced as a result of loosening
those constraints.&lt;/p&gt;

&lt;h2 id=&quot;its-hard-to-converge-when-you-can-refactor-forever&quot;&gt;It’s hard to converge when you can refactor forever&lt;/h2&gt;

&lt;p&gt;Like all software, TinyBase has grown organically. I didn’t have the perfect
vision of what it would be when I originally started, and I started with the
basics, and kept layering on new ideas, features, and patterns. I lost count of
the times I refactored it - often back and forward between similar ideas.&lt;/p&gt;

&lt;p&gt;In a real software project I would have had a finite number of shots at this:
breaking API changes are expensive. But when no-one is using your product and
you are the only person doing codemods, you can keep moving things around
forever. It becomes a curse!&lt;/p&gt;

&lt;p&gt;In plenty of cases these oscillations meant that the total distance covered
far exceeded the net final displacement - more motion than progress! Actually
having a damping function to force convergence would have been far more
efficient. Oftentimes I probably needed a peer calling out my indecision.&lt;/p&gt;

&lt;p&gt;That said, when I did finally converge on the conventions and patterns I was
happy with, I was able to guarantee them consistently across the entire
codebase. And that feels good.&lt;/p&gt;

&lt;h2 id=&quot;syntactic-perfection-is-cheaper-than-you-think&quot;&gt;Syntactic perfection is cheaper than you think&lt;/h2&gt;

&lt;p&gt;I feared that polishing the code itself, line by line, character by character,
would be where the majority of my time was wasted. I did want the formatting to
be perfect!&lt;/p&gt;

&lt;p&gt;But here I invested in tooling so I just couldn’t get it wrong - and the result
was joyous. Typescript and Prettier did a lot of the hard work of course. I
cranked up ESLint for every personal preference I could think of - including how
comprehensively every declaration is documented. CSpell found a bunch of naming
issues and typos. &lt;a href=&quot;https://tinybase.org/guides/how-tinybase-is-built/credits/#giants&quot;&gt;These are the
giants&lt;/a&gt; whose
shoulders I stood on.&lt;/p&gt;

&lt;p&gt;My overall view is that these days, these are things you probably &lt;em&gt;never&lt;/em&gt; need
to compromise. Once set up, any code - at least JavaScript - can be basically
syntactically ‘perfect’ forever, however you choose to define that.&lt;/p&gt;

&lt;h2 id=&quot;its-easy-to-obsess-over-minification&quot;&gt;It’s easy to obsess over minification&lt;/h2&gt;

&lt;p&gt;I wanted TinyBase to be small. It’s in the name. I wanted to have no runtime
dependencies so that there was no danger of application bloat.&lt;/p&gt;

&lt;p&gt;This caused me to not compromise on supporting legacy browsers. I didn’t want
lots of polyfills, for example, and modern terse syntax like nullish coalescing
was super appealing. I moved everything that appeared more than once into common
libraries - even string literals! - testing every change with the bundler to see
if it saved or cost a byte. I even stumbled on things like grouping &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;let&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;const&lt;/code&gt; declarations to &lt;a href=&quot;https://twitter.com/jamespearce/status/1416537695929606145&quot;&gt;save a little
more&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the grand scheme of things, was this effort worth it? I’m happy with the call
to keep it modern and free of dependencies. But I spent many hours of my life
saving &lt;a href=&quot;https://tinybase.org/#did-we-say-tiny&quot;&gt;a few tens of zipped bytes&lt;/a&gt; for
the world, and I’m not sure that was time best spent.&lt;/p&gt;

&lt;h2 id=&quot;test-coverage-10000-or-bust&quot;&gt;Test coverage: &lt;a href=&quot;https://tinybase.org/#well-tested-and-documented&quot;&gt;100.00%&lt;/a&gt; or bust&lt;/h2&gt;

&lt;p&gt;I knew I wanted to try and ship a project that tested every line of code, every
branch and every statement. This is &lt;em&gt;definitely&lt;/em&gt; not a luxury I’ve enjoyed on
any professional projects!&lt;/p&gt;

&lt;p&gt;For TinyBase, I wired up Istanbul coverage to Jest and made the coverage report
a standard part of my workflow. Sometimes I was able to write tests before code,
but more often I just fast-followed with tests after functionality. In the end,
it never felt like a drag, and once you get used to the coverage percentage
always being in the high 90s (at worse!) it only takes mild motivation to get it
back up to 100% again.&lt;/p&gt;

&lt;p&gt;Contrast this with having to climb the huge mountain of getting coverage up on a
previously un-tested codebase. That’s soul-destroying! I think the trick is to
commit to have 100% coverage from as early in the project as possible.&lt;/p&gt;

&lt;h2 id=&quot;documentation-as-a-first-class-citizen&quot;&gt;Documentation as a first class citizen&lt;/h2&gt;

&lt;p&gt;In my experience, documentation is always the last thing to get prioritized on a
software project. But having had a previous stint as a technical writer way back
in my career I wanted to see what it might mean to put it on more of a pedestal.&lt;/p&gt;

&lt;p&gt;For TinyBase, there is rich documentation built into the TypeScript definition
files, with a (linted) guarantee that everything has documentation coverage. A
toolchain based on TypeDoc turned it into the &lt;a href=&quot;https://tinybase.org/api/store/interfaces/store/store/&quot;&gt;API
documentation&lt;/a&gt;. As an
extra trick, all examples in the documentation are themselves tested with Jest,
which means a guarantee that everything runs, and that there’s a little extra
test coverage.&lt;/p&gt;

&lt;p&gt;On reflection, I may have overcooked this. It took ages. Even relatively obscure
parts of the codebase ended up with multiple working examples and rich
explanations. In fact it might even end up being daunting for the reader -
making the API seem larger and more complex than it actually is.&lt;/p&gt;

&lt;h2 id=&quot;but-is-it-valuable&quot;&gt;But is it valuable?&lt;/h2&gt;

&lt;p&gt;This is the big one. Untethered by requirements, customer constraints, and
deadlines, how do you guarantee that what you are building is actually useful in
the real-world?&lt;/p&gt;

&lt;p&gt;In other words, it might be ‘perfect’, but is it ‘valuable’?&lt;/p&gt;

&lt;p&gt;I do worry about this. Having disappeared down the rabbit hole of creating that
utopian project, and then popping up again… what will other people think? It
fits how &lt;em&gt;I&lt;/em&gt; think of the world, perfectly - but that is almost &lt;em&gt;by definition&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;Indeed, I asked &lt;a href=&quot;https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends&quot;&gt;a few
friends&lt;/a&gt;
for feedback on the project last week. They were all lovely about it, but one
theme that definitely came back was “but &lt;em&gt;why&lt;/em&gt; would I use this?”. In creating
this thing, had I lost touch with why it should even exist?&lt;/p&gt;

&lt;h2 id=&quot;here-goes&quot;&gt;Here goes!&lt;/h2&gt;

&lt;p&gt;Well, we will see. I’m open sourcing it today, and sharing it with the world.
I’m a little nervous I guess! But then again, perhaps ‘without compromise’ means
that even its reception shouldn’t matter.&lt;/p&gt;

&lt;p&gt;At the very least, I now know what it feels like to be able to indulge ones’
self like this.&lt;/p&gt;

&lt;p&gt;And an indulgence it was! I think it’s important to finish off with one final
point: and that is to acknowledge that working on this project has been a huge
privilege in many senses of the word.&lt;/p&gt;

&lt;p&gt;I’ve been able to work on a passion project in my spare time for such a long
time, complementarily to my professional and family life, and that I can value
it for the intellectual stimulation alone. I know how lucky I have been.&lt;/p&gt;

&lt;p&gt;And bonne chance, &lt;a href=&quot;http://tinybase.org/&quot;&gt;TinyBase&lt;/a&gt;!&lt;/p&gt;
</description>
				<pubDate>Thu, 13 Jan 2022 15:00:00 +0000</pubDate>
				<link>https://tripleodeon.com/2022/01/software-without-compromise/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2022/01/software-without-compromise/</guid>
			</item>
		
			<item>
				<title>My Blog; 2006-2011 &amp; 2022-</title>
        <description>&lt;p&gt;This blog has been dormant for over ten years. But not extinct!&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;A decade at Facebook &amp;amp; Meta has been a wild journey, and a trillion things have
happened that would probably have made great blog content.&lt;/p&gt;

&lt;p&gt;But for various reasons, I didn’t keep this channel going: generally a
combination of limited time, investing in internal communications instead, and
yes, a degree of confidentiality.&lt;/p&gt;

&lt;p&gt;However, in 2022, I want to see if I can find that voice again! Are blogs still
a thing?&lt;/p&gt;

&lt;p&gt;I’m not sure what the dominant themes will be, but you should expect some
creative pieces (I’m trying to be &lt;a href=&quot;https://twitter.com/jamespearce/status/1478478367758241792&quot;&gt;more present on
GitHub&lt;/a&gt; and build
things!), notes on what I find as I explore technologies as yet unfamiliar to
me - and maybe a few personal posts.&lt;/p&gt;

&lt;p&gt;For the nautically inclined, my wife Jayne and I have been building a boat.
Follow &lt;em&gt;that&lt;/em&gt; adventure on &lt;a href=&quot;https://scoutsailing.com/&quot;&gt;Scout Sailing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon!&lt;/p&gt;
</description>
				<pubDate>Thu, 13 Jan 2022 15:00:00 +0000</pubDate>
				<link>https://tripleodeon.com/2022/01/my-blog-2006-2011-2022-/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2022/01/my-blog-2006-2011-2022-/</guid>
			</item>
		
			<item>
				<title>Moving on</title>
        <description>&lt;p&gt;Friday is my last day at &lt;a href=&quot;http://www.sencha.com/&quot;&gt;Sencha&lt;/a&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;It’s been a great company to work for, with smart people, valuable products and a vibrant community. It’s not too much to say we’ve really led this year’s growth of interest in mobile web applications, HTML5, CSS3, and JavaScript.&lt;/p&gt;

&lt;p&gt;But for me, a new challenge. As of Monday, I’ll be Head of Mobile Developer Relations at Facebook.&lt;/p&gt;

&lt;p&gt;Not much to say right now – I have a six-week &lt;a href=&quot;https://www.facebook.com/note.php?note_id=177577963919&quot;&gt;bootcamp&lt;/a&gt; to get through – but it’s probably sufficient to say the company also has a few interesting ambitions in mobile.&lt;/p&gt;

&lt;p&gt;So, thank you Sencha, for a brilliant experience. And hello Facebook: let’s see what we can do.&lt;/p&gt;
</description>
				<pubDate>Fri, 02 Dec 2011 06:00:19 +0000</pubDate>
				<link>https://tripleodeon.com/2011/12/moving-on/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2011/12/moving-on/</guid>
			</item>
		
			<item>
				<title>First, Understand Your Screen</title>
        <description>&lt;p&gt;I unashamedly maintain that there is so much more to being successful on the mobile web than dealing with screen size. But I do accept that dealing with screen size is at least a first step.&lt;/p&gt;

&lt;p&gt;Thank goodness then, that the matter of screen size is so simple and well understood.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;strong&gt;Really?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As web developers, we will often need to know the screen size of the device we are displaying content on. Perhaps on the server, perhaps on the client, perhaps to be used as a clause in a media query.&lt;/p&gt;

&lt;p&gt;But how best to measure it? And what are we measuring anyway? On the client-side, for instance, a variety of ways exist to determine screen and page size: things like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.width&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.outerWidth&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.body.clientWidth&lt;/code&gt;, and so on. But these properties are infamously unspecified by any standards: so what do they all mean – and &lt;strong&gt;how reliable are they on mobile browsers&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Required reading at this point is &lt;a href=&quot;http://www.quirksmode.org/mobile/tableViewport.html&quot;&gt;PPK’s viewport article&lt;/a&gt;. With an article of tables from him that long, you know something’s up.&lt;/p&gt;

&lt;p&gt;But last week &lt;a href=&quot;http://www.sencha.com/blog/sencha-io-src-update/&quot;&gt;I pushed out an update to src.sencha.io&lt;/a&gt; which allows client-side screen size parameters. Which parameters should mobile developers use? And when?&lt;/p&gt;

&lt;p&gt;&lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html&quot;&gt;&lt;img src=&quot;/assets/2011/12/table-248x173.png&quot; alt=&quot;&quot; title=&quot;table&quot; width=&quot;248&quot; height=&quot;173&quot; class=&quot;alignright size-medium wp-image-683&quot; style=&quot;margin-bottom:2em;border:1px solid #ccc&quot; srcset=&quot;/assets/2011/12/table-248x173.png 248w, /assets/2011/12/table-500x350.png 500w, /assets/2011/12/table.png 610w&quot; sizes=&quot;(max-width: 248px) 100vw, 248px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So for this blog post, I looked at a range of these metrics, and recorded their values for a variety of mobile browsers and page conditions. I’ve been working in mobile for far too long, but still, the amount of diversity in the results shocked me. Read on for the gory details, or skip to the end for the TLDR. I think there are some interesting findings.&lt;/p&gt;

&lt;h2 id=&quot;methodology&quot;&gt;Methodology&lt;/h2&gt;

&lt;p&gt;The tests comprised a very simple web page, containing several paragraphs of meaningless Latin, and a JavaScript function that runs to take screen measurements within the browser. The following properties are sought:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.width&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.availWidth&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.outerWidth&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerWidth&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.body.clientWidth&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.body.offsetWidth&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@media device-width&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@media width&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.height&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.availHeight&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.outerHeight&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerHeight&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.body.clientHeight&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.body.offsetHeight&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@media device-height&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@media height&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.orientation&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@media orientation&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The CSS media query properties (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;device-width&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;orientation&lt;/code&gt;, etc) are taken programmatically by evaluating expressions with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;matchMedia()&lt;/code&gt; function, supported in iOS v5.0 and Android v4.0.&lt;/p&gt;

&lt;p&gt;I’m sorry to say that the tests were run on emulators rather than real devices, but covered iPhone (iOS v5.0 and iOS v4.3), Android v2.3, Android v4.0, and Opera Mobile v11.0. The Android and Opera simulators were set to use HVGA (320×480) so as to have conditions as consistent with the iPhone as possible. (Even though the actual physical screen of a retina iPhone is 640×960, this HVGA resolution is the one reported to the software APIs).&lt;/p&gt;

&lt;p&gt;The tests were run with two different HTML document types – HTML5 and XHTML-MP – and also a third time with no doctype specified. The tests were also run both with and without a viewport meta tag to control the default width (constrained to ‘&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;device-width&lt;/code&gt;‘) and scaling. Additionally each device was tested with landscape as well as portrait orientation – making a total of 12 test combinations for each browser.&lt;/p&gt;

&lt;p&gt;For the iPhone and Android browsers, PhoneGap-wrapped versions of the test pages were also run (without the viewport meta tag), and finally, for iOS v5.0, the iPhone’s ‘Add to Homescreen’ technique was used (with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apple-mobile-web-app-capable&lt;/code&gt; meta tag) to launch portrait versions of the tests in a full-screen mode.&lt;/p&gt;

&lt;p&gt;As if all those combinations were not enough, the properties were accessed four times during the lifecycle of the page: a) inline before the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tag, b) after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; tag, c) on the document’s load event, and d) one more time, 250ms later. I had a hunch that the values – at least those relating to page height – might change throughout this lifecycle.&lt;/p&gt;

&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;

&lt;p&gt;The full set of results is available &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html&quot;&gt;here&lt;/a&gt;. The various combinations of conditions are across the top, and operating systems (and measurements made) are down the left. Each cell shows the value returned from the relevant API call, and ‘&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-&lt;/code&gt;‘ is used where the call failed or returned an undefined value.&lt;/p&gt;

&lt;p&gt;Where the value changed during the lifecycle of the page, slashes delimit the change, and a letter is used to indicate at which of the four measuring points the value changed. So for example, ‘&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;208/c:1962&lt;/code&gt;‘ means that a value was 208 before the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;body&amp;gt;&lt;/code&gt; and after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;/body&amp;gt;&lt;/code&gt;, but then it changed to 1962 for ‘c’, the document’s load event, and remained so 250ms later.&lt;/p&gt;

&lt;p&gt;There’s a lot to digest in there, although you may at least have noticed – as I have – that homogeneity is scarce. You may notice some particularly strange results, particularly on Android, but also on iOS and Opera. Let’s analyze the data by slicing the findings by property measured, dicing by operating system, and trying to digest the whole sorry lot.&lt;/p&gt;

&lt;h2 id=&quot;analysis&quot;&gt;Analysis&lt;/h2&gt;

&lt;h3 id=&quot;a-targettable-hrefassets201112tablehtmlrscreenwidth038cscreenwidtha--a-targettable-hrefassets201112tablehtmlrscreenheight038cheighta&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=screen.width&amp;amp;#038;c=&quot;&amp;gt;screen.width&amp;lt;/a&amp;gt;&lt;/code&gt; &amp;amp; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=screen.height&amp;amp;#038;c=&quot;&amp;gt;.height&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;These two properties are generally understood to return the physical dimensions of the screen upon which a browser is running. On desktop browsers, they will return you 1024×768, 1440×900, 1600×1200 and so on, regardless of how the actual browser window is sized. On mobile devices, one would expect the same behavior, and get full physical screen sizes.&lt;/p&gt;

&lt;p&gt;Well, close. But no cigar.&lt;/p&gt;

&lt;p&gt;&lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11screen.w&amp;#038;c=&quot;&gt;Opera Mobile&lt;/a&gt; and &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40screen.w&amp;#038;c=&quot;&gt;Android v4.0&lt;/a&gt; (as well as &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.w&amp;#038;c=phone&quot;&gt;v2.3 in a PhoneGap app&lt;/a&gt;) behave most intuitively in this regard, and will indeed report 320×480 or 480×320 for portrait and landscape respectively.&lt;/p&gt;

&lt;p&gt;&lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50screen.w&amp;#038;c=&quot;&gt;iOS&lt;/a&gt; also consistently reports the physical dimensions of the screen (320×480), but notably fails to flip them for a change or orientation. So be aware that in landscape mode, your browser’s width will actually, apparently, be reported to be larger than the screen’s.&lt;/p&gt;

&lt;p&gt;Android v2.3, in a regular browser scenario, however, displays even more curious behavior. Its &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.w&amp;#038;c=&quot;&gt;&lt;code&gt;screen.width&lt;/code&gt;&lt;/a&gt; always starts off as 800 – which is clearly some sort of virtual viewport, rather than the physical screen. But when the document has an XHTML-MP doctype, or a constrained viewport (for any doctype), the &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.w&amp;#038;c=:&quot;&gt;value will switch&lt;/a&gt;, by the time of the document load event, to be the 320 or 480 you might expect.&lt;/p&gt;

&lt;p&gt;Now this might be tolerable if you remember to wait for documents to fully load before accessing this property, but even that caution is blown to the wind by &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=&quot;&gt;Android v2.3’s &lt;code&gt;screen.height&lt;/code&gt;&lt;/a&gt; behavior.&lt;/p&gt;

&lt;p&gt;With a non-constrained viewport, a portrait orientation, and with no doctype, screen.height was reported during this test as &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=&amp;gt;1003&amp;lt;&quot;&gt;1003&lt;/a&gt;. With an HTML5 doctype, it also switched to 1003, but only after &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=498/d:1003&quot;&gt;dallying at 498&lt;/a&gt; until at some point &lt;em&gt;after&lt;/em&gt; the document load event. With an XHTML-MP doctype, it also started out at 498, but &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=498/c:199&quot;&gt;then dropped&lt;/a&gt; to about 40% of that value (199) by the time of the document load. With a constrained viewport, behavior was stable as a function of doctype, but also demonstrated the 60% drop at document load: from &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=1003/c:401&quot;&gt;1003 down to 401&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Landscape-wise, the same sort of issues occur: with no doctype, screen.height is a &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=&amp;gt;402&amp;lt;&quot;&gt;reliable 402&lt;/a&gt;; and with an HTML5 doctype, the same value is also (&lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=372/d:402&quot;&gt;eventually&lt;/a&gt;) returned. The XHTML-MP doctype, or a constrained viewport, will cause the eventual value to be 241, but by way of &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=241&amp;lt;&quot;&gt;various intriguing values&lt;/a&gt;. Our constrained, HTML5 document, &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=372/c:223/d:241&quot;&gt;for example&lt;/a&gt;, reported 372 before and after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;body/&amp;gt;&lt;/code&gt;, 223 on load, and 241 at some point afterwards.&lt;/p&gt;

&lt;p&gt;Yes, these actual values are probably dependent upon the length of my particular test page itself, but remember that these are supposed to be the physical screen dimensions, folks!&lt;/p&gt;

&lt;p&gt;Some semblance of normality returns to Android v2.3 in the PhoneGap environment. The &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.h&amp;#038;c=phone&quot;&gt;values of 455 and 295&lt;/a&gt; are hardly accurate measures of physical screen size, either (since bizarrely they seem to take the 25 pixel status bar into account!), but at least they’re close, and hooray: take solace that the value does not change during the page lifecycle.&lt;/p&gt;

&lt;h3 id=&quot;a-targettable-hrefassets201112tablehtmlravailwidth038cscreenavailwidtha--a-targettable-hrefassets201112tablehtmlravailheight038cavailheighta&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=availWidth&amp;amp;#038;c=&quot;&amp;gt;screen.availWidth&amp;lt;/a&amp;gt;&lt;/code&gt; &amp;amp; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=availHeight&amp;amp;#038;c=&quot;&amp;gt;.availHeight&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;In the desktop world, the available width and height returned by these two properties still relate to the whole screen, rather than the browser’s window, but they take operating system chrome into account. The menu bar in OSX means that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.availHeight&lt;/code&gt; is at least 26 pixels less than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.height&lt;/code&gt;, for example – although the width values will probably be the same (unless you have a non-minimizing dock on the side of the screen).&lt;/p&gt;

&lt;p&gt;In mobile, one might expect the available values to take into account any OS status bar height. Let’s see, shall we?&lt;/p&gt;

&lt;p&gt;I need to caveat the Opera results here, since the simulator runs in a dedicated window without any ‘real device’ chrome. But that should have implied that its available dimensions are the same as the screen’s – and this was not what was seen. In fact, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;availHeight&lt;/code&gt; &lt;em&gt;is&lt;/em&gt; reduced to &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11screen.availheight&amp;#038;c=&quot;&gt;369&lt;/a&gt; from a height of 480, not by any OS chrome, but by the &lt;em&gt;browser’s&lt;/em&gt; own rather fat chrome. This is not what is expected – even if, on a real device, it emerges that the OS chrome is deducted too.&lt;/p&gt;

&lt;p&gt;And having labored over Android v2.3, above, there’s not much more to say here about that operating system either. Without exception &lt;em&gt;it&lt;/em&gt; depressingly reports exactly the same values for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=android23screen.availwidth&amp;amp;#038;c=&quot;&amp;gt;availWidth&amp;lt;/a&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=android23screen.availheight&amp;amp;#038;c=&quot;&amp;gt;availHeight&amp;lt;/a&amp;gt;&lt;/code&gt; as it did for width and height – although at least that means that the PhoneGap values are now correct! Android v4.0’s browser also reports the same available values as it did for total &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=android40screen.availwidth&amp;amp;#038;c=&quot;&amp;gt;width&amp;lt;/a&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=android40screen.availheight&amp;amp;#038;c=&quot;&amp;gt;height&amp;lt;/a&amp;gt;&lt;/code&gt;, but fortunately they were slightly more sensible to begin with. But bizarrely the PhoneGap app &lt;em&gt;&lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40screen.availheight&amp;#038;c=phone&quot;&gt;doesn’t&lt;/a&gt;&lt;/em&gt; take the status bar height off as it &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23screen.availheight&amp;#038;c=phone&quot;&gt;does&lt;/a&gt; for v2.3.&lt;/p&gt;

&lt;p&gt;And then there’s iOS: it &lt;em&gt;does&lt;/em&gt; successfully &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50screen.availheight&amp;#038;c=&quot;&gt;deduct 20 pixels&lt;/a&gt; for the operating system’s chrome. But remember that orientation is ignored! So although a portrait &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;availHeight&lt;/code&gt; is sensibly &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50screen.availheight&amp;#038;c=460&quot;&gt;460&lt;/a&gt; (having dropped from 480), it is anti-intuitively the &lt;em&gt;width&lt;/em&gt; in a landscape orientation that is reduced (from 320 to &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50screen.availwidth&amp;#038;c=300&quot;&gt;300&lt;/a&gt;) by a bar at the &lt;em&gt;top&lt;/em&gt; of the screen!&lt;/p&gt;

&lt;p&gt;Quirks on all fronts. Sigh.&lt;/p&gt;

&lt;h3 id=&quot;a-targettable-hrefassets201112tablehtmlrouterwidth038cwindowouterwidtha--a-targettable-hrefassets201112tablehtmlrinnerwidth038cinnerwidtha&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=outerwidth&amp;amp;#038;c=&quot;&amp;gt;window.outerWidth&amp;lt;/a&amp;gt;&lt;/code&gt; &amp;amp; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=innerwidth&amp;amp;#038;c=&quot;&amp;gt;.innerWidth&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;In contrast to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen&lt;/code&gt; properties, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window&lt;/code&gt; properties are understood to refer to the browser window itself. For desktop browsers, (at least, when they’re not running in full-screen mode), the outer dimensions will normally be smaller than those for the screen. The inner dimensions then further deduct browser chrome: window borders, toolbars, status bars, and so on, and so they are normally smaller still.&lt;/p&gt;

&lt;p&gt;In mobile, we might expect the outer values to more or less match those for the available screen – since apps run full size. And indeed, with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=outerwidth&amp;amp;#038;c=&quot;&amp;gt;window.outerWidth&amp;lt;/a&amp;gt;&lt;/code&gt;, we have a good news story.&lt;/p&gt;

&lt;p&gt;iOS v5.0 uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=ios50window.outerw&amp;amp;#038;c=&quot;&amp;gt;window.outerWidth&amp;lt;/a&amp;gt;&lt;/code&gt; to redeem itself over the lack of the orientation’s effect on screen. It &lt;em&gt;is&lt;/em&gt; 320 for portrait viewing, and 480 for landscape viewing. Bam.&lt;/p&gt;

&lt;p&gt;&lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11window.outerw&amp;#038;c=&quot;&gt;Opera&lt;/a&gt; does the same. Bam. Astonishingly, &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23window.outerw&amp;#038;c=&quot;&gt;Android v2.3&lt;/a&gt; also nails it. Bam.&lt;/p&gt;

&lt;p&gt;In fact, the only small blot that stops &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.outerWidth&lt;/code&gt; being the model student is &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.outerw&amp;#038;c=land&quot;&gt;Android v4.0 in landscape&lt;/a&gt;: the property often has the portrait value of 320 before the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tag is reached. However, this is arguably an edge case, and a very minor misdemeanor.&lt;/p&gt;

&lt;p&gt;After that rousing news, it’s back to earth with a small bump for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerWidth&lt;/code&gt;. If your desktop experience had convinced you that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;innerWidth&lt;/code&gt; must be the same or smaller than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;outerWidth&lt;/code&gt;, you’ve now got the TARDIS-like experience of mobile viewports to enjoy.&lt;/p&gt;

&lt;p&gt;Without dropping into classic viewport theory here, it’s sufficient to say that WebKit mobile browsers seem to use the boundary between the window’s ‘inner’ and ‘outer’ width and height properties to delineate the world of physical pixels and the world of viewport pixels: the latter a realm where zooming, pinching and tapping allow the mobile browser to sensibly scale web pages designed for much larger screens.&lt;/p&gt;

&lt;p&gt;For those pages where the viewport’s behavior is constrained, perhaps through the use of meta tags, this is of little concern, since the mapping of the two worlds is 1:1. And indeed, in our tests, when such a tag is present, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=window.innerw&amp;amp;#038;c=&quot;&amp;gt;innerWidth&amp;lt;/a&amp;gt;&lt;/code&gt; takes exactly the same value as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=window.outerw&amp;amp;#038;c=&quot;&amp;gt;outerWidth&amp;lt;/a&amp;gt;&lt;/code&gt; – modulo the Android race conditions, at least.&lt;/p&gt;

&lt;p&gt;Less well-known might be the fact that, for all these browsers, when an XHTML-MP doctype is present, &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=window.innerw&amp;#038;c=xh&quot;&gt;the same is also true&lt;/a&gt;. We’ve alluded to this already: the presence of this forces the viewport width to be the same as the physical width of the screen (either 320 or 480), while still allowing subsequent scaling.&lt;/p&gt;

&lt;p&gt;And of course, PhoneGap’s default configuration is also to constrain the viewport, so the values there &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=window.innerw&amp;#038;c=phone&quot;&gt;also match&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But when the viewport has &lt;em&gt;&lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=window.innerw&amp;#038;c=Non-&quot;&gt;not&lt;/a&gt;&lt;/em&gt; been constrained, and an &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=window.innerw&amp;#038;c=l5&quot;&gt;HTML5 doctype&lt;/a&gt; (or &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=window.innerw&amp;#038;c=none&quot;&gt;none at all&lt;/a&gt;) is used, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;innerWidth&lt;/code&gt; will suddenly start to represent values much larger than the physical screen: and represent the width of the viewport canvas upon which the page has been rendered.&lt;/p&gt;

&lt;p&gt;On a portrait iPhone, for example, the default viewport is &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.innerw&amp;#038;c=980&quot;&gt;980&lt;/a&gt; pixels. On a landscape iPhone it is, well, according to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerWidth&lt;/code&gt;, &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.innerw&amp;#038;c=981&quot;&gt;981&lt;/a&gt; (yes, really).&lt;/p&gt;

&lt;p&gt;Android 2.3 and earlier used a different value of 800 for the default viewport width, and this is exposed as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=android23window.innerw&amp;amp;#038;c=800&quot;&amp;gt;window.innerWidth&amp;lt;/a&amp;gt;&lt;/code&gt; (as well as the vestigal value before document load for the constrained tests). With Android 4.0, the default viewport has been brought in line with the iPhone’s: &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.innerw&amp;#038;c=980&quot;&gt;980 pixels&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;a-targettable-hrefassets201112tablehtmlrouterh038cwindowouterheighta--a-targettable-hrefassets201112tablehtmlrinnerh038cinnerheighta&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=outerh&amp;amp;#038;c=&quot;&amp;gt;window.outerHeight&amp;lt;/a&amp;gt;&lt;/code&gt; &amp;amp; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=innerh&amp;amp;#038;c=&quot;&amp;gt;.innerHeight&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Mobile browsers normally have no vertical chrome, so apart from the matter of viewports, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;outerWidth&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;innerWidth&lt;/code&gt; values corresponded relatively nicely. However, they do have horizontal chrome elements: address bars at top, and toolbars at bottom. So we should expect the height to be reduced accordingly.&lt;/p&gt;

&lt;p&gt;Opera, in a way, gets this right. We have already pointed out it surprisingly deducted the browser chrome to calculate its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.availHeight&lt;/code&gt;. But since it then promptly uses the same value for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=opera11window.outerh&amp;amp;#038;c=&quot;&amp;gt;window.outerHeight&amp;lt;/a&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=opera11window.innerh&amp;amp;#038;c=&quot;&amp;gt;window.innerHeight&amp;lt;/a&amp;gt;&lt;/code&gt;, it meets our expectations on the latter of these two properties at least.&lt;/p&gt;

&lt;p&gt;For Android, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=android40window.outerh&amp;amp;#038;c=&quot;&amp;gt;window.outerHeight&amp;lt;/a&amp;gt;&lt;/code&gt; is also relatively deterministic. Again, there are timing wobbles, but after page load, the values are consistently &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.outerh&amp;#038;c=455&quot;&gt;455&lt;/a&gt; (in portrait) and &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.outerh&amp;#038;c=295&quot;&gt;295&lt;/a&gt; (in landscape). The Android OS bar, as we’ve mentioned, is 25 pixels.&lt;/p&gt;

&lt;p&gt;But it’s iOS &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=&quot;&gt;that baffles&lt;/a&gt; this time. Only in homescreen mode, with an HTML5 doctype (or none at all), does the browser report the expected &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.outerHeight&lt;/code&gt; value of &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=:460&quot;&gt;460&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In all other cases, bizarre numbers come out. For iOS v5.0, for constrained portrait pages, it’s &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=356/c:445&quot;&gt;356 that becomes 445&lt;/a&gt;. For non-constrained portrait pages it’s &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=356/c:1602&quot;&gt;356 that becomes 1602&lt;/a&gt;. For constrained landscape pages it’s &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=208/c:667&quot;&gt;208 that becomes 667&lt;/a&gt;. For non-constrained portrait pages it’s &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=208/c:1702&quot;&gt;208 that becomes 1702&lt;/a&gt;. In PhoneGap, it’s &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=460/c:1602&quot;&gt;460 that becomes 1602&lt;/a&gt;, or &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=480/c:1202&quot;&gt;480 that becomes 1202&lt;/a&gt;. And for constrained homescreen apps, it’s &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=480/c:1602&quot;&gt;480 that becomes 1602&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The fact that this is the one property whose values significantly vary from &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios43window.outerh&amp;#038;c=&quot;&gt;iOS v4.3&lt;/a&gt; to &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.outerh&amp;#038;c=&quot;&gt;iOS v5.0&lt;/a&gt; also raises alarm bells.&lt;/p&gt;

&lt;p&gt;Perhaps we could write a whole blog post to reverse engineer is going on here. 356 and 208 seem to have some plausibility, but apart from that – who knows? There’s no apparent Safari documentation for this property, and even WebCore’s own test suite describes the expected results as ‘&lt;a href=&quot;http://opensource.apple.com/source/WebCore/WebCore-955.66/manual-tests/window-sizing.html&quot;&gt;empirical&lt;/a&gt;‘.&lt;/p&gt;

&lt;p&gt;I think I can safely caution you never to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.outerHeight&lt;/code&gt; in iOS and expect a meaningful answer.&lt;/p&gt;

&lt;p&gt;After that, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerHeight&lt;/code&gt; seems relatively stable and predictable. In constrained (and XHTML-MP) scenarios in the regular iOS browser, it sits at that familiar &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=window.innerh&amp;#038;c=356&quot;&gt;356&lt;/a&gt; value for portrait and &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=window.innerh&amp;#038;c=208&quot;&gt;208&lt;/a&gt; for landscape. This &lt;em&gt;is&lt;/em&gt; the actual inner height of the browser window, sans browser chrome, as &lt;a href=&quot;http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html#//apple_ref/doc/uid/TP40006509-SW1&quot;&gt;per documentation&lt;/a&gt;. (The fact that these two values are not the same amount less than the physical screen dimensions is due to the fact that the landscape toolbar is slightly shallower than the portrait one.)&lt;/p&gt;

&lt;p&gt;This pattern is also consistent when the page is launched &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=window.innerh&amp;#038;c=homescreenportraitconstrain&quot;&gt;constrained from the homescreen&lt;/a&gt; or in a &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=window.innerh&amp;#038;c=phone&quot;&gt;PhoneGap&lt;/a&gt; application. Here, without any browser chrome at all, the values correctly return to the physical screen dimensions minus the 20 pixel tool bar.&lt;/p&gt;

&lt;p&gt;However, this value is not as trustworthy when the page has a non-constrained viewport and an &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.innerh&amp;#038;c=non-constrainedhtml5&quot;&gt;HTML5&lt;/a&gt; (or &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.innerh&amp;#038;c=non-constrainednone&quot;&gt;omitted&lt;/a&gt;) doctype. In our test, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerHeight&lt;/code&gt; had values of 1091 and 425 for the two orientations – doubtless dependent upon the length of the content in our actual page – and hard to predict. As if to prove that point, in homescreen mode, this value &lt;em&gt;increases&lt;/em&gt; to &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.innerh&amp;#038;c=1409&quot;&gt;1409&lt;/a&gt;. Not particularly useful.&lt;/p&gt;

&lt;p&gt;When we look at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerHeight&lt;/code&gt; for Android, the results appear to follow a similar pattern, but, as usual, are somewhat obfuscated by the fact they change throughout the page lifecycle. For constrained viewports, the two orientations’ values are &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23window.innerh&amp;#038;c=401&quot;&gt;401&lt;/a&gt; and &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23window.innerh&amp;#038;c=241&quot;&gt;241&lt;/a&gt; in Android v2.3 (where the address bar is 54 pixels high), and &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.innerh&amp;#038;c=403&quot;&gt;403&lt;/a&gt; and &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.innerh&amp;#038;c=243&quot;&gt;243&lt;/a&gt; in Android v4.0 (where the address bar is 52 pixels high), and the PhoneGap values are also &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.innerh&amp;#038;c=phone&quot;&gt;as expected&lt;/a&gt;, considering there is no address bar.&lt;/p&gt;

&lt;p&gt;But again, the determinism disappears when the viewport is not constrained, the reported values as varied &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.innerh&amp;#038;c=1234&quot;&gt;1234&lt;/a&gt;, &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.innerh&amp;#038;c=496&quot;&gt;496&lt;/a&gt;, &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.innerh&amp;#038;c=1003&quot;&gt;1003&lt;/a&gt; and &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.innerh&amp;#038;c=402&quot;&gt;402&lt;/a&gt;. We can deduce that these are viewport lengths rather than window size, that they are content-dependent, and that they change between platform versions due to the updated viewport width – but again, their utility is more doubtful than in the constrained scenarios.&lt;/p&gt;

&lt;h3 id=&quot;a-targettable-hrefassets201112tablehtmlroffsetw038cbodyoffsetwidtha-a-targettable-hrefassets201112tablehtmlrclientw038cclientwidtha-a-targettable-hrefassets201112tablehtmlroffseth038coffsetheighta--a-targettable-hrefassets201112tablehtmlrclienth038cclientheighta&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=offsetw&amp;amp;#038;c=&quot;&amp;gt;body.offsetWidth&amp;lt;/a&amp;gt;&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=clientw&amp;amp;#038;c=&quot;&amp;gt;.clientWidth&amp;lt;/a&amp;gt;&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=offseth&amp;amp;#038;c=&quot;&amp;gt;.offsetHeight&amp;lt;/a&amp;gt;&lt;/code&gt;, &amp;amp; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=clienth&amp;amp;#038;c=&quot;&amp;gt;.clientHeight&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;We move onto our final set of JavaScript APIs, and we might hope that we are leaving the vagaries of BOM implementations and entering the consistency of the DOM &amp;amp; CSSOM (although, sadly, these properties are still not under the purview of any W3C standard).&lt;/p&gt;

&lt;p&gt;These four values should theoretically be available on all DOM elements: the ‘offset’ dimensions include an element’s content, padding and border, while the ‘client’ dimensions are the content and padding alone. Neither include the margin, as detailed in &lt;a href=&quot;https://developer.mozilla.org/en/Determining_the_dimensions_of_elements&quot;&gt;Mozilla’s documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In our case, we are querying these properties for the document’s body, and, since it has no border, the offset and client values should be the same. Our test pages add a CSS margin of 10 pixels, so on the desktop, we would expect its width, at least, to be 20 pixels less than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerWidth&lt;/code&gt;. Empirically, desktop browsers seem to use the two heights to represent the total length of the page, rather than the height of the window display. (I’d thought that would be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;body.scrollHeight&lt;/code&gt;, but that’s another story.)&lt;/p&gt;

&lt;p&gt;How do mobile browsers fare? How does the viewport concept affect these values?&lt;/p&gt;

&lt;p&gt;With &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetWidth&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientWidth&lt;/code&gt;, &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50document.body.offsetw&amp;#038;c=&quot;&gt;iOS&lt;/a&gt; and &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40document.body.offsetw&amp;#038;c=&quot;&gt;Android&lt;/a&gt; work broadly as you would expect. The non-constrained viewports return measurements in the high 900s (and around 800s for &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android23document.body.offsetw&amp;#038;c=&quot;&gt;Android v2.3&lt;/a&gt;), and the constrained pages in the low 300s (for portrait) and mid 400s (for landscape).&lt;/p&gt;

&lt;p&gt;It’s notable how and when the choice of doctype affects these values though. With an HTML5 doctype, non-constrained viewport tests on both platforms report 20 pixels less than the viewport size for both values: &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=clientw&amp;#038;c=non-constrainedhtml5&quot;&gt;960 pixels regardless of orientation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With an &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=clientw&amp;#038;c=xhtml&quot;&gt;XHTML-MP doctype&lt;/a&gt;, as we’ve previously mentioned, the viewport becomes the device width by default, and again 20 pixels are correctly deducted to give us values of 300 and 460 in landscape and portrait respectively. The same expected behaviour is seen with &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=clientw&amp;#038;c=tconstrainedhtml5&quot;&gt;HTML5 doctypes used on constrained viewports&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What is slightly strange is when no doctype is used. In this case, again on both platforms in all scenarios, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientWidth&lt;/code&gt; is the &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=clientw&amp;#038;c=none&quot;&gt;full viewport width&lt;/a&gt; (980, 800, 480 or 320), and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetWidth&lt;/code&gt; is &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=offsetw&amp;#038;c=none&quot;&gt;reduced by the margin&lt;/a&gt; (to 460, 780, 460, or 300). This seems systemic: as though the lack of doctype puts the browser into a mode where it interprets the body’s margin as a border.&lt;/p&gt;

&lt;p&gt;Across all of our testing combinations, though, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetHeight&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientHeight&lt;/code&gt; values are the most bizarre set of results in the whole experiment.&lt;/p&gt;

&lt;p&gt;There are three patterns on Android and iOS. Firstly, pages with &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=clienth&amp;#038;c=none&quot;&gt;no doctype&lt;/a&gt; will always have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientHeight&lt;/code&gt; equal to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerHeight&lt;/code&gt; once the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; tag has closed – but the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetHeight&lt;/code&gt; will be &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=offseth&amp;#038;c=none&quot;&gt;completely different&lt;/a&gt;. Secondly, when there is a doctype, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=clienth&amp;amp;#038;c=html&quot;&amp;gt;clientHeight&amp;lt;/a&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=offseth&amp;amp;#038;c=html&quot;&amp;gt;offsetHeight&amp;lt;/a&amp;gt;&lt;/code&gt; are always the same, and nearly always regardless of what the doctype actually is. (The &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=clienth&amp;#038;c=d:922&quot;&gt;bizarre exception&lt;/a&gt; is Android v2.3 where the HTML5 doctype on the non-constrained viewport causes both values to reduce dramatically at some point after the document load event). And finally, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetHeight&lt;/code&gt; value of the non-doctype test always produces the same values as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientHeight&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetHeight&lt;/code&gt; of the HTML5 equivalent.&lt;/p&gt;

&lt;p&gt;Got that?&lt;/p&gt;

&lt;p&gt;But what the values actually &lt;em&gt;are&lt;/em&gt; seems extremely non-deterministic. We’ve already commented on the arbitrary nature of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerHeight&lt;/code&gt; which the non-doctype results seem to echo. But despite the doctype, orientation and viewport size, the meaning of these values would seem very hard to assess. The best we can say is that when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientWidth&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetWidth&lt;/code&gt; go up, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientHeight&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetHeight&lt;/code&gt; go down (as seems sensible), but that no attention seems to be paid to our 20 pixel margin.&lt;/p&gt;

&lt;p&gt;Again, properties best left alone, I think.&lt;/p&gt;

&lt;p&gt;In contrast to iOS and Android, which use window outer and inner dimensions as the point of delineation between physical pixels and the viewport, Opera Mobile’s strategy seems to have been to to stay in the world of real pixels until this last &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=opera11doc&amp;amp;#038;c=&quot;&amp;gt;document.body&amp;lt;/a&amp;gt;&lt;/code&gt; set of measurements, and finally we get a sense of how it sizes the viewport.&lt;/p&gt;

&lt;p&gt;The default viewport width seems to be &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11doc&amp;#038;c=850&quot;&gt;850&lt;/a&gt; pixels, but although Opera has, until now, remained oblivious to the pages’ doctypes, the values seem to suddenly be very dependent upon them. With an HTML5 doctype on a non-constrained viewport, both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientWidth&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetWidth&lt;/code&gt; are &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11doc&amp;#038;c=830&quot;&gt;830&lt;/a&gt; (which probably has had the 20 pixel margin deducted), and with XHTMLMP, we get &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11doc&amp;#038;c=300&quot;&gt;300&lt;/a&gt; or &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11doc&amp;#038;c=460&quot;&gt;460&lt;/a&gt; (which would be consistent with a constrained viewport, also minus margins).&lt;/p&gt;

&lt;p&gt;But with no doctype and no viewport constraint, in either portrait or landscape, we get &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11document.body.clientWidth&amp;#038;c=non-constrainednone&quot;&gt;850&lt;/a&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientWidth&lt;/code&gt; (i.e. no padding) and… for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetWidth&lt;/code&gt;, &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11document.body.offsetWidth&amp;#038;c=non-constrainednone&quot;&gt;2048&lt;/a&gt;! What?&lt;/p&gt;

&lt;p&gt;And finally, as they were for iOS and Android, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientHeight&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetHeight&lt;/code&gt; are a fairly disparate bunch of values. The only assumptions we can make are that a) constrained &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientHeight&lt;/code&gt; with no doctype will be &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11document.body.clientheight&amp;#038;c=369&quot;&gt;the same as&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerHeight&lt;/code&gt; after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; tag; that b) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clientHeight&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offsetHeight&lt;/code&gt; for constrained HTML and any type of XHTML-MP will &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11document.body.clientheight&amp;#038;c=html&quot;&gt;all be the same value&lt;/a&gt; for a given orientation (and that non-constrained HTML5 will also eventually converge on that value sometime after the document load event); and c) that the values themselves will be more or less unpredictable.&lt;/p&gt;

&lt;p&gt;But perhaps not as meaningless as the offsetHeight for non-constrained doctype-less pages. It’s consistent. But a highly unlikely &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=opera11document.body&amp;#038;c=40960&quot;&gt;40960&lt;/a&gt; – which must surely, more or less, mean &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;undefined&lt;/code&gt;!&lt;/p&gt;

&lt;h3 id=&quot;media-a-targettable-hrefassets201112tablehtmlrmediadevice-w038cdevice-widtha--a-targettable-hrefassets201112tablehtmlrmediaw038cwidtha-a-targettable-hrefassets201112tablehtmlrmediadevice-h038cdevice-heighta--a-targettable-hrefassets201112tablehtmlrmediah038cheighta&quot;&gt;@media &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=@mediadevice-w&amp;amp;#038;c=&quot;&amp;gt;device-width&amp;lt;/a&amp;gt;&lt;/code&gt; &amp;amp; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=@mediaw&amp;amp;#038;c=&quot;&amp;gt;width&amp;lt;/a&amp;gt;&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=@mediadevice-h&amp;amp;#038;c=&quot;&amp;gt;device-height&amp;lt;/a&amp;gt;&lt;/code&gt; &amp;amp; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=@mediah&amp;amp;#038;c=&quot;&amp;gt;height&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;We conclude the menagerie of screen dimensions by looking at the values used in CSS3 media queries. These are used as ‘features’ in declarations which are used to conditionally load stylesheets or apply the rules within them. Media queries are a staple of contemporary web design, and perhaps should be understood by designers as much as the other properties above need to be understood by developers handling layouts.&lt;/p&gt;

&lt;p&gt;Finally, we have some properties which &lt;em&gt;are&lt;/em&gt; defined by &lt;a href=&quot;http://www.w3.org/TR/css3-mediaqueries/#width&quot;&gt;a standard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Because, for this test, we needed to evaluate these values in JavaScript, we use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;matchMedia&lt;/code&gt; function and varied the operand until it returned true. This does mean we only have results for those devices which support that API call: namely iOS v5.0 and Android v4.0.&lt;/p&gt;

&lt;p&gt;Well it’s nice to end with some good news. In both platforms, in all conditions, @media &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;device-width&lt;/code&gt; always returns the same value as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.width&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;device-height&lt;/code&gt; always returns the same value as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen.height&lt;/code&gt;. There’s no matchMedia support in Opera, but I’ll assume the same would be true.&lt;/p&gt;

&lt;p&gt;This is great – but of course don’t forget the main issue afflicting &lt;em&gt;those&lt;/em&gt; measurements: the lack of rotated values in iOS and Android 2.3’s wacky 800 viewport value which I’ll postulate may be echoed here too.&lt;/p&gt;

&lt;p&gt;@media &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;width&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;height&lt;/code&gt; also track other JavaScript properties in both platforms. @media &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;width&lt;/code&gt; is &lt;em&gt;almost&lt;/em&gt; always equal to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerWidth&lt;/code&gt; (except in non-constrained landscape mode in iOS v5 when the former is &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=@media&amp;#038;c=980&quot;&gt;980&lt;/a&gt; and the former that curious &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=innerWidth&amp;#038;c=981&quot;&gt;981&lt;/a&gt;). @media &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;height&lt;/code&gt; is always equal to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerHeight&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;(It’s not so clear whether this pattern would be followed by Opera too, were we able to measure it this way. To confirm, it would require a CSS-based test harness – perhaps another study.)&lt;/p&gt;

&lt;p&gt;But there are a couple of things worth saying about this observation. Firstly, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerWidth&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.innerHeight&lt;/code&gt; values themselves are something of a bit of a mixed bag. See the earlier discussions above.&lt;/p&gt;

&lt;p&gt;Secondly, it’s interesting to note that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;matchMedia&lt;/code&gt; result changes with page lifecycle in the same way that the regular JavaScript measures do. This may mean that media queries change their results as the page loads – I don’t know how to predict when these parametric CSS rules are evaluated – and I imagine this might create conditions under which certain resources referred to in the CSS, loaded early in the page (when the size is evaluated to one thing), might turn out to have been unneccessary later in the page’s life (when the size is evaluated to quite another thing).&lt;/p&gt;

&lt;p&gt;Hardcore browser theory &amp;amp; probably more testing required.&lt;/p&gt;

&lt;h3 id=&quot;a-targettable-hrefassets201112tablehtmlrorien038cwindoworientationa--media-a-targettable-hrefassets201112tablehtmlraorien038corientationa&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=.orien&amp;amp;#038;c=&quot;&amp;gt;window.orientation&amp;lt;/a&amp;gt;&lt;/code&gt; &amp;amp; @media &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a target='table' href=&quot;/assets/2011/12/table.html?r=aorien&amp;amp;#038;c=&quot;&amp;gt;orientation&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;As a final aside, note that we also measured orientation results. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.orientation&lt;/code&gt; returns the number of degrees (0 for portait, 90 for landscape), and is &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=ios50window.orien&amp;#038;c=&quot;&gt;flawless in iOS&lt;/a&gt;, and set correctly after &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=android40window.orien&amp;#038;c=&quot;&gt;on Android&lt;/a&gt;. (Just remember not to evaluate orientation before the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;body&amp;gt;&lt;/code&gt; – it’s likely still to be 0 in landscape mode)&lt;/p&gt;

&lt;p&gt;Opera does not seem to support the API.&lt;/p&gt;

&lt;p&gt;The media query equivalent is also apparently fine (where measurable). The only Android timing quirk here is &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=&amp;#038;c=b:p&quot;&gt;PhoneGap in portrait&lt;/a&gt; which thinks it’s landscape at first. I guess nothing’s perfect.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Wow. Painful, on the whole.&lt;/p&gt;

&lt;p&gt;Let’s see what we can briefly conclude. I’m not going to go back through each of the properties, but a couple of things jumped out at me.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Doctypes matter&lt;/strong&gt; – you may have no intention of using an XHTML-MP doctype, but if you forget your HTML5 one, some measurements are affected.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Default viewports vary&lt;/strong&gt; from 980 through 850, to 800, depending on platform. Be aware that Android’s default has changed between v2.3 and v4.0.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Page lifecycle matters&lt;/strong&gt;: even if you aren’t stupid enough to run measurement code before the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, it can still change radically afterwards, at the document load event, or – most painfully – &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html?r=&amp;#038;c=d:&quot;&gt;sometime after that&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Race conditions&lt;/strong&gt; seem more common on Android than on iOS – I admit this could also be affected by the poor performance of the platform’s emulator&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Height measurements are probably too nerve-wracking&lt;/strong&gt; to use – as might be expected. Except in iOS, where you’ll need &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;height&lt;/code&gt; to get width.
        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;&lt;strong&gt;Nothing much is standardized&lt;/strong&gt; and where viewports are involved, the chaos of interpretation ensues. That &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;matchMedia&lt;/code&gt; provides a JavaScript API into the (standardized) CSS3 properties might be a chink of light. &amp;lt;/ul&amp;gt; 
But overall, the message should be: don’t take anything for granted. Mobile diversity is, unsurprisingly, still with us with a vengeance – even for apparently simple things like screen size.&lt;/p&gt;

            &lt;p&gt;Check out the &lt;a target=&quot;table&quot; href=&quot;/assets/2011/12/table.html&quot;&gt;table&lt;/a&gt; again, get a little scared, choose your APIs carefully, and test on real devices* like crazy.&lt;/p&gt;

            &lt;p&gt;(* yes, yes, I still realize this whole experiment is underpinned by the ultimate sin of using emulators 🙂 )&lt;/p&gt;

            &lt;p&gt;Thoughts? War stories? Techniques? Fears? &lt;strong&gt;Comments welcome.&lt;/strong&gt;&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Thu, 01 Dec 2011 10:04:38 +0000</pubDate>
				<link>https://tripleodeon.com/2011/12/first-understand-your-screen/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2011/12/first-understand-your-screen/</guid>
			</item>
		
			<item>
				<title>Bacon Off</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://9-bits.com/&quot;&gt;Dave Kaneda&lt;/a&gt; and I wandered along to the Facebook Mobile Hack last week. We spend a lot of time attending, speaking at, and sponsoring hackathons, but wanted to have a go at getting involved for ourselves. Consider it &lt;a href=&quot;http://secure.lenos.com/lenos/sencha/SenchaCon2011/&quot;&gt;SenchaCon&lt;/a&gt; decompression or something.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;The event as a whole was excellent – some great sessions and a strong focus on using HTML5 for mobile apps. Facebook’s new graph API, for example, encourages developers to think about how to semantically describe users’ contextualized activities (how many sedentary web users do you see in this &lt;a href=&quot;http://www.youtube.com/watch?v=q3b94kFBah8&quot;&gt;video&lt;/a&gt;?). All part of an exciting mobile future for the web’s next decade.&lt;/p&gt;

&lt;p&gt;Team Sencha was probably rather too ambitious. But after several frantic hours, we managed something that more or less worked.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2011/11/bacon1-500x266.png&quot; alt=&quot;&quot; title=&quot;bacon1&quot; width=&quot;500&quot; height=&quot;266&quot; class=&quot;alignnone size-large wp-image-645&quot; srcset=&quot;/assets/2011/11/bacon1-500x266.png 500w, /assets/2011/11/bacon1-248x132.png 248w, /assets/2011/11/bacon1.png 744w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Our app was to be &lt;strong&gt;&lt;a href=&quot;https://github.com/jamesgpearce/BaconOff&quot;&gt;BaconOff&lt;/a&gt;&lt;/strong&gt;, a two player game to match actors from your Facebook-liked movies against each other based on their &lt;a href=&quot;http://en.wikipedia.org/wiki/Six_Degrees_of_Kevin_Bacon#Bacon_numbers&quot;&gt;Bacon Number&lt;/a&gt;, Top-Trumps-style. The server-side, node.js, hosted and deployed easily to Heroku, and which handles the Facebook authentication, delivers a Sencha Touch app, containing an access token, to the browser. (No doubts at all this can be more elegant and secure).&lt;/p&gt;

&lt;p&gt;The first thing the app does is &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/client/app/stores/movies.js#L30&quot;&gt;pull&lt;/a&gt; a list of your favorite movies from Facebook. Once loaded, each movie record &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/client/app/stores/movies.js#L11&quot;&gt;calls imdbapi.com&lt;/a&gt;, a wrapper around IMDB’s database, and fetches four actors from each of your favorite movies.&lt;/p&gt;

&lt;p&gt;Those actors are then created as a further type of model, each of which has a &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/client/app/stores/actors.js#L7&quot;&gt;bacon-number-fetching method&lt;/a&gt;. We hoped to use YQL to get the values from &lt;a href=&quot;http://oracleofbacon.org/&quot;&gt;Oracle of Bacon&lt;/a&gt;, but it was barred by a robots.txt condition. Slightly cheekily, we used our node backend to &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/web.js#L54&quot;&gt;proxy a request&lt;/a&gt; to that server anyway, and then handle the common condition of there being more than one entry for each actor’s name.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2011/11/bacon2-266x500.png&quot; alt=&quot;&quot; title=&quot;bacon2&quot; width=&quot;250&quot; height=&quot;469&quot; class=&quot;alignnone size-large wp-image-647&quot; srcset=&quot;/assets/2011/11/bacon2-266x500.png 266w, /assets/2011/11/bacon2-132x248.png 132w, /assets/2011/11/bacon2.png 396w&quot; sizes=&quot;(max-width: 250px) 100vw, 250px&quot; /&gt;&lt;img src=&quot;/assets/2011/11/bacon3-266x500.png&quot; alt=&quot;&quot; title=&quot;bacon3&quot; width=&quot;250&quot; height=&quot;469&quot; class=&quot;alignnone size-large wp-image-647&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the meantime, and no thanks to me, we had a sweet UI and CSS3-animated loading screen – all Sass goodness from Mr Kaneda of course.&lt;/p&gt;

&lt;p&gt;We’d hoped to avoid having state stored anywhere on the server or in the client, using the social graph alone. Eventually we figured it was unavoidable, and quickly had to write a game state storage layer on the server side. It uses a contemporary storage platform known as… the &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/web.js#L93&quot;&gt;file system&lt;/a&gt;. Ahem.&lt;/p&gt;

&lt;p&gt;From here on, with time running out, and with a flying visit required to my son’s (excellent!) school play on the other side of El Camino, code started sprawling as we dashed for something demonstrable.&lt;/p&gt;

&lt;p&gt;APIs for &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/web.js#L100&quot;&gt;starting&lt;/a&gt;, &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/web.js#L121&quot;&gt;listing&lt;/a&gt;, and &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/web.js#L136&quot;&gt;playing&lt;/a&gt; games quickly followed, and views on the client side emerged to allow &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/client/app/views/friends.js&quot;&gt;competitor&lt;/a&gt; and &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/client/app/views/chooseActor.js&quot;&gt;actor&lt;/a&gt; selection, as well as the game’s &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/client/app/views/home.js&quot;&gt;home screen&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We added the &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/views/home.ejs#L47&quot;&gt;Facebook JavaScript library&lt;/a&gt; relatively late in the day to allow competitor selection and request; (in retrospect we should have based the whole app around this library from the start – what were we thinking?). And then tried, and failed, to make the frictionless sharing of the game progress &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/client/app/app.js#L77&quot;&gt;post to the timeline&lt;/a&gt;: I just couldn’t find the relevant permissions settings in the last 30 seconds before we went on stage. This was a shame, because we’d had the nouns and verbs configured ages before!&lt;/p&gt;

&lt;p&gt;At somewhere approaching 1am, we finally got to demo the app, and for those two minutes it more or less worked. There was only one hack required to make the walkthrough work: I’d been working on the assumption that players would be keyed by name, while Dave (and, it turns out, Facebook) that they would be keyed by ID. A small &lt;a href=&quot;https://github.com/jamesgpearce/BaconOff/blob/master/client/app/app.js#L46&quot;&gt;hardcoded line&lt;/a&gt; covered that up – albeit at the expense of making every game ever appear to be against Dave himself. With that in mind, I’ll decline to link to a live running version. Screenshots only 😉&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2011/11/bacon4-266x500.png&quot; alt=&quot;&quot; title=&quot;bacon4&quot; width=&quot;250&quot; height=&quot;469&quot; class=&quot;alignnone size-large wp-image-653&quot; srcset=&quot;/assets/2011/11/bacon4-266x500.png 266w, /assets/2011/11/bacon4-132x248.png 132w, /assets/2011/11/bacon4.png 396w&quot; sizes=&quot;(max-width: 250px) 100vw, 250px&quot; /&gt;&lt;img src=&quot;/assets/2011/11/bacon5-266x500.png&quot; alt=&quot;&quot; title=&quot;bacon5&quot; width=&quot;250&quot; height=&quot;469&quot; class=&quot;alignnone size-large wp-image-654&quot; srcset=&quot;/assets/2011/11/bacon5-266x500.png 266w, /assets/2011/11/bacon5-132x248.png 132w, /assets/2011/11/bacon5.png 396w&quot; sizes=&quot;(max-width: 250px) 100vw, 250px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So yes, in retrospect, far too ambitious. Hacking time was supposedly limited to 6 hours, and we’d needed a few more than that. I rather wish now that we’d just done a Social Compass app and stuck some avatars on top of a simple &lt;a href=&quot;http://tripleodeon.com/2011/10/taking-a-new-device-api-for-a-spin/&quot;&gt;webkitCompassHeading&lt;/a&gt; event handler or something. We weren’t expecting to win anything (there’s no doubt the well-prepared entries were far superior 😉 ) – and let’s just say that this was an expectation firmly met.&lt;/p&gt;

&lt;p&gt;But it was a lot of fun being on the other side of the stage for once. And it’s interesting to see how far you can get on something completely new in a short time period if you put your mind to it. I guess that’s the whole point; code quality be damned…&lt;/p&gt;
</description>
				<pubDate>Tue, 01 Nov 2011 04:00:38 +0000</pubDate>
				<link>https://tripleodeon.com/2011/11/bacon-off/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2011/11/bacon-off/</guid>
			</item>
		
			<item>
				<title>Taking a new device API for a spin</title>
        <description>&lt;p&gt;I love Device APIs, even the non-standard ones. I think they are going to hoist the web up onto its next level of innovation, usage, and ubiquity.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I was pleased to discover that iOS5 includes a new one, tucked away as a new property, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;webkitCompassHeading&lt;/code&gt;, mentioned by &lt;a href=&quot;http://lists.w3.org/Archives/Public/public-geolocation/2011Jul/0014.html&quot;&gt;Apple on the W3C lists&lt;/a&gt; a little while back.&lt;/p&gt;

&lt;p&gt;Previously this event’s orientation data was great for relative rotation, but its absolute value was arbitrary with respect to the real world. The new property gives a heading that is meaningful for real-world navigation. (There is also a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;webkitCompassAccuracy&lt;/code&gt; property that tells you how well it is doing.)&lt;/p&gt;

&lt;p&gt;So I lashed up &lt;a href=&quot;http://jamesgpearce.github.com/compios5/&quot;&gt;Compios5&lt;/a&gt;, a small web-based compass application, to show it off. It requires, of course, a real iOS5 device to work. (It’s been tested on iPhone 4 hardware. Should work fine on iPhone 4S. Layouts are probably slightly strange on the iPad.)&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-large wp-image-634&quot; title=&quot;compios5&quot; src=&quot;/assets/2011/10/Screen-Shot-2011-10-14-at-11.21.36-AM-500x266.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;266&quot; srcset=&quot;/assets/2011/10/Screen-Shot-2011-10-14-at-11.21.36-AM-500x266.png 500w, /assets/2011/10/Screen-Shot-2011-10-14-at-11.21.36-AM-248x132.png 248w, /assets/2011/10/Screen-Shot-2011-10-14-at-11.21.36-AM.png 744w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The compass itself is created entirely with CSS, with a few programmatically created elements for the labels and arrows. Designers: please issue pull requests to make it look nicer!&lt;/p&gt;

&lt;p&gt;The code is &lt;a href=&quot;https://github.com/jamesgpearce/compios5&quot;&gt;here&lt;/a&gt;. A couple of implementation notes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;There’s easing on the rotation to make it a little less jerky, but this has to be turned off whenever the compass spins through north. CSS transitions do not wrap-around transforms.&lt;/li&gt;
  &lt;li&gt;window.orientation needs to be added to the heading so that a landscape view still points to physical north.&lt;/li&gt;
  &lt;li&gt;Media queries detect orientation so that the compass stays in the center of the screen. It’s not quite stationary on a portrait-&amp;gt;landscape flip, but great the other way.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As I said, this won’t work on any device apart from a real iPhone. There’s no way to simulate heading changes in the iOS simulator that I can find. But if you’ve upgraded, or have a shiny new iPhone 4S, please take it for a whirl.&lt;/p&gt;
</description>
				<pubDate>Sat, 15 Oct 2011 00:30:52 +0000</pubDate>
				<link>https://tripleodeon.com/2011/10/taking-a-new-device-api-for-a-spin/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2011/10/taking-a-new-device-api-for-a-spin/</guid>
			</item>
		
			<item>
				<title>Of Sites and Apps</title>
        <description>&lt;p&gt;Users probably don’t care what’s a web site and what’s a web app. But I believe web practitioners should, if only to know when certain best practices apply, and when they don’t.&lt;/p&gt;

&lt;p&gt;But does an established distinction exist between the two genres of experience? Not as far as I know. Is it to do with creation versus consumption? Linkability? User experience? Or the architecture underlying the way they are built?&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Personally I think there &lt;em&gt;is&lt;/em&gt; a way to clearly delineate the two types of experience, but I’m also sure it’s not the only way to do so, and that the distinctions are very likely to vary with individual’s perspective. I’m unabashedly trawling for debate.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;tldr&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There’s one notable result of the disruption that mobile is wreaking upon the way we think about the web. The blogosphere, the conference circuit and various online communities – not to mention boardrooms up and down the country – are abuzz with hypotheses regarding the “One True Way” to do something, the “Dawn of” this, or the “Death of” that.&lt;/p&gt;

&lt;p&gt;No doubt I’m a part of this. It’s quite fun. (Although let’s be honest, none of us really has a clue about how mobile’s going to play out eventually.)&lt;/p&gt;

&lt;p&gt;In the real world, such binary proclamations are less useful than we like to think. Building mobile and web experiences for real users, real business – and with real constraints of many kinds – is not at all easy. Being buffeted around by voguish black-and-white philosophies (or even the outmoded ones) is of reduced benefit when you’re really trying to navigate the shades of gray in between.&lt;/p&gt;

&lt;p&gt;One of the shadiest boundaries to have to consider when using web technologies is that netherworld that lies between ‘web application’ and ‘web site’. As far as I can tell, there aren’t established definitions that help us decide what is one and what is another – let alone a decision tree that developers and designers can follow to decide what sort of experience they should deliver to their users in different circumstances.&lt;/p&gt;

&lt;p&gt;On one hand, the differentiation between these two things seems rather academic. If a user can access what I want them to access, and can do what I want them to be able to do, then who cares how we label that experience? It’s the web right? (Stop reading now.)&lt;/p&gt;

&lt;p&gt;But again, this belies the subtlety of the real world, and especially in mobile. It’s 2011: iPhone-plus-four. Users want apps. Marketers want apps. Boardrooms want apps. This is, we’ve been trained to believe, the way in which we enhance our phones’ capabilities and access information in elegant, consistent ways. We can assert as much as we want that users should only be using their devices’ web browsers, but apps sell, and will continue to.&lt;/p&gt;

&lt;p&gt;Of course, many of these apps are written with native technologies, and distributed via non-web-based stores. This article is not about them: they are likely to become evolutionary dead-ends. But if the web is to succeed as a distribution medium – and as a stack of technology – it will have to rise to match the expectation that’s been set. It will have to provide what is needed to create and deliver app-like experiences, just as well as it can classical site- and document-based content.&lt;/p&gt;

&lt;p&gt;The good news is that smarter people than me have long seen this coming. Although much of HTML5 (the markup specification) is about improving the semantic qualities of web documents, HTML5 (the suite of related APIs and technologies) is unashamedly focussed on enabling web applications of increasing complexity. And with browser vendors now competing on such metrics as JavaScript performance and API completeness (rather than how well they support the &amp;lt;aside&amp;gt; tag or somesuch), it seems we should expect to see ever more advanced web apps in the future.&lt;/p&gt;

&lt;p&gt;Nevertheless, in frequent discussions about the mobile web, its best practices, and its tools, you’ll hear many arguments qualified with clauses like “oh, but things are different if you’re building an app” or “this is a better technique for traditional sites”. I know, because I do too.&lt;/p&gt;

&lt;p&gt;And so, as we enter conference season again, I thought it might be interesting to see if there’s any consensus about what these two things even are, and how we can differentiate between them. What is a mobile web app? And when is it not a mobile web site?&lt;/p&gt;

&lt;p&gt;For me, there are a few possible vectors that we can consider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creation versus Consumption&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine a large structured collection of interlinked documents, where the user is essentially limited to a read-only interaction (give or take the odd comment form or search box). There’s no doubt that such a thing should be classified as a site. Blogs, news sites, academic papers – these are clearly the heartland of the classical web. Online stores too? Probably.&lt;/p&gt;

&lt;p&gt;But what about micro-blogging services? Photo-sharing? Online email clients, document editors, IDEs even? Games? It seems debatable as to whether one should classify twitter.com as a site or an app (especially on a mobile device), but I am most certainly using an application when I’m logged into GMail, Google Docs, or playing Angry Birds – let alone working in some web-based data admin interface.&lt;/p&gt;

&lt;p&gt;Interestingly, this second category of experiences all seem to be read-write (or at least, highly interactional). So can we classify sites as being read-only and apps as being read-write? That certainly seems simple enough: sites are to consumption as apps are to creation.&lt;/p&gt;

&lt;p&gt;Does this feel right? One problem here is that there are some beautiful and enjoyable app-like experiences – Flipboard comes to mind – which are clearly oriented towards consumption. (But then again, maybe the logic is backwards here… perhaps Flipboard is what the web &lt;em&gt;site&lt;/em&gt; of the future should look like, though Gawker’s infamous app-like blog felt clunky). And how would you classify Facebook? Entirely user-generated content, but it still looks and feels quite like a site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linkability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are launching an experience from a desktop or homescreen icon, it is easy to feel that you are in a sandboxed and closed environment whose boundaries are explicit and inescapable. If you start your experience by entering a URL into a browser, conversely, you’re more likely to feel that you are at the start of journey – one where every link clicked can immediately take you to another page or another site or another domain, across the web’s endless interlinked landscape with no boundaries.&lt;/p&gt;

&lt;p&gt;So does this serve as a way to distinguish between site and app? Most native apps certainly do have impermeable boundaries: outbound and especially inbound. Even the iPhone Twitter app opens up links in a modal, embedded web view rather than spawning a new Safari window (much to &lt;em&gt;my&lt;/em&gt; frustration, at least).&lt;/p&gt;

&lt;p&gt;But web apps? Need these be silos? No, of course not. They’re still running in a browser, and (unless in hybrid environment) hanging off a URL like any web site does. There’s no reason for a web app not to contain links that lead you off to other parts of the web, either in new browser tabs or the present one. While reliable deep-linking back into web apps seems to be less commonplace, this is more a function of implementations and browser’s fragmented History APIs than some fundamental flaw in the web’s architecture. (I never shared purists’ distaste of hash-bangs, for example. These are a symptom of developers trying to make this inbound linkability and bookmarkability work for single-page web apps: fixing the web, not breaking it.)&lt;/p&gt;

&lt;p&gt;So, like others, I’d definitely hold up linkability as a huge advantage of web apps over native apps – but not as a reliable way to distinguish between web apps and web sites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another way we might classify apps and sites is by assessing the user interface and experience presented. What are the visual cues that an app’s an app, and a site’s a site?&lt;/p&gt;

&lt;p&gt;The use of fixed toolbars is certainly an obvious one: at the top, containing a title and maybe a back button; at the bottom a series of large tab-navigating buttons within easy thumb-reach. This is a UI/UX paradigm that, pioneered by iOS, emerged entirely from the native application world, and which, before 2007, had absolutely no precedent in the classical or mobile web worlds.&lt;/p&gt;

&lt;p&gt;Ditto disclosure lists. Ditto sliding transitions between master and detail records. Ditto action sheets, spinners, and momentum-based scrolling. Ditto even the disablement of pinch &amp;amp; zoom on document-like content (controversial to some, and yet understandable if you argue that viewport zooming was merely the browser’s way of dealing with legacy, not-made-for-mobile web content in the first place).&lt;/p&gt;

&lt;p&gt;Many developers work hard to bring these platform behaviors in their web apps. And many web frameworks work hard to make it easy for them to do so. (My employer is one of those, of course.) Many rightly blanche at the thought of slavishly mimicking a particular operating system – nothing looks dafter than iOS pinstripes in an Android browser – but the point is that many of these generalized UX characteristics are highly suitable for one-handed, touch-based interactions. No-one will claim that legacy desktop web sites (often replete with tiny mouse-centric sidebar menus and table layouts) can ever match a dedicated app-like user experience. Responsive web sites can indeed improve this greatly, with navigation often flowing to the top or bottom of documents for certain screen sizes. But still, these sites are rarely mistaken for apps.&lt;/p&gt;

&lt;p&gt;Because the visual appearance is the “I somehow just know this is an app” argument, and one that users might particularly relate to, I do give the UI/UX distinction a lot of credence. But still, it’s a very fuzzy boundary. What if my site displays a fixed toolbar, but no back button? What if my list looks like hyperlinks instead of tappable disclosures? What if I style plain scrolling instead of momentum? This is a question that the likes of jQuery Mobile have pondered too, in an attempt to follow a site-like, progressive enhancement philosophy. Nevertheless plenty of developers are undoubtedly going to describe the results as apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So this leaves us looking for a more technical distinction. Is there an architectural, boxes-and-arrows argument that might clarify the difference?&lt;/p&gt;

&lt;p&gt;The web we’ve known and loved for almost 20 years – undoubtedly a web of sites! – is unashamedly thin-client in design. Web servers do all the heavy lifting, hosting the storage, business logic, and the construction of the user interface that the user sees. Indeed it is surprising that we’ve had to suffer so much browser inconsistency over the years considering that all they’ve had to do is turn a stream of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;&lt;/code&gt; into pixels.&lt;/p&gt;

&lt;p&gt;But the rise of the use of AJAX was a clue that this architecture wasn’t always particularly elegant. A user clicks a link to another page on your site? That might mean a whole set of HTTP connections (again), a blocked server thread (again), a clutch of database connections (again), the execution of a bunch of business logic (again), the generation of a whole new slab of markup (again), and its dispatch back across the wire (again). And that’s all before expecting the browser to re-render the entire user interface (again).&lt;/p&gt;

&lt;p&gt;I love URLs, hyperlinks and SEO as much as the next man, but that’s some price to pay to simply display a new record of content.&lt;/p&gt;

&lt;p&gt;On the other hand, consider an architecture in which the browser is given far more autonomy and responsibility. Think “AJAX++”, perhaps, where not only fragments of the DOM are elegantly updated, but where the entire application can reside and execute in the browser.&lt;/p&gt;

&lt;p&gt;The big breakthrough here, of course, has been HTML5’s storage APIs, which allow JavaScript in the browser’s environment to persist reasonable amounts of keyed data throughout or between sessions. This finally brings honest statefulness to our previously stateless browser clients.&lt;/p&gt;

&lt;p&gt;On top of this, mature JavaScript runtimes and frameworks happily allow the creation of robust business logic to be applied to this data. DOM manipulation, made reliable and fast by contemporary browsers (and commoditized by libraries for others) means that you can programmatically construct and manipulate entire user interfaces in the browser – in the extreme case, bootstrapping them up from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;body/&amp;gt;&lt;/code&gt;-like document whose main purpose is merely to include a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;head&amp;gt;&lt;/code&gt; of the linked resources required to execute.&lt;/p&gt;

&lt;p&gt;This is the world of the thick web client – or ‘Rich Internet Application’ in slightly out-moded nomenclature. A world in which patterns like MVC can be used again to describing client-side behavior, as well as a server-side technique. With this approach, once a client-side application has loaded its resources and is up and running, it can function more or less independently of the server that originally provided those resources, and creates and maintains a DOM that looks very different to that originally sent in the HTML’s markup.&lt;/p&gt;

&lt;p&gt;(One might wish to argue that GMail is really just a site comprising a set of documents. Conceptually, perhaps. But comparing the app’s view-source with an inspected DOM tree will present a dramatically different perspective.)&lt;/p&gt;

&lt;p&gt;With perhaps the exception of simple games, these applications nearly always need to bind back to some sort of web-based data API. As required, though, they can then easily cache that offline in their own data stores, greatly increasing the responsiveness and user-experience of the application, and making the prospect of continued offline operation a reality. This is a bold new step for the web. Not the web as constantly humming HTTP-pipes, but undoubtedly the web as stack of standardized, open technologies, working in interesting and evolutionary new ways.&lt;/p&gt;

&lt;p&gt;I don’t want to give the impression that I feel this type of architecture should be used for all web experiences, nor even that it’s easier to build. Creating apps this way can be a daunting experience for many. Using imperative APIs may seem like a step too exotic next to the familiarity of declarative markup-based documents generated from a server. Your mileage will most certainly vary, and definitely some sorts of experience are better suited by one approach, others by the other. No binary proclamations implied.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;/tldr&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But the point is that perhaps this is the watershed that we are looking for: a relatively clear definition between web site and web application.&lt;/p&gt;

&lt;p&gt;The former we can define as an experience constructed on a thick server, delivered, with declarative markup, to thin browser clients, which then render what they’re told. Sprinkle on some progressive enhancement to maximize the user-experience and increase the chances of delivering a suitably degraded experience to legacy browsers.&lt;/p&gt;

&lt;p&gt;The latter, on the other hand, is an experience constructed on a thick browser client, from imperative instructions dispatched, probably only once, from a thin server (or, in the case of a hybrid app, even no server at all). The philosophy of progressive enhancement survives – perhaps better characterized as ‘feature detection’ in this programmatic environment – although such apps often assume a certain higher baseline of browser capability. Local storage is utilized, MVC-like patterns are followed, concerns of data, logic and presentation are completely separated, and markup, if present at all, might be used merely for templates to be applied to that data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So…&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;…yes, I’m a developer. I think in boxes and arrows. But as a relatively unambiguous classification criteria, this final, architectural distinction works best for me. Assuming you agree that such classification matters at all (in particular to those developing such experiences), how does this suit as a working hypothesis?&lt;/p&gt;

&lt;p&gt;Discuss, etc.&lt;/p&gt;
</description>
				<pubDate>Sun, 11 Sep 2011 04:43:17 +0000</pubDate>
				<link>https://tripleodeon.com/2011/09/of-sites-and-apps/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2011/09/of-sites-and-apps/</guid>
			</item>
		
			<item>
				<title>Whoops and hashbangs</title>
        <description>&lt;p&gt;Three people in the last week have told me I should be blogging more. Flattered, and probably more helpfully than leaving nuggets of half-baked comments on everyone else’s, I’ll do my best.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I dust off the cobwebs by apologizing for a &lt;a href=&quot;http://twitter.com/#!/jamespearce/status/75709304145063937&quot;&gt;tweet&lt;/a&gt; in which I misattributed Scott Jehl. No thanks to strange avatar positioning, I thought he’d made a &lt;a href=&quot;http://danwebb.net/2011/5/28/it-is-about-the-hashbangs#comment-7617&quot;&gt;provocative comment&lt;/a&gt; about the destiny of URLs on a post about everyone’s favorite topic, the hashbang.&lt;/p&gt;

&lt;p&gt;(Hopefully I’m not the only one who can barely see &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#1e1e1e&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#141414&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;It did sound out-of-character from a champion of jQuery projects, and perhaps I was tempted to acknowledge the comment because it seemed such an extreme position from him. Sorry Scott!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2011/06/quote-500x129.png&quot; alt=&quot;&quot; title=&quot;quote&quot; width=&quot;500&quot; height=&quot;129&quot; class=&quot;alignnone size-large wp-image-607&quot; srcset=&quot;/assets/2011/06/quote-500x129.png 500w, /assets/2011/06/quote-248x64.png 248w, /assets/2011/06/quote.png 666w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But onto the comment itself. Why did I take a shine to it? It certainly takes a provocative stance.&lt;/p&gt;

&lt;p&gt;“We are long past the point where URLs have any utility” is strong language. I of course enjoy the benefits of links and URLs myself every day, and I’m sure the &lt;a href=&quot;http://dakliegg.wordpress.com/&quot;&gt;commenter&lt;/a&gt; does too: bookmarks, links, emailed or tweeted, the ability to return through a browser’s history, open new browser tabs with target content and so on. All very useful. All very &lt;a href=&quot;http://www.w3.org/Provider/Style/URI&quot;&gt;&lt;em&gt;cool&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But does this mean that the URL is so sacred we can’t discuss its role and relevance in the real world? Think about whether it’s actually doing its job? Wonder whether it’s productive to shield it from the creative ways in which the web is evolving? And, as this commenter did, consider whether search engines are in fact coping with these changes effectively?&lt;/p&gt;

&lt;p&gt;(Heretical to most people… but the sort of thing I like to think about – probably &lt;em&gt;for&lt;/em&gt; that reason, actually. And what else are blogs for, anyway?)&lt;/p&gt;

&lt;p&gt;So, yes, yes; URLs are used as a key for locating documents and resources across the web. That is all well and good. But I’m thinking; what happens when the web hosts things other than documents and resources? Like applications? Like games? Like physical objects? What happens when we need to serve humans based on &lt;em&gt;other&lt;/em&gt; signals, such as their location, the time of day, their context, their intent?&lt;/p&gt;

&lt;p&gt;It might &lt;em&gt;just&lt;/em&gt; be possible, as the commenter asserts, that a single string-based identifier is not, in fact, sufficient to describe the infinite things that a 21st century, multi-dimensional web can do, offer, and represent.&lt;/p&gt;

&lt;p&gt;I’m not completely sure. But I am convinced (and excited) that the web is evolving in these sorts of ways. Client-side applications, for example, seem to be a perfectly valid and compelling architectural way to use web technologies. And yet what role does the URL play there? Obviously as an entry point to the app as a whole, but then what? Does Tim Berners Lee’s plea require me to use a URL to describe every possible state, every view and every data point within it?&lt;/p&gt;

&lt;p&gt;Documentistas would have it so. I can’t possibly build anything for the web without every piece of it being addressable like a document. Users must be able to deep-link into any &lt;strike&gt;docu&lt;/strike&gt; state of my application. These URLs must return content to robots too – because where would we be without web crawlers? – and of course it all needs to degrade nicely for legacy browsers and screen readers. In fact, I may as well just fake the whole thing with server-side markup and progressive enhancement anyway. Many do.&lt;/p&gt;

&lt;p&gt;But if I’m an applicationista, I create true client-side web applications, probably programmatically. I use little, if any, content-bearing markup, and I provide a suite of complex functionality to users, and pull in content from server- or cloud-based APIs in my own particular way. I acknowledge that my application needs to be accessible somehow, but in the corresponding state machine, the concept of a linkable document can quickly become tenuous, if not entirely inappropriate. Yes, I could conceivably use URLs to describe the finite states of a game of tic-tac-toe. But is there a http://angrybirds.com/level4 ? Or a http://angrybirds.com/level4/just-before-the-red-bird-hits-the-big-block ? Not that I know of.&lt;/p&gt;

&lt;p&gt;If this web of applications is our new operating system, I see URLs as our command line switches. They can open apps, and sometimes drop you into well-understood states within that app. But by no means is the developer obliged to let any user reproduce any arbitrary state within it. A desktop developer can choose to let users launch a classic native application with certain pre-defined states – start this tool with a particular file open, for example – but does so in a very controlled and discoverable way. No native OS I know mandates that an application’s command line switches must be capable of describing all of its possible states. So why should the web?&lt;/p&gt;

&lt;p&gt;In reality, certain web apps will benefit from deep-linkability, but many do not at all. And just because a large part of the web (the documenty bit) holds URLs self-evident and axiomatic might not mean that a different, growing part of the web (the applicationy bit) must do so too. Nick Morgan, admittedly &lt;a href=&quot;http://skilldrick.co.uk/2011/05/the-end-of-progressive-enhancement-revisited&quot;&gt;opining on a subtly different topic&lt;/a&gt;, states:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The problem is that because everyone building stuff online is using the same technologies, there can be a tendency to think that there is one true way of using those technologies, independent of what they’re being used for.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And this is the crux. We might all be using web technologies (HTML, JavaScript, CSS and the like), but in radically different architectural configurations, and best practices for some may not be good rules for others. What this touches on might be the primary root cause of the hashbang debate (if not also others): the web is being used in challenging and unexpected ways and we’re finding it hard to re-examine practices and principles that were intended for a different age.&lt;/p&gt;

&lt;p&gt;Yes, hashbangs are ugly. A hack. Sometimes they’ll need to be replaced with judicious use of the HTML5 History API. But other times they’ll need to be removed altogether: “&lt;em&gt;it depends&lt;/em&gt;“.&lt;/p&gt;

&lt;p&gt;But I believe that their usage – and the debate that has raged over that usage – tells us more about the culture of the web and those who create things for it than it does about syntactic purity or semantic elegance. It has shown us that we still find it hard not to think about the web in terms of documents, and that a web of applications can seem strange and opaque. And maybe that we are in a tighter symbiosis with search engine crawlers than we’d like to admit. Is that &lt;em&gt;really&lt;/em&gt; what is meant when we’re told we risk breaking the web?&lt;/p&gt;

&lt;p&gt;(It might be no co-incidence that our greatest cognitive dissonance occurs when we see something that probably should have remained document-based turned into an application, such as Gawker’s blogs. I notice that the vehemence of this debate never erupted over the non-linkability to arbitrary internal state of my GMail inbox, or to my high score on &lt;a href=&quot;http://entanglement.gopherwoodstudios.com/&quot;&gt;Entanglement&lt;/a&gt; for example. But I’m trying not to miss the wood of the web’s ambition for the trees of one particular implementation.)&lt;/p&gt;

&lt;p&gt;Probably drawing ire, or confusion, from most at this point, I guess I leave it there. Please file under ‘verbose trolling’, and yes, for a developer, I’m veering dangerously close to amateur anthropology.&lt;/p&gt;

&lt;p&gt;But let me finish with the commenter’s radical assertion that search engines ‘have long given up on indexing the web’ – crazy, surely: they still seem to do a great job with documents.&lt;/p&gt;

&lt;p&gt;But applications? I’m not so sure. He might be on to something here. We’ve clearly got a long way to go in terms of describing and indexing application state, purpose and functionality on the web – without resorting to human curation. I’ve heard of these things called app stores, for example…&lt;/p&gt;
</description>
				<pubDate>Wed, 01 Jun 2011 13:12:26 +0000</pubDate>
				<link>https://tripleodeon.com/2011/06/whoops-and-hashbangs/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2011/06/whoops-and-hashbangs/</guid>
			</item>
		
			<item>
				<title>Mobile, One Web, RWD &amp;#038;c &amp;#8211; an unbuffered comment</title>
        <description>&lt;p&gt;Jeremy Keith’s blog post entitled ‘&lt;a href=&quot;http://adactio.com/journal/1716/&quot;&gt;One web&lt;/a&gt;‘ is good summary of many of the points of view around designing and developing web sites and services for mobile devices. I think he has a staggered commenting system, so I thought I’d share my response here in the meantime. Don’t worry; it’s not inflammatory (or at least, is not meant to be!)&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I’m still convinced there’s something bigger going on here.&lt;/p&gt;

&lt;p&gt;The (paraphrased) ‘one-url-for-one-document’ mantra is great when the web is one of essentially immutable documents.&lt;/p&gt;

&lt;p&gt;But isn’t it time to bust through this assumption? – as we (and even consumers) start to think of the web as being more one of apps? One which should flex and adapt to give the user the best experience (by which I include content, functionality as well as user interface and pixels) possible, given everything we can divine about the human using it?&lt;/p&gt;

&lt;p&gt;If an application is to provide the service that its user needs, the more clues about what that human is doing the better. If they are using a mobile device, there’s already a big clue about what that user’s state might be. I’m intrigued by things like Nokia’s Situations project too, as it permits more insight into what the user is doing, where they are, and what state of mind they’re in. Imagine how you might be able to optimize a web experience – to the human – given such clues!&lt;/p&gt;

&lt;p&gt;So as you can tell, I’m excited about this. A far more fluid web that is truly responsive like this. Responsive to human context (in all its possible forms) and not just the temporary challenge of smaller numbers of pixels. It’s not that I’m not a fan of RWD – just that it’s far too superficial to help move the web to this higher plane.&lt;/p&gt;

&lt;p&gt;However, I also still believe in ‘thematic consistency’, by which the W3C means that the same URL should get you to the same content. BUT that is not the same as saying that the same users actually want to use the same content or that web providers want to give it to them.&lt;/p&gt;

&lt;p&gt;In practical terms, this might mean promoting or demoting certain types of content that the designer thinks are more or less useful for users known to be in the mobile context. (I’ve talked about promoting ‘contact us’ from the conventional end-of-secondary-menu to front-and-foremost on mobile sites, for example.)&lt;/p&gt;

&lt;p&gt;But why not create entirely separate services? I certainly don’t find it condescending when a user-interface designer has thought about what I actually want to do in a given context. More likely I’ll be thrilled.&lt;/p&gt;

&lt;p&gt;And by the way, with this point of view, separate URLs or domains are entirely consistent: “we don’t mind which device you actually use, but you should be aware that the content on our mobile URL is better suited to humans on the move”.&lt;/p&gt;

&lt;p&gt;Finally I should add that this is really nothing more controversial than using country-code top level domains. The reason there is an amazon.co.uk is because users in the ‘UK context’ want (or need to be given) different content and functionality. No-one ever complains about detecting IP ranges to encourage users from different countries to go to the best service for their likely location.&lt;/p&gt;

&lt;p&gt;I’m a proud citizen of Mobile Web country 😉&lt;/p&gt;
</description>
				<pubDate>Fri, 10 Dec 2010 01:22:00 +0000</pubDate>
				<link>https://tripleodeon.com/2010/12/mobile-one-web-rwd-c-an-unbuffered-comment/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/12/mobile-one-web-rwd-c-an-unbuffered-comment/</guid>
			</item>
		
			<item>
				<title>A Web of Sync</title>
        <description>&lt;p&gt;I’m excited about how the rise of HTML5 (and related technologies) will change the way we think about the web, and how they will further encourage developers to build richer applications instead of mere document-oriented sites.&lt;/p&gt;

&lt;p&gt;(At Sencha, for example, we spend a lot of time thinking about what this really means, and how it changes the skills, tools and frameworks we’ll all need to be effective web practitioners)&lt;/p&gt;

&lt;p&gt;But here, I’d like to consider three particular changes that are happening, and one particularly overlooked impact they might have.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;The first is the rise of powerful application architectures on the client side. Sencha has added Model-View-Controller support in both Ext JS 4 and Sencha Touch, for example, and this makes it possible to implement entire data schemas, rich business logic, and well-structured user interfaces – entirely on the client side. (Other frameworks are following a similar path: SproutCore, JavaScriptMVC and so on)&lt;/p&gt;

&lt;p&gt;Secondly, the way in which HTML5 provides support for local and offline storage makes the autonomy of these apps a real possibility. Viewing, filtering and manipulating data can still be performed in the browser, even when completely disconnected from the server (or the entire network, in the case of a mobile device that loses coverage).&lt;/p&gt;

&lt;p&gt;Finally, there are the possibilities of being able to use Javascript on the server-side of the web. The rise of interest in node.js, for example, is largely prompted by the opportunity to be able to use the same programming language throughout the entire web stack.&lt;/p&gt;

&lt;p&gt;But such changes mean that this stack is changing shape.&lt;/p&gt;

&lt;p&gt;Historically, the entire logic of delivering web-based services to browsers was built on the server-side. Databases, security layers, business logic, user interface creation – all of this was within the realm of the web server, and the browser merely took the resulting HTML and dumbly rendered it for the user.&lt;/p&gt;

&lt;p&gt;&lt;img style=&quot;border:1px solid #999&quot; src=&quot;/assets/2010/12/Web-of-Synchronization.0011-500x319.png&quot; alt=&quot;&quot; title=&quot;Web of Synchronization.001&quot; width=&quot;500&quot; height=&quot;319&quot; class=&quot;alignnone size-large wp-image-593&quot; srcset=&quot;/assets/2010/12/Web-of-Synchronization.0011-500x319.png 500w, /assets/2010/12/Web-of-Synchronization.0011-248x158.png 248w, /assets/2010/12/Web-of-Synchronization.0011.png 970w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Of course, this is incredibly inefficient: the entire stack is executed (and a whole page of HTML generated) for almost every single user interaction. To mitigate this, web developers turned to AJAX &amp;amp; AHAH to start placing more of the user interface logic in the client’s runtime environment, and to reduce the size of the payloads involved. The stack started to span both the server and client sides of the picture.&lt;/p&gt;

&lt;p&gt;&lt;img style=&quot;border:1px solid #999&quot; src=&quot;/assets/2010/12/Web-of-Synchronization.002-500x319.png&quot; alt=&quot;&quot; title=&quot;Web of Synchronization.002&quot; width=&quot;500&quot; height=&quot;319&quot; class=&quot;alignnone size-large wp-image-594&quot; srcset=&quot;/assets/2010/12/Web-of-Synchronization.002-500x319.png 500w, /assets/2010/12/Web-of-Synchronization.002-248x158.png 248w, /assets/2010/12/Web-of-Synchronization.002.png 970w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But with client-side MVC and support for local storage techniques, we can take this stack evolution a whole step further. With Sencha Touch, for example, an application constructs its entire user interface from scratch, and can synthesize the entire business logic, validation ruleset, and storage schema that would have traditionally been encapsulated on the server side.&lt;/p&gt;

&lt;p&gt;Now, islands of independent data on each and every user’s device might make for a useful service, but it is far more likely that most applications will continue to operate in conjunction with a server – which, with the appropriate layer of security to protect access to it, will provide a central storage repository.&lt;/p&gt;

&lt;p&gt;Our stack has now been neatly split in two.&lt;/p&gt;

&lt;p&gt;&lt;img style=&quot;border:1px solid #999&quot; src=&quot;/assets/2010/12/Web-of-Synchronization.003-500x319.png&quot; alt=&quot;&quot; title=&quot;Web of Synchronization.003&quot; width=&quot;500&quot; height=&quot;319&quot; class=&quot;alignnone size-large wp-image-595&quot; srcset=&quot;/assets/2010/12/Web-of-Synchronization.003-500x319.png 500w, /assets/2010/12/Web-of-Synchronization.003-248x158.png 248w, /assets/2010/12/Web-of-Synchronization.003.png 970w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(Note that, in the same way that we’ve long learnt to run both client-side and server-side validation of data submitted from HTML forms, it will probably remain wise to mirror business logic on both sides of the network to prevent inconsistency. While the rise of Javascript on the server theoretically makes it possible to do this with one set of common code, in reality, most server stacks will remain non-JS based for some time.)&lt;/p&gt;

&lt;p&gt;All well and good. But in one very particular respect, an architecture like this is deeply ambitious. We have added a significant new programming challenge into the mix: and that is one of data synchronization.&lt;/p&gt;

&lt;p&gt;When the browser is merely displaying read-only HTML or AHAH, the definitive copy of the business data is one place only: the server. But in this new architecture, we have the same logical data in two places – and, assuming we’re allowing users to interact with their copy of it, quite possibly off-line, we have to deal with the matter of keeping the two (or N) data sets consistent.&lt;/p&gt;

&lt;p&gt;At a protocol level, this is simple enough. We can easily use JSON to transmit data bidirectionally over an HTTP wire, and Ext JS and Sencha Touch’s model store classes, for example, take care of all the plumbing for us. But when we should do so, what the payload should be – and how we reconcile any conflicts between client and server – can quickly become interesting design questions.&lt;/p&gt;

&lt;p&gt;Consider a web-based corporate price list application, build using a client-side MVC pattern, and providing up-to-date information about a company’s products to its mobile salesforce. On its first instantiation on a mobile device, say, such an application might easily pull the entire list of product records from the server over JSON and store them locally for fast, possibly off-line, access.&lt;/p&gt;

&lt;p&gt;So far, so easy. But of course the records might frequently change on the server: the company creates new products, discontinues old ones, and often changes their prices. How should the ‘create’, ‘delete’ and ‘update’ operations be applied to the mobile device’s version of the data? Should it regularly refresh the whole data set again? Should it request all changes since the last sync and then incrementally apply those changes to its local copy? If certain data is not updated for a certain length of time, should the client application mark it as stale?&lt;/p&gt;

&lt;p&gt;These are already thoughtful decisions for the application developer to have to make.&lt;/p&gt;

&lt;p&gt;But now imagine that the company’s product managers are given more powerful rights within the same application, and they can actually edit the product descriptions on their mobile devices. When connected, these changes can be immediately sent directly back to the server. How can we ensure that other users’ apps can have that change broadcast to them?&lt;/p&gt;

&lt;p&gt;What about when the product manager is off-line, perhaps editing the portfolio on a plane? Should the application prohibit updates to the local data? Preferably not, but if changes can be made, how should the application poll to see when it is reconnected, and send those changes back in the most efficient way?&lt;/p&gt;

&lt;p&gt;Taking it to extreme, what happens when two product managers edit the same pieces of data? What happens when each have added a new product to which their client applications have assigned the same supposedly unique ID? The system needs to reconcile those potentially conflicting changes – and very quickly this becomes a non-trivial task.&lt;/p&gt;

&lt;p&gt;In the broader computing world, these challenges are common and have been frequently, and successfully, addressed. Many proven solutions exist for synchronization in the realms of distributed file systems, versioned source control, disk, database and site mirroring and so on – and even to manage our MP3 collections. But what is new is that this will soon becoming a challenge that web developers will need to tackle, and it is a challenge that might be unfamiliar and daunting to many.&lt;/p&gt;

&lt;p&gt;In the general case, of course, there is no single approach that will answer all these questions. Effective synchronization across a ‘split stack’ architecture will depend very much upon the sort of data that is being manipulated and what the application is setting out to achieve.&lt;/p&gt;

&lt;p&gt;Frameworks will certainly provide us with all the tools we need to implement the choices we make. But considering these synchronization-related scenarios and use-cases will be an increasingly important part of bringing compelling applications to users in increasingly diverse contexts. Reconciliation will lie at the heart of how we bring complex applications to life – not just an after-thought.&lt;/p&gt;

&lt;p&gt;The web is no longer one of documents or of simple uni-directional data: it is fast becoming a web of synchronization. And I fear it might not be as easy as we think. As developers, we all need to go into this new world with our eyes wide open and be prepared for new challenges around the corner.&lt;/p&gt;
</description>
				<pubDate>Thu, 09 Dec 2010 10:22:52 +0000</pubDate>
				<link>https://tripleodeon.com/2010/12/a-web-of-sync/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/12/a-web-of-sync/</guid>
			</item>
		
			<item>
				<title>Sencha Touch + DeviceMotion APIs (= a small plastic toy)</title>
        <description>&lt;p&gt;Here at Sencha Towers, we’ve been having a bunch of fun with the new accelerometer &amp;amp; gyroscope APIs in the iOS4.2 web browser.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Rob Dougan has put together a &lt;a href=&quot;http://b.rwd.me/&quot;&gt;tilt-controlled list&lt;/a&gt; and Ariya Hidayat a &lt;a href=&quot;http://ariya.github.com/js/marblebox/&quot;&gt;box of marbles&lt;/a&gt;. Both require an updated iPhone or iPod Touch (although Ariya’s also works on a MacBook Pro if you use the Chrome browser).&lt;/p&gt;

&lt;p&gt;The APIs are pretty easy to use, and seem to follow the W3C (&lt;a href=&quot;http://dev.w3.org/geo/api/spec-source-orientation.html&quot;&gt;draft&lt;/a&gt;) standards.&lt;/p&gt;

&lt;p&gt;I thought I would have a go to, and so I wrote a &lt;a href=&quot;http://tinyurl.com/ioslide&quot;&gt;small Sencha Touch app&lt;/a&gt; that mimics one of those small sliding puzzles we all had as kids – but where the tiles are moved not with touch gestures, but by sliding the pieces under gravity.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2010/12/ioslider-500x266.png&quot; alt=&quot;&quot; title=&quot;ioslider&quot; width=&quot;500&quot; height=&quot;266&quot; class=&quot;alignnone size-large wp-image-575&quot; srcset=&quot;/assets/2010/12/ioslider-500x266.png 500w, /assets/2010/12/ioslider-248x132.png 248w, /assets/2010/12/ioslider.png 744w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;From a Sencha Touch point of view, I’ve tried to use a best-practice application structure, and both the grid and the tiles are Ext.Panels (which makes them easy to treat in an object-oriented way and, in the case of the tiles, instantiate arbitrarily).&lt;/p&gt;

&lt;p&gt;I have set up Ext.EventManager listeners for devicemotion and deviceorientation events, and fortunately, the callback can access the underlying browser event to get the motion-based properties I need.&lt;/p&gt;

&lt;p&gt;The tiles themselves are placed on the grid using CSS transforms, rather than top/left positioning, along the lines of:&lt;/p&gt;

&lt;pre&gt;Ext.Element.cssTransform(this.getEl(), {translate: [x, y]});&lt;/pre&gt;

&lt;p&gt;This makes coding the sliding movement unbelievably easy: I simply have to change the transformation to where I want the tile to move to, and then&lt;/p&gt;

&lt;pre&gt;-webkit-transition:-webkit-transform .8s ease-in;&lt;/pre&gt;

&lt;p&gt;does the gentle slide. Wow. Transitions and transforms have been a spectacular epiphany for me in the last few months.&lt;/p&gt;

&lt;p&gt;One catch with web-based tilt control: tip the device more than 45 degrees, and you might find yourself switching between portrait and landscape mode. I don’t know of a way to disable this in Mobile Safari.&lt;/p&gt;

&lt;p&gt;The issue with this is that the co-ordinate system of the device’s physical orientation does not rotate, but the web page does. So in my case, I check the window’s current rotation and subtract the appropriate multiple of 90 degrees so that the elements still slide in the direction expected for the device’s physical position.&lt;/p&gt;

&lt;p&gt;To test it out, get an iPhone or iPod Touch with iOS4.2 installed. Put the device level on a horizontal surface, go to &lt;a href=&quot;http://tinyurl.com/ioslide&quot;&gt;http://tinyurl.com/ioslide&lt;/a&gt; – then tilt the device about 15 degrees in various directions to make the tiles slide.&lt;/p&gt;

&lt;p&gt;Also feel free to look at (and be tempted to improve!) the code. Small, simple, and good fun: let me know what you think.&lt;/p&gt;
</description>
				<pubDate>Wed, 01 Dec 2010 12:08:03 +0000</pubDate>
				<link>https://tripleodeon.com/2010/12/sencha-touch-devicemotion-apis-small-plastic-toy/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/12/sencha-touch-devicemotion-apis-small-plastic-toy/</guid>
			</item>
		
			<item>
				<title>tinySrc is now part of Sencha</title>
        <description>&lt;p&gt;I’m extremely pleased to announce that one of my projects, &lt;a href=&quot;http://tinysrc.net/&quot;&gt;tinySrc&lt;/a&gt;, has become part of &lt;a href=&quot;http://sencha.com&quot;&gt;Sencha&lt;/a&gt;, alongside such awesome projects as &lt;a href=&quot;http://raphaeljs.com/&quot;&gt;Raphaël JS&lt;/a&gt;, &lt;a href=&quot;http://jqtouch.com/&quot;&gt;jQTouch&lt;/a&gt;, &lt;a href=&quot;https://github.com/senchalabs/Connect&quot;&gt;Connect&lt;/a&gt;, and &lt;a href=&quot;http://thejit.org/&quot;&gt;InfoVis&lt;/a&gt; – as well, of course, as the company’s core products like &lt;a href=&quot;http://www.sencha.com/products/js/&quot;&gt;Ext JS&lt;/a&gt; and the revolutionary mobile framework &lt;a href=&quot;http://www.sencha.com/products/touch/&quot;&gt;Sencha Touch&lt;/a&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;tinySrc has been going from strength to strength over the last 18 months. I think its underlying growth is a reflection of the huge interest in developing for the mobile medium. Mobile web and app developers quickly realize they need to make sure that their graphical experience is correctly formatted for a wide range of screen-sizes and form factors.&lt;/p&gt;

&lt;p&gt;There are no intentions to change the API and the way in which the tinySrc runs, so you can continue to use it with confidence.&lt;/p&gt;

&lt;p&gt;You’ll see lots of new cool features coming in the future though: the service has some exciting times ahead of it!&lt;/p&gt;
</description>
				<pubDate>Wed, 01 Dec 2010 06:28:37 +0000</pubDate>
				<link>https://tripleodeon.com/2010/12/tinysrc-is-now-part-of-sencha/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/12/tinysrc-is-now-part-of-sencha/</guid>
			</item>
		
			<item>
				<title>CSS3 goes walkabout</title>
        <description>&lt;p&gt;Yesterday, Sencha released &lt;a href=&quot;http://www.sencha.com/products/animator/&quot;&gt;Sencha Animator&lt;/a&gt;: a tool designed to build CSS3-based animations.&lt;/p&gt;

&lt;p&gt;Like &lt;a href=&quot;http://notes.sencha.com/post/1418349616/sencha-animator-bouncing-ball-demo-11-45&quot;&gt;a few others&lt;/a&gt; today, I thought I should get familiar with it, and gave it a whirl this morning. My artistic genes don’t even pass their unit tests… so if &lt;em&gt;I&lt;/em&gt; can make something work (admittedly with some help from &lt;a href=&quot;http://minyos.its.rmit.edu.au/aim/a_notes/p_images/walk_2_legs(side).gif&quot;&gt;Preston Blair&lt;/a&gt;), then anyone can.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2010/10/sencha_animator-500x356.png&quot; alt=&quot;&quot; title=&quot;sencha_animator&quot; width=&quot;500&quot; height=&quot;356&quot; class=&quot;alignnone size-large wp-image-561&quot; srcset=&quot;/assets/2010/10/sencha_animator-500x356.png 500w, /assets/2010/10/sencha_animator-248x176.png 248w, /assets/2010/10/sencha_animator.png 1099w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If you have a WebKit-based browser like Chrome, Safari or their mobile brethren, you should be able to see the results of my efforts in an &amp;lt;iframe&amp;gt; below, or on the &lt;a href=&quot;/assets/2010/10/divman.html&quot;&gt;standalone page&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;It’s somewhat scary to know that I’m basically drawing line-art with bordered &amp;lt;div&amp;gt; elements, but certainly it’s fluid and reliable enough on all the appropriate browsers I’ve tried.&lt;/p&gt;

&lt;p&gt;I have no idea what it looks like on non-compatible browsers. For now, I daren’t think.&lt;/p&gt;

&lt;p&gt;But the same page works like clockwork on suitably (that is, ‘highly’) capable mobile browsers. This screenshot is from the iPhone4 emulator:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2010/10/divman_iphone4-362x500.png&quot; alt=&quot;&quot; title=&quot;&quot; width=&quot;362&quot; height=&quot;500&quot; class=&quot;alignnone size-large wp-image-558&quot; srcset=&quot;/assets/2010/10/divman_iphone4-362x500.png 362w, /assets/2010/10/divman_iphone4-180x248.png 180w, /assets/2010/10/divman_iphone4.png 482w&quot; sizes=&quot;(max-width: 362px) 100vw, 362px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Help yourself to my &lt;a href=&quot;/assets/2010/10/WalkingMan.anim&quot;&gt;.anim file&lt;/a&gt; if you want to use this skeleton for your own animations.&lt;/p&gt;

&lt;p&gt;Some say that using CSS3 for animation is going to be a standards-based way to replace Flash, and it may well become so at some point. Others say that it means we’re set for another decade of bad splash screens and corny animations. That may also be true – but you don’t ban paintbrushes just because there are bad painters.&lt;/p&gt;

&lt;p&gt;Anyway, for now, I had a lot of fun. I’m excited to have seen a glimpse of what CSS3 Animations are capable of; even if they’re certainly not something I would ever have wanted to craft by hand: view source to see what I mean.&lt;/p&gt;
</description>
				<pubDate>Thu, 28 Oct 2010 04:59:10 +0000</pubDate>
				<link>https://tripleodeon.com/2010/10/css3-goes-walkabout/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/10/css3-goes-walkabout/</guid>
			</item>
		
			<item>
				<title>Modernizr on the server-side</title>
        <description>&lt;p&gt;The &lt;a href=&quot;http://github.com/jamesgpearce/modernizr-server&quot;&gt;modernizr-server&lt;/a&gt; library is a way to bring Modernizr browser data to your server scripting environment.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;There are a host of emerging techniques for adjusting web content to suit different types of browsers.&lt;/p&gt;

&lt;p&gt;The current vogue seems to be to do as much of it as possible on the client-side: media queries, progressive enhancement, adding CSS body classes, and so on.&lt;/p&gt;

&lt;p&gt;These are all cool, and hit a resonance with those who deal entirely with the front-end of a web site, and who prefer CSS (and a little Javascript) to Python, Ruby, PHP and the like.&lt;/p&gt;

&lt;p&gt;In my opinion, this approach won’t &lt;em&gt;always&lt;/em&gt; cut it. I’ve already &lt;a href=&quot;/2010/10/not-a-mobile-web-merely-a-320px-wide-one/&quot;&gt;pointed out&lt;/a&gt; that the users of radically different devices might want downright different things. Sometimes the differences between browsers are just too great to be able to deal with once the page has reached the client. And dealing with structural changes to a site’s information architecture based on browser capabilities gets messy, fast.&lt;/p&gt;

&lt;p&gt;(Imagine if my site had a conditional a ‘photo upload’ feature that I wanted to place in the site’s menu for mobile devices that supported it. Do I have to feature test &amp;lt;input type=’file’&amp;gt; on every page, simply so I can add or remove nodes from the menu’s DOM? Ugh.)&lt;/p&gt;

&lt;p&gt;So anyway, sometimes it’s far better to have had the server emit the best content in the first place – or at least as close as possible.&lt;/p&gt;

&lt;p&gt;With this in mind, I’ve a new project called &lt;a href=&quot;http://github.com/jamesgpearce/modernizr-server&quot;&gt;modernizr-server&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://modernizr.com&quot;&gt;Modernizr&lt;/a&gt; itself is a great way to find out about your user’s browser capabilities. However, you can only access its API on the browser itself, which means you can’t easily benefit from knowing about browser capabilities in your server logic.&lt;/p&gt;

&lt;p&gt;To address this, the modernizr-server library is a way to bring Modernizr browser data to your server scripting environment. For example, in PHP:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;?php

    include('modernizr-server.php');

    print 'The server knows:';
    foreach($modernizr as $feature=&amp;gt;$value) {
        print &quot;&amp;lt;br/&amp;gt; $feature: &quot;; print_r($value);
    }

?&amp;gt;

The server knows:
canvas: 1
canvastext: 1
geolocation: 1
crosswindowmessaging: 1
websqldatabase: 1
indexeddb: 0
hashchange: 1
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Exactly the same feature detection is available through this (PHP) API on the server as is available through the (Javascript) API on the client.&lt;/p&gt;

&lt;p&gt;Currently, there is only a PHP implementation of the server-side API, but other languages would be easy enough. Stay tuned to the project for more (and let me know what might be a priority, or fork!).&lt;/p&gt;

&lt;p&gt;For instructions on how to use, and information about how it works, you’re encouraged to consult the &lt;a href=&quot;http://github.com/jamesgpearce/modernizr-server/blob/master/README.md&quot;&gt;readme&lt;/a&gt;. Also this is a young project, so please use in high-traffic production environments with due caution.&lt;/p&gt;

&lt;p&gt;Your feedback is welcome! Hope it’s helpful.&lt;/p&gt;
</description>
				<pubDate>Mon, 25 Oct 2010 20:55:00 +0000</pubDate>
				<link>https://tripleodeon.com/2010/10/modernizr-on-the-server-side/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/10/modernizr-on-the-server-side/</guid>
			</item>
		
			<item>
				<title>Not a mobile web, merely a 320px-wide one</title>
        <description>&lt;p&gt;A school of influential web designers are pioneering ‘Responsive Web Design’ as a way to render content on different types of browser screens. They must fix the fledgling technique’s technical faults before it propagates into the wild. And it is certainly not yet worthy of its name: designers must think beyond the glass of a screen and build experiences that respond to the humans beyond it.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;A little while ago, renowned web designer &lt;a href=&quot;http://unstoppablerobotninja.com&quot;&gt;Ethan Marcotte&lt;/a&gt; wrote an article on the popular web design site &lt;a href=&quot;http://www.alistapart.com/articles/responsive-web-design/&quot;&gt;A List Apart&lt;/a&gt;. This seminal article is titled ‘Responsive Web Design’, and has seemingly been very well read and much admired.&lt;/p&gt;

&lt;p&gt;‘Seminal’ because it proposes that sites should challenge many of the established conventions that have been prevalent in contemporary web design: rather than exclusively using a fixed print-like grid, for example, sites should be more fluid and flexible with respect to screen size. (Of course this is how all web pages used to work in the mid-1990s, so the concept’s novelty is probably dependent upon the age of the beholder.)&lt;/p&gt;

&lt;p&gt;In case it isn’t obvious, there has never been a single screen size upon which web sites should be expected to render: computer screens and browser viewports have always come in a range of sizes. But now, the obvious logic goes, the big screens are getting bigger, the small (ie. mobile) screens more popular, and a huge host of new browsing form factors – from tablets to car dashboards – are radically reshaping the web’s diverse physical canvas.&lt;/p&gt;

&lt;p&gt;By building sites which can respond to these different screen sizes using open standards, the chances of it looking nice on all of, say, a regular laptop, a tablet, a games console, and a 27″ cinema screen are greatly increased.&lt;/p&gt;

&lt;p&gt;The real novelty of Mr Marcotte’s argument is not that you should find and remove all the fixed {width:960px} rules from your stylesheets, but that you can use &lt;a href=&quot;http://www.w3.org/TR/css3-mediaqueries/&quot;&gt;CSS Media Queries&lt;/a&gt; to selectively apply styling rules based on certain criteria. This allows you to have a page layout which changes as a function of browser screen size. (The properties available for evaluation in media queries are exclusively related to screen display dimensions and color capabilities.)&lt;/p&gt;

&lt;p&gt;Take these two renderings of ‘The Baker Street Inquirer’, for example:&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-large wp-image-526&quot; title=&quot;holmes&quot; src=&quot;/assets/2010/10/holmes-500x334.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;334&quot; srcset=&quot;/assets/2010/10/holmes-500x334.png 500w, /assets/2010/10/holmes-248x165.png 248w, /assets/2010/10/holmes.png 1179w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the narrower example on the right, the title decoration changes, the menu items rise to the top of the page, the images appear in twos instead of threes, and so on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This looks fantastic.&lt;/strong&gt; Apart from being a lovely piece of graphic design, viewers also know that this page will look good in their desktop browser whichever size they have it set at, and they won’t have to risk lots of empty space on each side (on a too-large window), or lots of left-to-right scrolling (on a too-narrow window) – both concerns when a browser’s viewport doesn’t match a web designer’s assumption.&lt;/p&gt;

&lt;p&gt;Six months on, the fruits of this article are starting to ripen. The good, the great, and the brilliant of the web design world obviously read it and took every word of it to heart. Two oft-discussed examples are &lt;a href=&quot;http://colly.com/&quot;&gt;Simon Collison’s&lt;/a&gt; and &lt;a href=&quot;http://2010.dconstruct.org&quot;&gt;dConstruct 2010’s&lt;/a&gt; web sites: narrow your browser window on both to see the magic happen.&lt;/p&gt;

&lt;p&gt;More recently, &lt;a href=&quot;http://adactio.com/&quot;&gt;Jeremy Keith&lt;/a&gt; is notably &lt;a href=&quot;http://adactio.com/journal/1700/&quot;&gt;flying the responsive flag&lt;/a&gt;, and has designed a number of sites (and redesigned his own) using a similar approach. Just last week, the mighty Happy Cog launched a very attractive &lt;a href=&quot;http://cognition.happycog.com/&quot;&gt;new blog&lt;/a&gt; that narrows elegantly, and the talented &lt;a href=&quot;http://mikekus.com/&quot;&gt;Mike Kus&lt;/a&gt; (with &lt;a href=&quot;http://thinkvitamin.com/&quot;&gt;Think Vitamin&lt;/a&gt;‘s redesign) has also joined the party.&lt;/p&gt;

&lt;p&gt;So, the wheels of evolution turn. Designers are innovating, trying each other’s new techniques, and pushing this worthy idea onwards. They are influencing each other, and in the way these things cascade through imitation, influencing the approach that many thousands of developers who look up to them will take when next asked to design or redesign a site. At this rate, it will only be a few years before more web sites use media queries than don’t. It’s a smart solution, using well-known, standards-based technology, and users with different screens the world over will undoubtedly be happier.&lt;/p&gt;

&lt;p&gt;Sadly, this technique is not the revelational panacea that some might present it as. While it copes well with the challenges presented by size-diverse browsers on a desktop, for example, it is flawed when presented as an single solution to the challenge of the mobile web. A more-or-less explicit tenet of the ‘Responsive Web Design’ school is that contemporary mobile browsers are served neatly by this technique, so it deserves to be put under this scrutiny.&lt;/p&gt;

&lt;p&gt;Before we go any further, and for the avoidance of doubt, it is thrilling that the ‘mobile web’ has finally garnered some sort of interest amongst the web design community. For a decade, lonely pioneers have been hacking about with little more than monochromatic text on cramped and feeble browsers. Seeing a new wave of talented web artists thinking about the medium is very inspiring – spurred on by the rise and rise of brilliantly capable mobile browsers. Mobile, the historically gloomy little corner of the web, is ripe to welcome fresh and smart ideas – clever and efficient ways to deliver exciting content to mobile users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sadly ‘Responsive Web Design’ is not yet one of them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To start off with, there are some technical and tactical issues. Experienced mobile web designer &lt;a href=&quot;http://www.slideshare.net/bryanrieger/rethinking-the-mobile-web-by-yiibu&quot;&gt;Bryan Rieger&lt;/a&gt; has most notably illustrated these concerns, and strategist &lt;a href=&quot;http://www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/&quot;&gt;Jason Grigsby&lt;/a&gt; has explored similar points. Their main concerns stem from the facts that:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Media queries only affect the styling once the markup and other resources have reached the browser&lt;/strong&gt;. Whatever the device – whatever the network it’s connected to – the browser will download the entire markup of the page, and any (probably large) images in it. Yes, a ‘responsive stylesheet’ can resize media or hide it from the user, but designers should not presume that they’ve done anything to improve the performance or network utilisation by this sleight of hand. Cellular network usage is free in neither the financial nor performance sense. Ironically, Mr Keith’s article about the technique itself has a total size of about 1.6Mb – a payload that no mobile device this side of LTE will sniff at.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Media queries are not supported by most of the world’s web browsers.&lt;/strong&gt; Certainly all WebKit-based browsers handle them well enough, and most other contemporary desktop browsers do too. But anything else will struggle: this includes legacy desktop browsers (which certainly don’t seem to concern the web’s great and good) and, more seriously, &lt;em&gt;most&lt;/em&gt; mobile handsets in the market today.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both issues are present in Mr Marcotte’s initial expression of ‘Responsive Web Design’. Perhaps understandably: while the exposition of technique focusses on the aesthetic of flexible design, there is little discussion of performance optimization. Further, many of these concerns pale if you’re a designer who lives in a world where everyone has an iPhone 4. Perhaps the article set out to merely present a prototype which the author knew would of course be iterated upon and refined.&lt;/p&gt;

&lt;p&gt;Certainly some refinement could be applied to the mathematics, which apparently advocates daft rules like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{margin-right: 3.317535545023696682%}&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;But thankfully none of these concepts are necessarily deal-breakers: &lt;a href=&quot;http://tinysrc.net&quot;&gt;tinySrc&lt;/a&gt; (created by this author) allows you to have already dynamically-resized images arriving at the browser in response to a static piece of markup. Mr Reiger illustrates that by rethinking the assumptions about which browser is the default (i.e. a basic mobile one) and which receives the conditional styling (i.e. the clever, or desktop ones), one can mitigate a lot of the problems caused by serving up too many irrelevant resources. That’s probably not entirely what Luke Wroblewski was getting at when he said ‘&lt;a href=&quot;http://www.lukew.com/ff/entry.asp?933&quot;&gt;Mobile First&lt;/a&gt;‘, but it’s good enough to work.&lt;/p&gt;

&lt;p&gt;Hopefully, Messrs Marcotte, Keith, Kus, Zeldman et al will take these considerations on board and refine their logic accordingly. Theirs is the work that will be widely aspired to and derived from, and this is some basic hygiene that should be encouraged as soon as possible. The practices are not yet best practices – and we should hope that this technique doesn’t become a precedent for playing &lt;a href=&quot;http://cognition.happycog.com/a/c/screen.css&quot;&gt;fast and loose&lt;/a&gt; with mobile payloads.&lt;/p&gt;

&lt;p&gt;Technical issues aside, &lt;strong&gt;the primary concern with using ‘Responsive Web Design’ for mobile web sites remains&lt;/strong&gt;, and it is far more fundamental.&lt;/p&gt;

&lt;p&gt;Firstly let’s look at the name – or at least the origin from which is was purloined. ‘Responsive Architecture’, a term coined by Nicholas Negroponte, is a school of thought that says that buildings and structures should be able to react to changes in their environment, altering their shape or surfaces accordingly. Indeed this is what ‘Responsive Web Design’ does too: change the browser size, and the site within it will respond.&lt;/p&gt;

&lt;p&gt;But Mr Marcotte posits that it is also about ‘how physical spaces can respond to the presence of people passing through them’ – in other words, that buildings should react to the way in which humans behave, and implicitly, to what it is that they need or want. This is where the ‘Responsive Web Design’ aspiration falls flat. Nothing about the technique is explicitly related to the human actually using the site, nor his or her context.&lt;/p&gt;

&lt;p&gt;The problem of course, stems from the reliance on media queries as the key input to the layout’s alterations. Complex criteria can be built to segment styling based on width, height, orientation or color depth – but nothing else. The design is responding to the glass on the front of the gadget that the user has in their hand – not to the flesh and bone beyond it, where they are, what they are doing, and what state of mind they are in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In the world of mobile, this matters.&lt;/strong&gt; The fact that the user has a small screen in their hand is one thing – the fact that it is in their hand at all is another. The fact that the user may be walking, driving, or lounging is yet another. In fact, it’s quite likely that they really deserve different content and services altogether – or, at least, a differently prioritized version of the default desktop experience.&lt;/p&gt;

&lt;p&gt;Is this too abstract? Too theoretical? Absolutely not. As a commonplace example, consider the FourSquare mobile web site and its sister web site. The former, of course, is designed as a slick and efficient way to check your location in to the service – and not much else. The latter provides a chance to review previous activity in the comfort of a desktop environment.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-large wp-image-527&quot; title=&quot;foursquare&quot; src=&quot;/assets/2010/10/foursquare-500x264.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;264&quot; srcset=&quot;/assets/2010/10/foursquare-500x264.png 500w, /assets/2010/10/foursquare-248x131.png 248w, /assets/2010/10/foursquare.png 1457w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Is this responsive? Of course it is – at least in terms of responding to what humans in different environments want to do. The user, by specifying which site they want to receive, gets a design and an interface that is wholly appropriate to their context, not just their screen width. (Sadly, visitors with mobile handsets do not get automatically forwarded to the mobile version of the site, which would have made the service even more ‘responsive’.)&lt;/p&gt;

&lt;p&gt;Consider, on the other hand, the &lt;a href=&quot;http://www.stpaulsschool.org.uk/&quot;&gt;St Paul’s School&lt;/a&gt; website. It looks lovely and exhibits all the hallmarks of the ‘Responsive Web Design’ school. Resizing the browser window demonstrates the page’s fluid grid, and on a narrow, mobile screen the layout becomes vertical and flows respectably down the page.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-large wp-image-528&quot; title=&quot;stpauls&quot; src=&quot;/assets/2010/10/stpauls-500x269.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;269&quot; srcset=&quot;/assets/2010/10/stpauls-500x269.png 500w, /assets/2010/10/stpauls-248x133.png 248w, /assets/2010/10/stpauls.png 1476w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But let us just think about the use cases for this web site. Clearly the desktop site is designed to target prospective parents – St Paul’s is a top-notch fee-paying school in London – and the design, menu structure and layout reflect that. The ‘about’ page is first and foremost in the menu, followed by a sequence of pages designed to give the reader an insight into the workings and philosophy of the school. One can imagine well-heeled parents poring over the site for hours, deciding if it is the place for their child to attend and getting a feeling for the institution.&lt;/p&gt;

&lt;p&gt;But a mobile user? Let us think about what a mobile user might want from their interaction with the school’s online presence. Are prospective parents so busy that they research making one of the biggest investments in their lives by spending a few moments on a mobile browser? Well, possibly; but it is hard to imagine that reading the school’s lengthy prospectus should top of the list of important mobile use-cases.&lt;/p&gt;

&lt;p&gt;If one &lt;em&gt;is&lt;/em&gt; accessing this site on a mobile device, there are other far more likely reasons. Imagine an existing parent or student keeping abreast of the (well-populated) school news, or upcoming calendar of events. This is something they might easily snatch a few moments doing in the car on the school commute, say. Or perhaps the user is a prospective parent or visitor who wants to check on the address and location of the school en route, or wants to put a call through to the school office.&lt;/p&gt;

&lt;p&gt;Has the design responded to these, now very different, requirements? No. In the mobile display of the site, the news and contact pages are still at the bottom of the menu, below the admissions information and exhaustive list of school sports. The contact page (once you have reached it) does contain telephone numbers, but they have been turned into callable links by the browser’s automatic number detection, not the designer’s hand, so rather curiously you can also click to call the school’s fax number.&lt;/p&gt;

&lt;p&gt;And the location page, to get a map and directions to the school? Most of the screen is taken up with an aerial portrait of the school – of arguably marginal help for navigation – and the map itself is only available within a 1.5Mb, three-part PDF document. You couldn’t make this up.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-large wp-image-519&quot; title=&quot;location&quot; src=&quot;/assets/2010/10/location-500x260.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;260&quot; srcset=&quot;/assets/2010/10/location-500x260.png 500w, /assets/2010/10/location-248x129.png 248w, /assets/2010/10/location.png 1476w&quot; sizes=&quot;(max-width: 500px) 100vw, 500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Surely a mobile user deserves and expects a map image embedded in the page, or even a link to Google Maps (which, incidentally, certain mobile browsers will parse to invoke the native map client). Apparently a few of these clever new gadgets have GPS in them.&lt;/p&gt;

&lt;p&gt;Responsive to the user’s needs? Barely.&lt;/p&gt;

&lt;p&gt;Anyway, the purpose of this article is not a hatchet attack on one particular site. It’s merely being used as an example of how using what is currently called ‘Responsive Web Design’ is often nothing of the sort – or, at best, a single cosmetic tool that needs to be used in conjunction with other, mobile-centric ideas and sympathies.&lt;/p&gt;

&lt;p&gt;One gets the sense that those promoting and using ‘Responsive Web Design’ in its current form secretly hope that this is all they will have to do to be able to call their sites ‘mobile-ready’ (although whether that is what they commit to their clients, of course, one cannot say). We should sincerely hope this is not the case. These are smart and insightful individuals: surely they understand that juggling a few pixels around does not amount to designing for different types of user.&lt;/p&gt;

&lt;p&gt;Mr Keith in particular appears to understand the dilemma. He points out that ‘I don’t refer to this as mobile optimisation’ and that media queries are not the ‘silver bullet for the mobile context’. Nevertheless, the screenshots of his portfolio sites are 480px in width (conveniently the landscape size of an iPhone), and he is somewhat disparaging about the idea of ‘the rabbit hole’ of creating a different site for mobile devices.&lt;/p&gt;

&lt;p&gt;(Of course that isn’t technically required. A small snippet of server logic would have have been all that was required by St Paul’s to move news and contact to the top of a mobile menu, and to replace the PDF link with a Google Maps resource, for example.)&lt;/p&gt;

&lt;p&gt;But this may give us a clue why so many others seem desperate to will the current implementation of ‘Responsive Web Design’ into being as the sole way to develop services for mobile users: it’s all client-side, and requires nothing more complex than a few extra tricks in existing CSS files. It may be that many web designers are daunted by the thought that they may be required to think about mobile device detection and conditional logic on the server-side, and are clinging to the hope that they can claim to support mobile users without having to do any, well, programming.&lt;/p&gt;

&lt;p&gt;Sadly for those involved, this probably can’t be avoided. It’s not that media queries aren’t an excellent way to resize layouts (of course they are), nor that they don’t act as a reasonable proxy for identifying a mobile devices (which is also more or less true for now) and in turn mobile humans.&lt;/p&gt;

&lt;p&gt;It’s a more fundamental issue – which is that any site should be ruthlessly scrutinized for ways in which it can behave in better ways for all of its constituencies of users, and that the differences between those ways are often going to be more significant than can be papered over with some stretchy images and fluid grids on a conveniently powerful mobile browser.&lt;/p&gt;

&lt;p&gt;The real fear is that this subtlety is lost on those disciples who want to rattle off a site design that works on mobile devices as well as desktop browsers. The result of their efforts might look lovely on the client’s iPhone, but the speed at which that magic trick was performed will certainly have come at the expense of someone actually sitting down and thinking about what that mobile variant of the experience should actually offer.&lt;/p&gt;

&lt;p&gt;The result? &lt;strong&gt;We won’t have a mobile web, but merely a 320px-wide one.&lt;/strong&gt; A web for which the humans using it matter less than the width of the glass it is displayed on.&lt;/p&gt;

&lt;p&gt;As a postscript, an analogy: we are in an age which, in many ways, resembles that of the birth of broadcast television. The mobile web is a new medium that, yes, is able to deliver services similar to its precursor, but which can also be developed and enhanced in ways that have yet to be dreamt of. Reflowing today’s web sites for mobile devices is a philosophy akin to that of the first broadcast television programs: “let’s stick with what worked before, and just put well-dressed radio presenters onto the screen”.&lt;/p&gt;

&lt;p&gt;Did that work? Sure it did – as a start. But was it these dull talking heads that made television the greatest medium of the 20th century? Hardly. It was when program makers started to explore the visual capabilities of the their new canvas – and the increasingly demanding expectations of the viewers who expected to see something more interesting on the wooden box they had just spent a lot of money on – that innovation occurred.&lt;/p&gt;

&lt;p&gt;Today’s ‘Responsive Web Design’ is a lukewarm response to a similar seismic shift – that of the sedentary web into expectant mobile hands.&lt;/p&gt;

&lt;p&gt;Our approaches need to be bolder, more structural, more experimental, and, frankly, more considerate of the diverse audiences we should all be trying to cater for.&lt;/p&gt;
</description>
				<pubDate>Sat, 16 Oct 2010 04:28:39 +0000</pubDate>
				<link>https://tripleodeon.com/2010/10/not-a-mobile-web-merely-a-320px-wide-one/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/10/not-a-mobile-web-merely-a-320px-wide-one/</guid>
			</item>
		
			<item>
				<title>monomi: mobile middleware for node.js</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://github.com/jamesgpearce/monomi&quot;&gt;monomi&lt;/a&gt; is node.js middleware that provides tools for handling mobile (and other types of) browsers.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;It relies on the excellent &lt;a href=&quot;http://github.com/senchalabs/connect&quot;&gt;Connect&lt;/a&gt; layer, and is easy to install with &lt;a href=&quot;http://github.com/isaacs/npm&quot;&gt;npm&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Currently, monomi analyzes incoming HTTP requests to detect which type of browser they come from. Default values are ‘desktop’, ‘tablet’, ‘touch’, and ‘mobile’ (meaning non-touch), and the type is put into the request.monomi.browserType property.&lt;/p&gt;

&lt;p&gt;The order of preference for the detection, as well as the algorithms used, can all be optionally overridden when the middleware is instantiated.&lt;/p&gt;

&lt;p&gt;It’s early days for the project… I have plans to allow the middleware to adapt the outgoing content to be appropriate for the detected device – although this needs to be sensitive to the asynchronous philosophy of node.js&lt;/p&gt;

&lt;p&gt;Try it, fork it, experiment, have fun.&lt;/p&gt;
</description>
				<pubDate>Fri, 15 Oct 2010 00:26:47 +0000</pubDate>
				<link>https://tripleodeon.com/2010/10/monomi-mobile-middleware-for-node-js/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/10/monomi-mobile-middleware-for-node-js/</guid>
			</item>
		
			<item>
				<title>Google Instant: 37 Golden Tickets</title>
        <description>&lt;p&gt;Google Instant provides results as you type. This is bound to keep SEO experts and marketing wonks awake at night trying to figure out what new user behavior it might engender.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;For one thing, there are now a small number of golden tickets: if a searcher hesitates for even the shortest time between typing letters, auto-suggestions and results show up… and presumably many searches start with a Latin character.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/?attachment_id=397&quot; rel=&quot;attachment wp-att-397&quot;&gt;&lt;img src=&quot;/assets/2010/09/instant1-550x343.png&quot; alt=&quot;&quot; title=&quot;instant&quot; width=&quot;550&quot; height=&quot;343&quot; class=&quot;alignnone size-large wp-image-397&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I thought it would be interesting to find out what the first suggestions are for queries searching with each letter of the Latin alphabet. And here they are:&lt;/p&gt;

&lt;table width=&quot;100%&quot;&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Amazon
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;N&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      NetFlix
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Best Buy
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;O&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Orbitz
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;C&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Craigslist
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;P&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Pandora
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;D&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &amp;#8216;dictionary&amp;#8217;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;Q&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &amp;#8216;quotes&amp;#8217;
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;E&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      eBay
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;R&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      REI
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;F&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Facebook
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;S&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Sears
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;G&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Gmail
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;T&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Target
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;H&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Hotmail
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;U&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      USPS
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;I&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Ikea
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;V&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Verizon
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;J&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      JetBlue
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;W&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &amp;#8216;weather&amp;#8217;
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;K&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Kohl&amp;#8217;s
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;X&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      XBox
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;L&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Lowe&amp;#8217;s
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;Y&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Yahoo
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;M&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      MapQuest
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;Z&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Zillow
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Note that only D, Q and W bring up a generic word, rather than a brand name directly. This might seem slightly surprising (since appending ‘.com’ to all these brand names will get you straight to their web site), but entirely consistent with &lt;a href=&quot;http://www.readwriteweb.com/archives/facebook_wants_to_be_your_one_true_login.php#comment-187511&quot;&gt;this sort of behavior&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note that these are not the same as the results brought up if you simply enter a single letter in to the search box. If you simply search for ‘H’, you’ll be told about Planck’s Constant and hydrogen – but if you &lt;em&gt;start to type&lt;/em&gt; a search with ‘H’, Google thinks you’re most likely to then type ‘otmail’, and the results show accordingly.&lt;/p&gt;

&lt;p&gt;Because of that distinction, I’m sure that SEOing your web site for a targetted single letter won’t help – the suggestions are presumably based on vast statistics about which phrases users end up typing after initial stems.&lt;/p&gt;

&lt;p&gt;I also tried the same test on Google’s mobile search, vainly hoping that there might be some sign that people might be looking for different things when they are mobile. Maybe ‘directions’ might beat ‘dictionary’ when on the move, eh? But no: they were all exactly the same – bar one. (Strangely YouTube beat Yahoo on the mobile auto-suggest.)&lt;/p&gt;

&lt;p&gt;I am sure this list isn’t curated: one hopes that would have put paid to dusty old MapQuest… But there are a few interesting entries in the list. Do more people search for REI than ‘realty’? (Who &lt;em&gt;are&lt;/em&gt; REI?) And is ‘Sears’ really the most popular search starting with ‘S’?&lt;/p&gt;

&lt;p&gt;For completeness, here are the top suggestions for single numeric digits:&lt;/p&gt;

&lt;table width=&quot;100%&quot;&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      007
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;5&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      50 Cent
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;1&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      14th Amendment
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;6&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      60 Minutes
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;2&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      24 (TV Series)
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;7&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      7-ZIP
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;3&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      Nintendo 3DS
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;8&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      84 Lumber
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;4&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      4chan
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;9&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      90210 (TV Series)
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;And finally, one that made me hopeful for the future of web design:&lt;/p&gt;

&lt;table width=&quot;50%&quot;&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;@&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      @font-face
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</description>
				<pubDate>Fri, 10 Sep 2010 21:11:34 +0000</pubDate>
				<link>https://tripleodeon.com/2010/09/google-instant-37-golden-tickets/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/09/google-instant-37-golden-tickets/</guid>
			</item>
		
			<item>
				<title>Mobile Analytics With Python, Django, ASP.NET, Java, and node.js</title>
        <description>&lt;p&gt;A few weeks ago, the &lt;a href=&quot;http://percentmobile.com&quot;&gt;PercentMobile&lt;/a&gt; team came to me to see if I could help write some new libraries for them. Contemporary web and mobile web sites are written on a vast array of different platforms… and obviously the more that PercentMobile supports, the better.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Something I love about programming is that there are so many languages to choose from – why restrict yourself to learning or becoming an expert at one when the same problems are also being solved in other, sometimes better, ways? Each language or platform has strengths and weaknesses of course. But I believe that understanding the differences – and more often, the similarities – makes one a better programmer.&lt;/p&gt;

&lt;p&gt;So, generous polyglot that I am, I took the challenge, and plunged in.&lt;/p&gt;

&lt;p&gt;(Sign up for the free PercentMobile service to get the libraries described in this post.)&lt;/p&gt;

&lt;h2 id=&quot;python--django&quot;&gt;Python &amp;amp; Django&lt;/h2&gt;

&lt;p&gt;I love &lt;a href=&quot;http://python.org&quot; target=&quot;_blank&quot;&gt;Python&lt;/a&gt; – its readability, its libraries, and its overall philosophies. In a web server environment, Python can be used in a fairly raw way, behind a generic Web Service Gateway Interface (WSGI), but there are also a number of powerful web application frameworks using the language – most notably &lt;a href=&quot;http://djangoproject.com/&quot; target=&quot;_blank&quot;&gt;Django&lt;/a&gt;. PercentMobile want to provide painless Django support, but also to make sure that other Python server environments were not precluded.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;percentmobile.py&lt;/code&gt; is the single file that provides everything you need.&lt;/p&gt;

&lt;p&gt;If you are running code in a WSGI environment, you will have a handle to the WSGI environment. This is normally called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;environ&lt;/code&gt; by convention, and is passed in to your application via your top-level WSGI callable. To make the PercentMobile tracking code work, you need only make one call to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;percentmobile.tracker_cookie_insert&lt;/code&gt; function. It returns two values: the cookie that you’ll need to set in the HTTP response headers, and the HTML that you should insert into your page.&lt;/p&gt;

&lt;p&gt;Say, for example, you had a very simple WSGI app. This responds to requests with an HTTP 200 status code, a single header and some simple HTML:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;def my_app(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type','text/html')]
    start_response(status, response_headers)
    return [&quot;Hello world&quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To add PercentMobile tracking to this code, you need to firstly import the tracker library of course, and then call the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tracker_cookie_insert&lt;/code&gt; function:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;import percentmobile
cookie, insert = percentmobile.tracker_cookie_insert(environ, '1234555')
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(Of course you should replace the final string with your own site ID!)&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cookie&lt;/code&gt; return value is actually a dictionary of the different parts needed to construct its string serialization. This will allow you to splice together multiple cookies, or alter the expiry time, path scope and so on. To convert the dictionary to a string, and to get the Set-Cookie header sent back in the request headers, the following code will suffice:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cookie = &quot;%s=%s; expires=%s; path=%s&quot; % (
    cookie['name'],
    cookie['value'],
    cookie['expires'],
    cookie['path']
)
response_headers = [('Content-type','text/html'), ('Set-Cookie', cookie)]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Finally, you need to make sure the HTML fragment, in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;insert&lt;/code&gt; variable, gets placed in the HTML response:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;return [&quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Hello world %s&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot; % insert]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And that’s a wrap. The whole, PercentMobile-tracked WSGI application looks like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;def my_app(environ, start_response):
    cookie, insert = percentmobile.tracker_cookie_insert(environ, '1234555')
    cookie = &quot;%s=%s; expires=%s; path=%s&quot; % (
        cookie['name'],
        cookie['value'],
        cookie['expires'],
        cookie['path']
    )
    status = '200 OK'
    response_headers = [('Content-type','text/html'), ('Set-Cookie', cookie)]
    start_response(status, response_headers)
    return [&quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Hello world %s&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot; % insert]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Pretty easy, huh? Well, not as easy as tracking an app if you’re using the amazing Django framework! Contained in the same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;percentmobile.py&lt;/code&gt; file is a class that can be used as Django middleware. It uses the same underlying function as the WSGI implementation, but also takes care of the headers and insertion for you.&lt;/p&gt;

&lt;p&gt;Assuming you’ve placed the library file in your Python or Django path, you simply need to add two lines of code in the settings file. Firstly add the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;percentmobile.PercentMobileDjangoMiddleware&lt;/code&gt; class to your list of middleware:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;MIDDLEWARE_CLASSES = (
    ...
    'percentmobile.PercentMobileDjangoMiddleware'
)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And secondly, add your PercentMobile site ID to the settings file too:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PERCENTMOBILE_SITE_ID = '1234555'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Um… that’s it. The middleware will intercept the request, figure out the cookie that will need to be sent in the response, create the insertion code, and place it just before &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; in the response. You’re golden. I love Django.&lt;/p&gt;

&lt;h2 id=&quot;aspnet-c--vbnet&quot;&gt;ASP.NET: C# &amp;amp; VB.NET&lt;/h2&gt;

&lt;p&gt;Switching over to another world altogether, let’s take a quick look at the &lt;a href=&quot;http://asp.net/&quot; target=&quot;_blank&quot;&gt;ASP.NET&lt;/a&gt; implementation of the tracking code. One of the great things about .NET is that you can choose between all sorts of different languages to write your applications and pages in. I decided to write the tracking library in C#, but you can use it declaratively in your page code, or programmatically from C#, VB.NET, or any other supported language.&lt;/p&gt;

&lt;p&gt;The library is implemented as a User Control – that is, as a .ascx file. You need to download and add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PercentMobile.ascx&lt;/code&gt; to your web application project.&lt;/p&gt;

&lt;p&gt;To embed the tracking logic into a page (or probably preferably, a master page), you simply register the user control as residing in that file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;%@ Register TagPrefix=&quot;pm&quot; TagName=&quot;Tracker&quot; Src=&quot;~/PercentMobile.ascx&quot; %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And then embed the control straight into the .aspx file contents, wherever you want it to be:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;pm:Tracker runat=&quot;server&quot; SiteId=&quot;1234555&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So a simple, tracked .aspx file might look something like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; %&amp;gt;
&amp;lt;%@ Register TagPrefix=&quot;pm&quot; TagName=&quot;Tracker&quot; Src=&quot;~/PercentMobile.ascx&quot; %&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Hello World&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;form id=&quot;form1&quot; runat=&quot;server&quot;&amp;gt;
            &amp;lt;div&amp;gt;Hello World&amp;lt;/div&amp;gt;
            &amp;lt;pm:Tracker runat=&quot;server&quot; SiteId=&quot;1234555&quot; /&amp;gt;
        &amp;lt;/form&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To be honest, this is so simple that I would expect most people to use the control declaratively. But if, for some reason, the control needs to be inserted programmatically, that’s pretty easy too. You need to use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Reference&lt;/code&gt; directive, instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Register&lt;/code&gt;, at the top of the file, but otherwise it’s not much harder. Here, we’re using VB.NET to programmatically achieve exactly the same result as above:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;%@ Page Language=&quot;VB&quot; AutoEventWireup=&quot;true&quot; %&amp;gt;&amp;lt;%@ Reference Control=&quot;~/PercentMobile.ascx&quot; %&amp;gt;

&amp;lt;script runat=&quot;server&quot;&amp;gt;
    Private tracker As PercentMobile.Tracker
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        tracker = CType(LoadControl(&quot;~/PercentMobile.ascx&quot;), PercentMobile.Tracker)
        tracker.siteId = &quot;1234555&quot;
        form1.Controls.Add(tracker)
    End Sub
&amp;lt;/script&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Hello World&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;form id=&quot;form1&quot; runat=&quot;server&quot;&amp;gt;
            &amp;lt;div&amp;gt;Hello World&amp;lt;/div&amp;gt;
        &amp;lt;/form&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(It should be fairly straightforward to see how to do this in other .NET languages – PercentMobile includes some examples in their install instructions.)&lt;/p&gt;

&lt;h2 id=&quot;java&quot;&gt;Java&lt;/h2&gt;

&lt;p&gt;Onwards. Let’s take a look at the tracking code for &lt;a href=&quot;http://java.com&quot; target=&quot;_blank&quot;&gt;Java&lt;/a&gt;. There are numerous ways in which Java can be used for web or application server environments. To keep things simple, I decided that supporting JSP was more or less the most familiar and reusable approach.&lt;/p&gt;

&lt;p&gt;JSP doesn’t enjoy the rich page event model that I was able to use in ASP.NET to intercept headers, write cookies, and insert HTML, all with one include. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;jsp:include&amp;gt;&lt;/code&gt; is OK for adding the HTML snippets, but wouldn’t let me access the HTTP headers. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;jsp:forward&amp;gt;&lt;/code&gt; does, but would only work if you weren’t planning to emit any HTML of your own after the tracking code – something of a radical assumption.&lt;/p&gt;

&lt;p&gt;So I settled for an approach where an include &lt;em&gt;directive&lt;/em&gt; creates an instance of an inner &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PercentMobile&lt;/code&gt; class defined within the JSP class. To cut a long story short, this means you merely add a reference to the library file at the top of the JSP file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;%@ include file=&quot;percentmobile.jsp&quot; %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And then call the track method on that instance, somewhere within the page:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;%percentMobile.track(&quot;1234555&quot;);%&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The included JSP file takes care of instantiating the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;percentMobile&lt;/code&gt; object and giving it references to the request and response stream. This means it can read and write cookies, and later emit HTML. Your tracked Hello World in Java then? It’s as simple as this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;%@ include file=&quot;percentmobile.jsp&quot; %&amp;gt;
 &amp;lt;html&amp;gt;
  &amp;lt;body&amp;gt;
    Hello World
    &amp;lt;%percentMobile.track(&quot;1234555&quot;);%&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;nodejs&quot;&gt;node.js&lt;/h2&gt;

&lt;p&gt;OK, OK. Python, ASP.NET, Java. No big deal, right? That’s all so 2003 or so, right?&lt;/p&gt;

&lt;p&gt;Well, there’s an alternative future for web server technologies. It’s one that’s blazingly fast, lightweight, event-driven, and… where you write your server logic in Javascript.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://nodejs.org/&quot; target=&quot;_blank&quot;&gt;node.js&lt;/a&gt; is one of the most exciting things I’ve seen for a long time, and I know I’m not alone. Fresh, fashionable, and somewhat unproven, admittedly, it’s had a lot of gushing coverage. But since it turns the web server model (almost literally) inside out, I do believe there’s something important going on.&lt;/p&gt;

&lt;p&gt;Would it be possible to write a web app with node.js and still have it tracked by PercentMobile? My challenge.&lt;/p&gt;

&lt;p&gt;I decided to rely on &lt;a href=&quot;http://howtonode.org/connect-it&quot; target=&quot;_blank&quot;&gt;Connect&lt;/a&gt;, a middleware framework for node.js, which, if you are writing web applications, provides a whole host of other helpful web logic. Using Connect to create a simple node.js app is extremely easy:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;var Connect = require('connect');
Connect.createServer(
  function (req, res, next) {
    res.simpleBody(200,
      &quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Hello World&quot; +
      &quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot;,
      {
        &quot;Content-Type&quot;: &quot;text/html&quot;
      }
    );
  }
).listen(88);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To add PercentMobile tracking to this application firstly requires you to pull in the PercentMobile module:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;var PercentMobile = require('./percentmobile');
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(Where the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;percentmobile.js&lt;/code&gt; file has been placed in your node.js environment or in the common modules location.)&lt;/p&gt;

&lt;p&gt;The module needs to be initialized as a piece of Connect middleware in the createServer function:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PercentMobile.init('1234555')
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;There are then two module functions, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cookie&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;html&lt;/code&gt;, which both take a reference to the response object, and which return the cookie string and HTML to insert, respectively. These can be used in Connect’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;simpleBody&lt;/code&gt; function, for example, meaning that our tracked application is as simple as this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;var Connect = require('connect');
var PercentMobile = require('./percentmobile');
Connect.createServer(
  PercentMobile.init('1234555'),
  function (req, res, next) {
    res.simpleBody(200,
      &quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Hello World&quot; +
        PercentMobile.html(res) +
      &quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot;,
      {
        &quot;Content-Type&quot;: &quot;text/html&quot;,
        &quot;Set-Cookie&quot;: PercentMobile.cookie(res)
      }
    );
  }
).listen(88);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;thats-a-wrap&quot;&gt;That’s a wrap&lt;/h2&gt;

&lt;p&gt;So that’s it. A whistle-stop tour of the new languages and frameworks supported by PercentMobile. I’d love to hear your feedback on how easy (or hard!) these new APIs are to use.&lt;/p&gt;

&lt;p&gt;And, oh… who will be the first to build a mobile web app on node.js? 🙂&lt;/p&gt;
</description>
				<pubDate>Mon, 30 Aug 2010 12:12:30 +0000</pubDate>
				<link>https://tripleodeon.com/2010/08/mobile-analytics-with-python-django-asp-net-java-and-node-js/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/08/mobile-analytics-with-python-django-asp-net-java-and-node-js/</guid>
			</item>
		
			<item>
				<title>WhitherApps</title>
        <description>&lt;p&gt;Why spend your life recompiling native client apps when you have HTML5 and the mighty mobile web at your disposal? &lt;a href=&quot;http://whitherapps.com&quot;&gt;WhitherApps&lt;/a&gt; sets out to debunk some contemporary mobile myths.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;WhitherApps is a bandwagon-busting experiment. I believe there are far too many native client apps which could have been far better written as mobile web apps. What I’m trying to do with the project is take a few particularly obvious examples, apply a little reverse-engineering, and rewrite them, warts and all, with web technologies.&lt;/p&gt;

&lt;p&gt;I’m focussing on native client apps that are free to download. These wouldn’t have suffered commercially had they been written this way in the first place. Obviously, I’ll also focus on feasible genres of apps. No 3D games or background apps, for example. To start with, informational media apps (such as newspapers and broadcasters) will be in the spotlight.&lt;/p&gt;

&lt;p&gt;But otherwise, I may not need to pull too many punches. Offline access? Through the wonders of HTML5, that should be OK. Native device API access? Well, BONDI and proprietary libraries permitting, I’ll have a go – and there’s always PhoneGap too.&lt;/p&gt;

&lt;p&gt;Each post on the site will be a walkthrough (or part of a walkhrough) of the process. As I get my hands dirty, from the protocol-sniffing to the pixel-jiggling, you can follow the steps I took.&lt;/p&gt;

&lt;p&gt;Stay tuned and wish me luck!&lt;/p&gt;
</description>
				<pubDate>Sun, 08 Aug 2010 08:40:20 +0000</pubDate>
				<link>https://tripleodeon.com/2010/08/whitherapps/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/08/whitherapps/</guid>
			</item>
		
			<item>
				<title>Mobile Trends 2020 &amp;#8211; a brief review</title>
        <description>&lt;p&gt;A curious affliction of the mobile blogosphere is its propensity for annual predictions about what will happen next in our industry.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;It’s a badly-kept secret that this frustrates me. Mostly because:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A year really isn’t a very long time, whatever the cliché tells you… very little surprising happens in 12 months an industry dominated mostly by large companies and continuous market dynamics.&lt;/li&gt;
  &lt;li&gt;It doesn’t take a lot of research into any topic to be able to make a handful of sensible predictions about it. (Flat rate tariffs more common? Really? I should think Antarctic will thaw quicker than last year too, and there will be progress in HIV research.)&lt;/li&gt;
  &lt;li&gt;They’re rarely actionable. I’m unlikely to buy shares on such vague tips, and I can’t wager against their accuracy at my local bookmakers. Do these lists exist to bolster the reader’s wealth or knowledge? Or perhaps demonstrate how perceptive the writers think they are?&lt;/li&gt;
  &lt;li&gt;Wouldn’t it be better to spend the same effort actually helping to make the future come true in the first place? 🙂&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But this week saw the publication of a collection of 40 or so pundits’ predictions &lt;a href=&quot;http://www.m-trends.org/2010/01/mobile-trends-2020.html&quot;&gt;mobile trends for the coming decade&lt;/a&gt;. Should I dislike this 400 times more? Well, fortunately no! Ten years gives more room for the predictions to breathe, and the collective nature of the project should mean broader trends can be spotted.&lt;/p&gt;

&lt;p&gt;The document is curated by Rudy De Waele, for whom I have lot of respect. He’s got the enthusiasm and boundless energy that fits well with the promise of mobile. It must have taken a fair bit of effort to pull this project together: a set of slides containing the predictions from a large number of contributors. The document has already been very successful and well circulated. And there are some very clever people involved.&lt;/p&gt;

&lt;p&gt;In choosing the contributors, Rudy describes them as his personal ‘mobile heroes’. Fair enough – but how has that affected the overall roundedness of the project? This, to me, is potentially a worry.&lt;/p&gt;

&lt;p&gt;For example, it might have been interesting to have heard from at least one handset manufacturer. This will be a decade of bitter rivalry in that market between the old telecoms guard and already-successful new entrants. Exciting times: and I would love to know what the contenders foresee? And only 3 network operators? However conservative their ambitions, the networks’ plans and predictions are quite likely to shape mobile’s decade somehow.&lt;/p&gt;

&lt;p&gt;Facebook is a good scalp – although not as revealing as I’d hoped – and so are the financier contributions. Most of the remainder of the contributions are from small startups, bloggers, authors, entrepreneurs, ‘strategic thinkers’ and ‘keynote speakers’.&lt;/p&gt;

&lt;p&gt;Now, I have nothing against such individuals (since I know many of them, they’re very smart, and that’s how I’d probably describe myself too!). But having so many casts a slight pallor over the project: the patina of the developed world’s well-trodden mobile conference circuit. Punditry that’s been trotted out for years: affluent, Western, urban- and professional-centric reflections of how we’d like the industry to fulfill our own personal use-cases.&lt;/p&gt;

&lt;p&gt;This is a shame. I wanted this document to surprise me more. The entire world – economically, politically, climatically – will change a lot in ten years. I would expect the mobile medium will flex to adapt to those seminal changes far more interestingly than it does to some tactical contemporary challenges.&lt;/p&gt;

&lt;p&gt;In the same vein, a missed opportunity may have been to look further abroad. True, there are valid mentions of mobile’s cultural impact in Africa, but try keyword-searching the document for ‘China’, ‘India’, ‘Brazil’, ‘Russia’ (or even ‘Japan’!) and you’ll be out of luck. Who thinks nothing of interest will happen in those places in the next decade? (Now that &lt;em&gt;would be&lt;/em&gt; a surprise).&lt;/p&gt;

&lt;p&gt;This all made the predictions, a little, erm, predictable. Yes, yes, I think we all know battery technology will improve, but who was brave enough to make predictions like this?:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;most mobile web sites in 2020 will be in Chinese&lt;/li&gt;
  &lt;li&gt;at least one major European operator will have been bought by an Indian conglomerate&lt;/li&gt;
  &lt;li&gt;the Rio De Janeiro Olympics’ web site will have more mobile visitors than non-mobile&lt;/li&gt;
  &lt;li&gt;Google’s home page will default to being mobile in all countries except the US&lt;/li&gt;
  &lt;li&gt;roaming agreements will be used as collateral in carbon trading markets as the mobile-wielding populations of low-lying countries are resettled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Crazy? Sure. But these are just off the bat. I think the aims of such a project should be to inspire, question and provoke. Don’t give me some short-term platitudes about app stores and widgets. At least not when history is on the move like it will be in this decade.&lt;/p&gt;

&lt;p&gt;OK, so perhaps I’m protesting too much. Despite these flaws, there are some real gems to be found in this document. “Digital syllogomania” is a brilliant piece of insight. A few touch on the very likely “always-on backlash”, and the promise of mobile-device-as-sensor is tantalizing. I also applaud those predictions that wonder whether mobile technology can change basic human behavior. I’m doubtful, but it’s a good question. As &lt;a href=&quot;http://tomhume.org/&quot;&gt;Tom Hume&lt;/a&gt; asks: “What happens to conversation when it’s all recorded, or any fact is a 5-second voice-search away from being checked?”&lt;/p&gt;

&lt;p&gt;Anyway, it’s a few days old now, but do go &lt;a href=&quot;http://www.m-trends.org/2010/01/mobile-trends-2020.html&quot;&gt;read the document here&lt;/a&gt;. And more importantly, make up some of your own. Even more importantly, go and try make them happen. “It’s good to talk”, but the mobile world in the next decade probably belongs to those who make. And those who make the predictions come true.&lt;/p&gt;
</description>
				<pubDate>Sun, 10 Jan 2010 04:05:26 +0000</pubDate>
				<link>https://tripleodeon.com/2010/01/mobile-trends-2020-a-brief-review/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2010/01/mobile-trends-2020-a-brief-review/</guid>
			</item>
		
			<item>
				<title>The WordPress Mobile Pack is back! And here&amp;#8217;s how.</title>
        <description>&lt;p&gt;Just a quick post to confirm that the &lt;a href=&quot;http://wordpress.org/extend/plugins/wordpress-mobile-pack/&quot;&gt;WordPress Mobile Pack&lt;/a&gt; plugin is back online at wordpress.org.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Most WordPress plugins, if ‘GPL-compatible’, are hosted on wordpress.org – it provides an easy way for people to view and upgrade them. The increasingly popular Mobile Pack is no exception, and we’ve been happily listed there for over 6 months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what do you do when it suddenly disappears?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;About 3 days ago, that’s exactly what happened. I’m the administrator of the plugin and could see it when I logged in. But suddenly none of my collaborators – nor the general public! – could see or download the plugin.&lt;/p&gt;

&lt;p&gt;Our sole channel for software distribution had mysteriously dropped into a black hole – without a word of notification from WordPress themselves.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Assuming it could only therefore be a bug with the wordpress.org web site, I filed a number of support tickets. No response.&lt;/li&gt;
  &lt;li&gt;Assuming it could only therefore be a permissions or licence issue, I raised a number of forum threads on the site (as, kindly, did Dennis Bournique, over at &lt;a href=&quot;http://wapreview.com/&quot;&gt;WAP Review&lt;/a&gt;). No response.&lt;/li&gt;
  &lt;li&gt;Assuming I was somehow falling between the cracks, I even emailed &lt;a href=&quot;http://ma.tt&quot;&gt;Matt Mullenweg&lt;/a&gt;. &lt;span style=&quot;text-decoration: line-through;&quot;&gt;Less surprisingly, no response&lt;/span&gt;. UPDATE: I received an apology shortly after this post.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hmm. All rather unsatisfactory.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well, this morning, a breakthrough. My WPMP partner in crime, &lt;a href=&quot;http://blog.trasatti.it/&quot;&gt;Andrea Trasatti&lt;/a&gt; thought of joining the &lt;a href=&quot;https://irclogs.wordpress.org/chanlog.php?channel=wordpress&amp;amp;day=2009-12-18&amp;amp;sort=asc#m336865&quot;&gt;WordPress IRC channel&lt;/a&gt;. (Obviously he’s a bit more old school than me). But finally found someone who would be prepared to answer the puzzle.&lt;/p&gt;

&lt;p&gt;At this point, I need to point out there there are (true!) other mobile plugins out there. One particularly popular one has been &lt;a href=&quot;http://www.andymoore.info/&quot;&gt;Andy Moore&lt;/a&gt;‘s. He hadn’t hosted his on wordpress.org due, I guess, to his choice of license, and his – disclosed – use of automatic ads in the resulting pages, which WordPress does not permit.&lt;/p&gt;

&lt;p&gt;For whatever reason, Andy recently closed down his plugin’s page, and had kindly redirected it to ours. This probably accounts for our &lt;a href=&quot;http://wordpress.org/extend/plugins/wordpress-mobile-pack/stats/&quot;&gt;nice increase in traffic&lt;/a&gt; in mid-November. Thanks Andy!&lt;/p&gt;

&lt;p&gt;However, one of Andy’s previous plugin downloaders apparently complained about an &lt;a href=&quot;http://romanticrobot.net/moreimages/Picture19.png&quot;&gt;error message&lt;/a&gt; they had received. The WordPress administrators investigated by visiting Andy’s site, and of course got redirected to our Mobile Pack page. Thinking our plugin was at fault, they then disabled &lt;em&gt;our&lt;/em&gt; plugin for violating the no-ads rule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Oh, and no-one thought to drop me an email to tell me.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But Andrea’s investigations and protestations prompted us to get re-approved, and we’re back!&lt;/p&gt;

&lt;p&gt;(In the process of investigating this, it also turns out that when WordPress says ‘GPL-compatible’ and points you to a list of licenses, that doesn’t mean much at all. You also have to work out that they actually mean ‘GPL2-compatible’, and not ‘GPL3-compatible’, as our more permissive Apache license is. So I guess we’ll have to change our license too – which is a shame.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I don’t think WordPress covered themselves with glory here.&lt;/strong&gt; In the interests of constructive criticism, I would suggest the company should:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Inform a plugin owner whenever there is a complaint raised against it. I would have been able to point out the complaint was aimed at a different piece of software.&lt;/li&gt;
  &lt;li&gt;Inform a plugin owner when – or better, before – disabling a plugin from the listing. I could have had a grace period to have investigated any issues, rather than hear it first as complaints from users.&lt;/li&gt;
  &lt;li&gt;Respond to ‘site bug’ tickets raised on the site.&lt;/li&gt;
  &lt;li&gt;Make the licensing requirements for plugins more clear. The phrase ‘GPL-compatible’ &lt;a href=&quot;http://wordpress.org/extend/plugins/about/&quot;&gt;here&lt;/a&gt;, (and its link), is certainly not precise enough.&lt;/li&gt;
  &lt;li&gt;Remember that plugin authors work hard to support your business of running the most popular blog platform in the world. Those individuals’ reputations, to a fair extent, rest on your responsible syndication of that code, and they get the grief when you pull the plug.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyway, thanks guys (and &lt;a href=&quot;http://romanticrobot.net/&quot;&gt;Mark&lt;/a&gt; in particular) for putting it back. And special thanks to Andrea, who now overtakes me in the chocolate-for-favours race.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now… back to the roadmap of Mobile Pack coolness. Stay tuned.&lt;/strong&gt;&lt;/p&gt;
</description>
				<pubDate>Sat, 19 Dec 2009 00:43:09 +0000</pubDate>
				<link>https://tripleodeon.com/2009/12/the-wordpress-mobile-pack-is-back-and-heres-how/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/12/the-wordpress-mobile-pack-is-back-and-heres-how/</guid>
			</item>
		
			<item>
				<title>WordPress Mobile Pack v1.1</title>
        <description>&lt;p&gt;The dotMobi WordPress Mobile Pack is a complete toolkit to help mobilize your WordPress site and blog.&lt;/p&gt;

&lt;p&gt;We just launched v1.1, compatible with the latest version of WordPress. &lt;a href=&quot;http://wordpress.org/extend/plugins/wordpress-mobile-pack/&quot;&gt;Download it&lt;/a&gt;, read &lt;a href=&quot;http://www.assembla.com/spaces/wordpress-mobile-pack/milestones/95962&quot;&gt;the changelog&lt;/a&gt;, read about the &lt;a href=&quot;http://mobiforge.com/running/story/the-dotmobi-wordpress-mobile-pack&quot;&gt;features in full&lt;/a&gt;, or even join &lt;a href=&quot;http://www.assembla.com/spaces/wordpress-mobile-pack/team&quot;&gt;the team&lt;/a&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;The plugin includes a mobile switcher to select themes based on the type of user that is visiting the site, a selection of mobile themes, extra widgets, device adaptation and a mobile administration panel to allow users to edit the site or write new posts when out and about.&lt;/p&gt;

&lt;p&gt;Features include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://mobiforge.com/running/story/the-dotmobi-wordpress-mobile-pack#p2.1&quot;&gt;Mobile switcher&lt;/a&gt; to detect mobile visitors and provide an appropriate experience&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mobiforge.com/running/story/the-dotmobi-wordpress-mobile-pack#p2.2&quot;&gt;Base mobile theme&lt;/a&gt; for quick-and-easy XHTML-MP compliance&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mobiforge.com/running/story/the-dotmobi-wordpress-mobile-pack#p2.3&quot;&gt;Extended mobile themes&lt;/a&gt; so you can unleash your mobile creativity&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mobiforge.com/running/story/the-dotmobi-wordpress-mobile-pack#p2.4&quot;&gt;Transcoding and device adaptation&lt;/a&gt; to optimise the mobile experience&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mobiforge.com/running/story/the-dotmobi-wordpress-mobile-pack#p2.5&quot;&gt;DeviceAtlas integration&lt;/a&gt; for world-class adaptation&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mobiforge.com/running/story/the-dotmobi-wordpress-mobile-pack#p2.6&quot;&gt;Mobile admin panel&lt;/a&gt; for when posts can’t wait&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mobiforge.com/running/story/the-dotmobi-wordpress-mobile-pack#p2.7&quot;&gt;Mobile ad widget&lt;/a&gt; to make you some money&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mobiforge.com/running/story/the-dotmobi-wordpress-mobile-pack#p2.8&quot;&gt;Barcode widget&lt;/a&gt; to help users bookmark your blog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have a lot of fun writing this plugin and there’s a bunch of cool ideas we have for the future. Check out the &lt;a href=&quot;http://www.assembla.com/spaces/wordpress-mobile-pack&quot;&gt;Assembla project&lt;/a&gt; to see the work as it happens – and maybe toss us some new ideas too.&lt;/p&gt;

&lt;p&gt;It’s always a work in progress, but thousands of users seem happy enough so far. See what you think…&lt;/p&gt;
</description>
				<pubDate>Wed, 15 Jul 2009 10:14:09 +0000</pubDate>
				<link>https://tripleodeon.com/2009/07/wordpress-mobile-pack-v11/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/07/wordpress-mobile-pack-v11/</guid>
			</item>
		
			<item>
				<title>Simple &amp;#8216;on-server&amp;#8217; mobile AJAX in Django</title>
        <description>&lt;p&gt;–or–&lt;/p&gt;

&lt;p&gt;“How your mobile site may not be much more complicated than building one with a data API or AJAX”&lt;/p&gt;

&lt;p&gt;I am working on a project called ‘IvyRoot’ that is predominantly mobile and which is going to make me fabulously rich and famous.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;OK, OK. It’s predominantly mobile, at least. It’s all in Django.&lt;/p&gt;

&lt;p&gt;There’s a ‘desktop’ web site to go with it, and this contains panels within pages. Some of these panels might take a few moments to process and so I use XHR to call back to get them once the main page has loaded, displaying a pretty spinning icon in the meantime.&lt;/p&gt;

&lt;p&gt;I also use XHR to populate in-page tables which might have many rows – so that pagination and sorting are fast without having to load the whole page again.&lt;/p&gt;

&lt;p&gt;I also want to expose a number of data APIs (providing XML, JSON, basic HTML and the like) so that people can build 3rd party clients, their own consuming sites, and widgets.&lt;/p&gt;

&lt;p&gt;Finally, I want to provide a mobile web version of the site. I’ll probably do some sort of device detection to refine the behaviour, but I should assume that plenty of browsers will not be able to do the XHR bit, and should have the page (containing all the panels) in one go – admittedly after a slightly longer wait.&lt;/p&gt;

&lt;p&gt;Well, it occurs to me that these requirements can all be solved at the same time. Switching templates based on URL (or other HttpRequest clues) is pretty easy, so one thing I could do is have a filename extension convention for all my URLs. Imagine a ‘things’ view that lists things.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;http://ivyroot.com/things&lt;/strong&gt; – this is the human-consumable page: the view surrounded by menus, logos, graphics and the like. Knows how to switch outer template, &lt;a href=&quot;http://mobiforge.com/designing/story/a-very-modern-mobile-switching-algorithm-part-i&quot;&gt;based on various things&lt;/a&gt;, between desktop and mobile.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;http://ivyroot.com/things.html&lt;/strong&gt; – this is the table at the heart of the page, perhaps using unstyled markup containing the list of things itself.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;http://ivyroot.com/things.xml&lt;/strong&gt;, &lt;strong&gt;http://ivyroot.com/things.json&lt;/strong&gt; etc – data APIs that list things in various serializations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So perhaps we can set up URL routes like this:&lt;/p&gt;

&lt;pre&gt;...
(r'^things$', things),
(r'^things.(?P&amp;lt;mode&amp;gt;[a-z0-9]+)$', things),
...&lt;/pre&gt;

&lt;p&gt;And have a view that looks something like this:&lt;/p&gt;

&lt;pre&gt;def things(request, mode=''):
    if not mode:
        mode = desktop_or_mobile()
    template = &quot;things.%s&quot; % mode
    ...&lt;/pre&gt;

&lt;p&gt;(Or, I suppose we could pass the mode into the template via the context and have some sort of a switch statement in the template itself. It might be good to pass it in, anyway, in case there is any further refinement required within each template.)&lt;/p&gt;

&lt;p&gt;Anyway, let’s also assume that the things list is very long and takes a while to generate. For the desktop users, we might want to either load the table as HTML asynchronously using XHR, or paged into a jQuery grid control. For these two approaches, I can call back to /things.html or /things.json respectively (and do a little extra plumbing to make sure the JSON is in the right format for the grid control to consume).&lt;/p&gt;

&lt;p&gt;But what of mobile? Well, for many devices, I can’t expect any XHR activity to be supported, so we need to insert the table HTML into the body of the things.mobile page before it departs for the client – and we may need to pre-page it too (if it’s long). But the good news is that, if I made it simple enough, the HTML generated by things.html might be good enough for either type of browser.&lt;/p&gt;

&lt;p&gt;(And if not, I could easily do a little adaptation on &lt;em&gt;that&lt;/em&gt; view too – perhaps turn my table into a list.)&lt;/p&gt;

&lt;p&gt;So what I would like to have a is a way of embedding the output of one view (or even URL) into another, whilst the response is still being put together on the server. Try as I could, there didn’t seem to be anything in Django to do this.&lt;/p&gt;

&lt;p&gt;Enter my first &lt;a href=&quot;http://www.djangosnippets.org/snippets/1568/&quot;&gt;DjangoSnippet&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;This basically allows me to put a template tag into the mobile template that pulls the output from one of the other views (identified by view name, with arguments; or a verbatim URL which would be the same as the one used in the desktop’s XHR request – nifty!)&lt;/p&gt;

&lt;p&gt;It also makes sure that the context for &lt;em&gt;that&lt;/em&gt; view is sandboxed with what &lt;em&gt;it&lt;/em&gt; needs to render itself – so that I don’t have to worry about getting the context ready in the ‘outer’ view. That’s not necessary in our simple example above – but it might be useful later on if I am dynamically choosing which panels to place on a page, and I want them to gather together their own context prior to template rendering.&lt;/p&gt;

&lt;p&gt;Now, I’ll need to be careful to make sure that any interaction elements within the table – say, some actions available on each item in the list, or a paginator – behave suitably for their location. But this may be as simple as toggling between further XHR requests (for desktop) and simple anchor links (for mobile). Forms-in-panels will be harder but similar.&lt;/p&gt;

&lt;p&gt;So… there we are, a glimpse at the inner workings of a mystery application that’s many weeks away from seeing the light of day.&lt;/p&gt;

&lt;p&gt;But hopefully I’ve raised a few thoughts about how you can treat the mobile version of your site as being a cousin of the data APIs that you might have written anyway. And also how you might be able to sneakily bring some of the funky XHR – that you wanted to impress your friends with on the desktop – up into the server to keep your mobile pals happy too.&lt;/p&gt;
</description>
				<pubDate>Wed, 17 Jun 2009 11:30:52 +0000</pubDate>
				<link>https://tripleodeon.com/2009/06/simple-on-server-mobile-ajax-in-django/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/06/simple-on-server-mobile-ajax-in-django/</guid>
			</item>
		
			<item>
				<title>Maps &amp;#038; mobile</title>
        <description>&lt;p&gt;I’m somehow dissatisfied with mobile cartography.&lt;/p&gt;

&lt;p&gt;On the &lt;a href=&quot;http://hwof.com&quot;&gt;Hollywood Walk of Fame&lt;/a&gt; site, we’re currently using Google Maps. When I first saw Google Maps on the web, I was thrilled with the cartography. The craft of good map-making started to shine through after a decade of turgid &lt;a href=&quot;http://www.mapquest.com/&quot;&gt;MapQuest&lt;/a&gt; vectors.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;(In a previous life, &lt;a href=&quot;http://www.google.com/search?q=james+pearce+world+orienteering&quot;&gt;I lived for maps&lt;/a&gt;… so I take this very seriously!)&lt;/p&gt;

&lt;p&gt;And on HWOF, sure, it does what it should. The now-familiar style has a comforting effect for users I suppose.&lt;/p&gt;

&lt;p&gt;But, both with and without the ‘mobile’ option set in the API (shown on the right – worse I think!), and &lt;em&gt;despite&lt;/em&gt; the huge watermark on the limited real-estate, I’m personally tiring of it.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-medium wp-image-307&quot; src=&quot;/files/2009/04/desk.gif&quot; alt=&quot;&quot; width=&quot;228&quot; height=&quot;228&quot; /&gt;vs &lt;img class=&quot;alignnone size-medium wp-image-308&quot; src=&quot;/files/2009/04/mobile.gif&quot; alt=&quot;&quot; width=&quot;228&quot; height=&quot;228&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Maybe it’s the burnish of familiarity. I’ve seen this style so much that it holds no allure or beauty any more. Maybe because it appeals more to drivers than pedestrians. Maybe because of the uninspiring Arial font. Or maybe just because I’d like to be more in control? All of the above.&lt;/p&gt;

&lt;p&gt;Anyway, I’ve started to look at alternatives. On one hand we’re looking at some commercial possibilities with other map (and location data) providers.&lt;/p&gt;

&lt;p&gt;But on the hand, I’ve been sucked into the thought of using &lt;a href=&quot;http://cloudmade.com/&quot;&gt;CloudMade&lt;/a&gt;. Built on top of the excellent &lt;a href=&quot;http://www.openstreetmap.org/&quot;&gt;OpenStreetMap&lt;/a&gt; project, it allows everyone to become a cartographer – or at least, to apply new themes and styles to the map structures from OSM.&lt;/p&gt;

&lt;p&gt;A great example? Check out &lt;a href=&quot;http://magicalnihilism.wordpress.com/2009/04/06/my-first-cloudmade-map-style-lynchian_mid&quot;&gt;Matt Jones’&lt;/a&gt; lovely map:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3629/3418578216_abb4b09b7b.jpg&quot; border=&quot;0&quot; width=&quot;500&quot; height=&quot;317&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Which, interestingly, immediately made me think of John Speed:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.tinysrc.mobi/500/327/http://faculty.oxy.edu/horowitz/home/johnspeed/js_images/london.jpg&quot; width=&quot;500&quot; height=&quot;327&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Nothing new in the world, eh?&lt;/p&gt;

&lt;p&gt;Anyway… this is now interesting. I’m no graphic designer, but I’ve done my fair share of &lt;a href=&quot;http://www.chig.org.uk/Club_Mapped.htm&quot;&gt;map-making&lt;/a&gt;. I do know how to make important features rise to the foreground. And make irrelevant aspects fade to the back. Serve specific purpose. A map is not just a dry record of geographic fact: it should be created entirely with the context of the user in mind.&lt;/p&gt;

&lt;p&gt;Hey! Just like mobile web applications.&lt;/p&gt;

&lt;p&gt;So I am on a crusade to in find the perfect mobile map. A cartographic style that jumps out of a handheld screen. A visual vocabulary that caress a mobile user’s spatial awareness. Maps that blend seamlessly into the device’s user interface, rather than merely rectangular crashups. A panache that brings vectors to life. That crosses the boundary into art.&lt;/p&gt;

&lt;p&gt;And that can do so, effortlessly, in 176 pixels or less.&lt;/p&gt;

&lt;p&gt;The world is full of brilliant maps of many kinds. But do any of them cut it in the mobile medium? Is that medium so different that we have to start again with some of our cartographic assumptions? Will I ever be satisfied?&lt;/p&gt;

&lt;p&gt;Well, I don’t know yet. But I do know that I’m going to have a lot of fun fiddling with CloudMade.&lt;/p&gt;

&lt;p&gt;What’s your favourite mobile map, cartographic style or service? And why?&lt;/p&gt;
</description>
				<pubDate>Tue, 07 Apr 2009 17:29:44 +0000</pubDate>
				<link>https://tripleodeon.com/2009/04/maps-mobile/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/04/maps-mobile/</guid>
			</item>
		
			<item>
				<title>New blog design &amp;#38; apologies</title>
        <description>&lt;p&gt;Welcome to my new blog theme. It includes a pseudo-portfolio for my various mobile activities in 2009.&lt;/p&gt;

&lt;p&gt;I had to generate some new resumé-style posts and they probably all showed up in your feeds. Sorry.&lt;/p&gt;

&lt;p&gt;If you’re on the new site, I hope you like it.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;If you’re reading this on RSS, maybe it appeared above.&lt;/p&gt;

&lt;p&gt;Well, now we’re back on track.&lt;/p&gt;

&lt;p&gt;The site now serves as much as a business card as it does a blog… but I will try to put the occasional post up to remind you that I’m still alive. Well, outside of &lt;a href=&quot;http://twitter.com/jamespearce&quot;&gt;Twitter&lt;/a&gt; and &lt;a href=&quot;http://jajajeev.com&quot;&gt;JaJaJeEv&lt;/a&gt; anyway.&lt;/p&gt;

&lt;p&gt;By the way, I’m quite please with the favicon.&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Mar 2009 23:05:02 +0000</pubDate>
				<link>https://tripleodeon.com/2009/03/new-blog-design-and-apologies/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/03/new-blog-design-and-apologies/</guid>
			</item>
		
			<item>
				<title>Mobile &amp;#38; Web Sites</title>
        <description>&lt;p&gt;I help run the Hollywood Walk of Fame web sites for desktop &amp;amp; mobile: &lt;a href=&quot;http://hwof.com&quot;&gt;HWOF.com&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://hwof.mobi&quot;&gt;HWOF.mobi&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I run &lt;a href=&quot;http://metajam.mobi&quot;&gt;metajam.mobi&lt;/a&gt;. With 14m page-views per month, it’s a surprisingly popular mobile web site.&lt;/p&gt;

&lt;p&gt;Also launching sometime this year: vumi.mobi…&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Mar 2009 22:02:21 +0000</pubDate>
				<link>https://tripleodeon.com/2009/03/mobile-web-sites/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/03/mobile-web-sites/</guid>
			</item>
		
			<item>
				<title>Developer Tools</title>
        <description>&lt;p&gt;I co-wrote dotMobi’s &lt;a href=&quot;http://deviceatlas.com&quot;&gt;DeviceAtlas&lt;/a&gt; with &lt;a href=&quot;http://blog.trasatti.it/&quot;&gt;Andrea Trasatti&lt;/a&gt;, and created the interactive &lt;a href=&quot;http://deviceatlas.com/explorer&quot;&gt;Data Explorer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I led the &lt;a href=&quot;http://ready.mobi&quot;&gt;ready.mobi&lt;/a&gt; team, and have a mobile WordPress plugin ready for release soon. I just launched an &lt;a href=&quot;http://tinysrc.mobi&quot;&gt;image resizing service&lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Mar 2009 21:39:42 +0000</pubDate>
				<link>https://tripleodeon.com/2009/03/developer-tools/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/03/developer-tools/</guid>
			</item>
		
			<item>
				<title>Development Communities</title>
        <description>&lt;p&gt;I like to try to help my fellow mobile developers.&lt;/p&gt;

&lt;p&gt;You may vaguely remember WAPtastic from 1999. Then AnywhereYouGo.com. Then Argogroup’s DevZone.&lt;/p&gt;

&lt;p&gt;But the mighty &lt;mobiForge&gt; (neé dev.mobi) was also one of my babies, and is still going strong.&lt;/mobiForge&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Mar 2009 21:05:04 +0000</pubDate>
				<link>https://tripleodeon.com/2009/03/development-communities/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/03/development-communities/</guid>
			</item>
		
			<item>
				<title>Data into Information</title>
        <description>&lt;p&gt;I like to use data and graphics to tell stories.&lt;/p&gt;

&lt;p&gt;For Argogroup, I built BoxOffice, a reporting and analysis platform for large-scale monitoring systems.&lt;/p&gt;

&lt;p&gt;The dotMobi KPI platform uses registry data to track domain trends. And I think I have another one in me.&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Mar 2009 19:45:33 +0000</pubDate>
				<link>https://tripleodeon.com/2009/03/data-into-information/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/03/data-into-information/</guid>
			</item>
		
			<item>
				<title>Living the World</title>
        <description>&lt;p&gt;I like to move about – and so do my family. I’ve lived in the UK, New Zealand, Sweden, Australia, and most recently a happy two years in Ireland.&lt;/p&gt;

&lt;p&gt;Now we’re in Nashik, India – and excited to live in one of this century’s rising superpowers.&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Mar 2009 19:08:48 +0000</pubDate>
				<link>https://tripleodeon.com/2009/03/living-the-world/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/03/living-the-world/</guid>
			</item>
		
			<item>
				<title>The Day Jobs</title>
        <description>&lt;p&gt;Most recently I’ve been CTO at &lt;a href=&quot;http://mtld.mobi&quot;&gt;dotMobi&lt;/a&gt;, and previously the same role at &lt;a href=&quot;http://argogroup.com&quot;&gt;Argogroup&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My telecoms heritage comes from &lt;a href=&quot;http://en.wikipedia.org/wiki/Sema_Group&quot;&gt;Sema Group&lt;/a&gt; and &lt;a href=&quot;http://web.archive.org/web/20000815094141/www.anywhereyougo.com/ayg/ayg/Index.po&quot;&gt;AnywhereYouGo.com&lt;/a&gt;. And the obligatory management consultancy at &lt;a href=&quot;http://ey.com&quot;&gt;Ernst &amp;amp; Young&lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Mar 2009 18:10:43 +0000</pubDate>
				<link>https://tripleodeon.com/2009/03/the-day-jobs/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/03/the-day-jobs/</guid>
			</item>
		
			<item>
				<title>Playthings &amp;#38; Personal</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://jajajeev.com&quot;&gt;JaJaJeEv&lt;/a&gt; is my family blog: photographs by my talented children and a few from me.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://squigglysquares.com&quot;&gt;SquigglySquares&lt;/a&gt; provides barcode fun, using a QR-code API and a slab of jQuery. &lt;a href=&quot;http://twitterlap.com&quot;&gt;TwitterLap&lt;/a&gt; lets you see how Twitter users’ followings intersect. It’s quite popular.&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Mar 2009 13:17:46 +0000</pubDate>
				<link>https://tripleodeon.com/2009/03/playthings-and-personal/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/03/playthings-and-personal/</guid>
			</item>
		
			<item>
				<title>Python Google AdSense for Mobile code</title>
        <description>&lt;p&gt;I was amazed to discover that Google don’t currently support Python as a language for their mobile ads. AdMob doesn’t either (thinking it’s more likely that people might use perl or VBScript for a contemporary web site).&lt;/p&gt;

&lt;p&gt;But it’s a particularly strange omission for Google, since it’s one of their three ‘official’ internal languages (together with Java and C++), and because their Google App Engine platform mandates it. Do they assume that no-one would create a mobile application in their cloud?&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I don’t know – it’s probably just left-hand and right-hand out of sync.&lt;/p&gt;

&lt;p&gt;Anyway, &lt;a href=&quot;http://hwof.com&quot; target=&quot;_blank&quot;&gt;The Hollywood Walk of Fame&lt;/a&gt; &lt;a href=&quot;http://hwof.mobi&quot; target=&quot;_blank&quot;&gt;mobile site&lt;/a&gt; has been a recent hobby for me, and I chose Django on Python for a bit of educational fun.&lt;/p&gt;

&lt;p&gt;It was going well until I decided to throw some ads onto it.&lt;/p&gt;

&lt;p&gt;So of course I needed to port the ad code. It’s very simple, although cuts a few corners (this does not support AdSense’s custom colour feature for example):&lt;/p&gt;

&lt;pre&gt;def google_ad(request, publisher_id, format='mobile_single'):
  scheme = 'https://' if request.is_secure() else 'http://'
  params = {
    'ad_type':'text_image',
    'channel':'',
    'client':'ca-mb-' + publisher_id,
    'dt':repr(floor(1000*time())),
    'format':format,
    'https':'on' if request.is_secure() else '',
    'host':scheme + request.META.get('HTTP_HOST', ''),
    'ip':request.META.get('REMOTE_ADDR', ''),
    'markup':'xhtml',
    'oe':'utf8',
    'output':'xhtml',
    'ref':request.META.get('HTTP_REFERER', ''),
    'url':scheme + request.META.get('HTTP_HOST', '') + \
          request.META.get('PATH_INFO', ''),
    'useragent':request.META.get('HTTP_USER_AGENT', '')
  }
  screen_res = request.META.get('HTTP_UA_PIXELS', '')
  delimiter = 'x'
  if screen_res == '':
    screen_res = request.META.get('HTTP_X_UP_DEVCAP_SCREENPIXELS', '')
    delimiter = ','
  res_array = screen_res.split(delimiter)
  if len(res_array) == 2:
    params['u_w'] = res_array[0]
    params['u_h'] = res_array[1]
  dcmguid = request.META.get('HTTP_X_DCMGUID', '')
  if dcmguid != '':
    params['dcmguid'] = dcmguid
  url = 'http://pagead2.googlesyndication.com/pagead/ads?' + urlencode(params)
  return urlopen(url).read()
&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;I presume I’m allowed to do this, I know it’s only 15 minutes saved – but if it helps someone, great. No warranties – but it works for me!&lt;/p&gt;

&lt;p&gt;Incidentally, in Django, I am placing this in a context_processor so that it gets put into a template variable that I know will turn up in every view when the site is in mobile ‘mode’. I use a switcher like &lt;a href=&quot;http://mobiforge.com/designing/story/a-very-modern-mobile-switching-algorithm-part-i&quot; target=&quot;_blank&quot;&gt;this&lt;/a&gt; to toggle between &lt;a href=&quot;http://hwof.com&quot; target=&quot;_blank&quot;&gt;http://hwof.com&lt;/a&gt; and &lt;a href=&quot;http://hwof.mobi&quot; target=&quot;_blank&quot;&gt;http://hwof.mobi&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hm. This post looks terrible in this theme. I think I need to change WordPress template soon.&lt;/p&gt;
</description>
				<pubDate>Fri, 20 Mar 2009 20:27:21 +0000</pubDate>
				<link>https://tripleodeon.com/2009/03/python-google-adsense-for-mobile-code/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/03/python-google-adsense-for-mobile-code/</guid>
			</item>
		
			<item>
				<title>A mail I couldn&amp;#8217;t send</title>
        <description>&lt;p&gt;After &lt;a href=&quot;http://www.tomhume.org/2009/02/banned-from-wmlprogramming.html&quot; target=&quot;_blank&quot;&gt;someone I respect&lt;/a&gt; got banned from the WMLProgramming mailing list, I wrote to agree with one or two other members who were disappointed with the state of affairs.&lt;/p&gt;

&lt;p&gt;I’ve been a member since, I guess, the first few weeks of the group’s existence – even if I haven’t been a day-to-day contributor. Sadly it’s gone downhill over the last year or so.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Why? It’s a long story. The mobile developer community has a desire to have a strong position on unprovoked content transformation. This is a good thing.&lt;/p&gt;

&lt;p&gt;But the approach taken to get their message across involves some of the most inflammatory, derogatory, and unprofessional behaviour I’ve ever seen online. This is not a good thing.&lt;/p&gt;

&lt;p&gt;I was disappointed that the reputation of the group was sinking so low. It also occured to me that, as a member, this behaviour was implicitly in my name.&lt;/p&gt;

&lt;p&gt;But not for long! I was promptly banned from the group.  Well, I suppose I was leaving anyway, so maybe it was no big deal.&lt;/p&gt;

&lt;p&gt;But shortly after, a rather rude mail was written in response, making some outlandish claims about some corporate conspiracy I’m supposed to be part of. But could I respond? No! I’d been banned. I guess to make sure you get the last word, the best way is to limit the other party’s ability to respond.&lt;/p&gt;

&lt;p&gt;So anyway, I don’t really want to labour the point. But here’s what I wrote as my last post to the group and couldn’t send – thanks to the membership button being grayed out.&lt;/p&gt;

&lt;p&gt;After all that fruitless typing, and in the interests of free speech, I just feel it needs to see the light of day somehow 😉&lt;/p&gt;

&lt;p&gt;—————————————-&lt;/p&gt;

&lt;p&gt;Luca,&lt;/p&gt;

&lt;p&gt;You do indeed deserve huge thanks for the many years of hard work and success. The manifesto and it could have been a memorable agent for good on behalf of the industry as a whole. It may still become so.&lt;/p&gt;

&lt;p&gt;I fully admire your goals, but with them comes an attitude that ruins the external reputation of the group – and the chances of those goals ever being met. Further, the reputation of the group is projected onto its members.&lt;/p&gt;

&lt;p&gt;That is why I’m leaving. This brand of militarism does not represent my broader interests in the growth of the mobile web.&lt;/p&gt;

&lt;p&gt;Let me also state clearly that my opinions about the situation have absolutely nothing to do with my recent employer or its investors: I’m sorry to disappoint you, but there really is no conspiracy.&lt;/p&gt;

&lt;p&gt;I hope that one day this famous list will return to being positive and friendly again.&lt;/p&gt;

&lt;p&gt;(Doubtless you’ve more positive and friendly things to say on the matter too. But since you banned me, do note I won’t be receiving further replies.)&lt;/p&gt;

&lt;p&gt;James&lt;/p&gt;
</description>
				<pubDate>Mon, 09 Feb 2009 16:43:30 +0000</pubDate>
				<link>https://tripleodeon.com/2009/02/a-mail-i-couldnt-send/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2009/02/a-mail-i-couldnt-send/</guid>
			</item>
		
			<item>
				<title>So What Happens Next?</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://tripleodeon.com/?p=149&quot;&gt;So&lt;/a&gt;, my wife has a new job in India. We’re leaving Dublin to have a flavour of life in the sub-continent. It was a dilemma to figure out how to fit this in with my own career.&lt;/p&gt;

&lt;p&gt;After much deliberation, we figured that it wouldn’t really be possible to continue my current role of CTO. As well as the traditional CTO-like activities (evangelism, slideshows, strategy, whiteboard death-match), I’ve also been leading the, now quite large, development team at dotMobi. Doing that properly needs someone nearby, and not offset by five-and-a-half hours. So the CTO (aka VP Technology) role is now in the hands of a very able replacement – there’s certainly a world-class team to continue the good work in Dublin.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;But the good news is that I’ll still be involved with dotMobi, despite my geographic and temporal displacement. I’ll be consulting for the company as VP &lt;em&gt;Emerging&lt;/em&gt; Technologies – which makes me a sort of a one-man research team. I’ll be slightly decoupled from the engineering activities of course – but, because there are still lots of innovative things that the company needs to do, I can make the most of my slightly remote perspective by pushing those inventions forward.&lt;/p&gt;

&lt;p&gt;There are a couple of things I’ve got in mind. Firstly, I’d like to to help understand how dotMobi’s existing tools can be better used. I’ve got a DeviceAtlas WordPress plugin up my sleeve, for example – and I think there’s lots more we can do to make that platform easier to use in familiar runtime environments. We’d like to push DeviceAtlas further in the area of AJAX and CSS support. I expect I’ll rattle off a few posts for mobiForge. And I expect I’ll also be chipping in some ideas for Instant Mobilizer.&lt;/p&gt;

&lt;p&gt;Although it will be a change not to be in the office every day, bouncing thoughts off everyone else, I think I’ll be very able to see these projects through without too much day-to-day distraction. Of course we’re a heavily connected team, so (Indian broadband permitting) I’ll still be able to stay in touch via Skype, email, Twitter and so on.&lt;/p&gt;

&lt;p&gt;Co-incidentally, I’m pleased with the word ’emerging’ in my role as I think will be wholly appropriate for my locale. We’ll be in a place called Nashik, a few hundred miles north-east of Mumbai. It’s small enough not to appear on most maps, but it’s got a population of 1.5 million or so. India of course, is emerging as both an economic and mobile phenomenon, both in the cities and rurally, and I think I’ll be well placed to watch these developments unfold.&lt;/p&gt;

&lt;p&gt;What do I mean by by mobile phenomenon? Well I don’t know what that means on the ground yet – but I do know the country’s been gaining something like 10 million new subscribers a month. (That’s the population of Dublin every, um, working day). As well as the staggering numbers involved, I fully expect to discover that these millions of newly-connected mobile users are using the medium in exciting new ways. And surely many of them won’t already own a PC: so mobile web usage is undoubtedly going to feature heavily.&lt;/p&gt;

&lt;p&gt;But I don’t really want to say too much about what I think I will see and experience – I know it’s going to be a huge adventure, but I also know that most of my assumptions (whether about the local mobile market or India in general) will be wrong. I’ve been a few times on holiday, but this is an altogether different kettle of fish, so I’m going with an entirely open mind. My Twitter account and blog are a blank canvas upon which I will try to describe what I see, smell and observe once I get there. (I’ll endeavor to keep a regular ‘mobile letter from India’ going).&lt;/p&gt;

&lt;p&gt;Anyway, all in all, it’s daunting, but the situation looks like it will work out well. I’ll be spending more and more time researching some of the technical challenges that face the company – and the mobile industry as a whole – and hopefully coming up with some innovative solutions and neat technology. I’ll be able to see, first hand, a completely different side to the evolution of mobile communication, and I’m looking forward to blowing some of my Western preconceptions out of the water. Finally, of course, I’m hoping this will be a great experience for my children – who, after all, will consider India to be one of the major world economies when they are my age.&lt;/p&gt;

&lt;p&gt;So, as of next week, good bye Europe (for a little while) and stay tuned!&lt;/p&gt;
</description>
				<pubDate>Wed, 31 Dec 2008 12:47:39 +0000</pubDate>
				<link>https://tripleodeon.com/2008/12/so-what-happens-next/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/12/so-what-happens-next/</guid>
			</item>
		
			<item>
				<title>Two Years @ dotMobi</title>
        <description>&lt;p&gt;This New Year marks my second anniversary of being CTO at dotMobi.&lt;/p&gt;

&lt;p&gt;I’m making a big deal of this because, as of Thursday, I &lt;em&gt;won’t&lt;/em&gt; be CTO at dotMobi. My wife Jayne, has landed a marketing job at a vineyard near Mumbai in India, and both of us, together with our two young children, are emigrating to live there.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Everything changes. So humour me. Rather than endless industry predictions you’ve been reading everywhere else this week, I’m going to indulge myself in a retrospective.&lt;/p&gt;

&lt;p&gt;In my next post I’ll talk about what’s happening next. (Clue though: I’m not leaving the company!)&lt;/p&gt;

&lt;p&gt;dotMobi was a fairly different place when I joined two years ago. The .mobi domain name had recently gone on sale, the company was focussed on being a domain registry, and most of the company’s technical capabilities were outsourced. But not entirely. Ronan and Ruadhan, who were both incumbent technologists when I arrived, had already started developing early versions of the developer community and the ready.mobi test tool. And through the work of Jo Rabin, the company was keenly supporting the mobile work of the W3C too. The seeds had been sown for the organisation to be able to play an important role in the mobile world – as well as for the domain community – and that’s why I took the job. During my two years, I’d like to think we stayed true to those ambitions.&lt;/p&gt;

&lt;p&gt;Looking back, I spent relatively little time on the domain registry business per se – when I did it was mostly evangelism, blogging, and a bit of data mining. Of course we like to articulate why a mobile URL or domain is important if you want to let your users choose their experience via their address bar, and how you can use such a trustworthy mobile domain in conjunction with your existing web properties.&lt;/p&gt;

&lt;p&gt;But dotMobi has other missions. For example, we want to help designers, web developers, marketeers, and businesses appreciate the potential of the mobile web as a whole. I’m passionate about the role that mobile will play in our on-line lives of the future, but I also recognise that someone’s got to actually build it. Given my recent career, it was natural that that agenda would shine through – and that’s been a large part of my work. With its highly reputable investors (not to mention a decent cashflow from the domain name business), the company’s uniquely placed to offer assistance to mobile developers and other companies throughout the ecosystem. It’s able to solve some nasty problems that would be unrewarding for, say, a more financially-backed company to undertake.&lt;/p&gt;

&lt;p&gt;The hassle of mobile handset diversity, for example, is a huge pothole in the mobile web superhighway. We felt dotMobi had an obligation to help fill it in for the good of all the travellers on such a road. And so was born &lt;a href=&quot;http://deviceatlas.com&quot; target=&quot;_blank&quot;&gt;DeviceAtlas&lt;/a&gt;: designed to become the world’s leading database of mobile device information. I was lucky enough to be able to recruit WURFL founder Andrea Trasatti to the team in the summer of 2007, and convince him that dotMobi was the place to build such a thing. We launched just over 6 months later, and, although it’s a work in progress of course, we’re thrilled by what the team have created so far. (I still suspect it might end up being what we are all remembered for in years to come).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://ready.mobi&quot; target=&quot;_blank&quot;&gt;ready.mobi&lt;/a&gt; has also changed hugely in the last two years. It’s gone from being a fun little mobile rating tool to becoming an important part of many mobile developers’ toolkits. We’re supporting thousands of testers every day from around the world who are committed to producing quality mobile sites. With full site testing now available, and the recent release of a machine API, it’s never stood still. It remains the tool that many people know dotMobi for most.&lt;/p&gt;

&lt;p&gt;The jewel in dotMobi’s crown is undoubtedly its developer community &lt;a href=&quot;http://mobiforge.com&quot;&gt;mobiForge&lt;/a&gt; (nee dev.mobi). Well over 20,000 developers regularly turn to the site for a stream of high quality material about the state of the mobile development world. Editor Ruadhan, together with all the team members and authors who contribute, deserve the credit for this. (I merely pull a few levers and press a few buttons behind the scenes; plus the occasional article). Sister site &lt;a href=&quot;http://mobithinking.com&quot; target=&quot;_blank&quot;&gt;mobiThinking&lt;/a&gt; is also starting to make real strides.&lt;/p&gt;

&lt;p&gt;In 2007, one of our major, if left-field, projects was &lt;a href=&quot;http://find.mobi&quot; target=&quot;_blank&quot;&gt;find.mobi&lt;/a&gt;. At that time, we thought that mobile search was really an unsolved problem and that a lot of traditional search companies didn’t really understand mobile – and what mobile users want. (Hint: it’s not mangled PC web sites). Since we had to crawl an awful lot of .mobi sites for compliance reasons anyway, we started crawling other top-level domain sites as well, looking for made-for-mobile sites to flesh out a contextually-targetted directory and search service.&lt;/p&gt;

&lt;p&gt;The technology is clever and at the time the UI was pretty unique: as an experiment it was very worthwhile. Not surprisingly, we weren’t able to give it the love and care it needed for a consumer launch. Also, incumbent services have improved since then. But… well, I still think mobile search is unfinished business: there are still some exciting possibilities being explored for the find.mobi technology.&lt;/p&gt;

&lt;p&gt;Another technical excitement this year was the purchase of &lt;a href=&quot;http://mowser.com&quot; target=&quot;_blank&quot;&gt;Mowser&lt;/a&gt; from Russell Beattie and Mike Rowehl. They’ve moved on to other things now, but the Dublin engineering team have been pouring effort into its reincarnation, dubbed ‘Instant Mobilizer’. Yes, it’s a transcoder that takes non-mobile content and adjusts the syntax to better suit a mobile device, but it comes with a few twists.&lt;/p&gt;

&lt;p&gt;Firstly, it’s an opt-in service: small businesses for example can subscribe to the service instead of having a new site built for themselves. Secondly, we don’t just perform markup gymnastics to hack a site to pieces: we also enhance pages with additional services that might be useful for mobile users. Thirdly, we don’t think that transcoding non-mobile sites is a particularly satisfactory end-game for the industry anyway. This, if you like, is a taster service that can open businesses’ eyes to the possibilities of mobile – but one which, if it does its job well, will help to promote the advantages of building mobile services &lt;em&gt;properly&lt;/em&gt; subsequently.&lt;/p&gt;

&lt;p&gt;Anyway, Ronan’s been leading that project, and it’s due for a launch in the New Year, so I’m not particularly due any credit! But it’s very neat, and keep an eye open for it in months to come.&lt;/p&gt;

&lt;p&gt;I’ve had a fantastic couple of years living in Dublin. The city’s been warm and welcoming to both me and my family. Professionally, the city has been a great base for the company. Although it’s been hard hiring world class people, we’ve always made that a non-compromisable priority – and I’m really happy with the large, talented team of mobile-centric engineers that we’ve cultured. Outside of the technical team too, there’s a great team of people at dotMobi overall. It’s always been a pleasure to work with smart, international colleagues from across all the disciplines: Neil, Trey, Paul, Amy, Norbert, Vance – and many, many others.&lt;/p&gt;

&lt;p&gt;The last two years have seen dotMobi play a more mature, supportive role within the mobile industry, and it has broadened its brief from domain names to many other, perhaps more altruistic, activities. I won’t ever be able to say that the mobile web has taken off because of us, or because of the small part I personally played – but I certainly know that when it comes to mobile, I’ve been in the most exciting place at the most exciting time.&lt;/p&gt;

&lt;p&gt;In the next post, a bit more about the next chapter of our lives.&lt;/p&gt;
</description>
				<pubDate>Tue, 30 Dec 2008 21:42:29 +0000</pubDate>
				<link>https://tripleodeon.com/2008/12/two-years-dotmobi/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/12/two-years-dotmobi/</guid>
			</item>
		
			<item>
				<title>Plans, projects, places</title>
        <description>&lt;p&gt;It feels strange blogging these days. Everything appears to fly past on Twitter instead.&lt;/p&gt;

&lt;p&gt;But just an update on some things going on here. Firstly my movements, recently and soon:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Mobile World Congress, Barcelona (it was OK)&lt;/li&gt;
  &lt;li&gt;SXSW, Austin (not much mobile zeitgeist, and I felt old)&lt;/li&gt;
  &lt;li&gt;A family skiing holiday (amazing snow for late March)&lt;/li&gt;
  &lt;li&gt;CTIA in Las Vegas (my &lt;em&gt;favourite&lt;/em&gt; city, ahem… but &lt;a target=&quot;_blank&quot; href=&quot;http://www.mobilejamsession.com/&quot;&gt;Mobile Jam&lt;/a&gt; will be cool)&lt;/li&gt;
  &lt;li&gt;WWW2008 in Beijing (4 years since I was there last – will I recognise it?)&lt;/li&gt;
  &lt;li&gt;MoMo Summit in Malaysia (2 years, but ditto)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s certainly no shortage of mobile-related shows on at at the moment. Plenty of gigs containing the words “mobile”, “web”, “2.0” again this year. I think there are another two Spring events in London that I’ve missed from my list – and after all that I know I’m still, sadly, missing another sponsoree, &lt;a target=&quot;_blank&quot; href=&quot;http://overtheair.org/blog/&quot;&gt;Over The Air&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Secondly, things going on at dotMobi and elsewhere:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://deviceatlas.com&quot;&gt;DeviceAtlas &lt;/a&gt;(launched last month, roaring success, 1,000 users already, yes I wrote some of the code)&lt;/li&gt;
  &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://find.mobi&quot;&gt;Find.mobi&lt;/a&gt; (none of my code! but try flight codes and currency questions…)&lt;/li&gt;
  &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://dev.mobi&quot;&gt;Dev.mobi&lt;/a&gt; (going from strength to strength…. 10,000 users)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://447867554666.mobi/&quot;&gt;http://447867554666.mobi/&lt;/a&gt; (and similar… interesting idea, no?)&lt;/li&gt;
  &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://metajam.mobi/&quot;&gt;MetaJam &lt;/a&gt;(already paying some of the household bills; thanks AdMob!)&lt;/li&gt;
  &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://hottwit.com/&quot;&gt;HotTwit &lt;/a&gt;(a bit of malformed fun; probably could do more with it)&lt;/li&gt;
  &lt;li&gt;IvyRoot (not even ready for prime-time on my own brain yet)&lt;/li&gt;
  &lt;li&gt;Erlang (a solution looking for me to find a problem for)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, I guess this blog post is sort of an almanac of what’s going on in my life, circa Q1 2008.&lt;/p&gt;

&lt;p&gt;If you’re at any of the upcoming events above, I’ll see you soon. If you have any comments on these various projects, let me know 🙂&lt;/p&gt;
</description>
				<pubDate>Wed, 26 Mar 2008 22:09:30 +0000</pubDate>
				<link>https://tripleodeon.com/2008/03/plans-projects-places/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/03/plans-projects-places/</guid>
			</item>
		
			<item>
				<title>Mobile Monday x 2 tonight</title>
        <description>&lt;p&gt;I am speaking in &lt;a href=&quot;http://weblog.cenriqueortiz.com/mobilemondayaustin/2008/03/07/reminder-momo-austin-march-10-dotmobi-mobile-web-iphone-mobile-search-related-industry-trends/&quot;&gt;Austin&lt;/a&gt; (as a satellite event to SXSW) alongside Taptu and BlueFlavor. Should be a very good one.&lt;/p&gt;

&lt;p&gt;And on the European side, Andrea is doing &lt;a href=&quot;http://www.m-trends.org/2008/03/mobilemonday-barcelona-on-mobile-travel-services.html&quot;&gt;Barcelona&lt;/a&gt;, where the subject is mobile travel. Also set to be a great evening.&lt;/p&gt;

&lt;p&gt;If you’re going to either, one of us will see you there 😉 &lt;/p&gt;
</description>
				<pubDate>Mon, 10 Mar 2008 14:50:58 +0000</pubDate>
				<link>https://tripleodeon.com/2008/03/mobile-monday-x-2-tonight/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/03/mobile-monday-x-2-tonight/</guid>
			</item>
		
			<item>
				<title>I am in Private Eye</title>
        <description>&lt;p&gt;This is an odd feeling: Standing in line for security at O’Hare… Idly reading Private Eye… Turning to page 27…  WAIT a minute! That looks familiar! I wrote that!&lt;/p&gt;

&lt;p&gt;Yes, yours truly has the dubious honour of having made &lt;a href=&quot;http://www.private-eye.co.uk/sections.php?section_link=pseuds_corner&amp;amp;&quot; target=&quot;_blank&quot;&gt;Pseud’s Corner&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For those of you not familiar with the aforementioned organ, Private Eye is a satirical UK magazine that has a regular spot where outrageous quotes from the pretentious and precocious are paraded. Authors, actors, art critics and such like.&lt;/p&gt;

&lt;p&gt;This week, a mobile CTO!Seems the editors look a shine to my &lt;a href=&quot;http://www.tripleodeon.com/?p=107&quot; target=&quot;_blank&quot;&gt;Mobile Monday Barcelona introduction&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;OK, so maybe it was a little heavy on the rhetoric, but still… I get to share this (perhaps dubious) honour with Fay Weldon, Ozwald Boateng and A.A. Gill – so it can’t be entirely bad.&lt;/p&gt;
</description>
				<pubDate>Sat, 08 Mar 2008 21:15:20 +0000</pubDate>
				<link>https://tripleodeon.com/2008/03/i-am-in-private-eye/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/03/i-am-in-private-eye/</guid>
			</item>
		
			<item>
				<title>What&amp;#8217;s on a mobile CTO&amp;#8217;s desktop?</title>
        <description>&lt;p&gt;Along the lines of “&lt;a href=&quot;http://buzzpressure.com/2008/01/08/cto-handbook-how-to-care-for-and-feed-your-cto/&quot;&gt;how to [..] feed your CTO&lt;/a&gt;“, and “&lt;a href=&quot;http://www.gapingvoid.com/Moveable_Type/archives/003585.html&quot;&gt;N things you didn’t know about blogger X&lt;/a&gt;“, I was staring at my cluttered desktop, wondering what it all means.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.tripleodeon.com/assets/2008/02/desktop.gif&quot; alt=&quot;desktop.gif&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Featuring…&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A variety of development tools (Eclipse, Visual Studio, MySQL, Wireshark, FTP, SCP, JMeter scripts, a JSON parser)&lt;/li&gt;
  &lt;li&gt;The Android SDK&lt;/li&gt;
  &lt;li&gt;Portions of a mobile web book I am writing&lt;/li&gt;
  &lt;li&gt;Slideware for various products  &amp;amp; projects&lt;/li&gt;
  &lt;li&gt;Domain analysis results&lt;/li&gt;
  &lt;li&gt;An Ubuntu ISO image and an Apache install&lt;/li&gt;
  &lt;li&gt;An OPML file of mobile blogs&lt;/li&gt;
  &lt;li&gt;My registration form for MWC&lt;/li&gt;
  &lt;li&gt;A JPG helpfully named “graph”&lt;/li&gt;
  &lt;li&gt;A bunch of browsers&lt;/li&gt;
  &lt;li&gt;The hiring plan for my team&lt;/li&gt;
  &lt;li&gt;MetaWeb Query Language documentation&lt;/li&gt;
  &lt;li&gt;Mobile Monday Dublin’s Peer Awards application forms&lt;/li&gt;
  &lt;li&gt;Two mysterious text files called “yes” and “no” (?!)&lt;/li&gt;
  &lt;li&gt;Some social network clients&lt;/li&gt;
  &lt;li&gt;Something to listen to&lt;/li&gt;
  &lt;li&gt;Armadillo Run&lt;/li&gt;
  &lt;li&gt;…and a folder named “temp” – where all this rubbish is shortly headed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yes, that pretty much sums up the last 3 months of my life. What’s on &lt;em&gt;your&lt;/em&gt; desktop – and why?&lt;/p&gt;
</description>
				<pubDate>Wed, 20 Feb 2008 16:39:02 +0000</pubDate>
				<link>https://tripleodeon.com/2008/02/whats-on-a-mobile-ctos-desktop/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/02/whats-on-a-mobile-ctos-desktop/</guid>
			</item>
		
			<item>
				<title>My obligatory MWC write-up&amp;#8230;</title>
        <description>&lt;p&gt;…but I’ll keep it short. That I can so easily tells you everything you need to know about the show.&lt;/p&gt;

&lt;p&gt;There’s a lot going on at the the Mobile World Congress, and of course there are lots of sub-markets and sub-industries being represented. But the thrust of the show is pure telecoms. Device and infrastructure vendors trying to wow network operators.&lt;/p&gt;

&lt;p&gt;Everything else (in particular, hall 7, complete with porn and prayer room) is really just a side show. However important you think content provision are, you can guarantee the telecoms world doesn’t.&lt;/p&gt;

&lt;p&gt;So, on that basis, the show was rather disappointing.&lt;/p&gt;

&lt;p&gt;If the handsets launched were supposed to be some sort of comeback, then Cupertino will sleep easily. That side of the show was dominated by one company – who didn’t even turn up – and I thought everything else was utterly underwhelming. (At most I might see myself with an X1)&lt;/p&gt;

&lt;p&gt;And on the network side, I’ve rather lost track. The acronyms are getting farcical. Too long for me to remember which ones are which, and which ones are actually synonyms for something else. So forgive my naive conclusion that there was little news there either.&lt;/p&gt;

&lt;p&gt;In previous years, the implicit message from GSM was “We are the Masters of the Universe”. This year, there’s nervousness. This is an industry that knows it is about to be disrupted, but doesn’t quite know what to do about it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;On a personal note, the show was most notable for the number of virtual folks I finally got to meet: &lt;a href=&quot;http://blog.spinvox.com/&quot;&gt;James Whatley&lt;/a&gt; gets special thanks for finding me a personal mobby. After days of being locked in with analysts and journalists, it was nice to come out blinking into the sun and meet people who speak my language&lt;/em&gt; 🙂&lt;/p&gt;
</description>
				<pubDate>Sat, 16 Feb 2008 14:12:36 +0000</pubDate>
				<link>https://tripleodeon.com/2008/02/my-obligatory-mwc-write-up/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/02/my-obligatory-mwc-write-up/</guid>
			</item>
		
			<item>
				<title>My MoMo Peer Awards Introduction</title>
        <description>&lt;p&gt;I was lucky enough to be invited to speak at the introduction of this year´s Peer Awards in Barcelona.&lt;/p&gt;

&lt;p&gt;I hope it´s not to precocious to post the conent of a three minute speech! As it happened I deviated a fair deal, but the spirit was about right. 🙂&lt;/p&gt;

&lt;p&gt;——–&lt;/p&gt;

&lt;p&gt;Hello Barcelona. And welcome to you all.&lt;/p&gt;

&lt;p&gt;We have an amazing afternoon ahead of ourselves. An amazing venue. An amazing city. An amazing organisation team, and of course amazing people. You know, this is not Mobile Monday Barcelona. This is Mobile Monday The World.&lt;/p&gt;

&lt;p&gt;I feel honoured to have the chance to welcome you all today. To see such a talented collection of individuals in one room together – all under the banner of mobility – is truly exciting to me. Somehow I feel we are coming of age.&lt;/p&gt;

&lt;p&gt;It is so easy to forget what the mobile industry is all about. Yes, its economics are very enticing. Yes, its trade shows are awe-inspiring. And of course the technology is always mind-blowing!&lt;/p&gt;

&lt;p&gt;But it’s not really about any of those things. Our industry is about something else. About communication. And communication is about people, human beings. You might call them “users”, “subscribers”, “audiences”, or “eyeballs”. But they are human beings.&lt;/p&gt;

&lt;p&gt;In fact you could say that the mobile world is the ultimate social network. One day it will be the size of the entire species. A vast and intelligent network of human beings. Our fellow human beings, wherever in the world they are.&lt;/p&gt;

&lt;p&gt;And I have no doubt that that mobile environment must be used for good.&lt;/p&gt;

&lt;p&gt;It is the human beings in this room that are making that happen. You, your friends and your colleagues around the world, are&lt;/p&gt;

&lt;p&gt;the creative, disruptive, and pioneering force that must lie behind the grand mobile ambition.&lt;/p&gt;

&lt;p&gt;All I am going to say about dotMobi is that we are here for no other reason that to help you realise that ambition.&lt;/p&gt;

&lt;p&gt;What I see in front of me today is not a safe and lazy industry. You are not faceless brands, multi-national monopolies, or sanitised and defensive incumbents of some dull grey ecosystem.&lt;/p&gt;

&lt;p&gt;No. You are the mobile mammals. You are the individuals, the entrepreneurs, the artists, the merchants, the craftsmen and women, the smart, ambitious, bright young things of all our mobile tomorrows.&lt;/p&gt;

&lt;p&gt;So. The next time you are rewriting your business plan again or pitching your startup to yet another jaded investor, the next time you are up at three in the morning writing software to launch the following day, the next time you are in a sales meeting, telling sceptical potential customers that you have what it takes – I’ll be there with you. We’ll all be there with you. We’re a community. The Mobile Monday community.&lt;/p&gt;

&lt;p&gt;And we have got what it takes.&lt;/p&gt;

&lt;p&gt;And you do know that we are doing something quite special, don’t you? Nothing less than the formation and refinement of an entirely new medium. The reinvention of communication for the whole human species. Somebody in this room might be doing something that can change the human race, and that can change the world to make it somehow a better place.&lt;/p&gt;

&lt;p&gt;That is a huge privilege and a huge responsibility. I trust we all take it very seriously.&lt;/p&gt;

&lt;p&gt;Nevertheless, that is why this afternoon’s competitions are going to be very exciting. Good luck to you all and thank you!&lt;/p&gt;
</description>
				<pubDate>Mon, 11 Feb 2008 14:26:41 +0000</pubDate>
				<link>https://tripleodeon.com/2008/02/my-momo-peer-awards-introduction/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/02/my-momo-peer-awards-introduction/</guid>
			</item>
		
			<item>
				<title>Changing the world&amp;#8230; two products at a time</title>
        <description>&lt;p&gt;Wondered where I’d gone? Thought we’d been a bit quiet at dotMobi for a little while?&lt;/p&gt;

&lt;p&gt;Sorry 🙂&lt;/p&gt;

&lt;p&gt;Next week is the Mobile World Congress in Barcelona. And if you’re blogging, you can’t also be flat out trying to release something seismic for the mobile world.&lt;/p&gt;

&lt;p&gt;DeviceAtlas. A huge lump of tarmac falling from the sky to fill in that huge pothole in the middle of the mobile superhighway (the one labelled “too many damn devices”). And Find.mobi. Start all over again and re-imagine search for mobile from the ground up. What would it look like?&lt;/p&gt;

&lt;p&gt;Any idea of how involved these are? I only &lt;em&gt;just&lt;/em&gt; realised I’m doing an introduction at the MoMo Peer Awards on Monday.&lt;/p&gt;

&lt;p&gt;If you’re one of the 1,000 people waiting for email from me, don’t panic. I am alive. Just. (“Yes! We found the memory leak!”)&lt;/p&gt;

&lt;p&gt;Sleep can wait. All coming soon. I’ll see you next week.&lt;/p&gt;
</description>
				<pubDate>Sat, 09 Feb 2008 00:21:10 +0000</pubDate>
				<link>https://tripleodeon.com/2008/02/changing-the-world-two-products-at-a-time/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/02/changing-the-world-two-products-at-a-time/</guid>
			</item>
		
			<item>
				<title>A Mobile Democratic Dilemma in Dublin</title>
        <description>&lt;p&gt;Dear Mobile Blogosphere, your advice please.&lt;/p&gt;

&lt;p&gt;I run Mobile Monday in Dublin. We put 4 local mobile startups up for vote for nomination to the MoMo Peer Awards in Barcelona. Final results were as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://3gdoctor.com&quot;&gt;3G Doctor&lt;/a&gt;, 6 votes, 4.51% &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://nubiq.com/&quot;&gt;Nubiq&lt;/a&gt;, 6 votes, 4.51% &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://sentrywireless.com&quot;&gt;Sentry Wireless&lt;/a&gt;, 118 votes, 88.72% &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://adcafe.mobi&quot;&gt;AdCafe&lt;/a&gt;, 3 votes, 2.26%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now obviously, there’s a fairly comprehensive win for Sentry Wireless. However, we also had about 120 new members to the group in the last 24 hours, and there’s a decent correlation with the voting.&lt;/p&gt;

&lt;p&gt;On one hand I welcome new members! On the other hand, I’m not sure that this results accurately represents the balance of our traditional membership. Quite a few of the new subscriptions immediately unsubscribed.&lt;/p&gt;

&lt;p&gt;I now feel a little like the UN trying to make sense of a country’s democracy after failed elections. Should I …&lt;/p&gt;

&lt;p&gt;A) Leave the poll results as they stand&lt;/p&gt;

&lt;p&gt;B) Void the results of anyone who joined after the poll was announced&lt;/p&gt;

&lt;p&gt;C) Put the vote back out to the 9,000 members on &lt;a href=&quot;http://dev.mobi/&quot;&gt;dev.mobi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;D) Make my own independent professional judgement based on the applications&lt;/p&gt;

&lt;p&gt;?&lt;/p&gt;
</description>
				<pubDate>Fri, 01 Feb 2008 18:30:56 +0000</pubDate>
				<link>https://tripleodeon.com/2008/02/a-mobile-democratic-dilemma-in-dublin/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/02/a-mobile-democratic-dilemma-in-dublin/</guid>
			</item>
		
			<item>
				<title>Two things I have learnt about the Irish</title>
        <description>&lt;p&gt;1) They seem to love politics, and 2) throw great parties&lt;/p&gt;

&lt;p&gt;TechLudd this week exhibited the &lt;a href=&quot;http://www.techludd.com/blog/?p=7&quot;&gt;best of the latter&lt;/a&gt; and the &lt;a href=&quot;http://paulfwalsh.com/why-techludd-should-stop-before-it-starts&quot;&gt;worst of the former&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Whether or not you think it’s fair to veto events that others are working hard to put on, far more impressive was the bar brawl that followed, weeks before the thing had even taken place.&lt;/p&gt;

&lt;p&gt;And – in a &lt;a href=&quot;http://uk.techcrunch.com/2008/01/28/techludd-not-so-luddite-after-all/&quot;&gt;brilliant piece&lt;/a&gt; of politik and self-promotion – the critics manage to take credit for the changes that were made to result in the resounding success.&lt;/p&gt;

&lt;p&gt;So I am about to slag off &lt;a href=&quot;http://mobilemonday.org.uk/2008/01/mobile-operating-systems-4th-feb.html&quot;&gt;next week’s MobileMonday&lt;/a&gt;. I think I can then take credit for it being a great event.&lt;/p&gt;

&lt;p&gt;(Which is my way of saying “see you there”…)&lt;/p&gt;
</description>
				<pubDate>Tue, 29 Jan 2008 22:12:06 +0000</pubDate>
				<link>https://tripleodeon.com/2008/01/two-things-i-have-learnt-about-the-irish/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/01/two-things-i-have-learnt-about-the-irish/</guid>
			</item>
		
			<item>
				<title>&amp;#8220;How to care for and feed your CTO&amp;#8221;</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://buzzpressure.com/2008/01/08/cto-handbook-how-to-care-for-and-feed-your-cto/&quot;&gt;This&lt;/a&gt; doing the rounds (thanks to &lt;a href=&quot;http://feeds.feedburner.com/~r/CEnriqueOrtizWeblog/~3/213959836/&quot;&gt;ceo&lt;/a&gt;), which of course makes me wonder what type &lt;a href=&quot;http://mtld.mobi/company/about/management&quot;&gt;I am&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Well, my golf is certainly not up to scratch, so I think I’ll plump for a blend of the first and second.&lt;/p&gt;

&lt;p&gt;I think it’s phrases like “neither nocturnal nor diurnal”, “temporally ambiguous”, “drawn towards alpha software like a moth to a flame”, and “prototypes that they quietly whip up and surprise the company with” that seem to ring true with my life.&lt;/p&gt;

&lt;p&gt;Oh and a “whiteboard deathmatch” sounds like fun.&lt;/p&gt;

&lt;p&gt;Er. Guilty.&lt;/p&gt;
</description>
				<pubDate>Thu, 10 Jan 2008 23:12:46 +0000</pubDate>
				<link>https://tripleodeon.com/2008/01/how-to-care-for-and-feed-your-cto/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/01/how-to-care-for-and-feed-your-cto/</guid>
			</item>
		
			<item>
				<title>Predictions for 2008, yawn. Must look further.</title>
        <description>&lt;p&gt;It must be time for more obvious punditry from the augursphere.&lt;/p&gt;

&lt;p&gt;“2008 will be the year of mobile data, flat rates, Apple &amp;amp; Google phones, mobile advertising… blah blah blah”&lt;/p&gt;

&lt;p&gt;No kidding.&lt;/p&gt;

&lt;p&gt;Me? I just got back from holiday and I’m chilled in a rum punch sort of way. So no frantic soothsaying from me. But I had one interesting prefiction for a few years out.&lt;/p&gt;

&lt;p&gt;Can you imagine a day when Google Maps for Mobile becomes their &lt;em&gt;primary&lt;/em&gt; search interface?&lt;/p&gt;

&lt;p&gt;(Oh. Don’t forget you heard it here first 🙂 )&lt;/p&gt;
</description>
				<pubDate>Mon, 07 Jan 2008 23:22:44 +0000</pubDate>
				<link>https://tripleodeon.com/2008/01/predictions-for-2008-yawn-must-look-further/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2008/01/predictions-for-2008-yawn-must-look-further/</guid>
			</item>
		
			<item>
				<title>The Ultimate Social Network. Step 1.</title>
        <description>&lt;p&gt;Having often claimed that (mobile) telephone networks are already the ultimate social network, I’m trying a little experiment.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://447867554666.mobi/&quot;&gt;http://447867554666.mobi/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having a personal page tied to my mobile number seems like a good way of eternally tagging myself.&lt;/p&gt;

&lt;p&gt;So this page sort of acts as a mobile business-card / vCard / shared-items / presence / personal dashboard.&lt;/p&gt;

&lt;p&gt;(I currently pull in RSS feeds and my Jaiku presence to give you the idea)&lt;/p&gt;

&lt;p&gt;But imagine if… browsers had access to contact lists, and contact applications could launch browsers… now that’s interesting. I could even see operators providing such sites to discourage churn.&lt;/p&gt;

&lt;p&gt;Ha ha! Maybe just a bit of fun. But if not, you saw it here first 🙂&lt;/p&gt;
</description>
				<pubDate>Wed, 19 Dec 2007 07:50:47 +0000</pubDate>
				<link>https://tripleodeon.com/2007/12/the-ultimate-social-network-step-1/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/12/the-ultimate-social-network-step-1/</guid>
			</item>
		
			<item>
				<title>When politics blows up the semantic web</title>
        <description>&lt;p&gt;– or –&lt;/p&gt;

&lt;p&gt;“Don’t vote for Hillary; it might &lt;a href=&quot;http://lists.freebase.com/pipermail/data-modeling/2007-December/000239.html&quot;&gt;break FreeBase&lt;/a&gt;!”&lt;/p&gt;
</description>
				<pubDate>Tue, 18 Dec 2007 07:33:55 +0000</pubDate>
				<link>https://tripleodeon.com/2007/12/when-politics-blows-up-the-semantic-web/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/12/when-politics-blows-up-the-semantic-web/</guid>
			</item>
		
			<item>
				<title>Bush hid the facts</title>
        <description>&lt;p&gt;If you are lucky enough to run Windows, open Notepad, type “Bush hid the facts” (without the quotes), and save the file.&lt;/p&gt;

&lt;p&gt;Open it back up again …indeed, the facts are hidden.&lt;/p&gt;

&lt;p&gt;(NB: I find this completely amazing. Why the hell would it do this?)&lt;/p&gt;
</description>
				<pubDate>Thu, 06 Dec 2007 21:58:13 +0000</pubDate>
				<link>https://tripleodeon.com/2007/12/bush-hid-the-facts/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/12/bush-hid-the-facts/</guid>
			</item>
		
			<item>
				<title>.mobi auctions: Music, Games, Sports, WTF?</title>
        <description>&lt;p&gt;Results in from the latest domain auction at Sedo:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;music.mobi – $616,000&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;games.mobi – $401,500&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;sports.mobi – $101,000&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Very exciting. This proves that there’s significant economic heat building up in the mobile web. A medium starting grow up.&lt;/p&gt;

&lt;p&gt;It’s a shame that some people will undoubtedly whinge about the fact that this is pretty amazing income for something as simple as a domain name.&lt;/p&gt;

&lt;p&gt;But most importantly to me, and, I hope, to the entire mobile community, is the fact that this is helping fund all the other stuff we do. It certainly doesn’t &lt;em&gt;feel&lt;/em&gt; like money for nothing.&lt;/p&gt;

&lt;p&gt;Ever wondered who pays for the essential &lt;a href=&quot;http://dev.mobi&quot;&gt;dev.mobi&lt;/a&gt;, &lt;a href=&quot;http://ready.mobi&quot;&gt;ready.mobi&lt;/a&gt; and …Device Atlas? Answer: the bidders in these auctions. And we’ll continue to do our best to make the community benefit from it.&lt;/p&gt;

&lt;p&gt;(and PS: yes, we will be making sure these winning sites are .mobi compliant)&lt;/p&gt;
</description>
				<pubDate>Wed, 05 Dec 2007 22:55:26 +0000</pubDate>
				<link>https://tripleodeon.com/2007/12/mobi-auctions-music-games-sports-wtf/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/12/mobi-auctions-music-games-sports-wtf/</guid>
			</item>
		
			<item>
				<title>How can I get out of this house without going anywhere near your garage?</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://www.bvp.com/Portfolio/AntiPortfolio.aspx&quot;&gt;Inspiring stuff&lt;/a&gt; (in a way)&lt;/p&gt;

&lt;p&gt;And thanks to (http://opengardensblog.futuretext.com/archives/2007/11/the_anti_portfo.html) for the link.&lt;/p&gt;
</description>
				<pubDate>Sat, 01 Dec 2007 02:31:07 +0000</pubDate>
				<link>https://tripleodeon.com/2007/12/how-can-i-get-out-of-this-house-without-going-anywhere-near-your-garage/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/12/how-can-i-get-out-of-this-house-without-going-anywhere-near-your-garage/</guid>
			</item>
		
			<item>
				<title>Mobile Monday Dublin&amp;#8230; The Christmas Do</title>
        <description>&lt;p&gt;We have search specialists Taptu coming to Dublin to present and sponsor our December meeting. Thanks guys.&lt;/p&gt;

&lt;p&gt;And for anyone else in the Dublin or London area who would like food, drink, mobile conversation and Christmas cheer (as well as this year’s hottest news in mobile search), please see more details &lt;a href=&quot;http://www.momodublin.com/?p=16&quot;&gt;here&lt;/a&gt;, sign up &lt;a href=&quot;http://uk.groups.yahoo.com/group/momodublin/surveys?id=2616864&quot;&gt;here&lt;/a&gt;, or simply mail me.&lt;/p&gt;

&lt;p&gt;See you there!&lt;/p&gt;
</description>
				<pubDate>Tue, 27 Nov 2007 17:44:40 +0000</pubDate>
				<link>https://tripleodeon.com/2007/11/mobile-monday-dublin-the-christmas-do/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/11/mobile-monday-dublin-the-christmas-do/</guid>
			</item>
		
			<item>
				<title>dotMobi staff sites hit the big time</title>
        <description>&lt;p&gt;Following our &lt;a href=&quot;http://www.tripleodeon.com/?p=94&quot;&gt;little competition&lt;/a&gt; last week, we’re amazed to learn that 6 of our sites have been selected for the “Best of the Internet” section of one of our national operators’ portal.&lt;/p&gt;

&lt;p&gt;Well, that was just in our spare time. I wonder what we could do if we really tried.&lt;/p&gt;

&lt;p&gt;(Although I do wonder what that says about today’s mobile web… 🙂 )&lt;/p&gt;

&lt;p&gt;I did my part and updated &lt;a href=&quot;http://metajam.mobi/&quot;&gt;MetaJam.mobi&lt;/a&gt;. It now includes musical artists and albums along with movie and actor pages. And I’ve earned a healthy 68 cents on AdMob already. Bling!&lt;/p&gt;
</description>
				<pubDate>Mon, 26 Nov 2007 22:47:58 +0000</pubDate>
				<link>https://tripleodeon.com/2007/11/dotmobi-staff-sites-hit-the-big-time/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/11/dotmobi-staff-sites-hit-the-big-time/</guid>
			</item>
		
			<item>
				<title>The dotMobi Site Building Competition</title>
        <description>&lt;p&gt;The folks at dotMobi are a fairly creative bunch, so we thought it would be fun to run a site building competition amonst the staff.&lt;/p&gt;

&lt;p&gt;Competing in two categories – my engineering team vs everyone else – the staff were all in the running for two shiny iPhones. Plus, of course, the opportunity to try and avoid bricking them on Irish networks.&lt;/p&gt;

&lt;p&gt;The competition has just finished. All in all, not bad work for a few weeks of our (little) spare time.&lt;/p&gt;

&lt;p&gt;A quick fanfare for Ronan Cremin (of &lt;a href=&quot;http://find.mobi/&quot;&gt;http://find.mobi&lt;/a&gt; fame), who built quite simply one of the coolest – or should I say most useful – mobile apps I’ve seen in a long time. SVG maps! PNG trains! MP3 dictation! &lt;a href=&quot;http://tjamm.mobi&quot;&gt;It’s all in there&lt;/a&gt; 🙂&lt;/p&gt;

&lt;p&gt;You can get to the full list of sites directly on your mobile at &lt;a href=&quot;http://metajam.mobi/m/&quot;&gt;http://metajam.mobi/m/&lt;/a&gt; …here are some of the best of the bunch:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The non-technical category (i.e. marketing, finance and the executive team)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bear in mind (and I am sure no-one in this category minds me telling you) that none of them know how to write HTML or perhaps even recognise it 🙂&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Amy Mischler; mobile yoga&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://mobiyogi.mobi/&quot;&gt;http://mobiyogi.mobi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caroline Greer; ICANN travel log&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://icanntravel.mobi/&quot;&gt;http://icanntravel.mobi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gesu Sood (category winner); fun on the run&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://gesusood.mobi/&quot;&gt;http://gesusood.mobi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Norbert Grey; “Gone to the dogs”&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://mtld.mobi/team/ngrey/&quot;&gt;http://mtld.mobi/team/ngrey/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Zico Moro; Dublin city guide&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://mtld.mobi/team/zmoro&quot;&gt;http://mtld.mobi/team/zmoro&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The technical category (i.e. the engineering team)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;These guys know a little magic – or so they assure me, at least&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Cyril Couffignal; Send picture-messages via email to a web gallery&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://uspot.mobi/&quot;&gt;http://uspot.mobi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;James Pearce; a movie database for your pocket (disqualified for being the judge)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://metajam.mobi/&quot;&gt;http://metajam.mobi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jo Rabin; A W3C test tool for mobile&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://rabin.mobi/dmplbit&quot;&gt;http://rabin.mobi/dmplbit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ronan Cremin (category winner); how to commute in Dublin City&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://tjamm.mobi/&quot;&gt;http://tjamm.mobi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ruadhan O’Donoghue; directions and traffic information&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://go4th.mobi/&quot;&gt;http://Go4th.mobi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stephen Stewart; The dotMobi Advent Calendar&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://1.61803.mobi/advent/&quot;&gt;http://1.61803.mobi/advent/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What creativity and invention! Yes, it turns out that there are lots of uncharted opportunities for the mobile medium.&lt;/p&gt;

&lt;p&gt;When motivation and decent tools are put into the hands of people who have interesting ideas, you never know what will happen.&lt;/p&gt;
</description>
				<pubDate>Thu, 22 Nov 2007 23:18:27 +0000</pubDate>
				<link>https://tripleodeon.com/2007/11/the-dotmobi-site-building-competition/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/11/the-dotmobi-site-building-competition/</guid>
			</item>
		
			<item>
				<title>I named 52 HTML elements in 5 minutes</title>
        <description>&lt;p&gt;(I was just typing in &lt;style&gt; and &lt;select&gt; as the time ran out)&lt;/select&gt;&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;Cool fun. And hard. Anyone for a mobile version? WML, say.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.justsayhi.com/bb/html_quiz&quot;&gt;&lt;strong&gt;52&lt;/strong&gt;&lt;/a&gt;{#mingle2_badge}&lt;/p&gt;
</description>
				<pubDate>Tue, 20 Nov 2007 21:16:22 +0000</pubDate>
				<link>https://tripleodeon.com/2007/11/i-named-52-html-elements-in-5-minutes/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/11/i-named-52-html-elements-in-5-minutes/</guid>
			</item>
		
			<item>
				<title>Carnival of the Mobilists #100</title>
        <description>&lt;p&gt;It’s here. &lt;a href=&quot;http://abhishek.tiwari.com/2007/11/19/carnival-of-mobilists-100th-edition/&quot;&gt;Number 100&lt;/a&gt;. I’m linked. Thanks 🙂&lt;/p&gt;
</description>
				<pubDate>Mon, 19 Nov 2007 16:45:21 +0000</pubDate>
				<link>https://tripleodeon.com/2007/11/carnival-of-the-mobilists-100/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/11/carnival-of-the-mobilists-100/</guid>
			</item>
		
			<item>
				<title>[Ego blog] I made SF Chronicle</title>
        <description>&lt;p&gt;I don’t usually get excited about media coverage, since it’s usually some obscure telecoms trade rag.&lt;/p&gt;

&lt;p&gt;But now &lt;a href=&quot;http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2007/11/13/BUIITB3SF.DTL&amp;amp;type=tech&quot;&gt;I’m in the San Francisco Chronicle&lt;/a&gt; as a quoted expert! The topic being Google Android and its impact on developers (which &lt;a href=&quot;http://www.tripleodeon.com/?p=90&quot;&gt;could be great&lt;/a&gt;, of course)&lt;/p&gt;

&lt;p&gt;So please forgive me this one 🙂&lt;/p&gt;

&lt;p&gt;Ha ha ha. My quote follows Sergey Brin’s. That made me smile. I mean, I only read the API like everyone else…&lt;/p&gt;
</description>
				<pubDate>Wed, 14 Nov 2007 22:30:21 +0000</pubDate>
				<link>https://tripleodeon.com/2007/11/ego-blog-i-made-sf-chronicle/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/11/ego-blog-i-made-sf-chronicle/</guid>
			</item>
		
			<item>
				<title>Google Android &amp;#8211; as told and used by its own developers</title>
        <description>&lt;p&gt;While &lt;a href=&quot;http://www.torgo.com/blog/2007/11/mobile-internet-world.html&quot;&gt;other protagonists&lt;/a&gt; nipped off to London, I stayed at Mobile Internet World to &lt;a href=&quot;http://www.momoboston.com/&quot;&gt;provide the drinks for MoMoBoston&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The event’s headline scoop was a couple of developers, David Carson and Alan Blount, from the Google Android team. In fact I think they work just across the river.&lt;/p&gt;

&lt;p&gt;It was a well-filled room of several hundred people, but when they started by asking how many developers were in the room, I only saw one hand (perhaps they’re just shy). I guess most of the MIW delegates that crashed the party aren’t coding kids.&lt;/p&gt;

&lt;p&gt;Never mind. The presentation deleved into a component-by-component analysis of the entire device stack anyway.&lt;/p&gt;

&lt;p&gt;The centrepiece of the presentation of the demo was them attempting live development in front of our eyes. With nothing more than Eclipse, the Android plugin, and some nervous copy-and-pasting, they managed to show how one can wire up a text box to a browser control to act as an address bar. Cool enough although hardly warranting the “we’re going to build a web browser in 5 minutes” anecdote.&lt;/p&gt;

&lt;p&gt;For most of the crowd, I think the pace dropped a little at this point. We watched masters-of-the-universe wrestle with Eclipse autocomplete, on-stage typing nerves, and a few run-time exceptions. But they lashed together something in the end, and they got applause for coaxing WebKit to render CNN.com. Cute, I suppose.&lt;/p&gt;

&lt;p&gt;(Aside: for me the most interesting part is not the Java particularly, but the &lt;a href=&quot;http://code.google.com/android/devel/ui/xml.html&quot;&gt;declarative XML&lt;/a&gt; for GUIs. There are so damn many of &lt;a href=&quot;http://en.wikipedia.org/wiki/Comparison_of_user_interface_markup_languages&quot;&gt;these things&lt;/a&gt; now!)&lt;/p&gt;

&lt;p&gt;Then questions. And the, perhaps unwitting, audience focus in on Dalvik extremely quickly. Why did you build a new virtual machine? Why not use existing approaches? Why not go direct to native Linux? And so on. Standard party line: designed specially for small devices, optimised for Linux, open, etc etc. Well done, &lt;a href=&quot;http://www.betaversion.org/~stefano/linotype/news/110/&quot;&gt;no mention of Sun&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Also some inevitable questions about hardware support &amp;amp; integration, and security &amp;amp; ubiquitousness of the APIs. Yes, it’s not just a high-end phone platform – it’s aimed to be suitable for mass-market. Yes, of course different handsets will expose different hardware functionality. And yes, there are things like the location-based API which might be secured, but of course it’ll be down to the individual implementations.&lt;/p&gt;

&lt;p&gt;Perhaps undue bravery &amp;amp; even naivety here. Surely every operator and handset manufacturer is going to be sorely tempted to bend and mould and constrain what the device exposes or what the applications can do. The default starting position will not be complete openness.&lt;/p&gt;

&lt;p&gt;Despite the presence of the word “Open” in the alliance’s title, I expect reversion-to-type by old school telecoms, and that could be the project’s biggest nightmare. The developers suggested further such tricky questions were brought up at the following day’s keynote. “We just write the code” was probably the right thing to say.&lt;/p&gt;

&lt;p&gt;Nevertheless, &lt;a href=&quot;http://dotmobi.typepad.com/dotmobi/2007/11/android-and-the.html&quot;&gt;I remain enthusiastic&lt;/a&gt; overall. If Android becomes a dominant platform, then a lot of developer’s problems go away. That may happen. But of course it will only do so over many, many dead bodies – including those of plenty of companies of some significance. So success will be hard and bloody.&lt;/p&gt;

&lt;p&gt;But even if Android does not become dominant, it will have shown that there is another way of looking at handset development. As Tom Hume &lt;a href=&quot;http://www.tomhume.org/2007/11/fragmenting-and.html&quot;&gt;says&lt;/a&gt;, it is, at the least, shaking things up a little. What other handset platform has ever exposed a developer’s API a year before any handsets are even likely to reach the shops?&lt;/p&gt;

&lt;p&gt;Received and traditional telecoms wisdom is to build handsets for consumers first, operators a close second, and developers a distant third.&lt;/p&gt;

&lt;p&gt;What Google seems to be trying to do (with no insignificant &lt;a href=&quot;http://code.google.com/android/adc.html&quot;&gt;bribery&lt;/a&gt; too) is to see what happens when you reverse that order – or at the very least make developers feel like first-class citizens in the ecosystem. Build up a head-of-steam with third-party apps before the handsets ever emerge, and as such, an admirable experiment.&lt;/p&gt;

&lt;p&gt;But will that be enough to make their force truly unstoppable when it meets the immovable object of today’s ecosystem? I’m certainly looking forward to finding out.&lt;/p&gt;
</description>
				<pubDate>Wed, 14 Nov 2007 12:44:49 +0000</pubDate>
				<link>https://tripleodeon.com/2007/11/google-android-as-told-and-used-by-its-own-developers/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/11/google-android-as-told-and-used-by-its-own-developers/</guid>
			</item>
		
			<item>
				<title>I&amp;#8217;m at Mobile Internet World</title>
        <description>&lt;p&gt;W3C Workshop this afternoon, MoMo tonight. Presentations, panels &amp;amp; briefings tomorrow and Thursday.&lt;/p&gt;

&lt;p&gt;Give me a shout if you are about.&lt;/p&gt;

&lt;p&gt;It’s a pre-conference workshop right now, so just figuring out the crowd. Seems a bit telecomsy. The conference poster shows a woman in a speeding car with laptop surfing the web (with husband speaking into phone). WTF.&lt;/p&gt;

&lt;p&gt;Occasional &lt;a href=&quot;http://jamespearce.jaiku.com/&quot;&gt;Jaiku coverage&lt;/a&gt; until my N73 battery dies each day.&lt;/p&gt;
</description>
				<pubDate>Tue, 13 Nov 2007 17:21:32 +0000</pubDate>
				<link>https://tripleodeon.com/2007/11/im-at-mobile-internet-world/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/11/im-at-mobile-internet-world/</guid>
			</item>
		
			<item>
				<title>Russian dance music</title>
        <description>&lt;p&gt;There seems to have been a revolution in Russian music over the last 12 months. House and deep house in particular – genres that have traditionally been strong in the UK, Germany and Holland.&lt;/p&gt;

&lt;p&gt;Does it seem odd to think of Russians as composers of dance music? Not particularly… Tchaikovsky, Stravinsky and Prokofiev anyone?&lt;/p&gt;

&lt;p&gt;Also composers of world-class dance music 🙂 … and interestingly too, composers from a period following one dominated by Germanic influence.&lt;/p&gt;
</description>
				<pubDate>Sat, 10 Nov 2007 09:41:06 +0000</pubDate>
				<link>https://tripleodeon.com/2007/11/russian-dance-music/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/11/russian-dance-music/</guid>
			</item>
		
			<item>
				<title>My $10bn mobile idea</title>
        <description>&lt;p&gt;The Web2.0 event has a strange effect on you. Creates a little suspension of reality.&lt;/p&gt;

&lt;p&gt;I came away with a business idea that could be worth (at least!) as much as Facebook. And yes, it involves mobile!&lt;/p&gt;

&lt;p&gt;Want to know what it is? Do you?&lt;/p&gt;

&lt;p&gt;(Well… have you got $10bn dollars? 🙂 )&lt;/p&gt;
</description>
				<pubDate>Sun, 21 Oct 2007 20:53:05 +0000</pubDate>
				<link>https://tripleodeon.com/2007/10/my-10bn-mobile-idea/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/10/my-10bn-mobile-idea/</guid>
			</item>
		
			<item>
				<title>Web 0.1: and the mother of all demos</title>
        <description>&lt;p&gt;Amongst the bluster of the Web 2.0 Summit, if you ever think you are being innovative, if you ever think you have discovered something new, and if you’re ever brave enough to think you might be shaping the future…&lt;/p&gt;

&lt;p&gt;…then watch this and be humbled:&lt;/p&gt;

&lt;p&gt;(and the &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Mother_of_All_Demos&quot;&gt;context&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Mouse, email, &lt;em&gt;hyperlinks&lt;/em&gt;. In 1968.&lt;/p&gt;
</description>
				<pubDate>Fri, 19 Oct 2007 03:06:10 +0000</pubDate>
				<link>https://tripleodeon.com/2007/10/web-01-and-the-mother-of-all-demos/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/10/web-01-and-the-mother-of-all-demos/</guid>
			</item>
		
			<item>
				<title>Kyte.tv rocks Mobile 2.0</title>
        <description>&lt;p&gt;Winner of coolest demo definitely goes to Kyte.tv&lt;/p&gt;

&lt;p&gt;As Dan says, “Magic From The Future”.&lt;/p&gt;

&lt;p&gt;See our ugly mugs here:&lt;/p&gt;
</description>
				<pubDate>Mon, 15 Oct 2007 23:41:11 +0000</pubDate>
				<link>https://tripleodeon.com/2007/10/kytetv-rocks-mobile-20/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/10/kytetv-rocks-mobile-20/</guid>
			</item>
		
			<item>
				<title>/Mobile\s((Web)&amp;#124;(Internet))\s(2\.0)?/</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://dev.mobi/node/609&quot;&gt;London&lt;/a&gt;, &lt;a href=&quot;http://www.mobilewebexpo.com/&quot;&gt;Orlando&lt;/a&gt;, &lt;a href=&quot;http://www.mobilenetx.com/index.shtml&quot;&gt;Boston&lt;/a&gt;. This week it’s the turn of &lt;a href=&quot;http://www.mobile2event.com/&quot;&gt;[London](http://dev.mobi/node/609), [Orlando](http://www.mobilewebexpo.com/), [Boston](http://www.mobilenetx.com/index.shtml). This week it’s the turn of&lt;/a&gt; to host the next of what appears to be becoming this Autumn’s fortnightly conference-series-just-with-different-names.&lt;/p&gt;

&lt;p&gt;Signs are good that this is going to be the best one though. To some extent, there are a few of the usual suspects there. But slides have been banned (&lt;a href=&quot;http://www.edwardtufte.com/tufte/graphics/book_pp_cover.gif&quot;&gt;yay&lt;/a&gt;) and that should stimulate discussion. And I rate the organisers highly – they’ve brought together a good crowd.&lt;/p&gt;

&lt;p&gt;Personally, I hope we spend as little time as possible bolstering our own cliquey reputations,  and more time trying to figure out how to make sure that next year, we’re &lt;a href=&quot;http://www.web2summit.com/&quot;&gt;down the road&lt;/a&gt; (storming the palace) rather than sitting it out on the periphery.&lt;/p&gt;

&lt;p&gt;Still, the mobile revolution has to start somewhere I guess.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(And I don’t mean with dodgy regex!__)&lt;/em&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 15 Oct 2007 05:03:03 +0000</pubDate>
				<link>https://tripleodeon.com/2007/10/mobileswebinternets20/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/10/mobileswebinternets20/</guid>
			</item>
		
			<item>
				<title>The biggest mobile news this year</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://www.jaiku.com/blog/2007/10/09/were-joining-google/&quot;&gt;Google buys Jaiku&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 09 Oct 2007 20:01:01 +0000</pubDate>
				<link>https://tripleodeon.com/2007/10/the-biggest-mobile-news-this-year/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/10/the-biggest-mobile-news-this-year/</guid>
			</item>
		
			<item>
				<title>A big week at dotMobi</title>
        <description>&lt;p&gt;Apart from a &lt;a href=&quot;http://dotmobi.typepad.com/dotmobi/2007/09/back-to-the-blo.html&quot;&gt;Apart from a&lt;/a&gt; of domain activity going on, the dotMobi Technology Team sneaked out not one, but two important pieces of work this week.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Jo Rabin (our W3C representative extraordinaire) has created &lt;a href=&quot;http://dev.mobi/node/612&quot;&gt;an addendum to our current styleguides&lt;/a&gt;. We think developers should know that HTTP headers like &lt;em&gt;cache-control&lt;/em&gt; and &lt;em&gt;vary&lt;/em&gt; are excellent tools for ensuring that transcoding platforms don’t disrupt content that’s been made for mobile.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We know that a little bit of a holy war has spilled out across the internet between mobile developers and Vodafones UK &amp;amp; Ireland: who have recently introduced transcoding proxies to improve the experience of users accessing not-made-for-mobile-sites.&lt;/p&gt;

&lt;p&gt;We thought it was helpful to actually provide some &lt;a href=&quot;http://dev.mobi/node/611&quot;&gt;constructive ideas&lt;/a&gt; for how developers can deal with the transcoding vogue. And at the same time, we’re hoping our relationship with standards bodies and network operators will help others to understand and mitigate the pain that developers feel.&lt;/p&gt;

&lt;p&gt;I’d actually believe that transcoding is really just a safety net for users (who probably don’t actually know that many made-for-mobile URLs off the top of their heads). If, over time, such sites became more ubiquitous, one would hope that the need for blanket transcoding might decline.&lt;/p&gt;

&lt;p&gt; 2. As if that wasn’t enough, we launched a beta of our mobile web directory this week. We call it &lt;strong&gt;find.mobi&lt;/strong&gt; because we think finding things when mobile is more important than searching for them.&lt;/p&gt;

&lt;p&gt;We have a web UI on the front of the directory (which you can go ahead and try at &lt;a href=&quot;http://find.mobi/&quot;&gt;http://find.mobi&lt;/a&gt;). We think there are some interesting aspects to the way this works, specifically intended for the mobile context. Ronan has &lt;a href=&quot;http://dev.mobi/node/610&quot;&gt;the details&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We’re not trying to compete with existing search providers (including our own investors!). Rather, we are demonstrating how it is possible to showcase and champion made-for-mobile sites – which Find.mobi contains exclusively – and we’re able to syndicate the directory and the indexes to other parties to help them improve &lt;em&gt;their&lt;/em&gt; knowledge of made-for-mobile sites. Enjoy.&lt;/p&gt;

&lt;p&gt;Oh – and do I need to say we’ve still &lt;a href=&quot;http://blog.trasatti.it/2007/07/dotmobis-mobile-phone-database-what-is.html&quot;&gt;a global device database&lt;/a&gt; in the works? 🙂&lt;/p&gt;
</description>
				<pubDate>Sun, 30 Sep 2007 05:26:52 +0000</pubDate>
				<link>https://tripleodeon.com/2007/09/a-big-week-at-dotmobi/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/09/a-big-week-at-dotmobi/</guid>
			</item>
		
			<item>
				<title>Google mobile ad revenue: 74% growth&amp;#8230; day-on-day</title>
        <description>&lt;p&gt;An &lt;a href=&quot;http://www.russellbeattie.com/blog/adsense-for-mobile-day-4-and-the-goog-has-arrived&quot;&gt;interesting set of stats&lt;/a&gt; came in over night from Russell Beattie.&lt;/p&gt;

&lt;p&gt;He’s tracking his new &lt;a href=&quot;http://blogoscoped.com/archive/2007-09-18-n77.html&quot;&gt;Google Mobile AdSense&lt;/a&gt; revenue to see how it catches up or matches &lt;a href=&quot;http://admob.blogspot.com/2007/09/very-unboring-industry.html&quot;&gt;AdMob&lt;/a&gt;‘s.&lt;/p&gt;

&lt;p&gt;Regardless of the &lt;em&gt;quality&lt;/em&gt; of the ads, their mobile contextuality, or the two providers’ relative brands,  I maintain that most mobile web developers will go with the provider that helps them fill their pockets quickest.&lt;/p&gt;

&lt;p&gt;And because I suspect Russell is particular AdMob fan, the result he presents is particularly noteworthy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;$3.50&lt;/strong&gt; on Wednesday.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;$18.54&lt;/strong&gt; by Saturday.&lt;/p&gt;

&lt;p&gt;That’s something like &lt;strong&gt;74%&lt;/strong&gt; average daily growth.&lt;/p&gt;

&lt;p&gt;Russell claims these have now “caught up to my AdMob earnings in just 4 days”. Judging by the table, the growth is being fuelled by new clicks, despite the impressions being stable. So perhaps the quality and contextuality of Google’s ads &lt;em&gt;are&lt;/em&gt; their driving forces.&lt;/p&gt;

&lt;p&gt;[…disclosure: Google is an investor in my company. But even if they were not, this would still be pretty amazing]&lt;/p&gt;

&lt;p&gt;UPDATE: I got the maths wrong. &lt;sigh&gt; It&amp;#8217;s higher than I originally stated!&lt;/sigh&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 23 Sep 2007 06:21:52 +0000</pubDate>
				<link>https://tripleodeon.com/2007/09/google-mobile-ad-revenue-53-growth-day-on-day/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/09/google-mobile-ad-revenue-53-growth-day-on-day/</guid>
			</item>
		
			<item>
				<title>iPhone and the wobbly O2 logo</title>
        <description>&lt;p&gt;Few surprises, but &lt;a href=&quot;http://www.apple.com/uk/iphone/&quot;&gt;here it is&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The wobbly O2 logo looks like it’s a mirage… from the heat of sudden interest in the operator?&lt;/p&gt;

&lt;p&gt;Certainly the &lt;a href=&quot;http://www.apple.com/uk/iphone/&quot;&gt;O2 corporate web site&lt;/a&gt;, as at this moment, doesn’t have quite the Apple gloss (or even the announement itself!). This will certainly be a mismatch of corporate cultures. I’ve worked with O2 – they’re great people, but a fair way away from Apple in terms of corporate values 🙂&lt;/p&gt;

&lt;p&gt;UPDATE: it’s on the &lt;a href=&quot;http://o2.co.uk/&quot;&gt;O2 UK&lt;/a&gt; site… but the target of the banner ad seems to be struggling under the load. Hopefully not a sign of things to come.&lt;/p&gt;

&lt;p&gt; UPDATE 2: O2 logo isn’t wobbly any more. Maybe the interest has died off? 🙂&lt;/p&gt;
</description>
				<pubDate>Tue, 18 Sep 2007 10:07:49 +0000</pubDate>
				<link>https://tripleodeon.com/2007/09/iphone-and-the-wobbly-o2-logo/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/09/iphone-and-the-wobbly-o2-logo/</guid>
			</item>
		
			<item>
				<title>Apple and O2 stores down for maintenance</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2007/09/o2.GIF&quot; title=&quot;o2.GIF&quot;&gt;&lt;img src=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2007/09/o2.thumbnail.GIF&quot; alt=&quot;o2.GIF&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2007/09/apple.GIF&quot; title=&quot;apple.GIF&quot;&gt;&lt;img src=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2007/09/apple.thumbnail.GIF&quot; alt=&quot;apple.GIF&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Co-incidence? You decide…&lt;/p&gt;

&lt;p&gt;Me? I’m betting on a medium price, with a loooong contract.&lt;/p&gt;
</description>
				<pubDate>Tue, 18 Sep 2007 09:28:39 +0000</pubDate>
				<link>https://tripleodeon.com/2007/09/apple-and-o2-stores-down-for-maintenance/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/09/apple-and-o2-stores-down-for-maintenance/</guid>
			</item>
		
			<item>
				<title>Free beer, free food, and free mobile demos</title>
        <description>&lt;p&gt;(not in order of interest of course!)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.momodublin.com/?p=15&quot;&gt;Mobile Monday Dublin&lt;/a&gt;‘s September event is next week, on the 24th at The Hairy Lemon pub.&lt;/p&gt;

&lt;p&gt;It’s Demo Night, and the good mobilati of Dublin will be enjoying demos and presentations from the likes of Mobile Aware, Sentry Wireless, and Mobile Complete.&lt;/p&gt;

&lt;p&gt;There’s more detail &lt;a href=&quot;http://www.momodublin.com/?p=15&quot;&gt;here&lt;/a&gt;. You’ll need to quickly &lt;a href=&quot;http://uk.groups.yahoo.com/group/momodublin/surveys?id=2573642&quot;&gt;register&lt;/a&gt; to come, and for those of you able to make it, I look forward to seeing you there!&lt;/p&gt;
</description>
				<pubDate>Tue, 18 Sep 2007 08:51:18 +0000</pubDate>
				<link>https://tripleodeon.com/2007/09/free-beer-free-food-and-free-mobile-demos/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/09/free-beer-free-food-and-free-mobile-demos/</guid>
			</item>
		
			<item>
				<title>Mobile on Wireless</title>
        <description>&lt;p&gt;I am just about to speak to &lt;a href=&quot;http://davemason.com/computertalk.html&quot;&gt;Dave Mason&lt;/a&gt; on his live radio show, and if you’re listening Stateside, you’ll hear from me soon.&lt;/p&gt;
</description>
				<pubDate>Sat, 08 Sep 2007 17:26:48 +0000</pubDate>
				<link>https://tripleodeon.com/2007/09/mobile-on-wireless/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/09/mobile-on-wireless/</guid>
			</item>
		
			<item>
				<title>&amp;#8220;Nothing short of amazing&amp;#8221;</title>
        <description>&lt;p&gt;We’re deeply chuffed that &lt;a href=&quot;http://wapreview.com/blog/?p=386&quot;&gt;the mighty WAP Review has reviewed&lt;/a&gt; dotMobi’s recent efforts so positively. Thank you Dennis.&lt;/p&gt;

&lt;p&gt;And it’s just the start of things to come!&lt;/p&gt;

&lt;p&gt;(Can’t stop now… got to get back to building them 🙂 )&lt;/p&gt;
</description>
				<pubDate>Thu, 30 Aug 2007 10:33:40 +0000</pubDate>
				<link>https://tripleodeon.com/2007/08/nothing-short-of-amazing/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/08/nothing-short-of-amazing/</guid>
			</item>
		
			<item>
				<title>LUAS whitenoise</title>
        <description>&lt;p&gt;As the only passenger on this morning’s tram without headphones on, I enjoy a multi-track, second-order musical assault from everyone else’s.&lt;/p&gt;

&lt;p&gt;I wonder… How many distinct musical sources can a human ear distinguish? Does it help if they are different genres? How many iPods are required to create perfect whitenoise?&lt;/p&gt;
</description>
				<pubDate>Thu, 30 Aug 2007 06:50:38 +0000</pubDate>
				<link>https://tripleodeon.com/2007/08/luas-whitenoise/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/08/luas-whitenoise/</guid>
			</item>
		
			<item>
				<title>Drupal, AJAX, Scriptaculous</title>
        <description>&lt;p&gt;Following my assertion that the only problems in Drupal are the ones you haven’t found modules for yet, I discover &lt;a href=&quot;http://aymanh.com/drag-drop-portal-interface-with-scriptaculous&quot;&gt;Drupal meets Scriptaculous&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exactly what I need to let users define their own layouts of mobile device information web parts.&lt;/p&gt;

&lt;p&gt;Oh… did I just give away a secret?&lt;/p&gt;
</description>
				<pubDate>Tue, 28 Aug 2007 19:22:24 +0000</pubDate>
				<link>https://tripleodeon.com/2007/08/drupal-ajax-scriptaculous/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/08/drupal-ajax-scriptaculous/</guid>
			</item>
		
			<item>
				<title>Calling the mobile old-school!</title>
        <description>&lt;p&gt;Ericsson R380 touchscreen over the iPhone anyday? Wish “Mobile Monday” was “WAP Wednesday”? Wonder where AnywhereYouGo.com went? Ever wanted to “Surf the mobile internet?” Think that compiling markup is the coolest thing?&lt;/p&gt;

&lt;p&gt;If you’re old school, you might like to join me for a quick trip down memory lane – before the mobile web goes stratospheric and we forget the hard work that yesteryear’s pioneers put in.&lt;/p&gt;

&lt;p&gt;I’m planning a blog post on the mobile web circa 1999 and I’m looking for contributions.&lt;/p&gt;

&lt;p&gt;(Hmm, turns out I’m not the virgin mobile blogger you had me for)&lt;/p&gt;

&lt;p&gt;Were you there? What do you remember? What makes you laugh, and what makes you misty-eyed?&lt;/p&gt;

&lt;p&gt;🙂&lt;/p&gt;

&lt;p&gt;Drop me a line at &lt;a href=&quot;mailto:wml.was.woefully.misunderstood@tripleodeon.com&quot;&gt;wml.was.woefully.misunderstood@tripleodeon.com&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 12 Aug 2007 19:23:25 +0000</pubDate>
				<link>https://tripleodeon.com/2007/08/calling-the-mobile-old-school/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/08/calling-the-mobile-old-school/</guid>
			</item>
		
			<item>
				<title>Mobile Web Irony</title>
        <description>&lt;p&gt;I shouldn’t laugh, because these &lt;a href=&quot;http://www.w3.org/2007/02/mwbp_flip_cards&quot;&gt;flip cards&lt;/a&gt; are very cool and are the tip of an iceberg of lots of hard work.&lt;/p&gt;

&lt;p&gt;But of all the pages to exhibit a CSS interoperability issue, this was cruel luck, and I’m afraid it made me smile 🙂&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2007/08/image1.gif&quot; title=&quot;image1.gif&quot;&gt;&lt;img src=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2007/08/image1.thumbnail.gif&quot; alt=&quot;image1.gif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Looks fine in Firefox of course. I &lt;a href=&quot;http://ready.mobi/results.jsp?uri=http%3A%2F%2Fwww.w3.org%2F2007%2F02%2Fmwbp_flip_cards&quot;&gt;wonder&lt;/a&gt; about mobile browsers…)&lt;/p&gt;

&lt;p&gt;Otherwise, great work W3C!&lt;/p&gt;
</description>
				<pubDate>Tue, 07 Aug 2007 17:10:46 +0000</pubDate>
				<link>https://tripleodeon.com/2007/08/mobile-web-irony/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/08/mobile-web-irony/</guid>
			</item>
		
			<item>
				<title>I am Officially a Technology Stakeholder of the Web</title>
        <description>&lt;p&gt;Or so it says &lt;a href=&quot;http://xhtml.com/en/future/fixing-the-web-1/#interviews&quot;&gt;here&lt;/a&gt;. And whatever it means 🙂&lt;/p&gt;

&lt;p&gt;The question was “In your opinion, what parts of the Web need to be improved or fixed  in order for the Web of today to evolve into the Web of the future?”. And I said… &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Fundamentally this question assumes that the Web can be consciously improved or fixed at all! In fact the Web on any given day is really just the result the motivations of the people and organizations that have created content and services on, and via, it.&lt;/p&gt;

  &lt;p&gt;We believe that the evolution of the Web to become mobile is absolutely inevitable. In the future we will look back at ourselves in the early years of the 21st century and laugh that we used to have to sit at a lonely PC screen to enjoy our on-line existence. That will seem as antiquated and quaint as the idea of the 1950s family gathering around a box radio in their sitting room to listen to music.&lt;/p&gt;

  &lt;p&gt;The Web will lose the shackles of immobility and start to meld itself ever seamlessly around our human life, which of course, is rarely static for very long.&lt;/p&gt;

  &lt;p&gt;The Web’s technology will not need to evolve very much to start working well on mobile handsets (which have increasingly reliable browsers); however it needs to be used in a sympathetic way. There’s no point going crazy and showing off with bloated heavyweight content, not because of network speed, but because users on the move are by definition impatient and want to cut to the chase.&lt;/p&gt;

  &lt;p&gt;That makes mobile Web development quite a cathartic experience: in fact there’s a certain Zen in creating a streamlined on-line service that is primarily designed for mobile.&lt;/p&gt;

  &lt;p&gt;But ultimately the successful content and services of the coming years will be those that not only take the mobile browser’s behaviour into consideration, but which are primarily aimed at users in the mobile context. Not surprisingly, users rarely want to have pieces of a large Web presence squeezed down to their mobile phoneâ€”they rather want a compelling and beautifully designed web that suits their mobile lifestyle.&lt;/p&gt;

  &lt;p&gt;So my answer to your question is this: for the mobile Web (which &lt;em&gt;is&lt;/em&gt; the Web of the future), Web developers should think different.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anyway.  I am not a fan of that stock photo 🙂&lt;/p&gt;
</description>
				<pubDate>Tue, 07 Aug 2007 14:27:05 +0000</pubDate>
				<link>https://tripleodeon.com/2007/08/i-am-officially-a-technology-stakeholder-of-the-web/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/08/i-am-officially-a-technology-stakeholder-of-the-web/</guid>
			</item>
		
			<item>
				<title>There&amp;#8217;s no such things as a problem in Drupal&amp;#8230;</title>
        <description>&lt;p&gt;….just modules you haven’t found yet&lt;/p&gt;
</description>
				<pubDate>Fri, 03 Aug 2007 11:39:22 +0000</pubDate>
				<link>https://tripleodeon.com/2007/08/theres-no-such-thing-as-problems-in-drupal/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/08/theres-no-such-thing-as-problems-in-drupal/</guid>
			</item>
		
			<item>
				<title>More Than Just Us</title>
        <description>&lt;p&gt;I just discovered there is such a thing as a “&lt;a href=&quot;http://more-than-just-us.blogspot.com/2007/06/next-meeting-thursday-14th-june-7pm.html&quot;&gt;social group for bloggers in Hindhead, Haslemere, Grayshott, Beacon Hill&lt;/a&gt;“.&lt;/p&gt;

&lt;p&gt; – approximately 2 weeks before I leave the area to go and live abroad.&lt;/p&gt;

&lt;p&gt;So I guess I can’t help them be more than just them 😉&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Jul 2007 07:09:30 +0000</pubDate>
				<link>https://tripleodeon.com/2007/07/more-than-just-us/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/07/more-than-just-us/</guid>
			</item>
		
			<item>
				<title>A big red kangaroo&amp;#8230;</title>
        <description>&lt;p&gt;…gives me an upgrade. Silk pajamas and duvet all the way to Hong Kong.&lt;/p&gt;

&lt;p&gt;Now back to work… here for the ICANN regional meeting.&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Jul 2007 06:38:59 +0000</pubDate>
				<link>https://tripleodeon.com/2007/07/a-big-red-kangaroo/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/07/a-big-red-kangaroo/</guid>
			</item>
		
			<item>
				<title>Google Reader tracks my mobile life</title>
        <description>&lt;p&gt;I use &lt;a href=&quot;http://www.google.co.uk/reader/&quot;&gt;Google Reader&lt;/a&gt;. Sometimes on a PC, but mostly on my Nokia N73.&lt;/p&gt;

&lt;p&gt;The trends feature is cool (give or take a little CSS overflow and a Javascript error 😉 )&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2007/07/image1.gif&quot; alt=&quot;image1.gif&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Well, well. Monday is when I normally travel abroad – and spend my time standing in queues for security.&lt;/p&gt;

&lt;p&gt;I’ve been caught! Seems that’s when I catch up on my news.&lt;/p&gt;

&lt;p&gt;Notch up one for mobile. Blogs and RSS are, of course, perfectly suited for that context…&lt;/p&gt;
</description>
				<pubDate>Wed, 11 Jul 2007 23:42:33 +0000</pubDate>
				<link>https://tripleodeon.com/2007/07/google-reader-tracks-my-mobile-life/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/07/google-reader-tracks-my-mobile-life/</guid>
			</item>
		
			<item>
				<title>iPhone? iSmoke!</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://www.willitblend.com/videos.aspx?type=unsafe&amp;amp;video=iphone&quot;&gt;Completely nuts.&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 11 Jul 2007 15:43:04 +0000</pubDate>
				<link>https://tripleodeon.com/2007/07/iphone-ismoke/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/07/iphone-ismoke/</guid>
			</item>
		
			<item>
				<title>Mobile Web Testing and Web 2.0: the love-child</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://dotmobi.typepad.com/dotmobi/2007/07/flagship-mobile.html&quot;&gt;Cool new software alert&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;If you know a bit about my background, and what I did at Argogroup, you’ll smile when you see what &lt;a href=&quot;http://beta.ready.mobi&quot;&gt;dotMobi has just done&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mobile quality assurance meets Web 2.0. And it rocks.&lt;/p&gt;

&lt;p&gt;I can’t take any of the credit! The kudos goes to &lt;a href=&quot;http://dev.mobi/user/6&quot;&gt;Ruadhan&lt;/a&gt; for the code, &lt;a href=&quot;http://dev.mobi/user/5&quot;&gt;Ronan&lt;/a&gt; for the algorithms, and &lt;a href=&quot;http://green.carisenda.com/archive/2007/06/hey_i_have_a_ne.html&quot;&gt;Stephen&lt;/a&gt; for the design, while I fly around the world mumbling about mobile user experience and telling the world how cool all their work is.&lt;/p&gt;

&lt;p&gt;Invite yourself to take part in the beta trial, login and have a go, and tell us what you think we need to improve before we launch.&lt;/p&gt;

&lt;p&gt;Does it seem mad busy at dotMobi – or is it just me? But trust me, two bigger projects are still to hit…&lt;/p&gt;
</description>
				<pubDate>Wed, 11 Jul 2007 15:25:20 +0000</pubDate>
				<link>https://tripleodeon.com/2007/07/mobile-web-testing-and-web-20-the-love-child/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/07/mobile-web-testing-and-web-20-the-love-child/</guid>
			</item>
		
			<item>
				<title>Big dotMobi news</title>
        <description>&lt;p&gt;I’m itching to be the first to blurt &lt;a href=&quot;http://mtld.mobi/node/684&quot;&gt;this&lt;/a&gt; out. (Although it was a poorly-kept secret, to be honest 😉 )&lt;/p&gt;

&lt;p&gt;Yes, I’m back on the “everything you ever wanted to know about mobile devices in a structured way” tip.&lt;/p&gt;

&lt;p&gt;But this time, I’ve got more help. One or two well-known dotMobi investors, for example. But also, the one and only &lt;a href=&quot;http://trasatti.blogspot.com/&quot;&gt;Andrea Trasatti&lt;/a&gt;, who I’ve managed to persuade to join us from the &lt;a href=&quot;http://wurfl.sourceforge.net/&quot;&gt;WURFL&lt;/a&gt; project.&lt;/p&gt;

&lt;p&gt;(I think he’s just as excited as I am about the plan, so it seemed to be an easy sell… but I’m sure he’ll blog extensively about it himself)&lt;/p&gt;

&lt;p&gt;One of the most important things is that this shows we’re trying to make dotMobi far more than just a registry of domain names.&lt;/p&gt;

&lt;p&gt;To help the mobile web fulfil its opportunity, we have to tackle big problems. And, oh yes, this is a big one.&lt;/p&gt;

&lt;p&gt;It’s going to take a month or two of feverish development, but it’s already starting to take shape. Stay tuned – this stuff is important for the future of mobile.&lt;/p&gt;
</description>
				<pubDate>Wed, 11 Jul 2007 00:35:05 +0000</pubDate>
				<link>https://tripleodeon.com/2007/07/big-dotmobi-news/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/07/big-dotmobi-news/</guid>
			</item>
		
			<item>
				<title>Pearce Fogg takes mobile a bit too literally</title>
        <description>&lt;p&gt;With a wedding anniversary on Sunday and son’s birthday the following Saturday, fitting in a few important business trips visits to Beijing, San Francisco and New York (not to mention central London to pick up a visa) appears impossible.&lt;/p&gt;

&lt;p&gt;But in a Vernian moment, I remembered the date line. So, in fact, it turns out I can…&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;apply for visa on Monday morning&lt;/li&gt;
  &lt;li&gt;receive visa and fly from Heathrow Monday afternoon&lt;/li&gt;
  &lt;li&gt;have 2 days of meetings in Beijing, Tuesday and Wednesday&lt;/li&gt;
  &lt;li&gt;speak at a conference in San Francisco on (my replay of) Wednesday&lt;/li&gt;
  &lt;li&gt;do an interview with the WSJ in New York on Thursday&lt;/li&gt;
  &lt;li&gt;get home on Friday morning&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And still get home in time to help prepare for the aforementioned birthday.&lt;/p&gt;

&lt;p&gt;3.5 days and all the way round. I think that beats &lt;a href=&quot;http://www.tripleodeon.com/?p=55&quot;&gt;my day trip to the Rockies&lt;/a&gt;. Is this why they call it the mobile web?&lt;/p&gt;
</description>
				<pubDate>Fri, 22 Jun 2007 19:40:41 +0000</pubDate>
				<link>https://tripleodeon.com/2007/06/pearce-fogg-takes-mobile-a-bit-too-literally/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/06/pearce-fogg-takes-mobile-a-bit-too-literally/</guid>
			</item>
		
			<item>
				<title>Dallas Mavericks and out</title>
        <description>&lt;p&gt;Well, I forgot to mention it… but the MaxJet flight we got reseated on was the &lt;a href=&quot;http://www.mlwair.com/fleet/n801dm/photos/&quot;&gt;Dallas Maverick’s private jet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hilariously, I was in “Ultra First Class” – which is preumably where the 7-foot+ basketball players sit. I did in fact have 10 feet of leg room. Thank you Mark Cuban.&lt;/p&gt;

&lt;p&gt;Less impressed were those ‘business class’ travellers who were relegated to the economy seats at the back of the plane (for the physiotherapists and score-keepers?). Oh, and we did arrive fairly late and I had to run for the connecting flight.&lt;/p&gt;

&lt;p&gt;Coming home even my humour didn’t last though… at the JFK check-in desk: “We’ve got bad news; the flight’s just left the UK”.&lt;/p&gt;

&lt;p&gt;Well, there’s no way I’m waiting eight hours for a departure at 4am, and a wrecked weekend. So, a nifty hop onto the monorail, a phone to the travel agency, and two hours later I’m &lt;a href=&quot;http://www.newclubworld.com/european/index.html?langId=uk&quot;&gt;flat&lt;/a&gt;, asleep, and on my way home – no thanks to my scheduled carrier.&lt;/p&gt;

&lt;p&gt;So a skeptic proven right I guess. And I &lt;em&gt;still&lt;/em&gt; don’t know what a MaxJet plane actually looks like.&lt;/p&gt;
</description>
				<pubDate>Fri, 22 Jun 2007 17:47:48 +0000</pubDate>
				<link>https://tripleodeon.com/2007/06/dallas-mavericks-and-out/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/06/dallas-mavericks-and-out/</guid>
			</item>
		
			<item>
				<title>Can MaxJet keep a skeptic happy?</title>
        <description>&lt;p&gt;I live near Guildford UK, and I need to get to Charlotte in North Carolina.&lt;/p&gt;

&lt;p&gt;Now, there’s a direct flight from Gatwork (45 mins away) to Charlotte. But it’s a bit pricey this late in the day.&lt;/p&gt;

&lt;p&gt;So we’re trying MaxJet. MaxJet appears to me to be to business class what EasyJet is to economy. But let’s see. I’m game.&lt;/p&gt;

&lt;p&gt;But they fly from Stanstead to Washington, and then I connect down to Charlotte. So I’m already grumpy. It’s at least 2 and half hours to Stanstead, and &lt;em&gt;then&lt;/em&gt; I have to change. It makes it almost like a 3-leg journey.&lt;/p&gt;

&lt;p&gt;I get to check-in. Oh dear – their plane’s out of action. We’re having to use someone else’s. Lots of people complaining that their seats don’t recline (and so on)&lt;/p&gt;

&lt;p&gt;I’m not cheerful at this point. I could have been half way to Greenland by now. (And I’m stuck in Essex – the horror of it all!)&lt;/p&gt;

&lt;p&gt;But… someone’s smiling down on me. They’ve reassigned all the seats. This other plane has different classes and I seem to have been put right up the front in “Ultra Premium Business Class”. Well; that sounds interesting.&lt;/p&gt;

&lt;p&gt;I struggle past hoards of package flights to the MaxJet lounge. At least I can get some peace and quiet.&lt;/p&gt;

&lt;p&gt;Oh. Whoah. They have free wifi in the lounge.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;love&lt;/em&gt; MaxJet 🙂&lt;/p&gt;
</description>
				<pubDate>Mon, 11 Jun 2007 12:52:33 +0000</pubDate>
				<link>https://tripleodeon.com/2007/06/can-maxjet-keep-a-skeptic-happy/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/06/can-maxjet-keep-a-skeptic-happy/</guid>
			</item>
		
			<item>
				<title>A day trip to Canada</title>
        <description>&lt;p&gt;I bet that’s not a big deal if you live in, say, Detroit.&lt;/p&gt;

&lt;p&gt;But I live in London, and I’m going to Banff. For a day 🙁&lt;/p&gt;

&lt;p&gt;I’m taking part in the W3C track at WWW2007, and talking about the mobile web with the MWI folks.&lt;/p&gt;

&lt;p&gt;I’m really looking forward to it – but not the abrupt return flight (thanks to the need to return for an important investor meeting in London on Thursday). Sadly that means I won’t spend as much time as I’d planned at the rest of the event. It was great last year.&lt;/p&gt;

&lt;p&gt;See you there if you’re there.&lt;/p&gt;
</description>
				<pubDate>Tue, 08 May 2007 07:13:54 +0000</pubDate>
				<link>https://tripleodeon.com/2007/05/a-day-trip-to-canada/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/05/a-day-trip-to-canada/</guid>
			</item>
		
			<item>
				<title>The Mobile Web is Generation Y&amp;#8217;s</title>
        <description>&lt;p&gt;Those born between 1978 and 1997 are often collectively described as “Generation Y”. That’s 10-30 year olds.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;font color=&quot;#810081&quot;&gt;Wikipedia&lt;/font&gt;&lt;/u&gt; cheerfully suggests the Y-ers also enjoy classifications like “the Net-“, “the i-“, “the Google-“, “the MySpace-“, and “the MyPod-Generation”. The preceding generation (mine!) is Generation X: those thirty-somethings born between 1965 and 1978.&lt;/p&gt;

&lt;p&gt;But despite Wikipedia’s assertions, and assuming this is even a valid question, &lt;strong&gt;who’s generation actually lays claim to today’s web?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s got to be the latter.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Generation X’ers founded eBay, Google, Paypal, and no doubt thousands of the web sites that the world uses today without a second thought. Look around at all the A-list bloggers out there too; almost all in their 30’s I would say.&lt;/p&gt;

&lt;p&gt;While the basis for the world’s networking infrastructure was probably a &lt;a href=&quot;http://en.wikipedia.org/wiki/Baby_boomers&quot;&gt;baby-boomer&lt;/a&gt; thing, it was undoubtedly my generation that developed the web as a mainstream medium.&lt;/p&gt;

&lt;p&gt;And – wait a minute – &lt;strong&gt;that suddenly makes us the &lt;em&gt;on-line establishment&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start looking at it in these terms and it’s a bit of a shock (and certainly no help in helping me avoid an inevitable mid-life crisis!)&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;So this got me thinking. Each generation generally has a desire to overturn – or even revolt – against their established precedents.&lt;/p&gt;

&lt;p&gt;And if we learn from the many times this has happened throughout human culture in the past, one can easily see that it’s going to happen again. Today’s web is undoubtedly due for such a shake up. And I’ve no doubt that mobile is going to be &lt;em&gt;the&lt;/em&gt; significant factor in that coup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yes. The evolution of the web on to the mobile medium is completely inevitable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(Look: take the really long view… can’t &lt;em&gt;you&lt;/em&gt; see yourself reminiscing about those good old .com days? When folks used to have to sit down in front of a lonely screen to interact on-line with the rest of the world? How quaint.)&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;But what is dawning on me is this: that the coming revolution isn’t something that will be driven through the adoption or innovation of today’s establishment. &lt;strong&gt;Those lonely PC screens are Generation X’s comfort zone.&lt;/strong&gt; We find ourselves struggling with small screens and small keys to even glimpse the potential of the next decade’s on-line experience.&lt;/p&gt;

&lt;p&gt;So I’m looking to Generation Y. They’re the mobile generation. They’re the ones looking for a new angle. They’re looking for a paradigm that they can adopt, pioneer, and make their own. And they’re going to be the guardians of the web in the coming decades – the web that will finally call itself truly mobile&lt;/p&gt;

&lt;p&gt;(Oh, and they’re the ones with the small fingers)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most importantly, they will do wonderful things with the mobile web.&lt;/strong&gt; &lt;a href=&quot;http://opengardensblog.futuretext.com/archives/2007/02/mobi_darwin_rul_1.html&quot;&gt;Darwinian&lt;/a&gt; things that the now-conservative institution of today’s web would probably never grasp, risk, or predict.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Should we be surprised? Should we react? Should we stifle?&lt;/p&gt;

&lt;p&gt;No. Of course not. We should roll with it. We should encourage, guide, and then, when required, stand back and watch with awe. Don’t milk the calf. Yes, we can help to provide the the base technologies, the open ecosystems (and, oh yeah, the &lt;a href=&quot;http://mtld.mobi&quot;&gt;domain names&lt;/a&gt;), but the medium will never be ours.&lt;/p&gt;

&lt;p&gt;We’ve done our bit. Now it’s our responsibility to allow our successors to build their own legacy. That’s the &lt;em&gt;real&lt;/em&gt; Web 2.0.&lt;/p&gt;

&lt;p&gt;(At least, until 2030 or so when Generation Z starts an even more radical revolution… riffing on .implant domains perhaps)&lt;/p&gt;
</description>
				<pubDate>Thu, 05 Apr 2007 19:56:04 +0000</pubDate>
				<link>https://tripleodeon.com/2007/04/the-mobile-web-is-generation-ys/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/04/the-mobile-web-is-generation-ys/</guid>
			</item>
		
			<item>
				<title>Wall Street Journal discusses mobile web</title>
        <description>&lt;p&gt;There’s a &lt;a href=&quot;http://online.wsj.com/public/article/SB117572664647360217-N_lTKjN3iMvPBkCxROybAUAPErg_20070504.html?mod=tff_main_tff_top&quot;&gt;great article&lt;/a&gt; at the WSJ about the mobile web.&lt;/p&gt;

&lt;p&gt;Yes it mentions .mobi, but more importantly it highlights the role that smaller business and grass-root sites will play in the growth of the medium as a whole.&lt;/p&gt;

&lt;p&gt;To quote, “The wireless Internet is just beginning to take shape”.&lt;/p&gt;

&lt;p&gt;Personally, I’d have used the word &lt;em&gt;mobile&lt;/em&gt; instead of &lt;em&gt;wireless&lt;/em&gt; – but again, it serves to capture the zeitgeist of the roller-coaster that we all know is just beginning.&lt;/p&gt;

&lt;p&gt;Have a good Easter everyone!&lt;/p&gt;
</description>
				<pubDate>Thu, 05 Apr 2007 16:00:18 +0000</pubDate>
				<link>https://tripleodeon.com/2007/04/wall-street-journal-discusses-mobile-web/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/04/wall-street-journal-discusses-mobile-web/</guid>
			</item>
		
			<item>
				<title>An E61 with that, Mr President?</title>
        <description>&lt;p&gt;George Bush (snr) and Bill Clinton addressed the CTIA keynote this morning in Orlando, and then went for a stroll around the show.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/v/IJ4R-VNSyZM&quot;&gt;They seemed to spend a fair amount of time at the Nokia booth&lt;/a&gt; (clearest part about 2 mins in), admiring the customised car, and accepted two E61 devices from the company.&lt;/p&gt;

&lt;p&gt;Just minutes earlier both had been seen chatting to a 6-foot tall Blackberry. Too bizarre for words, and sorry – no video of that.&lt;/p&gt;
</description>
				<pubDate>Thu, 29 Mar 2007 22:07:37 +0000</pubDate>
				<link>https://tripleodeon.com/2007/03/an-e61-with-that-mr-president/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/03/an-e61-with-that-mr-president/</guid>
			</item>
		
			<item>
				<title>At CTIA, blog service is rubbish</title>
        <description>&lt;p&gt;&lt;img src=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2007/03/28032007024.jpg&quot; alt=&quot;28032007024.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(Bad joke, yes. Could benefit from Photoshop? Yes.)&lt;/p&gt;
</description>
				<pubDate>Thu, 29 Mar 2007 11:05:52 +0000</pubDate>
				<link>https://tripleodeon.com/2007/03/at-ctia-blog-service-is-rubbish/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/03/at-ctia-blog-service-is-rubbish/</guid>
			</item>
		
			<item>
				<title>I&amp;#8217;ll see you at CTIA</title>
        <description>&lt;p&gt;On a plane tomorrow to Florida. If the show is anything like this year’s intriguing 3GSM, it will be time well spent, even though it’s crazy triple-booked busy in my calendar right now.&lt;/p&gt;

&lt;p&gt;I’ll be on the &lt;a href=&quot;http://pc.mtld.mobi/&quot;&gt;dotMobi&lt;/a&gt; stand a bit: Hall 3, stand 1995 if you want to come by.&lt;/p&gt;

&lt;p&gt;On Tuesday I’m doing a keynote for the the &lt;a href=&quot;http://www.advisorygroup.mobi/index.html&quot;&gt;dotMobi Advisory Group&lt;/a&gt; workshop. It’s a group of companies and individuals – outside of our investors – of that helps steer the .mobi company and its strategy.&lt;/p&gt;

&lt;p&gt;I’m pretty sure anyone can come along to the session. Details &lt;a href=&quot;http://www.advisorygroup.mobi/event_news_workshop.htm&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Wednesday night is &lt;a href=&quot;http://www.ctiawireless.com/events/event_details.cfm?calID=513&quot;&gt;Gala&lt;/a&gt; night. I’m hoping to add another notch to my “&lt;a href=&quot;http://www.tripleodeon.com/?p=40&quot;&gt;Was I the only blogger at?&lt;/a&gt;” series.&lt;/p&gt;
</description>
				<pubDate>Sat, 24 Mar 2007 22:45:24 +0000</pubDate>
				<link>https://tripleodeon.com/2007/03/ill-see-you-at-ctia/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/03/ill-see-you-at-ctia/</guid>
			</item>
		
			<item>
				<title>Thyng.mobi goes live</title>
        <description>&lt;p&gt;I’ve finally made the effort to finish off my little &lt;a href=&quot;http://thyng.mobi&quot;&gt;experimental .mobi site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It’s 5 common phrases (&lt;a href=&quot;http://thyng.mobi/t.htm&quot;&gt;Thank you&lt;/a&gt;, &lt;a href=&quot;http://thyng.mobi/h.htm&quot;&gt;Hello&lt;/a&gt;, &lt;a href=&quot;http://thyng.mobi/y.htm&quot;&gt;Yes&lt;/a&gt;, &lt;a href=&quot;http://thyng.mobi/n.htm&quot;&gt;No&lt;/a&gt; and &lt;a href=&quot;http://thyng.mobi/g.htm&quot;&gt;Goodbye&lt;/a&gt;) in a variety of common languages.&lt;/p&gt;

&lt;p&gt;To be honest, it’s mostly for me to use! OK, so French &amp;amp; German I’m OK with, but I always struggle in Iberian taxis. So this should help.&lt;/p&gt;

&lt;p&gt;(Mental note: are the killer apps for the mobile web those that you build for your own use?)&lt;/p&gt;

&lt;p&gt;And as I travel, I’ll probably add more languages.&lt;/p&gt;

&lt;p&gt;Hardcoding all the pages just seemed like a drag. So it seemed natural to autogenerate them. But of course languages don’t change that fast so it’s a build-time generation, rather than request-time.&lt;/p&gt;

&lt;p&gt;And how? Well, a grid of phrases vs languages – it just had to be Excel! I drop new vocabulary into a spreadsheet and a little VBA macro spews out perfectly formed XHTML files (that, surprise… just happen to score 5 on &lt;a href=&quot;http://ready.mobi/&quot;&gt;http://ready.mobi&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;I realise I’ve deviated from my “.mobi sites for beginners” vibe here.&lt;/p&gt;

&lt;p&gt;Next stop: &lt;a href=&quot;http://www.admob.com&quot;&gt;advertising&lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Wed, 21 Mar 2007 21:53:43 +0000</pubDate>
				<link>https://tripleodeon.com/2007/03/thyngmobi-goes-live/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/03/thyngmobi-goes-live/</guid>
			</item>
		
			<item>
				<title>dotMobi Developer&amp;#8217;s Guide: 23,000 downloads and counting&amp;#8230;</title>
        <description>&lt;p&gt;Over at dotMobi, we’ve just released our &lt;a href=&quot;http://pc.dev.mobi/?q=node/197&quot;&gt;mobile developer guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’ve just seen the astonishing download statistics: an incredible 23,600 downloads in less than 2 weeks.&lt;/p&gt;

&lt;p&gt;OMG.&lt;/p&gt;

&lt;p&gt;Congratulations to the team! Please take a look – and I hope you enjoy it.&lt;/p&gt;
</description>
				<pubDate>Tue, 20 Mar 2007 21:08:53 +0000</pubDate>
				<link>https://tripleodeon.com/2007/03/dotmobi-developers-guide-23000-downloads-and-counting/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/03/dotmobi-developers-guide-23000-downloads-and-counting/</guid>
			</item>
		
			<item>
				<title>X-Series: the catch :-(</title>
        <description>&lt;p&gt;OK, I’ve been thrilled with my new X-Series tariff from 3 UK. Mostly because I spend most of my time travelling between the UK and Ireland: which means that, in addition to great voice &amp;amp; text bundles (not to mention flat rate data!) I am essentially roaming for free.&lt;/p&gt;

&lt;p&gt;It all seemed to good to be true.&lt;/p&gt;

&lt;p&gt;And unfortunately for me, it was.&lt;/p&gt;

&lt;p&gt;For this week I am in the USA 🙁&lt;/p&gt;

&lt;p&gt;I am so used to being able to get a service-like-home when I go abroad that I was completely shocked to see my phone failing to get a data bearer in Los Angeles airport.&lt;/p&gt;

&lt;p&gt;(My N73 admirably flashed up an ‘E’ for a few seconds as it tried – and failed – to establish what would have been my first experience of EGDE)&lt;/p&gt;

&lt;p&gt;But a few calls to Three later revealed an ugly truth. No data roaming in the US. Cue world-falling-apart music.&lt;/p&gt;

&lt;p&gt;Apparently, the friendly chap told me, “there is no mobile data in the US”. What he meant of course, was “for roaming 3 subscribers”: I’ve always been well served by GPRS on Cingular in the past.&lt;/p&gt;

&lt;p&gt;So for the last few days I’ve spent more time than usual hunting WiFi spots to fire up the laptop to get email and web connectivity. And plenty of voice calls to make up for it.&lt;/p&gt;

&lt;p&gt;Until that is, just now. Another surprise. “You are reaching your credit limit” chirps an SMS arriving from some automated accountant back in Maidenhead. Hmmm… turns out that I’ve been paying either £1.20 or £2.40 per minute for my calls!&lt;/p&gt;

&lt;p&gt;So here’s my advice. If you’re going to move to 3, think carefully if you go to the US a lot… or at least read the roaming tariff charts more carefully than I did.  🙂&lt;/p&gt;
</description>
				<pubDate>Wed, 07 Mar 2007 23:39:49 +0000</pubDate>
				<link>https://tripleodeon.com/2007/03/x-series-the-catch/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/03/x-series-the-catch/</guid>
			</item>
		
			<item>
				<title>.mobi keeps storming Google</title>
        <description>&lt;p&gt;The Google result counts for common TLDs continued to slide dramatically during February. &lt;em&gt;So&lt;/em&gt; significantly that it seems the company is really doing a ruthless clean-up of their indexed content (or are tightening up the algorithms)&lt;/p&gt;

&lt;p&gt;Bucking the trend, &lt;strong&gt;by a country mile&lt;/strong&gt;, is the .mobi TLD, which has risen an 35% (which seems astonishing in the context of the others’ trends).&lt;/p&gt;

&lt;p&gt;The numbers this month (to be compared with &lt;a href=&quot;http://www.tripleodeon.com/?p=39&quot;&gt;these&lt;/a&gt; from the start of February):&lt;/p&gt;

&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.com&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.com&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;5,700,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 14%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.org&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.org&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;2,180,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 11%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.net&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.net&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;354,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 19%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.info&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.info&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;46,500,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 20%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.biz&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.biz&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;15,600,000 &lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 38%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.tv&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.tv&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;16,800,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 20%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.mobi&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.mobi&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;496,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: green&quot;&gt;&lt;strong&gt;up 35%&lt;/strong&gt;&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Now, when I started out, I genuinely thought I’d just do this as an interesting analysis of mobile web growth trends. Now I’m a bit worried it’s starting to look like corporate propoganda (&lt;a href=&quot;http://www.tripleodeon.com/?page_id=2&quot;&gt;disclosure disclosure&lt;/a&gt;!).&lt;/p&gt;

&lt;p&gt;However, the numbers are real (even if, as ever, doubtful as an &lt;em&gt;absolute&lt;/em&gt; measure of real content).&lt;/p&gt;

&lt;p&gt;So I will continue. And I happen to know that the &lt;a href=&quot;http://pc.mtld.mobi/mobilenet/release_030507.html&quot;&gt;TLD’s name sales are surging up&lt;/a&gt;, so I suspect the trend will too. All I can think of doing is at least automating it so I don’t have to remember to every month.&lt;/p&gt;
</description>
				<pubDate>Wed, 07 Mar 2007 15:10:31 +0000</pubDate>
				<link>https://tripleodeon.com/2007/03/mobi-keeps-storming-google/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/03/mobi-keeps-storming-google/</guid>
			</item>
		
			<item>
				<title>Mobile Monday Dublin kicks off in April!</title>
        <description>&lt;p&gt;Dublin, Ireland is one city notably missing a &lt;a href=&quot;http://www.mobilemonday.net/mm/&quot;&gt;Mobile Monday&lt;/a&gt; chapter.&lt;/p&gt;

&lt;p&gt;Hopefully this can be fixed… with the &lt;strong&gt;inaugural Dublin meeting on the 2nd of April 2007&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It should be a great opportunity to chat, network and mingle with friends, colleagues and experts from in and around the mobile industry.&lt;/p&gt;

&lt;p&gt;We’ve booked some room at the &lt;a href=&quot;http://www.dublinks.com/index.cfm/loc/11/pt/0/spid/F1EB2EFE-6A08-4F7F-B25FE5DAC0765BA9.htm&quot;&gt;Library Bar&lt;/a&gt; at the Central Hotel, Exchequer Street.&lt;/p&gt;

&lt;p&gt;The event will be casual, friendly, and should definitely worth coming down to. Expect a little food &amp;amp; drink to help the mobile conversation flow more freely…&lt;/p&gt;

&lt;p&gt;We use YahooGroups as our mailing list, and anyone can join by entering their email address here:&lt;/p&gt;

&lt;p&gt;(Use the poll on the YahooGroups site to indicate if you’re planning to attend this particular event.)&lt;/p&gt;

&lt;p&gt;So… for all of you in or near Dublin, keep the evening clear in your diaries. I look forward to seeing you all there!&lt;/p&gt;
</description>
				<pubDate>Thu, 22 Feb 2007 12:45:48 +0000</pubDate>
				<link>https://tripleodeon.com/2007/02/mobile-monday-dublin-kicks-off-in-april/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/02/mobile-monday-dublin-kicks-off-in-april/</guid>
			</item>
		
			<item>
				<title>The Miracle of Mobile</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://www.theregister.co.uk/2007/02/22/mobile_phone_mast_miracle/&quot;&gt;Jesus up a basestation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don’t usually just post gratuitous links, but this one is a good one. &lt;a href=&quot;http://images.google.com/images?hl=en&amp;amp;rls=com.microsoft:en-US&amp;amp;sa=N&amp;amp;resnum=0&amp;amp;q=jesus%20on%20toast&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;tab=wi&quot;&gt;Jesus on toast&lt;/a&gt;, &lt;a href=&quot;http://images.google.com/images?svnum=10&amp;amp;hl=en&amp;amp;rls=com.microsoft%3Aen-US&amp;amp;q=jesus+face+ash+log&quot;&gt;Jesus in a log&lt;/a&gt;. And now fixing Uganda’s connectivity.&lt;/p&gt;
</description>
				<pubDate>Thu, 22 Feb 2007 10:31:40 +0000</pubDate>
				<link>https://tripleodeon.com/2007/02/the-miracle-of-mobile/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/02/the-miracle-of-mobile/</guid>
			</item>
		
			<item>
				<title>Google Maps for Mobile can have my children</title>
        <description>&lt;p&gt;(except, oh – I’m already married)&lt;/p&gt;

&lt;p&gt;So this &lt;a href=&quot;http://google.com/gmm/index.html&quot;&gt;app&lt;/a&gt; is not a complete newcomer to the party, and I’ve even been caught using the AJAX version on the S60 browser in the past.&lt;/p&gt;

&lt;p&gt;But I recently moved my mobile account to a new provider, and suddenly this make sense…&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A blazing UMTS connection thanks to &lt;a href=&quot;http://www.three.co.uk/personal/index.omp&quot;&gt;3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A slick client-side app thanks to &lt;a href=&quot;http://www.google.com/mobile/&quot;&gt;Google&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A beautiful N73 screen thanks to &lt;a href=&quot;http://www.nseries.com/index.html?l=products,n73,demo&quot;&gt;Nokia&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Satellite imagery thanks to &lt;a href=&quot;http://earthobservatory.nasa.gov/&quot;&gt;NASA&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Utter ignorance of the data volume thanks to &lt;a href=&quot;http://www.three.co.uk/xseries/index.omp&quot;&gt;X-Series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mobile ecosystem working in perfect harmony…&lt;/p&gt;

&lt;p&gt;…to get me as close to feeling like James Bond as possible 😉&lt;/p&gt;
</description>
				<pubDate>Thu, 22 Feb 2007 08:55:28 +0000</pubDate>
				<link>https://tripleodeon.com/2007/02/google-maps-for-mobile-can-have-my-children/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/02/google-maps-for-mobile-can-have-my-children/</guid>
			</item>
		
			<item>
				<title>Or did you mean .mobii ?</title>
        <description>&lt;p&gt;Ajit’s got a great &lt;a href=&quot;http://opengardensblog.futuretext.com/&quot;&gt;blog&lt;/a&gt;, but I never seem to get my comments to his posts approved (&lt;a href=&quot;http://opengardensblog.futuretext.com/archives/2007/02/mobi_darwin_rul_1.html&quot;&gt;whole articles&lt;/a&gt;, no problem though!)&lt;/p&gt;

&lt;p&gt;In particular, I take small issue with this &lt;a href=&quot;http://opengardensblog.futuretext.com/archives/2007/02/should_we_have.html&quot;&gt;one&lt;/a&gt;. The insinuation is not veiled enough for me to resist responding to (and hence the &lt;a href=&quot;http://www.tripleodeon.com/?page_id=2&quot;&gt;usual disclosure&lt;/a&gt; about my current role, and a &lt;a href=&quot;http://dotmobi.typepad.com/dotmobi/2007/02/or_did_you_mean.html&quot;&gt;cross-post&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I have to say that relaxing on my sofa using Opera on a Wii is a pretty similar experience to relaxing on my sofa using IE7 on a media PC. So yup: no point in having a .wii top level domain (or .console, or .couch or whatever).&lt;/p&gt;

&lt;p&gt;But walking down a street in a strange city in the rain, looking for somewhere you can can get a taxi home safely? Sounds like a totally different context to me. One that .mobi serves well (for example in the form of &lt;a href=&quot;http://cabbies.mobi/&quot;&gt;http://cabbies.mobi/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Yes, that’s right. &lt;strong&gt;Top-level extensions are about context, not the way markup is rendered.&lt;/strong&gt; (The latter is something that browser manufacturers &lt;em&gt;rightly&lt;/em&gt; obsess about).&lt;/p&gt;

&lt;p&gt;So here are two interesting thought experiments I always keep in mind…&lt;/p&gt;

&lt;p&gt;a) You’re walking down a street. You (somehow) have a full-blown version of Firefox on your mobile phone. You need to access some pertinent information urgently on it, and know the relevant publisher runs both a .mobi and a .com site. Which would you enter into your phone’s address bar?&lt;/p&gt;

&lt;p&gt;b) Opera develops a client-side language translator for their browser. It can turn English web sites into French. You’re in France. Do you access ebay.fr or ebay.co.uk?&lt;/p&gt;

&lt;p&gt;Hopefully the former in both cases: &lt;strong&gt;.fr&lt;/strong&gt; is about the French context, not French markup. And &lt;strong&gt;.mobi&lt;/strong&gt; is about the mobile context, not mobile markup.&lt;/p&gt;

&lt;p&gt;(Although dotMobi still has a role to play with the markup too, because not every phone is yet blessed with Mr Jon von Tetzchner’s rendering magic)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s all about the context, baby.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And, by the way, I don’t recall anyone ever claiming that ebay.fr broke the ‘one web’… 🙂&lt;/p&gt;
</description>
				<pubDate>Mon, 19 Feb 2007 22:03:59 +0000</pubDate>
				<link>https://tripleodeon.com/2007/02/or-did-you-mean-mobii/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/02/or-did-you-mean-mobii/</guid>
			</item>
		
			<item>
				<title>Was I the only blogger at the GSM Awards?</title>
        <description>&lt;p&gt;Was I? Well maybe not, but I’ll put that claim to the test.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://www.gsmawards.com/&quot;&gt;GSM Awards&lt;/a&gt; are most obviously described as the Oscars of the 3GSM world (in contrast to the &lt;a href=&quot;http://www.mobilemondaybarcelona.com/2007/02/09/momo-global-peer-awards-live-webcast/&quot;&gt;MoMo Peer Awards&lt;/a&gt; which are perhaps like Sundance). As the CTO, I was lucky enough to be there, seated on the &lt;a href=&quot;http://dotmobi.typepad.com/dotmobi/2007/02/the_worlds_fine.html&quot;&gt;.mobi&lt;/a&gt; table.&lt;/p&gt;

&lt;p&gt;Showy they certainly are, and with what must have been at least a thousand black-tie guests from the industry, Clive Anderson hosting, and the great and the good coming up to accept the awards (to barrages of light and the sounds of late 90’s dance music) it certainly felt the part.&lt;/p&gt;

&lt;p&gt;I thought I’d be cynical about this sort of thing, but to be honest, I’ve got to say I did enjoy myself.&lt;/p&gt;

&lt;p&gt;The organisation was great, the food excellent, and the host edgy – even if the humour was somewhat British. “Ringtone? I thought that’s what George Bush does when he wants to invade a new country”. (And the etymology of GSMA Chairman Rob Conway’s name, whilst best not repeated here, was pretty funny.)&lt;/p&gt;

&lt;p&gt;But most of all, the winners seemed genuinely chuffed. I guess that when you’re honoured by your industry peers, you know you’ve done something special. (disclosure: my previous company, &lt;a href=&quot;http://blog.argogroup.com&quot;&gt;Argogroup&lt;/a&gt;, won an award a few years ago, although I missed the event that time.)&lt;/p&gt;

&lt;p&gt;So, whether it was Turkcell humbly (or Virgin eloquently) accepting their advertising awards, iPlay amusingly name-checking their game developers (“who rightfully aren’t here, but still home developing the next one”), or the Sony Ericsson representative accepting an award for the K800 device (“I only just joined the company, but thanks anyway”), the histrionics were kept to a minimum, and the plaudits genuine.&lt;/p&gt;

&lt;p&gt;But one really interesting observation was the prevalence of awards focussing on what you might call the ‘application layer’ of mobile. The awards for best network, best infrastructure, best coverage (and so on) were quickly dealt with, and a healthy proportion of the awards and winners during the evening itself represented areas like music, sports, and download services – as well as general innovation throughout the ecosystem.&lt;/p&gt;

&lt;p&gt;So it was fantastic to see the future of the mobile medium shining throught an event like this.&lt;/p&gt;

&lt;p&gt;Another overwhelming theme of the event was the expansion of 3GSM connectivity into the developing world. We saw a BBC television piece on the digital revolution that mobiles are bringing to the African continent: “&lt;a href=&quot;http://xseries.typepad.com/xseries/2007/01/as_big_as_fire_.html&quot;&gt;as big as fire, the wheel and the railways&lt;/a&gt;“. And at end of the evening, the Chairman’s Award went to Mo Ibrahim, an early GSM pioneer who is now working hard to bring the medium to developing continents, countries, and communities.&lt;/p&gt;

&lt;p&gt;It was enough to leave this skeptic, at least, with a warmed heart, and some optimism that, beneath all the stage-managed glamour, gloss and glitz (3G, right? 😉 ), this is an industry that can genuinely do something good for mankind. Nice wine too.&lt;/p&gt;
</description>
				<pubDate>Wed, 14 Feb 2007 18:02:09 +0000</pubDate>
				<link>https://tripleodeon.com/2007/02/was-i-the-only-blogger-at-the-gsm-awards/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/02/was-i-the-only-blogger-at-the-gsm-awards/</guid>
			</item>
		
			<item>
				<title>.mobi sites grow another 40%</title>
        <description>&lt;p&gt;Another month, another run at these numbers.&lt;/p&gt;

&lt;p&gt;And another job (which needs to be a disclosure: I’m now the CTO of MTLD 🙂 ).&lt;/p&gt;

&lt;p&gt;Anyway here are the stats, as ever using Google’s site:.tld query syntax:&lt;/p&gt;

&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.com&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.com&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;6,610,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 3%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.org&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.org&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;2,180,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 7%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.net&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.net&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;439,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 17%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.info&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.info&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;57,800,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 9%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.biz&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.biz&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;25,200,000 &lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: green&quot;&gt;up 6%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.tv&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.tv&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;21,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: green&quot;&gt;up 4%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.mobi&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.mobi&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;496,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: green&quot;&gt;&lt;strong&gt;up 40%&lt;/strong&gt;&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Need graphs!&lt;/p&gt;
</description>
				<pubDate>Thu, 01 Feb 2007 10:10:37 +0000</pubDate>
				<link>https://tripleodeon.com/2007/02/mobi-sites-grow-another-40/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/02/mobi-sites-grow-another-40/</guid>
			</item>
		
			<item>
				<title>Fixed web shrinks! Mobile web grows!</title>
        <description>&lt;p&gt;It’s almost a month since I did this &lt;a href=&quot;http://www.tripleodeon.com/?p=33&quot;&gt;before&lt;/a&gt;, and I’m doing it today in case I am disciplined enough to start doing it the first day of every month.&lt;/p&gt;

&lt;p&gt;This is the Google page count, using the site:.tld query syntax:&lt;/p&gt;

&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.com&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.com&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;6,610,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 12%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.org&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.org&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;2,340,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: green&quot;&gt;up 4%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.net&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.net&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;530,000,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 8%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.info&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.info&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;63,500,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 22%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.biz&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.biz&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;23,700,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 10%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.tv&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.tv&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;20,100,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: red&quot;&gt;down 7%&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.mobi&quot;&gt;&lt;font color=&quot;#7d97bd&quot;&gt;site:.mobi&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;354,000&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      (&lt;span style=&quot;color: green&quot;&gt;&lt;strong&gt;up 50%&lt;/strong&gt;&lt;/span&gt;)
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;It seems fairly unlikely that the web is shrinking quite as much as that… so this probably highlights changes to Google’s page counting algorithm more than anything else.&lt;/p&gt;

&lt;p&gt;Certainly the dubious science of this study 🙂&lt;/p&gt;

&lt;p&gt;But anyway, it was worth it for the title. And makes us all feel cheerful for the start of the year.&lt;/p&gt;
</description>
				<pubDate>Mon, 01 Jan 2007 12:36:40 +0000</pubDate>
				<link>https://tripleodeon.com/2007/01/fixed-web-shrinks-mobile-web-grows/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/01/fixed-web-shrinks-mobile-web-grows/</guid>
			</item>
		
			<item>
				<title>Surfing the augursphere</title>
        <description>&lt;p&gt;Why does New Year make everyone believe they are talented soothsayers of the impending twelve months?&lt;/p&gt;

&lt;p&gt;Or worse, the retrospective variant: “here’s how clever I was at predicting last year a year ago”.&lt;/p&gt;

&lt;p&gt;(Bah humbug) &lt;/p&gt;

&lt;p&gt;I can’t move for “bubble x.0”, “web y.0”, “mobile z.0” predictions filling up my Google Reader. And I’m not going to fall for the temptation of making any predictions myself (&lt;a href=&quot;http://www.tripleodeon.com/?p=36&quot;&gt;this&lt;/a&gt; was merely an idea 🙂 )&lt;/p&gt;

&lt;p&gt;But one silver lining is notable: nearly every one of these (from the web, technology, and mobile blogospheres) seem to think 2007 is the year when the mobile web will be a success.&lt;/p&gt;

&lt;p&gt;I don’t think anything so undefinable ever becomes a success in a single calendar period. What year did the Internet “take off”?!?&lt;/p&gt;

&lt;p&gt;But I think I know what they mean.&lt;/p&gt;

&lt;p&gt;All the technology ingredients are there. The economics are starting to take shape. The public seems to be supportive of change on the web as a whole – so why not mobile too?&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;And I’m putting my career where my mouth is. So stay tuned.&lt;/p&gt;

&lt;p&gt;Happy new year everyone!&lt;/p&gt;
</description>
				<pubDate>Mon, 01 Jan 2007 12:10:18 +0000</pubDate>
				<link>https://tripleodeon.com/2007/01/surfing-the-augursphere/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2007/01/surfing-the-augursphere/</guid>
			</item>
		
			<item>
				<title>The Mobile 2.0 Tariff</title>
        <description>&lt;p&gt;An idea that popped up during a &lt;a href=&quot;http://www.torgo.com/blog/&quot;&gt;lunch&lt;/a&gt;; and something I would love to see in 2007:&lt;/p&gt;

&lt;p&gt;“The Mobile 2.0 Tariff”&lt;/p&gt;

&lt;p&gt;The world’s driven by market forces. And the best will in the world behind “thou shalt use the mobile web” isn’t going to work unless it’s economically stimulated.&lt;/p&gt;

&lt;p&gt;Open gardens and open data usage are a start.&lt;/p&gt;

&lt;p&gt;But (and forget here for a moment you are a jet-setting telecoms professional whose bills get paid), the vast majority of the human population – or at least those who have a mobile phone – are concerned with 1) communication with their social network, and 2) how much it’s going to cost.&lt;/p&gt;

&lt;p&gt;It’s called telephony. These days, at least.&lt;/p&gt;

&lt;p&gt;But the ingredients of mobile 2.0 are about bringing more variety to that social network’s communication. Keep the telephony, sure. But mix in more exciting forms of messaging, web 2.0-like services, and richer media types.&lt;/p&gt;

&lt;p&gt;All the technology stuff the works. We’ve seen the template for these services on the non-mobile web, and we know it can work over the mobile medium too.&lt;/p&gt;

&lt;p&gt;But it still doesn’t mean that the second criterion is met: that of economics. Remember, for most of the population, tariffs are intimately mixed up with whole mobile usage experience.&lt;/p&gt;

&lt;p&gt;So imagine this. An enlightened operator launches the “Mobile 2.0 Tariff”: a mobile bundle, pricing plan, and service portfolio designed to appeal to the 21st century social networker.&lt;/p&gt;

&lt;p&gt;What do you get? Obviously a capable phone and unlimited data. So far, so &lt;a href=&quot;http://xseries.three.com/&quot;&gt;X-Series&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;A) Then, provide a pre-paid option. Today’s on-line society isn’t solely comprised of well-heeled credit-worthy early-adopters. Students, kids, the unemployed, the casual user. Shouldn’t they get the mobile web too?&lt;/p&gt;

&lt;p&gt;B) Pre-configure settings, bookmarks, or client-side apps for big mobile or web 2.0 apps. Maybe this is web-side configurable, using OMA DM – you can enter your account settings etc. YouTube, Twitter, MySpace, SoonR (although even that’s a bit enterprise), etc. Typing URLs and re-logging in is so QWERTY.&lt;/p&gt;

&lt;p&gt;C) Host a (mobile) web presence for each subscriber. Give them a blog engine, ready-skinned for mobile usage:&lt;/p&gt;

&lt;p&gt;&lt;u&gt;http://wordpress.operator.com/447867554666&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;– or howabout&lt;/p&gt;

&lt;p&gt;&lt;u&gt;http://447867555555.mobi?&lt;/u&gt; Make this stuff really easy.&lt;/p&gt;

&lt;p&gt;D) Tie up as many commercial web services’ accounting into the consolidated billing. Could I have my mobile AdSense account appearing on my bill or spent against my pre-paid credit? (OK – maybe not always, but I should be able to choose so)&lt;/p&gt;

&lt;p&gt;E) Do a f***-off advertising campaign. Hey! Surely we’re ready to revisit “Surf the Mobile Internet”!&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;I’m sure that’s not even the start of it. But I hope you get the idea. Basically, we have to make this exciting mobile paradigm as easy as falling off a (b)log.&lt;/p&gt;

&lt;p&gt;– or perhaps what I’m saying is that we get so easily tied up in what &lt;em&gt;can&lt;/em&gt; be done, and some funky demo we saw last week, that we sometimes lose sight of what the human population thinks about and really wants to do. Creating a path of least resitance to that is key.&lt;/p&gt;

&lt;p&gt;Oh, and I’m sure &lt;em&gt;I&lt;/em&gt; don’t know wholly know what the human population thinks about and really wants to do. So any more ideas? 🙂&lt;/p&gt;
</description>
				<pubDate>Sat, 30 Dec 2006 00:10:32 +0000</pubDate>
				<link>https://tripleodeon.com/2006/12/the-mobile-20-tariff/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/12/the-mobile-20-tariff/</guid>
			</item>
		
			<item>
				<title>Optimize for mobile search engines</title>
        <description>&lt;p&gt;I discovered a &lt;a href=&quot;http://searchenginewatch.com/showPage.html?page=3624288&quot;&gt;great little article&lt;/a&gt; summing up some data on mobile search and trends. Of course ‘short queries’ and ‘limited screen real estate’ are a given.&lt;/p&gt;

&lt;p&gt;But I also noted these various recommendations:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Write short, concise titles.&lt;/li&gt;
  &lt;li&gt;Adhere to mobile standards&lt;/li&gt;
  &lt;li&gt;Connect, or link to, legitimate and popular Web sites.&lt;/li&gt;
  &lt;li&gt;Make sure you are not disallowing mobile crawlers from spidering your site.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Submit your mobile site for inclusion
And…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Design for low-end phones&lt;/li&gt;
  &lt;li&gt;Keep the URL structure as simple as possible&lt;/li&gt;
  &lt;li&gt;Specify the doc type in the XML preamble&lt;/li&gt;
  &lt;li&gt;Specify the character encoding&lt;/li&gt;
  &lt;li&gt;Keep links descriptive
Seems the broader web community is starting to pick up on the W3C and dotMobi zeitgeist…&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Tue, 26 Dec 2006 21:58:29 +0000</pubDate>
				<link>https://tripleodeon.com/2006/12/optimize-for-mobile-search-engines/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/12/optimize-for-mobile-search-engines/</guid>
			</item>
		
			<item>
				<title>You are the Time Person of the Year</title>
        <description>&lt;p&gt;It’s true. Read it &lt;a href=&quot;http://www.time.com/time/magazine/article/0,9171,1569514,00.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;“It’s a story about community and collaboration on a scale never seen before. It’s about the cosmic compendium of knowledge Wikipedia and the million-channel people’s network YouTube and the online metropolis MySpace. It’s about the many wresting power from the few and helping one another for nothing and how that will not only change the world, but also change the way the world changes.”&lt;/p&gt;

&lt;p&gt;You beat off stiff competition from, amongst others, Mahmoud Ahmadinejad.&lt;/p&gt;

&lt;p&gt;Next year, the mobile browser is rumoured to be a candidate.&lt;/p&gt;
</description>
				<pubDate>Sun, 17 Dec 2006 10:22:59 +0000</pubDate>
				<link>https://tripleodeon.com/2006/12/you-are-the-time-person-of-the-year/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/12/you-are-the-time-person-of-the-year/</guid>
			</item>
		
			<item>
				<title>dotMobi uptake</title>
        <description>&lt;p&gt;A totally unscientific technique, and not even my idea (being, as it is, stolen from a colleague who never published 😉 )&lt;/p&gt;

&lt;p&gt;However, this is the Google page count, using the site:.tld query syntax:&lt;/p&gt;

&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.com&quot;&gt;site:.com&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;7,490,000,000&lt;/strong&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.org&quot;&gt;site:.org&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;2,250,000,000&lt;/strong&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.net&quot;&gt;site:.net&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;580,000,000&lt;/strong&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.info&quot;&gt;site:.info&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;81,500,000&lt;/strong&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.biz&quot;&gt;site:.biz&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;26,200,000&lt;/strong&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.tv&quot;&gt;site:.tv&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;21,600,000&lt;/strong&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href=&quot;http://www.google.com/search?q=site%3A.mobi&quot;&gt;site:.mobi&lt;/a&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;strong&gt;236,000&lt;/strong&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Interesting though. I guess I should do this every now and then to track change.&lt;/p&gt;

&lt;p&gt;(And perhaps also work in length of TLD availability to get an idea of uptake as a function of time).&lt;/p&gt;
</description>
				<pubDate>Fri, 08 Dec 2006 02:01:32 +0000</pubDate>
				<link>https://tripleodeon.com/2006/12/dotmobi-uptake/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/12/dotmobi-uptake/</guid>
			</item>
		
			<item>
				<title>Characteristics of (Mobile) User Experience</title>
        <description>&lt;p&gt;Need to big this one up. A &lt;a href=&quot;http://research.nokia.com/people/virpi_roto/MobileBrowsingUX-Dissertation.pdf&quot;&gt;dissertation&lt;/a&gt; (don’t panic) on mobile web browsing from Nokia Research.&lt;/p&gt;

&lt;p&gt;Some interesting discussion on some of the S60 browser patterns: minimap vs narrow layout for example, as well as coverage of the mobile web ecosystem as a whole.&lt;/p&gt;

&lt;p&gt;Basically – a paper to consider how all of these factors affect the users’ experience. Damn – you know we always forget those guys.&lt;/p&gt;
</description>
				<pubDate>Fri, 08 Dec 2006 01:48:16 +0000</pubDate>
				<link>https://tripleodeon.com/2006/12/characteristics-of-mobile-user-experience/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/12/characteristics-of-mobile-user-experience/</guid>
			</item>
		
			<item>
				<title>Now what is Verizon doing?</title>
        <description>&lt;p&gt;YouTube/Verizon has been much blogged. But what about &lt;a href=&quot;http://mashable.com/2006/11/29/revver-mobile-launching-imminently/&quot;&gt;this&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Revver is a tiny, tiny YouTube, but has revenue at the root of its DNA.&lt;/p&gt;

&lt;p&gt;So this is interesting. Verizon hedging two bets, taking on an advertising-based model, for an internal play off against the mighty YouTube brand?&lt;/p&gt;

&lt;p&gt;Yes, very interesting.&lt;/p&gt;

&lt;p&gt;(A cynic might also suggest they want to make sure they don’t end up completely beholden to Google.)&lt;/p&gt;
</description>
				<pubDate>Thu, 30 Nov 2006 09:28:20 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/now-what-is-verizon-doing/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/now-what-is-verizon-doing/</guid>
			</item>
		
			<item>
				<title>Just when you thought the gardens were opening&amp;#8230;</title>
        <description>&lt;p&gt;…Verizon grabs a sliver of YouTube content, walls it up, and charges 15USD to get it.&lt;/p&gt;

&lt;p&gt;I guess I can’t begrudge anyone trying to get a return on an (astronomical infrastructure) investment.&lt;/p&gt;

&lt;p&gt;But it is interesting that just as the walls for mobile web are coming down, the walls for what everyone thinks is the next big thing are going up.&lt;/p&gt;

&lt;p&gt;It’s like a castle seige (I’m thinking Lord of the Rings here, or something) – as soon as the first barricade is breached, there’s a cry of ‘fall back!’ to the next line of defence. And newsworthy as this has been, I can’t help thinking there’s more defence to it than innovation.&lt;/p&gt;

&lt;p&gt;There’s a famous ‘hype curve’ model along which new technologies progress. Lots of hype, then a crash of reality, then a gradual re-acceptance and maturity as adoption returns. Think WAP.&lt;/p&gt;

&lt;p&gt;Well I can imagine an inverted ‘walled garden curve’ that has a similar lifecycle: service providers don’t see some new phenomenon coming, and it gains community momentum. Then they suddenly ‘get it’, ramp up the tariff, and strangulate it. Eventually, market forces take over, and openness gradually returns. (That’s where we are with mobile web I believe).&lt;/p&gt;

&lt;p&gt;We, the community, need to make sure the golden eggs survive the duress of the goose.&lt;/p&gt;

&lt;p&gt;(And I’ll leave the discussion of any causality between these two curves as an exercise for the user.)&lt;/p&gt;
</description>
				<pubDate>Wed, 29 Nov 2006 09:25:50 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/just-when-you-thought-the-gardens-were-opening/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/just-when-you-thought-the-gardens-were-opening/</guid>
			</item>
		
			<item>
				<title>So is *that* the mobile quality gorilla&amp;#8230;?</title>
        <description>&lt;p&gt;IBM has just swallowed up Vallent (itself a fairly recent merge of Watchmark, Comnitel and Metrica). Add NetCool and this is a pretty compelling platform for mobile telco QoS.&lt;/p&gt;

&lt;p&gt;Back at Argogroup, we often pondered which of the biggies would join the mobile quality dots first – an Agilent?, an HP?, an Ericsson? IBM was never on my list, but if you look carefully, they can do more in the area of mobile than some realise.&lt;/p&gt;

&lt;p&gt;What does this mean for the mobilist in the street or the grass roots of the mobile web? Well nothing immediately – but I think this sort of tectonic M+A shows that the mobile medium as a whole (by which I mean much, much more than voice) is under strong scrutiny in the powerful boardrooms of the world.&lt;/p&gt;

&lt;p&gt;Which is only going to be good for us all – capitalism’s OK, you know…&lt;/p&gt;

&lt;p&gt;And IBM has just a little bit of web in their genes 🙂 so it will be interesting to see whether that, together with their growing mobile muscle, will further influence the medium’s evolution towards the dream we all have in mind.&lt;/p&gt;
</description>
				<pubDate>Wed, 29 Nov 2006 09:03:38 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/so-is-that-the-mobile-quality-gorilla/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/so-is-that-the-mobile-quality-gorilla/</guid>
			</item>
		
			<item>
				<title>Death to the G</title>
        <description>&lt;p&gt;‘11.5G’ made me laugh – in a write up on a conference I read this morning (no link I’m afraid – this client doesn’t have copy and paste!). It means the need to build services that cater for all bearer technologies: 2G + 2.5G + 3G + 4G = 11.5G, right?&lt;/p&gt;

&lt;p&gt;Well, my first instinct was to point out that they were missing 3.5G (HSDPA) and 3.75G (HSUPA), and I’m sure I have also heard something described as 3.9G.&lt;/p&gt;

&lt;p&gt;So we’d have blown through 20G already. Perhaps this is getting a bit silly.&lt;/p&gt;

&lt;p&gt;A similar thought recently concerned the daft web3.0 meme starting to do the rounds. Should we actually care what it is called until it succeeds in meeting users’ expectations?&lt;/p&gt;

&lt;p&gt;Looking across at the technological evolution within the recorded media industry (vinyl, cassette, CD, MP3), there’s clearly been no need to resort to dull numerical monikers – the differences are clear enough to users – &lt;em&gt;as are the benefits&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So perhaps we need to drop the in-house jargon and arithmetic one-up-man-ship… and think about packaging what we do in simple language that helps human beings know what’s in it for them.&lt;/p&gt;
</description>
				<pubDate>Mon, 27 Nov 2006 12:36:58 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/death-to-the-g/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/death-to-the-g/</guid>
			</item>
		
			<item>
				<title>More virtual living</title>
        <description>&lt;p&gt;For reasons at worst trivial, I find myself in hospital overnight.&lt;/p&gt;

&lt;p&gt;Say what you like about the UK health service – all that matters to me is that the bedside telephone doubles up as an internet terminal!&lt;/p&gt;

&lt;p&gt;So here I am cut off from the real world, but completely immersed (as usual) in my on-line existence. The only downside is the lack of mobile, but I think writing my blog from an NHS bed trumps Dan Applequist’s Blackberry. 🙂&lt;/p&gt;
</description>
				<pubDate>Mon, 27 Nov 2006 10:27:10 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/27/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/27/</guid>
			</item>
		
			<item>
				<title>Mr Pearce builds a .mobi site (part 3)</title>
        <description>&lt;p&gt;…and in a fit of early morning motivation, I’ve built a parked page for the front of the site.&lt;/p&gt;

&lt;p&gt;Firstly, I set the DNS servers for the domain to be my hosting company (this seemed to take about 10 minutes to propogate – I’m sure it should have been hours).&lt;/p&gt;

&lt;p&gt;Then I stole a markup template from dev.mobi. Those who know me probably realise I know how to bootstrap an HTML page 🙂 but I took the template approach to 1) get an idea of the sort of page structure the .mobi guys were recommending, and 2) get the declarations and DTDs right. I can never remember that stuff.&lt;/p&gt;

&lt;p&gt;I rationalised the in-line CSS a bit since some style attributes were duplicated in the template, and I’m still assuming that every byte counts in mobile. Then uploaded.&lt;/p&gt;

&lt;p&gt;Tada.&lt;/p&gt;

&lt;p&gt;Looks OK in Internet Explorer:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/wp-content/blogs.dir/1/files/2006/11/thyngie.gif&quot; alt=&quot;thyngie.gif&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Looks OK in Firefox (give or take some anti-aliasing):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/wp-content/blogs.dir/1/files/2006/11/thyngff.gif&quot; alt=&quot;thyngff.gif&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Looks OK in some device emulators:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/wp-content/blogs.dir/1/files/2006/11/thyngn70.gif&quot; alt=&quot;thyngn70.gif&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/wp-content/blogs.dir/1/files/2006/11/thyngk750.gif&quot; alt=&quot;thyngk750.gif&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(although I can already see I’ll need to learn something about font sizing…)&lt;/p&gt;

&lt;p&gt;Most importantly, it seems to work on a real phone.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/wp-content/blogs.dir/1/files/2006/11/thynge701.jpg&quot; alt=&quot;thynge701.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/wp-content/blogs.dir/1/files/2006/11/thynge702.jpg&quot; alt=&quot;thynge702.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So far, so easy 🙂&lt;/p&gt;
</description>
				<pubDate>Sat, 25 Nov 2006 09:31:11 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/mr-pearce-builds-a-mobi-site-part-3/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/mr-pearce-builds-a-mobi-site-part-3/</guid>
			</item>
		
			<item>
				<title>Mr Pearce builds a .mobi site (part 2)</title>
        <description>&lt;p&gt;Well I’ve sat on this project for a week or so. Other business calls. But I’ve had a chance to do some preparation.&lt;/p&gt;

&lt;p&gt;Firstly, I signed up for the .mobi developer forum at &lt;a href=&quot;http://dev.mobi/&quot;&gt;http://dev.mobi/&lt;/a&gt; (which is a cool domain, at least). With a desktop browser, you get redirected to pc.dev.mobi – perhaps some sort of a convention – but, nicest of all, you can also view the site on a mobile.&lt;/p&gt;

&lt;p&gt;(So I guess when you’re out and about and scratching your head about a development problem, you can hook up and surf for answers.)&lt;/p&gt;

&lt;p&gt;The only catch seemed to be that I couldn’t sign up for an account on my phone. I had to do that on the PC, which was slightly frustrating.&lt;/p&gt;

&lt;p&gt;There’s some good stuff there. How to use WURFL for example, and how to skin up CMS and blog platforms for mobile. I’m sure there’s more to come – in the meantime, the blogs are worth a read. But it’s not yet a vibrant buzzing community… I guess these things take time and I’ll keep checking back.&lt;/p&gt;

&lt;p&gt;For now, I think I’ll need to forge my own path. I guess I should plan to contribute what I find &lt;em&gt;back&lt;/em&gt; into the developer community.&lt;/p&gt;
</description>
				<pubDate>Sat, 25 Nov 2006 07:12:16 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/mr-pearce-builds-a-mobi-site-part-2/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/mr-pearce-builds-a-mobi-site-part-2/</guid>
			</item>
		
			<item>
				<title>Good words for mobile</title>
        <description>&lt;p&gt;Not good words &lt;em&gt;about&lt;/em&gt; mobile. But good words &lt;em&gt;for&lt;/em&gt; mobile.&lt;/p&gt;

&lt;p&gt;It’s unlikely that predictive text is really going to help you type a .com or .mobi address into your mobile browser. And you want the user’s experience to be as streamlined as possible.&lt;/p&gt;

&lt;p&gt;Efficient URLs are the order of the day. And no “slashwalls”.&lt;/p&gt;

&lt;p&gt;(I mean expecting users to append &lt;em&gt;/mobile&lt;/em&gt; or &lt;em&gt;/wap&lt;/em&gt; or whatever. That’s &lt;em&gt;so&lt;/em&gt; 1999)&lt;/p&gt;

&lt;p&gt;But length is not everything thanks to the way that most alphabetic text entry works on numeric keypads. A is 1. B is 11, C is 111, D is 2, etc. So not all letters are created equal, which can spell (!) trouble for some domains.&lt;/p&gt;

&lt;p&gt;As an example, you might be particulary proud of &lt;strong&gt;ziz&lt;/strong&gt;.com and think it is a great snappy URL for mobile users. But wait: Z is &lt;em&gt;four&lt;/em&gt; keypresses of the 9 key, and I is three of the 4 key.&lt;/p&gt;

&lt;p&gt;So just those three letters demand 11 clicks from the mobilely-impatient user.&lt;/p&gt;

&lt;p&gt;In contrast the first five letters of &lt;strong&gt;madam&lt;/strong&gt;.com (whatever &lt;em&gt;that&lt;/em&gt; might be about) cost 5 clicks. If you really want to burn 11 clicks, then why not go for &lt;strong&gt;accessible&lt;/strong&gt;.com?&lt;/p&gt;

&lt;p&gt;So this set me thinking… what are the good and bad words – &lt;em&gt;on a mobile keyboard&lt;/em&gt; – and which have a good ‘keypress ratio’ of clicks to actual word length resulting. KPL: “Keypresses Per Letter”, and lower is better.&lt;/p&gt;

&lt;p&gt;A quick bit of spreadsheet magic and I’ve got my list. My source of nearly 20,000 words was &lt;a href=&quot;http://wordlist.sourceforge.net/12dicts-readme.html&quot;&gt;12Dicts 3esl&lt;/a&gt;, and my algorithm was simply to add 1 for a, d, g, j etc, 2 for b, e, h, k etc… and then divide that total by the word length.&lt;/p&gt;

&lt;p&gt;The winners and losers in summary:&lt;/p&gt;

&lt;p&gt;&lt;u&gt;3 letter words:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;/u&amp;gt;  24 words (from &lt;strong&gt;add&lt;/strong&gt; through to &lt;strong&gt;www&lt;/strong&gt;) have a KPL of 1&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;SOS&lt;/strong&gt; is the worst 3 letter word with a KPL of 3.67&lt;/p&gt;

&lt;p&gt;&lt;u&gt;4 letter words:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;/u&amp;gt;  &lt;strong&gt;damp&lt;/strong&gt;, &lt;strong&gt;data&lt;/strong&gt;, &lt;strong&gt;mama&lt;/strong&gt;, &lt;strong&gt;papa&lt;/strong&gt; and &lt;strong&gt;watt&lt;/strong&gt; all have a KPL of 1&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;fizz&lt;/strong&gt; and &lt;strong&gt;loss&lt;/strong&gt; have a KPL of 3.5&lt;/p&gt;

&lt;p&gt;&lt;u&gt;5 letter words:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;adapt&lt;/strong&gt; and &lt;strong&gt;madam&lt;/strong&gt; have a KPL of 1&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;sissy&lt;/strong&gt; has a KPL of 3.6&lt;/p&gt;

&lt;p&gt;&lt;u&gt;6 letter words:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;/u&amp;gt;  &lt;strong&gt;damage&lt;/strong&gt;, &lt;strong&gt;gadget&lt;/strong&gt;, &lt;strong&gt;jagged&lt;/strong&gt;, &lt;strong&gt;jammed&lt;/strong&gt;, &lt;strong&gt;madman&lt;/strong&gt;, and &lt;strong&gt;matted&lt;/strong&gt; all have a KPL of 1.16&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;crisis&lt;/strong&gt;, &lt;strong&gt;fossil&lt;/strong&gt;, &lt;strong&gt;frizzy&lt;/strong&gt;, and &lt;strong&gt;sizzle&lt;/strong&gt; have a KPL of 3.33&lt;/p&gt;

&lt;p&gt;&lt;u&gt;7 letter words:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;/u&amp;gt;  &lt;strong&gt;adamant&lt;/strong&gt;, &lt;strong&gt;attempt&lt;/strong&gt; both have a KPL of 1.14&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;bossily&lt;/strong&gt; thru &lt;strong&gt;viscous&lt;/strong&gt; have a KPL of 3.14&lt;/p&gt;

&lt;p&gt;&lt;u&gt;8 letter words:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;amputate&lt;/strong&gt;, &lt;strong&gt;Muhammad&lt;/strong&gt;, and &lt;strong&gt;teammate&lt;/strong&gt; have a KPL of 1.25&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;scissors&lt;/strong&gt; has a KPL of 3.5&lt;/p&gt;

&lt;p&gt;&lt;u&gt;9 letter words:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;/u&amp;gt;  &lt;strong&gt;appendage&lt;/strong&gt; and &lt;strong&gt;attendant&lt;/strong&gt; both have a KPL of 1.33&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;fossilize&lt;/strong&gt; has a KPL of 3.22&lt;/p&gt;

&lt;p&gt;&lt;u&gt;10 letter words:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;amalgamate&lt;/strong&gt; has a KPL of 1.3&lt;/p&gt;

&lt;p&gt;  &lt;strong&gt;crisscross&lt;/strong&gt; has a KPL of 3.4&lt;/p&gt;

&lt;p&gt;And the list goes on of course. I’ve zipped up an HTML version in &lt;a href=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2006/11/kpl.zip&quot;&gt;kpl.zip&lt;/a&gt;{#p18} (~110k). For those interested, there’s also &lt;a href=&quot;http://www.pukupi.com/tools/domainatron/&quot;&gt;http://www.pukupi.com/tools/domainatron/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My rather crude algorithm hacked up in Excel VBA is:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Function keypress(word As String)&amp;lt;br /&amp;gt;
    keypress = 0&amp;lt;br /&amp;gt;
    For i = 1 To Len(word)&amp;lt;br /&amp;gt;
        c = Mid(word, i, 1)&amp;lt;br /&amp;gt;
        Select Case LCase(c)&amp;lt;br /&amp;gt;
            Case &quot;a&quot;, &quot;d&quot;, &quot;g&quot;, &quot;j&quot;, &quot;m&quot;, &quot;p&quot;, &quot;t&quot;, &quot;w&quot;&amp;lt;br /&amp;gt;
                keypress = keypress + 1&amp;lt;br /&amp;gt;
            Case &quot;b&quot;, &quot;e&quot;, &quot;h&quot;, &quot;k&quot;, &quot;n&quot;, &quot;q&quot;, &quot;u&quot;, &quot;x&quot;&amp;lt;br /&amp;gt;
                keypress = keypress + 2&amp;lt;br /&amp;gt;
            Case &quot;c&quot;, &quot;f&quot;, &quot;i&quot;, &quot;l&quot;, &quot;o&quot;, &quot;r&quot;, &quot;v&quot;, &quot;y&quot;&amp;lt;br /&amp;gt;
                keypress = keypress + 3&amp;lt;br /&amp;gt;
            Case &quot;s&quot;, &quot;z&quot;&amp;lt;br /&amp;gt;
                keypress = keypress + 4&amp;lt;br /&amp;gt;
            Case Else&amp;lt;br /&amp;gt;
                keypress = &quot;n/a&quot;&amp;lt;br /&amp;gt;
                Exit Function&amp;lt;br /&amp;gt;
         End Select&amp;lt;br /&amp;gt;
    Next&amp;lt;br /&amp;gt;
End Function&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I can see plenty of room to enhance this, by the way… taking into account those words that have consecutive letters from the same key (which slows you down as you have to wait for the cursor to move on). And then there’s the fact that .&lt;strong&gt;com&lt;/strong&gt;, .&lt;strong&gt;net&lt;/strong&gt; and .&lt;strong&gt;mobi&lt;/strong&gt; have varying KPLs, and that some devices even make &lt;strong&gt;.&lt;/strong&gt; a real nightmare to insert. Any other ideas?&lt;/p&gt;

&lt;p&gt;I’ll probably get round to building a dynamic web-based KPL analyser too… We’ll see.&lt;/p&gt;

&lt;p&gt;Anyway, in the meantime, please dwell on the fact that you can type &lt;strong&gt;amalgamate&lt;/strong&gt; with only 3 more keypresses than a QWERTY keyboard – and be thankful that you don’t own &lt;strong&gt;uncharacteristically&lt;/strong&gt;.com&lt;/p&gt;
</description>
				<pubDate>Sun, 19 Nov 2006 21:15:32 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/good-words-for-mobile/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/good-words-for-mobile/</guid>
			</item>
		
			<item>
				<title>Mr Pearce builds a .mobi site (part 1)</title>
        <description>&lt;p&gt;OK. After a day on the beach with the kids, I have an idea. That could have taken weeks – in the interests of pacing this story, thank goodness it was only a few hours.&lt;/p&gt;

&lt;p&gt;It’s a simple idea – a bit naive, but good enough for the exercise.&lt;/p&gt;

&lt;p&gt;Whenever I travel abroad to a country where I don’t know the language, I always find myself stuck with the simplest conversations. I feel really guilty not even knowing how to say thanks to the taxi driver (I failed miserably with Hungarian last week).&lt;/p&gt;

&lt;p&gt;So my site is going to provide – to mobiles – translations of the same 5 words (in as many languages as I can compile):&lt;/p&gt;

&lt;p&gt;“&lt;strong&gt;Hello&lt;/strong&gt;“, “&lt;strong&gt;Thank you&lt;/strong&gt;“, “&lt;strong&gt;Yes&lt;/strong&gt;“, “&lt;strong&gt;No&lt;/strong&gt;“, “&lt;strong&gt;Goodbye&lt;/strong&gt;”&lt;/p&gt;

&lt;p&gt;…all the vocabulary a world citizen requires 😉&lt;/p&gt;

&lt;p&gt;Now this should work quite well as a mobile app. It’s a low-bandwidth, low-markup sort of service, and it’s exactly the sort of thing you need when you’re in a mobile context.&lt;/p&gt;

&lt;p&gt;So… first the domain name. I think I’ll take the first letter of each of these 5 magic words and see what’s free.&lt;/p&gt;

&lt;p&gt;HTYNG.mobi is available (as the .com is, incidentally). But it doesn’t quite strike me as memorable enough.&lt;/p&gt;

&lt;p&gt;So I’ll swap the first two letters, and it at least becomes a pronouncable word. I go to my registrar (&lt;a href=&quot;http://www.dotster.com&quot;&gt;Dotster&lt;/a&gt;, as it happens), check it out…&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.tripleodeon.com/wp-content/blogs.dir/1/files/2006/11/thyng.gif&quot; alt=&quot;thyng.gif&quot; /&gt; &lt;/p&gt;

&lt;p&gt;… and $49.98 later (I have to register it for 2 years), I can welcome to the world &lt;strong&gt;THYNG.MOBI&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Stay tuned as I actually try to do something with it.&lt;/p&gt;
</description>
				<pubDate>Sun, 19 Nov 2006 20:09:09 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/mr-pearce-builds-a-mobi-site-part-1/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/mr-pearce-builds-a-mobi-site-part-1/</guid>
			</item>
		
			<item>
				<title>Mr Pearce builds a .mobi site (part 0)</title>
        <description>&lt;p&gt;An interesting thing happened a few days ago. My domain registrar sent me a mail to tell me that the .mobi versions of each of my .com domains were still available. Would I like to purchase them?&lt;/p&gt;

&lt;p&gt;Not interesting in a direct marketing sort of way, but interesting for &lt;em&gt;me&lt;/em&gt;, since I’ve been watching the promise of the mobile web evolve since 1998, and now we’re getting to a point where my registrar is mailing me to get me to upgrade my domains… cool. (It’s happening, it’s happening!)&lt;/p&gt;

&lt;p&gt;Anyway. Also interesting because I don’t yet have a .mobi address, and I guess I should get one, and build a site. I’m also intrigued because, as far as I can tell, the .mobi TLD is about more than just a dot and four letters: I think I’m also going to need to prove my site is &lt;a href=&quot;http://pc.mtld.mobi/mobilenet/dotmobi_guides.html&quot;&gt;up to the job&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, I thought I’d document the process as it happens. A step-by-step diary of how I get on. (Step 1: think of an interesting mobile proposition for which the .mobi address is still available! That’s going to take a few hours…)&lt;/p&gt;

&lt;p&gt;Stay tuned for my progress. If things work out, it might also serve as a bluffer’s tutorial to bootstrapping a mobile site.&lt;/p&gt;
</description>
				<pubDate>Sun, 19 Nov 2006 10:27:36 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/mr-pearce-builds-a-mobi-site-part-0/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/mr-pearce-builds-a-mobi-site-part-0/</guid>
			</item>
		
			<item>
				<title>The mobile walls come down</title>
        <description>&lt;p&gt;Long feasible in the US, but only starting to get traction in Europe, the idea of flat-rate, open-garden mobile access to the Internet might be coming…&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.three.co.uk/news/index.omp&quot;&gt;http://www.three.co.uk/news/index.omp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Interesting stuff. Of course this is an operator with a network built for this sort of thing, but which has previously been as ‘walled’ by default.&lt;/p&gt;

&lt;p&gt;I think the inevitable is happening and another catalyst of the mobile web (&lt;a href=&quot;http://opengardensblog.futuretext.com/archives/2006/11/3_announces_fla.html&quot;&gt;as envisioned by many&lt;/a&gt;) is happening as we speak.&lt;/p&gt;

&lt;p&gt;This factor (the lack of flat rate &lt;em&gt;combined with&lt;/em&gt; open access) has long been touted as pretty much the one and only thing holding back mass mobile web user adoption.&lt;/p&gt;

&lt;p&gt;Let’s hope that’s right. It seems a couple of enlightened mobile operators are about to try to help us prove it.&lt;/p&gt;

&lt;p&gt;I truly hope it won’t call our bluff (and we’ll merely find some other excuse for failure!)&lt;/p&gt;

&lt;p&gt;You know what you have to do 🙂&lt;/p&gt;
</description>
				<pubDate>Fri, 17 Nov 2006 14:31:59 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/the-mobile-walls-come-down/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/the-mobile-walls-come-down/</guid>
			</item>
		
			<item>
				<title>What makes a successful company?</title>
        <description>&lt;p&gt;I recently swapped some e-mail with some old colleagues from AnywhereYouGo.com – which at the time, 2000, was the ‘leading worldwide mobile developer community’ (&lt;a href=&quot;http://www.anywhereyougo.com/&quot;&gt;http://www.anywhereyougo.com&lt;/a&gt; is a pale imitation today. &lt;a href=&quot;http://web.archive.org/web/20010203154000/http://anywhereyougo.com/&quot;&gt;Archive.org&lt;/a&gt; is closer).&lt;/p&gt;

&lt;p&gt;It was broadly agreed that we had been ‘ahead of our time’. The bubble came and went, mobile data didn’t spring into life as we’d all hoped it might, and the idea of stimulating a community was just a few years early for the web 2.0 excitement of 2004 onwards. The company got bought (admittedly in &lt;a href=&quot;http://www.hp.com/hpinfo/newsroom/press/2001/010604a.html&quot;&gt;two&lt;/a&gt; / &lt;a href=&quot;http://www.argogroup.com/about_us/management/james_pearce&quot;&gt;pieces&lt;/a&gt;), and most folks moved out.&lt;/p&gt;

&lt;p&gt;Now it’s nearly 7 years on, the mobile web appears to be entering some sort of a &lt;a href=&quot;http://www.w3.org/Mobile/planet&quot;&gt;renaissance&lt;/a&gt;, and communities (and developer resources) are all the rage. The valley is still climbing the side of a new bubble (or is it a &lt;a href=&quot;http://www.calacanis.com/2006/11/15/the-real-story-of-web-2-0-advertising-2-0&quot;&gt;spike&lt;/a&gt;?), and one wonders how AnywhereYouGo.com would have been riding that were it around today.&lt;/p&gt;

&lt;p&gt;Since then, at Argogroup, the trick has been to to keep the momentum of interest in mobile data (and its quality) going. As a member of a very exclusive club of mobile startups that existed in both 2000 and 2006, Argogroup had to learn how to survive the trough between two bubbles.&lt;/p&gt;

&lt;p&gt;Did we do it by being ‘ahead of our time’? Well yes, to a certain extent. To keep investment coming, and to keep the company focussed and motivated, it’s very powerful to be developing products and propositions that are unique. And of course it’s the only way you’ll ever get an exciting valuation.&lt;/p&gt;

&lt;p&gt;But at the same time, you can’t do that in an ivory tower without disappearing into a technology-oriented world of cool products that don’t pay the bills. So while we worked hard to build exciting &lt;a href=&quot;http://www.argogroup.com/newsroom/press_releases/press_releases/press8&quot;&gt;new technology&lt;/a&gt;, we put a lot of effort into building up commercial strength and going &lt;a href=&quot;http://www.argogroup.com/newsroom/press_releases/press_releases/press12&quot;&gt;where the dollars were&lt;/a&gt;. And yes, of course, always being prepared to adapt a utopian vision of one’s product roadmaps towards what customers are actually asking for. So that’s about being ‘on the time’.&lt;/p&gt;

&lt;p&gt;Finally, after a while of making an apparently lucrative market, no-one is surprised when competition springs up – and that’s an important factor in driving a successful business too. As we all know, only the paranoid survive, and it’s not unusual for a competitor to rise fast to match some of your capabilities in the market place. In some cases exceed them – and that’s when you realise you’re ‘behind the time’. The level of concern – or paranoia – that that engenders can be a great catalyst to motivate a company to succees. (Watch Intel and AMD &lt;a href=&quot;http://www.wired.com/news/technology/computers/0,72126-0.html?tw=rss.index&quot;&gt;go at it&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Conversely, if you are late into the market, having a pace-maker to aspire to overtake also seems to be a recipe for success.&lt;/p&gt;

&lt;p&gt;So… I think you need to be all three:&lt;/p&gt;

&lt;p&gt;1) &lt;strong&gt;Ahead of your time&lt;/strong&gt; – providing thought-leadership, entrepreneurialism, pioneering world-class R&amp;amp;D, and a sales channel prepare to operate outside of a comfort zone&lt;/p&gt;

&lt;p&gt;2) &lt;strong&gt;On the time&lt;/strong&gt; – providing products that people need hear and now. Listening to short term requirements and catering functionality to meet tactical needs; a.k.a. ensuring revenue 🙂&lt;/p&gt;

&lt;p&gt;3) &lt;strong&gt;Behind the time&lt;/strong&gt; – not entirely of course, but being stung into action by other innovators and knowing how to deal pro-actively with that threat and shortfall – or having an earlier innovator in your sights.&lt;/p&gt;

&lt;p&gt;Take Google for example. 1) &lt;strong&gt;Check&lt;/strong&gt; (&lt;a href=&quot;http://labs.google.com/&quot;&gt;writ big&lt;/a&gt;), 2) &lt;strong&gt;Check&lt;/strong&gt; (&lt;a href=&quot;http://www.google.co.uk/intl/en/ads/&quot;&gt;ditto&lt;/a&gt;), 3) &lt;strong&gt;Check&lt;/strong&gt; (but &lt;a href=&quot;http://news.zdnet.com/2100-9588_22-5875433.html&quot;&gt;closing fast&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;So what makes an &lt;em&gt;unsuccessful&lt;/em&gt; company? Well, failing to tackle all three of these facets certainly doesn’t help. With AnywhereYouGo.com, we had lots of 1), basically no 2) and very little 3). I’ve been there – it’s not pretty – although I think we all did the best we could in the circumstances.&lt;/p&gt;

&lt;p&gt;But companies can also fail if they forget how to do 1), or don’t know how to deal with 3). The here-and-now comfort zone of 2) securing cash takes priority over innovation and competitive leadership.&lt;/p&gt;

&lt;p&gt;Kiss the valuation goodbye, watch the tail lights of the rest of the industry get smaller and smaller… sooner or later that’s not pretty either.&lt;/p&gt;
</description>
				<pubDate>Fri, 17 Nov 2006 09:15:25 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/what-makes-a-successful-company/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/what-makes-a-successful-company/</guid>
			</item>
		
			<item>
				<title>No half measures</title>
        <description>&lt;p&gt;Even genius has to pay its dues. It’s goodbye to the shortcuts, hello to the grind. Nobody ever said it would be an easy ride. So push more, risk more, feel more. How much is just a question of courage, a matter of heart (and &lt;a href=&quot;http://www.relentlessenergy.com/mainsite.html&quot;&gt;taurine&lt;/a&gt;)&lt;/p&gt;
</description>
				<pubDate>Tue, 14 Nov 2006 21:33:03 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/no-half-measures/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/no-half-measures/</guid>
			</item>
		
			<item>
				<title>The most expensive web cam</title>
        <description>&lt;p&gt;A question on the &lt;a href=&quot;http://www.mobilemonday.org.uk/&quot;&gt;Mobile Monday&lt;/a&gt; mailing list today: how to stream video from a mobile phone?&lt;/p&gt;

&lt;p&gt;Obviously streaming the other way is a fairly well known science, but the other way? Well, before thinking too much about why (I envision a remote controlled helicopter with suspened camera – controlled by SMS 🙂 ) I had a look about…&lt;/p&gt;

&lt;p&gt;My initial assumption was that you’d need to write some software (my first answer to everything). There are Symbian APIs for the camera and codecs, J2ME JSRs to approach the same thing, and maybe even some Pocket PC APIs.&lt;/p&gt;

&lt;p&gt;But then a couple of Google searches found &lt;a href=&quot;http://www.warelex.com/products/mobiola/&quot;&gt;Mobiola&lt;/a&gt; (only works over USB and Bluetooth) and finally, &lt;a href=&quot;http://www.comvu.com/&quot;&gt;Comvu&lt;/a&gt; on PPC. Genius.&lt;/p&gt;

&lt;p&gt;Community feedback seems to be positive. But I guess we’ll need to wait for HSUPA until we all become roving live broadcasters &amp;amp; vloggers…&lt;/p&gt;
</description>
				<pubDate>Tue, 14 Nov 2006 20:00:22 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/the-most-expensive-web-cam/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/the-most-expensive-web-cam/</guid>
			</item>
		
			<item>
				<title>Burning the midnight oil</title>
        <description>&lt;p&gt;Up at 4.45am this morning, still going 21 hours later. Ah, the start-up life. Back to the day job tomorrow.&lt;/p&gt;

&lt;p&gt;Hmmm. What can he be up to? Well I’m not telling. But it involves a little blue logo. You read it here first.&lt;/p&gt;
</description>
				<pubDate>Tue, 14 Nov 2006 02:16:57 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/burning-the-midnight-oil/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/burning-the-midnight-oil/</guid>
			</item>
		
			<item>
				<title>Speaking in Budapest</title>
        <description>&lt;p&gt;Hey, I get a mention in &lt;a href=&quot;http://pushingthebarrier.typepad.com/pushing_the_barrier/2006/11/world_telemedia.html&quot;&gt;GoMo News&lt;/a&gt;. It was a slightly bizarre event, as it was right next door to &lt;a href=&quot;http://www.aoexpo.com/&quot;&gt;http://www.aoexpo.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Anyway, I was speaking on mobile video and its future. I was fairly clear that the IP-streaming ‘Mobile TV’ paradigm is in some sort of a sweet-spot at the moment, but I also covered some of the other technologies available, as well as the usual challenges (quality etc etc etc)&lt;/p&gt;

&lt;p&gt;Before and after me were two speakers who both represented vendors in the ‘video shortcode’ space. Completely unknown to me, the world isn’t interested in video streaming – they only want to use their video phones to dial up shortcodes to see the telly. Or perhaps it was just a slightly biased panel…&lt;/p&gt;

&lt;p&gt;Anyway, personally I don’t care whether it’s streamed over packets, or called in over a circuit. I’ll be happy for anything that evolves mobile phone usage to realms outside voice. And good luck to the gentlemen from &lt;a href=&quot;http://www.mxtelecom.com/uk/video&quot;&gt;MXTelecom&lt;/a&gt; and &lt;a href=&quot;http://www.d2see.com/&quot;&gt;D2See&lt;/a&gt; 🙂&lt;/p&gt;
</description>
				<pubDate>Mon, 13 Nov 2006 09:36:27 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/speaking-in-budapest/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/speaking-in-budapest/</guid>
			</item>
		
			<item>
				<title>BBC 2.0</title>
        <description>&lt;p&gt;Hey! Free party! Mobile Monday members &lt;a href=&quot;http://backstage.bbc.co.uk/news/archives/2006/10/bbc_backstage_l.html&quot;&gt;invited&lt;/a&gt;. (Better brush up some RoR to keep the small talk going).&lt;/p&gt;

&lt;p&gt;But wow. I’m fascinated by &lt;a href=&quot;http://backstage.bbc.co.uk/&quot;&gt;http://backstage.bbc.co.uk/&lt;/a&gt; – if the BBC can pioneer like this, then anyone should be able to. I love the idea of all these underlying data sources exposing APIs to a broad community of application developers.&lt;/p&gt;

&lt;p&gt;It’s just like an operating system. Is &lt;a href=&quot;http://code.google.com/&quot;&gt;http://code.google.com/&lt;/a&gt; the new MSDN?&lt;/p&gt;
</description>
				<pubDate>Mon, 13 Nov 2006 06:45:35 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/bbc-20/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/bbc-20/</guid>
			</item>
		
			<item>
				<title>Planet Mobile Web</title>
        <description>&lt;p&gt;In case there was any doubt that there’s something underway (that may or may not be called ‘Mobile Web 2.0’), observe the enthusiasm and buzz converyed via &lt;a href=&quot;http://www.w3.org/Mobile/planet&quot;&gt;this new W3C aggregator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It’s interesting in two ways. It reminds us all that the W3C Mobile Web Initiative group is healthy and well underway. It also shows that W3C has more to offer than standards and recommendations. This is about trying to seed a community.&lt;/p&gt;

&lt;p&gt;And it mostly seems to be down to the efforts of Dominique Hazael-Massieux, who is to be applauded.&lt;/p&gt;
</description>
				<pubDate>Mon, 13 Nov 2006 06:35:35 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/planet-mobile-web/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/planet-mobile-web/</guid>
			</item>
		
			<item>
				<title>Initial thoughts on .mobi</title>
        <description>&lt;p&gt;[Edited from comments made on the &lt;a href=&quot;http://dotmobi.typepad.com/dotmobi/2006/11/dotmobis_ceo_sa.html&quot;&gt;dotMobi blog&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;As I understand it, .mobi is not as much about the fact a site is to be used on a mobile phone as it is to signify that the application or content is going to be suitable for usage in the context of mobility.&lt;/p&gt;

&lt;p&gt;ilovetacos.com might be a corporate site with a rich, browsable ordering service.&lt;/p&gt;

&lt;p&gt;ilovetacos.mobi, on the other hand, might be an interface designed to get you some tacos (with as few keypresses and dollars of data usage as possible), while you’re out and about.&lt;/p&gt;

&lt;p&gt;I would have thought “finding out about tacos at leisure” is a totally different use case to “I’m on the move. Get me tacos now!”&lt;/p&gt;

&lt;p&gt;It’s one web. Just two use cases. Right?&lt;/p&gt;

&lt;p&gt;Additionally, if the browsers are able to do spectacular gymnastics to get full web sites running on a phone, then content developers may be lulled into a false sense of mobile comfort.&lt;/p&gt;

&lt;p&gt;In fact, I would hazard thar ‘mobile applications’ are encapsulated by a philosophy far broader than fiddling about with markup and media-ruled stylesheets (on the server or on the client).&lt;/p&gt;

&lt;p&gt;Could any browser turn a corporate taco web site into a location-based delivery service?&lt;/p&gt;

&lt;p&gt;One final way of looking at this: if you could run a full version of FF2 or IE7 on your phone, might there not still be a good reason to visit the .mobi domain first (as you walk down the street)?&lt;/p&gt;
</description>
				<pubDate>Mon, 13 Nov 2006 06:06:53 +0000</pubDate>
				<link>https://tripleodeon.com/2006/11/initial-thoughts-on-mobi/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/11/initial-thoughts-on-mobi/</guid>
			</item>
		
			<item>
				<title>The evolution of quality measurement</title>
        <description>&lt;p&gt;I’ve worked for Argogroup for the last five years or so, and we’ve been focussed on trying to help mobile data serices take off – by helping operators and content providers improve quality.&lt;/p&gt;

&lt;p&gt;We did that using ‘active test’ techniques. Basically you simulate real users accessing your services and see what experience they would have had. It’s a great improvement (or complement) to using passive techniques to measure data traffic within the network to deduce quality.&lt;/p&gt;

&lt;p&gt;But what’s next? I think even ‘active test’ needs to evolve. After all, how can you truly represent millions of users synthetically?&lt;/p&gt;

&lt;p&gt;So I’m thinking a lot about this. “Quality of Service v2.0” I’m calling it. Basically, why not use the power of the ‘crowd’ (your users) to measure your quality for you?&lt;/p&gt;

&lt;p&gt;Instead of benchmarking your web site, or mobile application, you’d ‘crowdmark’ it.&lt;/p&gt;

&lt;p&gt;Or to put it in grandiose terms, imagine every terminal, every web browser, every laptop, every phone, hooked up to a vast, virtual, peer-to-peer instrumentation space. Every application or service comes with an embedded quality deduction tool – that not only measures its own performance, but encourages the user to record their own experience, and so shares and collaborates in measuring the performance of this and other applications.&lt;/p&gt;

&lt;p&gt;If I am using an application like Placeopedia, imagine if my session was be able to give something back to the underlying ‘Internet Operating System’ services that it uses. Record the user-experience, for example, and share it back through the mashed-up APIs, to Google maps, Digital Globe, NAVTEQ, Wikipedia, Yahoo broadband, BT Wifi etc etc. My simple behaviour has added a small drop to the QoS data ocean. But that’s an essence of web2.0: act locally, interact globally.&lt;/p&gt;

&lt;p&gt;And it’s not just about tracking protocol-level quality. Talk to the user, ask them how they are doing. Ask them to rate what they see. &lt;strong&gt;Let them tag their user experience!&lt;/strong&gt;&lt;/p&gt;
</description>
				<pubDate>Sat, 28 Oct 2006 06:20:25 +0000</pubDate>
				<link>https://tripleodeon.com/2006/10/the-evolution-of-quality/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/10/the-evolution-of-quality/</guid>
			</item>
		
			<item>
				<title>What does Tripleodeon mean?</title>
        <description>&lt;p&gt;Well, I can safely say it means nothing!&lt;/p&gt;

&lt;p&gt;I registered it back in about 2002, when I was intrigued by a number of things happening in the Semantic Web space. That’s a world full of ‘triples’. I also like my film. And for some reason a familiar kids cartoon network popped into my head. Before I knew it, I had a name.&lt;/p&gt;

&lt;p&gt;Actually, I rather wish I’d gone for ‘Semantic Cinema’. Might still do 🙂&lt;/p&gt;
</description>
				<pubDate>Fri, 20 Oct 2006 05:29:57 +0000</pubDate>
				<link>https://tripleodeon.com/2006/10/what-does-tripleodeon-mean/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/10/what-does-tripleodeon-mean/</guid>
			</item>
		
			<item>
				<title>Er. The Beginning</title>
        <description>&lt;p&gt;Well I’ve had this domain for years, and never really did anything productive enough with it (except use it as my catch-all email domain).&lt;/p&gt;

&lt;p&gt;Right now I’m feeling motivated to do something with it. Primarily a blog, I think, but also somewhere to put my Google Reader shares!&lt;/p&gt;

&lt;p&gt;I’ve been impressed over the last few months with the collective enthusiasm around properly bootstrapping the mobile web. I’ve worked in this area since about 1997 (when the Unwired Planet products started crossing the pond) so it would be wonderful if it turns out that it took only 10 years for it to finally reach some sort of fruition.&lt;/p&gt;

&lt;p&gt;I’m no environmentalist, and certainly far from green. But I’m scared about climate change. Rather than resorting to the common euphemism of ‘save the planet’ (which can probably look after itself), I’d go for ‘save the species’ (meaning ours). Bad times ahead. &lt;/p&gt;

&lt;p&gt;And of course the web. It’s become a cliche to say ‘I hate buzzwords, but let’s talk about web2.0’. I think it’s great to unashamedly talk in terms of buzzwords! It’s that ‘collective enthusiasm’ thing again.&lt;/p&gt;

&lt;p&gt;Probably also a good place to chuck links to a variety of other projects I’ve got underway.&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;
</description>
				<pubDate>Sun, 15 Oct 2006 01:52:58 +0000</pubDate>
				<link>https://tripleodeon.com/2006/10/hello-world-2/</link>
				<guid isPermaLink="true">https://tripleodeon.com/2006/10/hello-world-2/</guid>
			</item>
		
	</channel>
</rss>
