<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Incrementalist</title>
	<atom:link href="http://retrovirus.com/incr/feed/" rel="self" type="application/rss+xml" />
	<link>http://retrovirus.com/incr</link>
	<description></description>
	<lastBuildDate>Sun, 02 Oct 2011 14:24:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Cicada for MetaWatch, a Preview</title>
		<link>http://retrovirus.com/incr/2011/09/cicada-for-metawatch-review/</link>
		<comments>http://retrovirus.com/incr/2011/09/cicada-for-metawatch-review/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 21:30:11 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Cicada]]></category>
		<category><![CDATA[MetaWatch]]></category>
		<category><![CDATA[wearable computing]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/?p=220</guid>
		<description><![CDATA[Early in the course of developing some of my MetaWatch UI experiments, I started running into problems with coordinating between the multiple watch-compatible apps on my Android phone. My apps were getting button press events through the broadcast intents sent &#8230; <a href="http://retrovirus.com/incr/2011/09/cicada-for-metawatch-review/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Early in the course of developing some of my <a href="http://retrovirus.com/incr/2011/08/metawatch-experiments/" title="MetaWatch Experiments">MetaWatch UI experiments</a>, I started running into problems with coordinating between the multiple watch-compatible apps on my Android phone.  My apps were getting button press events through the broadcast intents sent out by an early version of the MetaWatch Manager app.  The problem with using broadcast intents for this is that they&#8217;re, well, broadcast&mdash;all my watch apps would receive the button press event at the same time and often react simultaneously.  I could make each app only react to a dedicated button, but it got a bit tedious coordinating all that.</p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada-logo.png" alt="" title="cicada-logo" width="64" height="64" class="alignleft size-full wp-image-221" />
Out of this frustration, and from a desire to reduce the boilerplate involved in writing a new apps for the watch, I began to develop a framework that I called Cicada.</p>

<p>Cicada provides a couple of key things for hackers who want to explore app ideas.  First, it provides a menu system to pick between watch-compatible apps installed on the phone.  Only the app that&#8217;s currently on the watch screen gets the button press events.  Second, it has a widget mode that lets you run three independent apps at the same time, with each getting one third of the watch screen, so you can mix and match pieces for your watch display.</p>

<p style="clear:left"/>

<p>Here&#8217;s a little walkthrough of the Cicada interface on the phone side:</p>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada1.png"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada1-180x300.png" alt="" title="cicada1" width="180" height="300" class="alignleft size-medium wp-image-231" /></a>
Cicada mostly runs in the background on your Android phone, but it also has a very basic control UI.  It&#8217;s nothing I&#8217;m proud of, but it&#8217;s done the job while I&#8217;ve been focused on the APIs and plumbing.  This is what it looks like when it&#8217;s not running.</p>

<p style="clear:left"/>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada2.png"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada2-180x300.png" alt="" title="cicada2" width="180" height="300" class="alignleft size-medium wp-image-230" /></a>
When Cicada is active, you see a copy of what&#8217;s on the watch screen, which is handy for taking screenshots.  Here you can see the app list.  Pressing the top and bottom buttons on the right side of the watch move the selection up and down, respectively, and pressing the middle-right button launches the selected app.  Cicada automatically detects when you install or uninstall watch-compatible apps from your phone, and updates this app list instantaneously.</p>

<p style="clear:left"/>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada3.png"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada3-180x300.png" alt="" title="cicada3" width="180" height="300" class="alignleft size-medium wp-image-229" /></a>
Now I&#8217;ve launched the &#8220;Widget Screen&#8221; app that&#8217;s built in to Cicada.  This app has an associated settings UI, as you can see from the button that appeared.  (Pressing the upper-left watch button would bring me back to the app list.)</p>

<p>In any case, the widget screen is showing several different apps at once.  How did I set that up?</p>

<p style="clear:left"/>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada4.png"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada4-180x300.png" alt="" title="cicada4" width="180" height="300" class="alignleft size-medium wp-image-228" /></a>
Tapping that settings button on the phone screen brings up the (similarly unvarnished) widget settings view, where you can see the list of apps that were being shown on the widget screen: an app showing the current status of my London tube line, a basic clock, and an app that shows the next appointments from my Google calendar.</p>

<p style="clear:left"/>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada5.png"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada5-180x300.png" alt="" title="cicada5" width="180" height="300" class="alignleft size-medium wp-image-227" /></a>
Here I&#8217;ve tapped one of the widget slots, allowing you to see the list of apps that have declared that they can run as widgets.</p>

<p style="clear:left"/>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada6.png"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada6-180x300.png" alt="" title="cicada6" width="180" height="300" class="alignleft size-medium wp-image-226" /></a>
I&#8217;ve made a few changes in the widget configuration.  You can&#8217;t see it here, but as I&#8217;ve made each choice, the watch display has updated itself so I can see the new look.</p>

<p style="clear:left"/>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada7.png"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada7-180x300.png" alt="" title="cicada7" width="180" height="300" class="alignleft size-medium wp-image-225" /></a>
Here&#8217;s what the new set of widgets looks like on the watch.  I&#8217;ve moved the clock to the top, and swapped out the bottom widget for an app that shows bus arrival estimates in San Francisco.  Now, if I press the lower-right watch button next to the bus times widget&#8230;</p>

<p style="clear:left"/>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada8.png"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/cicada8-180x300.png" alt="" title="cicada8" width="180" height="300" class="alignleft size-medium wp-image-224" /></a>
&#8230;it launches the bus times app in full screen mode, showing more detail.  (As before, pressing the upper-left watch button would bring me back to the widget screen.)  Note that this is the same thing I&#8217;d get if I&#8217;d chosen &#8220;Next Buses&#8221; from the initial app menu.</p>

<p style="clear:left"/>

<p>Anyway, that&#8217;s a quick look at Cicada.  It&#8217;s not quite polished enough to put up on the Android Market yet, but if you&#8217;re a developer interested in building Android apps for putting glanceable information on the digital <a href="http://metawatch.org">MetaWatch</a>, it&#8217;s definitely far enough along to be useful to you.  You can find the source code for the framework and many sample apps in the <a href="https://github.com/cicada-dev/cicada">Cicada project on GitHub</a>.</p>

<p>To get an idea of what&#8217;s involved in writing a Cicada app, have a look at the <a href="https://github.com/cicada-dev/cicada/blob/master/samples/digitalclock/src/org/cicadasong/samples/digitalclock/DigitalClock.java">source for the Digital Clock sample app</a> (less than 100 lines of code, including the license header).  You just subclass the <code>CicadaApp</code> service class, implement <code>onResume()</code>, <code>onPause()</code>, <code>onButtonPress()</code>, and draw your watch screen in <code>onDraw()</code>.</p>

<p>I&#8217;ll write more about Cicada here soon, but if you have any questions in the meantime, post them in the comments below or in the <a href="http://groups.google.com/group/cicada-dev/">cicada-dev Google group</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2011/09/cicada-for-metawatch-review/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>MetaWatch Hacks &amp; Resources</title>
		<link>http://retrovirus.com/incr/2011/09/metawatch-hacks-resources/</link>
		<comments>http://retrovirus.com/incr/2011/09/metawatch-hacks-resources/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 17:08:42 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[MetaWatch]]></category>
		<category><![CDATA[wearable computing]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/?p=188</guid>
		<description><![CDATA[People are starting to hack together some interesting things for the MetaWatch bluetooth watch platform, but the official forums are so hard to navigate that it&#8217;s hard to keep track of what&#8217;s going on. This post will serve to pull &#8230; <a href="http://retrovirus.com/incr/2011/09/metawatch-hacks-resources/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>People are starting to hack together some interesting things for the <a href="http://metawatch.org">MetaWatch</a> bluetooth watch platform, but the official forums are so hard to navigate that it&#8217;s hard to keep track of what&#8217;s going on.  This post will serve to pull together some of the things I&#8217;ve come across, and I&#8217;ll update it until I get bored of curating it.</p>

<h1>UPDATE</h1>

<p>There&#8217;s now a MetaWatch Wiki; updated versions of the content below can be found there, particularly in the <a href="https://sites.google.com/site/metawatchdev/software/hacks">Hacks</a> and <a href="https://sites.google.com/site/metawatchdev/software/frameworks">Libraries &amp; Frameworks</a> pages.</p>

<h2>Developer Resources</h2>

<ul>
<li><a href="http://www.metawatch.org/forums/">Official MetaWatch Forums</a><br />(also good for general questions&mdash;please don&#8217;t ask them in the comments!)</li>
<li><a href="http://webchat.freenode.net/">#metawatch IRC channel on Freenode</a></li>
<li><a href="http://www.metawatch.org/assets/images/developers/MetaWatch_HostMessageInterface_Prerelease_A.pdf">MetaWatch wire protocol (PDF)</a></li>
</ul>

<h2>Libraries &#038; Frameworks</h2>

<ul>
<li><a href="https://github.com/MetaWatchOpenProjects/MWM-for-Android">Official Meta Watch Manager for Android source code</a> (Android)</li>
<li><a href="https://github.com/MetaWatchOpenProjects/MetaWatch-WDS11x-IAR">Official MetaWatch firmware source code</a> (Embedded C)</li>
<li><a href="https://github.com/travisgoodspeed/PyMetaWatch">PyMetaWatch</a> (Python, Linux/Windows/Mac)</li>
<li><a href="http://labs.kernelconcepts.de/Projects/MetaWatch/">MetaWatch</a> (C, Linux)</li>
<li><a href="http://www.metawatch.org/developers/">MetaWatchManager</a> (Android BroadcastIntents)</li>
<li><a href="http://www.metawatch.org/forums/thread/99/quick-net-api">.Net port of PyMetaWatch</a> (.Net)</li>
<li><a href="http://cicadasong.org">Cicada</a> (Android app framework &#038; runtime)</li>
<li><a href="https://github.com/ka010/MWKit">MWKit</a> (Objective-C library for Mac OS X and jailbroken iOS)</li>
<li><a href="https://github.com/ka010/MWManager">MWManager</a> (Mac OS X app to drive the watch)</li>
</ul>

<p><h2>Hacks</h2></p>

<p style="clear:left"/> 

<p><a href="http://retrovirus.com/incr/2011/08/metawatch-experiments/" title="MetaWatch Experiments"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/wrist-widgets-large-1-300x292.jpg" alt="" title="MetaWatch with widgets on screen" width="300" height="292" class="alignleft size-medium wp-image-77" />
Assorted app prototypes</a> that I put together</p>

<p style="clear:left"/> 

<p><a href="http://retrovirus.com/incr/2011/09/minecraft-metawatch/" title="Crafting a bluetooth Minecraft Watch with MetaWatch"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/rising-moon-300x224.jpg" alt="" title="Rising Moon" width="300" height="224" class="alignleft size-medium wp-image-185" />Minecraft Clock</a>, also done by me</p>

<p style="clear:left"/> 

<p><a href='http://ka010.wordpress.com/2011/09/22/metawatch-hacking-first-prototypes/' ><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/kai-lights-224x300.jpg" alt="" title="kai-lights" width="224" height="300" class="alignleft size-medium wp-image-198" />
Controlling room lights via OpenAMI</a> by <a href="http://010dev.de/">Kai Aras</a></p>

<p style="clear:left"/> 

<p><a href="http://ka010.wordpress.com/2011/09/22/metawatch-hacking-first-prototypes/"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/kai-remote-224x300.jpg" alt="" title="kai-remote" width="224" height="300" class="alignleft size-medium wp-image-200" />Remote control</a> by <a href="http://010dev.de/">Kai Aras</a></p>

<p style="clear:left"/>

<p><a href="http://www.youtube.com/watch?v=1gyIET0gWJ0"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/qt-animation-javier-300x182.png" alt="" title="qt-animation-javier" width="300" height="182" class="alignleft size-medium wp-image-202" />Qt Animation</a> by <a href="http://javispedro.com/">javispedro</a></p>

<p style="clear:left"/>

<p><a href="http://note.orez.us/metawatch-meets-google-maps"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/google-maps-zero-cho-224x300.jpg" alt="" title="google-maps-zero-cho" width="224" height="300" class="alignleft size-medium wp-image-211" />Showing Google Maps for your current location</a> by <a href="http://note.orez.us/">Zero Cho</a></p>

<p style="clear:left"/>

<p><a href="http://ka010.wordpress.com/2011/09/22/metawatch-hacking-first-prototypes/"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/growl-kai-224x300.jpg" alt="" title="growl-kai" width="224" height="300" class="alignleft size-medium wp-image-213" />Desktop Mac App notifications via Growl</a> by <a href="http://010dev.de/">Kai Aras</a></p>

<p style="clear:left"/>

<p><a href="http://www.youtube.com/watch?v=Lkh6hWc3_5g"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/kai-ios-300x183.png" alt="" title="kai-ios" width="300" height="183" class="alignleft size-medium wp-image-216" />Jailbroken iOS support</a> by <a href="http://010dev.de/">Kai Aras</a></p>

<p style="clear:left"/>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/albumart-javispedro.jpg"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/albumart-javispedro-168x300.jpg" alt="" title="albumart-javispedro" width="168" height="300" class="alignleft size-medium wp-image-263" /></a> <a href="https://twitter.com/#!/javispedro/status/118780450436153346/photo/1">Album art and song title display</a> by <a href="http://javispedro.com/">javispedro</a></p>

<p style="clear:left"/>

<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/firmware-garthy.jpg"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/firmware-garthy-300x151.jpg" alt="" title="firmware-garthy" width="300" height="151" class="alignleft size-medium wp-image-258" /></a><a href="https://sites.google.com/a/garthy.net/garthy-com/metawatch">Firmware tweaks by Garth Bushell</a> to add a 24-hour toggle to the embedded menu and to add the year to the idle display. (<a href="https://github.com/garthy/MetaWatch-WDS11x-IAR">source code</a>)</p>

<p style="clear:left"/>

<p>Let me know what else you find (though I reserve the right to not post <i>everything</i> that I come across).</p>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2011/09/metawatch-hacks-resources/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Crafting a bluetooth Minecraft Watch with MetaWatch</title>
		<link>http://retrovirus.com/incr/2011/09/minecraft-metawatch/</link>
		<comments>http://retrovirus.com/incr/2011/09/minecraft-metawatch/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 09:00:57 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[MetaWatch]]></category>
		<category><![CDATA[wearable computing]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/?p=162</guid>
		<description><![CDATA[A little bit of Friday silliness for you, wherein I manage to combine two recent pastimes, hacking the MetaWatch and playing Minecraft, by pulling a piece of game UI out into the real world. Lately I&#8217;ve been experimenting with the &#8230; <a href="http://retrovirus.com/incr/2011/09/minecraft-metawatch/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/minecraft-metawatch.jpg"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/minecraft-metawatch-247x300.jpg" alt="" title="minecraft-metawatch" width="247" height="300" class="aligncenter size-medium wp-image-163" /></a>
A little bit of Friday silliness for you, wherein I manage to combine two recent pastimes, hacking the <a href="http://metawatch.org">MetaWatch</a> and playing Minecraft, by pulling a piece of game UI out into the real world.</p>

<p>Lately I&#8217;ve been <a href="http://retrovirus.com/incr/2011/08/metawatch-experiments/" title="MetaWatch Experiments">experimenting with the possibilities of Bluetooth watches</a>.  While I was fooling with Travis Goodspeed&#8217;s <a href="https://github.com/travisgoodspeed/PyMetaWatch">PyMetaWatch</a> library for talking to the MetaWatch from Python code on your PC, I remembered <a href="http://mynameismwd.org/index.php?id=619">a fun hack that my friend Michael Dales had done</a> to control lights in the real world from actions and switches in the virtual world of Minecraft.</p>

<p><a href="http://minecraft.net">Minecraft</a> is an engrossingly open-ended game that involves exploring caves for minerals, then using those materials to build more tools and buildings. To complicate matters, there&#8217;s a day/night cycle, and night time brings zombies, skeletal archers, and other nasty ssssurprises.  The upshot is that it&#8217;s a lot safer to travel during the day.</p>

<p>If you&#8217;re mining deep in a cave, though, how do you know when it&#8217;s safe to emerge from your spelunking to haul your loot home?  <a href="http://notch.tumblr.com/">Notch</a>, the game&#8217;s creator, eventually added the ability to craft an <a href="http://www.minecraftwiki.net/wiki/Clock">astronomical clock</a> in the game to tell you what time of day it was.</p>

<p>So, how did I get it on my wrist?  Here&#8217;s the crafting recipe for this hack:
I wrote a little mod for the Minecraft server that spit out the virtual world&#8217;s time of day, using V10lator&#8217;s <a href="http://dev.bukkit.org/server-mods/lib24time/">lib24time</a> library and the gratifyingly straightforward <a href="http://www.minecraftwiki.net/wiki/Bukkit">Bukkit</a> Minecraft modding system.  From there, I have a Python script that uses PIL and the assets from the game to render an approximation of the Minecraft watch at the given time of day.</p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/clock-states.png" alt="" title="clock-states" width="384" height="198" class="aligncenter size-full wp-image-168" /></p>

<p>Finally, I&#8217;m using <a href="https://github.com/joehughes/PyMetaWatch">my fork of PyMetaWatch</a> to send the image from my Mac to the watch via bluetooth.</p>

<p>It works, but it&#8217;s very laggy right now.  (Eagle-eyed Minecraft fans might have noticed that my screenshot above is more evocative than accurate.)  The slowdown seems to be somewhere in the PyMetaWatch/lightblue combo, which is taking an agonizingly long time to send a bitmap to the watch.  I can generally send a bitmap from my Android phone in less than a second, I suspect that either lightblue is configuring the bluetooth RFCOMM link for a ridiculously low speed, or there&#8217;s some overhead in the PyObjC bridge that it relies on.  Let me know if you have any ideas.</p>

<p><b>Update (Sept. 17):</b> Today I tried a different tack, involving an Android app loading the clock image from the Mac over wifi and sending it to the watch via MetaWatchManager, and it worked much better.  Here are a couple more pictures showing the watch time more or less synced up with the time on the in-game clock:
<a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/setting-sun.jpg"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/setting-sun-300x224.jpg" alt="" title="Setting Sun" width="300" height="224" class="aligncenter size-medium wp-image-186" /></a>
<a href="http://retrovirus.com/incr/wp-content/uploads/2011/09/rising-moon.jpg"><img src="http://retrovirus.com/incr/wp-content/uploads/2011/09/rising-moon-300x224.jpg" alt="" title="Rising Moon" width="300" height="224" class="aligncenter size-medium wp-image-185" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2011/09/minecraft-metawatch/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>MetaWatch Experiments</title>
		<link>http://retrovirus.com/incr/2011/08/metawatch-experiments/</link>
		<comments>http://retrovirus.com/incr/2011/08/metawatch-experiments/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 09:00:42 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[MetaWatch]]></category>
		<category><![CDATA[wearable computing]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/?p=43</guid>
		<description><![CDATA[As the MetaWatch bluetooth watches are getting closer to shipping, I figure it&#8217;s a good time to talk about some of the UI experiments I&#8217;ve been doing with them, to give you an idea of what they might be useful &#8230; <a href="http://retrovirus.com/incr/2011/08/metawatch-experiments/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/wrist-widgets-large-1.jpg" alt="" title="MetaWatch with widgets on screen" width="500" height="487" class="aligncenter size-full wp-image-77" /></p>

<p>As the <a href="http://www.metawatch.org/">MetaWatch</a> bluetooth watches are getting closer to shipping, I figure it&#8217;s a good time to talk about some of the UI experiments I&#8217;ve been doing with them, to give you an idea of what they might be useful for.</p>

<p>MetaWatch is a line of hacker-friendly wristwatches that can be paired with smartphones to enable new kinds of lightweight interactions.  In the same way that glancing at a wristwatch is faster and less disruptive than pulling out a pocket watch to check the time, you can imagine how glancing at a connected watch could be more convenient and sociable than pulling your phone out of a pocket or handbag to see cloud-based information.</p>

<p>After my previous experiments in <a href="http://headwayblog.com/2009/12/14/telling-time-with-openrealtime-data/">showing live bus times on an older bluetooth watch</a>, the guys at Fossil got in touch with me, and over the past couple of years I&#8217;ve served as an unpaid advisor to the MetaWatch project, in the hopes of helping to make the end products as developer-friendly as possible.<sup class='footnote'><a href='#fn-43-1' id='fnref-43-1' onclick='return fdfootnote_show(43)'>1</a></sup></p>

<p>There are a lot of things to like about the MetaWatch devices:</p>

<ol>
<li>The screen of the digital version is always on, so the information on it is always a discreet glance away.  You don&#8217;t need to push or swipe anything to bring it to life.</li>
<li>The battery life is reasonable, so you can wear these things for the better part of a week without having to charge them.</li>
<li>Since they&#8217;re designed by experienced watchmakers at Fossil, the MetaWatch devices look more like fashion watches than cookie-sized computers strapped to your wrist.</li>
</ol>

<p>There are definitely some trade-offs, though, compared to other devices with more horsepower and flashier displays:</p>

<ol>
<li>As an Android app author, you&#8217;re basically treating the MetaWatch as a dumb terminal.  You send pixels to the screen, and you get button presses back.  This gives you a lot of control, but the downside is that watch-based UIs are a lot less responsive than you&#8217;d like.<sup class='footnote'><a href='#fn-43-2' id='fnref-43-2' onclick='return fdfootnote_show(43)'>2</a></sup></li>
<li>The low-resolution monochrome display isn&#8217;t as sexy as color touchscreen devices like the iPod Nano or the <a href="http://www.wimm.com/">WIMM Platform</a>.  They&#8217;ve made the most of it by hiring Susan Kare, designer of the original monochrome Mac graphics, to do the default imagery.  You can&#8217;t reuse existing designs—for best results any UI is going to have to be custom-designed for this thing.</li>
</ol>

<p>With that out of the way, here are a few prototypes that I&#8217;ve made over the past year or so.<sup class='footnote'><a href='#fn-43-3' id='fnref-43-3' onclick='return fdfootnote_show(43)'>3</a></sup>  I hope you&#8217;ll excuse the rough graphics in places; I mostly wanted to see how these interfaces would feel if they were always easily accessible on my wrist.</p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/wrist-flight.jpg" alt="" title="wrist-flight" width="300" height="300" class="alignleft size-full wp-image-72" />
Imagine this: you&#8217;re at the airport, hands full of luggage, and you just want to know where and when you need to be at your gate.  Wouldn&#8217;t it be handy if you could glance at your wrist to find out?  <a href="http://interconnected.org/home/">Matt Webb</a> called this use &#8220;personal signage&#8221;, which is a nice way of thinking about it—you can get by with a lot less screen real-estate if your devices know exactly which part of the departure board you&#8217;re interested in.
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/wrist-calendar.jpg" alt="" title="wrist-calendar" width="300" height="300" class="alignleft size-full wp-image-69" />
How long do you have to work before your next meeting?  It&#8217;d be great to be able to see that at a glance.
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/wrist-drive-clock.jpg" alt="" title="wrist-drive-clock" width="300" height="300" class="alignleft size-full wp-image-70" />
When you&#8217;re driving home, the time that&#8217;s <i>really</i> important to you is when you&#8217;ll get there.  Assuming your phone knew your commute home, it could check current traffic conditions and show you the time you&#8217;d get home if you were to leave now.
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/wrist-tube-status.jpg" alt="" title="wrist-tube-status" width="300" height="300" class="alignleft size-full wp-image-76" />
Since I take the London Underground home instead, what I want to know is how the trains on my line are running.
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/wrist-speed-sms.jpg" alt="" title="wrist-speed-sms" width="300" height="300" class="alignleft size-full wp-image-74" />
Of course, the watch has several buttons that can enable you to trigger phone actions.  I always text my wife when I&#8217;m heading home from work, so I wrote a little app to send a canned message with a single button press as I&#8217;m walking out of the building.
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/wrist-ego-surf.jpg" alt="" title="wrist-ego-surf" width="300" height="300" class="alignleft size-full wp-image-71" /></p>

<p>If you&#8217;re an author who compulsively checks your Amazon rank and social network stats, you could put those things right on your wrist and avoid the distraction of surfing to those sites.</p>

<p><p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/screen-commute-timer2-150x150.png" alt="" title="screen-commute-timer2" width="150" height="150" class="alignleft size-thumbnail wp-image-58" />
I was curious how my commute time broke down, so put together a custom stopwatch app.  I hit the button when I stepped off the bus or got out of the tube, and the app saved that &#8220;lap&#8221;.  (It also used the time of day to know whether to reverse the order of the steps in the list.)
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/screen-death-clock-150x150.png" alt="" title="screen-death-clock" width="150" height="150" class="alignleft size-thumbnail wp-image-59" />
If you want to keep yourself focused on important things, perhaps a little memento mori reminding you how many days you had left (actuarially speaking) would help?
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/screen-pomodoro-150x150.png" alt="" title="screen-pomodoro" width="150" height="150" class="alignleft size-thumbnail wp-image-64" />
If that&#8217;s too morbid, you could try the <a href="http://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro Technique</a> of staying focused on work in 25-minute increments, and have the watch vibrate when it&#8217;s time to take a break.
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/screen-menu-150x150.png" alt="" title="screen-menu" width="150" height="150" class="alignleft size-thumbnail wp-image-62" />
Finally, a little bit about the development process: to make it easier to quickly build new MetaWatch apps, I put together a little framework called Cicada.  It detects watch-compatible Android apps as they&#8217;re installed on the phone and automatically adds them to an on-watch menu system.
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/screen-next-buses-150x150.png" alt="" title="screen-next-buses" width="150" height="150" class="alignleft size-thumbnail wp-image-63" />
A Cicada app can run in full screen mode&#8230;
<p style="clear:left"/></p>

<p><img src="http://retrovirus.com/incr/wp-content/uploads/2011/08/screen-widgets2-150x150.png" alt="" title="screen-widgets2" width="150" height="150" class="alignleft size-thumbnail wp-image-68" />
&#8230;and optionally, the same app can be run in widget mode alongside other apps.  Here, the same realtime bus times app is only using the bottom &#8531; of the screen, with other Android applications providing the tube status widget and the digital clock widget.
<p style="clear:left"/></p>

<p>I&#8217;ll talk more about the Cicada framework in a <a href="http://retrovirus.com/incr/2011/09/cicada-for-metawatch-review/" title="Cicada for MetaWatch, a Preview">later post</a>.</p>

<hr />

<div class='footnotes' id='footnotes-43'><div class='footnotedivider'></div><ol><li id='fn-43-1'>Disclosure: the MetaWatch guys have provided me with several prototype watches to experiment with over the past couple years.  In my day job, I&#8217;m employed by Google UK, but my bluetooth watch experimentation is a personal project done on my own time. <span class='footnotereverse'><a href='#fnref-43-1'>&#8617;</a></span></li><li id='fn-43-2'>You can also modify the firmware that runs on the watch itself, which would be much more responsive, but I haven&#8217;t experimented with this yet. <span class='footnotereverse'><a href='#fnref-43-2'>&#8617;</a></span></li><li id='fn-43-3'>The watches shown here are early prototypes that have slightly different appearances and branding than the shipping devices. <span class='footnotereverse'><a href='#fnref-43-3'>&#8617;</a></span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2011/08/metawatch-experiments/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Super See Original bookmarklet for Google Reader on iPhone</title>
		<link>http://retrovirus.com/incr/2007/07/super-see-original/</link>
		<comments>http://retrovirus.com/incr/2007/07/super-see-original/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 04:46:10 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/2007/07/super-see-original/</guid>
		<description><![CDATA[Right now, if you visit Google Reader on the iPhone, you get redirected to the mobile XHTML version of Reader. This works fine for browsing through feed items, but when you click &#8220;See original&#8221; to go to source page for &#8230; <a href="http://retrovirus.com/incr/2007/07/super-see-original/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Right now, if you visit <a href="http://reader.google.com">Google Reader</a> on the iPhone, you get redirected to the mobile XHTML version of Reader.  This works fine for browsing through feed items, but when you click &#8220;See original&#8221; to go to source page for an entry, you get the stripped-down <a href="http://googleblog.blogspot.com/2006/11/viewing-web-through-mobile-lens.html">Google Web Transcoder</a> mobile version.  We know that the iPhone is capable of more than this; what I really wanted to see in this situation was the full-blown original page in a new &#8220;tab&#8221;.</p>

<p>Fortunately, the iPhone&#8217;s Safari supports bookmarklets, so I whipped up a little bookmarklet that makes it easy to see the <i>real</i> original page in Reader.  Here&#8217;s how to use it:</p>

<ol><li>On your desktop computer, drag the following link onto Safari&#8217;s bookmarks toolbar: 
<b><a href="javascript:var%20links=document.getElementsByTagName('a');for(var%20i=0;i<links.length;++i){if(links[i].accessKey==1){/n\?u=(.*)/.test(links[i].href);window.open(unescape(RegExp.$1));break;}}">Super See Original</a></b></li>
<li>Sync your iPhone</li>
<li>Once that&#8217;s done, go to Google Reader on your iPhone, and navigate to a blog entry.</li>
<li>Hit the bookmark icon at the bottom, then choose <b>Bookmarks Bar</b> > <b>Super See Original</b></li>
<li>The original page for your blog entry should open in a new &#8220;tab&#8221;!</li>
</ol>

<p>I have no doubt that the Reader team will eventually make a more iPhone-optimized version of Reader, but until then, hopefully some of you will find this useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2007/07/super-see-original/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dabble DB: Still sadly short of structured Shangri-La</title>
		<link>http://retrovirus.com/incr/2007/03/dabble-db-shortcomings/</link>
		<comments>http://retrovirus.com/incr/2007/03/dabble-db-shortcomings/#comments</comments>
		<pubDate>Sat, 17 Mar 2007 05:41:20 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/2007/03/dabble-db-shortcomings/</guid>
		<description><![CDATA[My latest side project is Headway, a resource for public transit hackers and the agencies who&#8230; often aren&#8217;t sure what to make of them. For whatever reason, the combination of sharp urban-dwelling creative folk and useful-but-confusing public transit systems has &#8230; <a href="http://retrovirus.com/incr/2007/03/dabble-db-shortcomings/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My latest side project is <a href="http://headwayblog.com">Headway</a>, a resource for public transit hackers and the agencies who&#8230; often aren&#8217;t sure what to make of them.  For whatever reason, the combination of sharp urban-dwelling creative folk and useful-but-confusing public transit systems has yielded <a href="http://headwayblog.com/wiki/index.php?title=Category:Third-Party_Sites">many handy sites</a> dedicated to making it easier to get around.</p>

<p>As I was setting up the blog, found that I really wanted some kind of <a href="http://www.oreillynet.com/pub/a/javascript/2002/01/01/cory.html">outboard brain</a> that could help me keep all the people and sites straight, and hopefully provide a useful reference for others.  For expediency&#8217;s sake, I just used the handy &#8220;one-click&#8221; install of MediaWiki that <a href="http://www.dreamhost.com/r.cgi?54326">DreamHost</a> provides and started typing away.  A few weekends later, <a href="http://headwayblog.com/wiki/">the Headway Wiki</a> was starting to become something useful&#8212;but I was definitely chafing against MediaWiki&#8217;s limitations.  I found that I generally wanted to represent the same kinds of things about <a href="http://headwayblog.com/wiki/index.php?title=BART_Map/Schedule">each entry</a>:</p>

<ul>
<li>the name of the site</li>
<li>the web address</li>
<li>who runs it</li>
<li>when it was launched (often with some degree of fuzziness, because even the site&#8217;s creator doesn&#8217;t really remember)</li>
<li>which agencies it serves</li>
</ul>

<p>&#8230;and a few other miscellaneous things.  Unfortunately, MediaWiki is really oriented towards prose&#8212;and in fact, I found myself using repetitive prose (with a smattering of bulleted lists) to express these things.  Even worse, when I wanted to connect a entry about a third-party transit site to an entry on the agency that it was helping out, I had to manually maintain the link on both ends of the connection.  That is, I couldn&#8217;t just tell the system that <a href="http://headwayblog.com/wiki/index.php?title=Boston_Subway_Station_Map">Boston Subway Station Map</a> had information about the MBTA, and have it automatically display that in the <a href="http://headwayblog.com/wiki/index.php?title=MBTA">MBTA</a> entry&#8212;I had to go and edit the MBTA page by hand.</p>

<p>I did make use of MediaWiki&#8217;s (apparently) single structural feature: categories.  Categories are basically simple tags that you can add to articles, so that the software can automatically generate <a href="http://headwayblog.com/wiki/index.php?title=Category:Agencies">an index</a> of articles that all share a particular tag.  Still, in the end it was far more work than I wanted to do.</p>

<p>There really should be a better way to put together a structured data collection like this, something in between limited expressiveness of MediaWiki and the programming involved in putting together a custom database-backed website using Ruby on Rails or what have you.  I&#8217;m pretty sure that it&#8217;s possible, because I spent several years of my life working on tools like that for the <a href="http://www.maya.com/infocommons/">MAYA Information Commons</a> project.  Sadly, that work still isn&#8217;t available to the general public, so it&#8217;s not really a contender here.  However, there are a few intriguing new possibilities.</p>

<p>Enter <a href="http://dabbledb.com/">Dabble DB</a>.  At first blush, it looked like just the thing that I was looking for.  It has what&#8217;s probably the best available interface for experimenting with different ways of representing interconnected information.  It&#8217;s pretty straightforward to create an item, add a few fields to it, and make some of those fields two-way links to other items.  That&#8217;s no small feat, since my former co-workers and I spent the better part of 2004 building something similar (and if <em><a href="http://www.amazon.com/Dreaming-Code-Programmers-Transcendent-Software/dp/1400082463">Dreaming in Code</a></em> is to be believed, the folks on the respected <a href="http://chandler.osafoundation.org/">Chandler</a> team were at it for even longer, at around the same time).  So far, so good.  But after an evening trying to make the <a href="http://headwayblog.com">Headway</a> data work in Dabble DB, I&#8217;ve run into a bunch of significant shortcomings.</p>

<h3>No boolean fields</h3>

<p>Starting with the smallest thing, there&#8217;s no straightforward way to represent a simple checkbox for things like &#8220;does this feed contain schedule information&#8221;?  You can work around this by creating a multiple-choice field with the options &#8220;Yes&#8221; and &#8220;No&#8221;, but they&#8217;re missing an opportunity to make entering and displaying these fields simpler.</p>

<h3>Limited spatial information</h3>

<p>Here we are, a couple years after the Google Maps API catalyzed a geographic revolution on the web, and Dabble DB&#8217;s only location options are &#8220;US or Canadian state/province code&#8221; and &#8220;Country Code&#8221;.  To their credit, they do automatically link to a Google Maps search for your term in some cases, but they could provide far more interesting map views if they simply had a lat/lon geocode field and just dumped it into Google maps.</p>

<h3>Ontological limitations</h3>

<p>It&#8217;s very cool that Dabble DB lets you put one item in multiple &#8220;categories&#8221; (schemas, basically).  But in practice, their implementation is less handy than it would seem.  Say you had two kinds of things, &#8220;websites&#8221; and &#8220;data providers&#8221;, both of which have names (of course) along with other more category-specific fields.  If it turns out that you want to represent something that&#8217;s both a website and a data provider, and you put both categories on the same object, you end up with two name fields.</p>

<p>You could take a different tack and say that a &#8220;data provider&#8221; is a specific kind of &#8220;website&#8221;, so only the website category will have a name field.  That&#8217;s great, but then there&#8217;s no easy way to have the system automatically add the &#8220;website&#8221; category when you go to create your next &#8220;data provider&#8221; item.  Even worse, when you go to create a new view of your data based on &#8220;data providers&#8221;, there&#8217;s no way to choose to display the &#8220;name&#8221; field from the &#8220;websites&#8221; category in the table.  (Note: this isn&#8217;t strictly true for the name field, since they special-case it so that you always have some kind of identifier, but it&#8217;s true for other attributes.)</p>

<h3>Rudimentary public views</h3>

<p>I could probably work around all those things, but there&#8217;s one thing that makes Dabble DB unusable for the Headway data set: the public view is horribly impoverished.  <a href="http://headway.dabbledb.com/publish/transitdirectory">Here are the results of my experiments</a>: my lovingly interlinked data has been reduced to a box of yellowing printouts, metaphorically speaking.  There&#8217;s no apparent way for the viewer to see a single entry laid out in a readable form, let alone follow links between items or search &amp; filter by different attributes.</p>

<p>It&#8217;s a shame, because Dabble DB really is the best that I&#8217;ve seen so far in most other respects.</p>

<h3>Freebase to the rescue?</h3>

<p>There&#8217;s another contender on the horizon: the wonderfully named <a href="http://www.freebase.com">Freebase</a>.  Tim O&#8217;Reilly recently <a href="http://radar.oreilly.com/archives/2007/03/freebase_will_p_1.html">threw a debutante ball for it</a> on his influential blog, and it&#8217;s easy to see why it stirred some excitement (and controversy) in the online community.  It sounds quite a bit like the things I was working on at MAYA, but with a pleasantly simple web-based interface and without the radical peer-to-peer architecture.  On the other hand, it&#8217;s hard to say for sure, since the alpha is currently only open to a <a href="http://ptufts.blogspot.com/2007/03/freebase-and-creative-commons.html">few</a> <a href="http://neomeme.wordpress.com/2007/03/14/exploring-all-the-cool-stuff-you-can-do-with-freebasewith-screenshots-part-i/">fortunate</a> <a href="http://semantic.nodix.net/2007/03/freebase.html">souls</a>, and details are scarce.  Hopefully I&#8217;ll get a chance to check it out soon.</p>

<p>In the meantime, Dabble DB has a lot of potential, especially since they recently launched their free Creative Commons version (which made it a viable option for Headway).  Hopefully, with a few refinements, they&#8217;ll be able to turn it into a compelling alternative to developing custom code any time you want to share some interconnected information.</p>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2007/03/dabble-db-shortcomings/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Geotagging Photos with Picasa and Google Earth</title>
		<link>http://retrovirus.com/incr/2006/06/picasa-geotagging/</link>
		<comments>http://retrovirus.com/incr/2006/06/picasa-geotagging/#comments</comments>
		<pubDate>Sat, 17 Jun 2006 22:36:54 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[geo]]></category>
		<category><![CDATA[gui]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/2006/06/picasa-geotagging/</guid>
		<description><![CDATA[A few weeks ago, I went on a hike to Treasure Island, and I thought it&#8217;d be a good opportunity to try out the state of the art in simple photo geotagging, so that people could see photos of my &#8230; <a href="http://retrovirus.com/incr/2006/06/picasa-geotagging/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img id="image35" src="http://retrovirus.com/incr/wp-content/uploads/2006/06/picasa-geotag-7.jpg" alt="Geotagged photos" height="303" width="400" /></p>

<p>A few weeks ago, I went on a hike to <a href="http://en.wikipedia.org/wiki/Treasure_Island,_California">Treasure Island</a>, and I thought it&#8217;d be a good opportunity to try out the state of the art in simple photo geotagging, so that people could see photos of my trip on a map.  My first test involved:</p>

<ol>
<li>Uploading the <a href="http://flickr.com/photos/joehughes/sets/72157594147786551/">photos</a> to <a href="http://flickr.com">Flickr</a> using <a href="http://connectedflow.com/flickrexport/">FlickrExport</a> for iPhoto</li>
<li>Finding the spot for each for photo in <a href="http://earth.google.com/">Google Earth</a>, creating a placemark, and copying the latitude and longitude into <code>geo:lat=</code> and <code>geo:lon=</code> tags on the Flickr image.</li>
<li>Using <a href="http://www.dapperscoo.com/flickrgeotag/geotagForm.html">Scott The Hobo&#8217;s Flickr Photoset Maps</a> to turn the geotagged photoset into an online map.</li>
</ol>

<p><a href="http://www.dapperscoo.com/flickrgeotag/flickrGeotag.php?photosetid=72157594147786551">The resulting map</a> is pretty nice, sluggish Yahoo map aside, and the process wasn&#8217;t <em>too</em> painful.  The worst pain point was the cut-and-paste geocoding process.</p>

<p>However, since Google just released <a href="http://googleblog.blogspot.com/2006/06/happy-birthday-google-earth.html">a whole slew of geographic updates</a>, not to mention a barebones (but snappy) <a href="http://googleblog.blogspot.com/2006/06/its-all-about-photos.html">photo hosting service</a>, I thought I&#8217;d give it a try using Google tools.</p>

<p>First step: get the photos into Picasa, Google&#8217;s excellent free Windows photo organizer.  I used <a href="http://greggman.com/pages/flickrdown.htm">FlickrDown</a> to download the photoset from Flickr to my Windows box.  It was simple, though I was sad that there was no way to preserve my photos&#8217; tags.  I then downloaded the new version of Picasa from the <a href="http://picasaweb.google.com">Picasa Web Albums</a> site.  (You need to get this specific version to be able to do the fancy stuff I&#8217;m about to describe.)  Picasa immediately found and imported the downloaded photos&#8212;so far, so good.</p>

<p>Next, I went through and geotagged the photos using Picasa&#8217;s integration with <a href="http://earth.google.com/earth4.html">Google Earth 4</a>.  I highlighted some photos in Picasa and selected the <code>Geotag With Google Earth</code> option hidden away in the <code>Tools</code> menu.</p>

<p><img id="image29" src="http://retrovirus.com/incr/wp-content/uploads/2006/06/picasa-geotag-1.jpg" alt="Geotag Menu" width="400" height="333"/></p>

<p>This took me to a <em>slick</em> geotagging interface in Earth.</p>

<p><img id="image30" src="http://retrovirus.com/incr/wp-content/uploads/2006/06/picasa-geotag-2.jpg" alt="Earth Geotagging" width="400" height="258"/></p>

<p>Basically, you just drag and zoom around in Google Earth until the crosshairs (which are anchored to the middle of the display) are resting on the point that you want to tag the photo with.  Then you just hit the <code>Geotag</code> button, the view bounces to give you visual feedback, and it moves on to the next photo.  This was <em>so</em> much more pleasant than manually copying the location to Flickr.  When I was done, it brought me back to Picasa.  The photos all had little crosshair icons in the corner, indicating that they had been geotagged, and a quick look at the <code>Properties</code> dialog seemed to indicate that the location had been added to the image&#8217;s EXIF data.</p>

<p><img id="image31" src="http://retrovirus.com/incr/wp-content/uploads/2006/06/picasa-geotag-3.jpg" alt="Properties dialog" width="398" height="442"/></p>

<p>Now that the images were geotagged, I found that I could use the <code>View in Google Earth...</code> option to see the photo on the map.  It seems that this is implemented using some sort of dynamic folder in Google Earth called <code>Picasa Link</code> that constantly queries Picasa for images with geotags in their EXIF&#8212;so effectively, you can browse your Picasa library geographically using Earth!  I tried adding <a href="http://akuaku.org/archives/2003/05/gps_tagged_jpeg.shtml">a random geotagged phonecam image</a> from the web, and sure enough, it showed up on Earth.</p>

<p>OK, so now that I had found geotagged image bliss, how could I share it?  I tried the <code>Export to Google Earth File</code> option in the <code>Tools</code> &rarr; <code>Geotag</code> menu, which yielded <a href="http://retrovirus.com/files/2006/treasure_island.kmz">a nice Google Earth KMZ file</a> with the photos embedded.</p>

<p>Since Google Maps recently added support for viewing KML files, I decided to see if I could view my photos there.  The results were <a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=http://retrovirus.com/files/2006/treasure_island.kmz&amp;ie=UTF8&amp;om=1">not so hot</a>.</p>

<p><a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=http://retrovirus.com/files/2006/treasure_island.kmz&amp;ie=UTF8&amp;om=1"><img border="0" id="image32" src="http://retrovirus.com/incr/wp-content/uploads/2006/06/picasa-geotag-4.jpg" alt="Maps KML failure" width="400" height="268"/></a></p>

<p>As you can see, it wasn&#8217;t a <em>total</em> bust&#8212;the locations show up correctly&#8212;but the actual photos were nowhere to be found.</p>

<p>Since I&#8217;d seen <a href="http://maps.google.com/maps?q=http://kml.lover.googlepages.com/my-vacation-photos.kml">examples</a> of photos on maps, I was sure it could be done&#8212;maybe they just wanted the photos to be linked from the web.  The Google Earth UI didn&#8217;t seem to give me any way to replace the photos with web links to photos.  However, KML is a <a href="http://earth.google.com/kml/index.html">straightforward XML format</a>&#8212;hand-editing ahoy!</p>

<p><img id="image33" src="http://retrovirus.com/incr/wp-content/uploads/2006/06/picasa-geotag-5.jpg" alt="Hand-editing" width="400" height="345"/></p>

<p>(Incidentally, I was hoping that when I uploaded the images from Picasa to my Picasa Web Album account, it would do something smart.  Sadly, Web Albums didn&#8217;t show any recognition that the images were geotagged, not even in the EXIF section.  I&#8217;m sure that they&#8217;ll eventually sort that out, maybe by automatically generating KML links to Maps.)</p>

<p>Back to the hand-editing; first I had to unzip the KMZ file that Picasa had generated.  (It&#8217;s just a normal zip file, rename the <code>.kmz</code> to <code>.zip</code> and you should be able to unzip it normally.)  The only file that I needed was the <code>doc.kml</code> file; the rest of the archive just contained the photos and thumbnails.  I stripped out all the style stuff at the top of the file, since Maps didn&#8217;t seem to be paying attention to the icons anyway.  Then I replaced the contents of the <code>description</code> tag in each placemark with an image reference and link to the images on my Picasa Web Album.  Then I uploaded the KML file, and <a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=http://retrovirus.com/files/2006/treasure_island.kml">it worked</a>!</p>

<p><a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=http://retrovirus.com/files/2006/treasure_island.kml"><img border="0" id="image34" src="http://retrovirus.com/incr/wp-content/uploads/2006/06/picasa-geotag-6.jpg" alt="Working map" width="400" height="266"/></a></p>

<p>The result isn&#8217;t quite as nice as my original map, because I didn&#8217;t immediately see a way to get smaller images out of Web Album, but it does the job.</p>

<p>The verdict: geotagging with Picasa and Google is a dream, viewing geotagged Picasa photos is awesome, but the web mapping part of the Google photo story needs work.</p>

<p>(Incidentally, while you&#8217;re checking out <a href="http://picasaweb.google.com/incrementalist/TreasureIsland">my Treasure Island album</a> be sure to try pressing the left and right arrow keys while you&#8217;re looking at pictures&#8212;you can flip through photos <em>really</em> quickly in Picasa Web Album!)</p>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2006/06/picasa-geotagging/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>What I&#8217;ve been up to&#8230;</title>
		<link>http://retrovirus.com/incr/2005/12/google-transit/</link>
		<comments>http://retrovirus.com/incr/2005/12/google-transit/#comments</comments>
		<pubDate>Thu, 08 Dec 2005 22:42:04 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[transit]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/?p=27</guid>
		<description><![CDATA[&#8230;for 20% of my time, anyway. My teammates and I are proud to present Google Transit, a new Google Labs experiment focused on helping make public transit information more accessible and understandable. We&#8217;re starting with Portland, Oregon&#8217;s transit system, but &#8230; <a href="http://retrovirus.com/incr/2005/12/google-transit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&#8230;for 20% of my time, anyway.</p>

<p>My teammates and I are proud to present <a href="http://www.google.com/transit">Google Transit</a>, a new Google Labs experiment focused on helping make public transit information more accessible and understandable.  We&#8217;re starting with Portland, Oregon&#8217;s transit system, but we&#8217;ll be expanding it to support other cities soon.</p>

<p>For more information, check out the <a href="http://googleblog.blogspot.com/2005/12/public-transit-via-google.html">announcement</a>, and if you have feedback or bug reports, we&#8217;d love to hear it at <a href="mailto:labs-transit_feedback@google.com">labs-transit_feedback@google.com</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2005/12/google-transit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quicktime 7.0.3 for Windows Installation Problem</title>
		<link>http://retrovirus.com/incr/2005/11/quicktime-problem/</link>
		<comments>http://retrovirus.com/incr/2005/11/quicktime-problem/#comments</comments>
		<pubDate>Sun, 13 Nov 2005 08:06:41 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/?p=26</guid>
		<description><![CDATA[This is for the benefit of future searchers: if you&#8217;re trying to install iTunes on Windows and it dies during the Quicktime installation with a &#8220;-3&#8243; error, or you try to install Quicktime 7.0.3 on Windows and you get an &#8230; <a href="http://retrovirus.com/incr/2005/11/quicktime-problem/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is for the benefit of future searchers: if you&#8217;re trying to install iTunes on Windows and it dies during the Quicktime installation with a &#8220;-3&#8243; error, or you try to install Quicktime 7.0.3 on Windows and you get an Error 1714 or some complaint about not being able to find <code>quicktime.msi</code> even though it&#8217;s there, the way to fix it is to:</p>

<ol>
<li>Open <code>regedit</code></li>
<li>Navigate to <code>HKEY_CLASSES_ROOT</code> &#8211;> <code>Installer</code> and select <code>Products</code></li>
<li>Use the <code>Find</code> menu to find <code>quicktime</code> inside that part of the key</li>
<li>Delete the part of the tree that you find</li>
<li>You should now be able to install Quicktime and iTunes without incident</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2005/11/quicktime-problem/feed/</wfw:commentRss>
		<slash:comments>328</slash:comments>
		</item>
		<item>
		<title>Google Maps + MBTA Update</title>
		<link>http://retrovirus.com/incr/2005/09/gmbta-update/</link>
		<comments>http://retrovirus.com/incr/2005/09/gmbta-update/#comments</comments>
		<pubDate>Tue, 06 Sep 2005 00:13:55 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[gui]]></category>
		<category><![CDATA[transit]]></category>

		<guid isPermaLink="false">http://retrovirus.com/incr/?p=25</guid>
		<description><![CDATA[Since I had the day off today, I had some time to tinker with my MBTA Google Maps experiment and fix a few things which had been bugging me. The changes include: You can now look for times near a &#8230; <a href="http://retrovirus.com/incr/2005/09/gmbta-update/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Since I had the day off today, I had some time to tinker with my <a href="http://retrovirus.com/experiments/gmbta/">MBTA Google Maps experiment</a> and fix a few things which had been bugging me.  The changes include:</p>

<ul>
<li>You can now look for times near a particular address using the Location area under the map.  In order to do this, I wrote a little proxy to feed addresses entered on this page to the wonderful <a href="http://geocoder.us">geocoder.us</a> free geocoding service, and return the results as JavaScript literals.</li>
<li>The page now remembers your location, zoom level, and selected stop between visits.</li>
<li>It now works in current versions of Internet Explorer.</li>
</ul>

<p>At this point, it&#8217;s almost suitable for regular use.  The biggest improvement that&#8217;s still on my list is to do a better job of handling stops that are too close together.  Right now, stops can fall too close together on the map, making them difficult to click on individually.  Automatically combining these stops would help the situation.</p>
]]></content:encoded>
			<wfw:commentRss>http://retrovirus.com/incr/2005/09/gmbta-update/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

