<?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>mobile geo social</title>
	<atom:link href="http://hitching.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://hitching.net</link>
	<description>a blog by bob hitching</description>
	<lastBuildDate>Thu, 11 Mar 2010 13:35:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>GeoMeme adds MySpace real-time local trends</title>
		<link>http://hitching.net/2010/03/04/geomeme-adds-myspace-real-time-local-trends/</link>
		<comments>http://hitching.net/2010/03/04/geomeme-adds-myspace-real-time-local-trends/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 13:10:53 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[geomeme]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[myspace]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=16105</guid>
		<description><![CDATA[In other news, GeoMeme now measures real-time local trends based on both MySpace and Twitter content.
GeoMeme uses the new Real-Time Stream API from MySpace to tap into the flood of geo-located updates being posted by MySpace users all around the world.

MySpace content is mashed up with tweets from a number of mobile Twitter apps, and [...]]]></description>
			<content:encoded><![CDATA[<p>In other news, <a href="http://www.geome.me">GeoMeme</a> now measures real-time local trends based on both MySpace and Twitter content.</p>
<p>GeoMeme uses the new <a href="http://developerwiki.myspace.com/index.php?title=Category:Real_Time_Stream">Real-Time Stream API</a> from MySpace to tap into the flood of geo-located updates being posted by MySpace users all around the world.</p>
<p><a href="http://www.geome.me"><img src="http://hitching.net/wp-content/uploads/2010/03/myspace_added.png" /></a></p>
<p>MySpace content is mashed up with tweets from a number of mobile Twitter apps, and located onto a Google Map. Local trends are identified using semantic analysis services from Yahoo. </p>
<p>A couple of example GeoMemes generated by all this real-time geo-located content: <a href="http://www.geome.me/6anMj">Rihanna beats Lady Gaga in New York</a>, and <a href="http://www.geome.me/vL8Cp">Avatar beats Hurt Locker in Los Angeles</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2010/03/04/geomeme-adds-myspace-real-time-local-trends/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile awesomeness, innovation and disruption</title>
		<link>http://hitching.net/2010/03/03/mobile-awesomeness-innovation-and-disruption/</link>
		<comments>http://hitching.net/2010/03/03/mobile-awesomeness-innovation-and-disruption/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 12:20:41 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=16098</guid>
		<description><![CDATA[
The good people at MitchelLake recently asked me to write an article about mobile technology.
So I created a list of awesomeness, innovation and disruption, including topics such as ‘Mobile is big’, ‘Phones are getting better’, and ‘People pay for stuff on their phones’.
Here’s the full article; 10 awesome, innovative and disruptive things about mobile.
]]></description>
			<content:encoded><![CDATA[<p><img style="float: left; margin-right: 20px;" src="/wp-content/uploads/2010/02/mobile-phone-with-camera-150x150.jpg" alt="" /></p>
<p>The good people at <a href="http://mitchellake.com">MitchelLake</a> recently asked me to write an article about mobile technology.</p>
<p>So I created a list of awesomeness, innovation and disruption, including topics such as ‘Mobile is big’, ‘Phones are getting better’, and ‘People pay for stuff on their phones’.</p>
<p>Here’s the full article; <a href="http://www.mitchellake.com.au/NewsEvents/Newsarticles/10awesomeinnovativeanddisruptivethingsaboutmobile20100223.aspx">10 awesome, innovative and disruptive things about mobile</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2010/03/03/mobile-awesomeness-innovation-and-disruption/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Murdoch should worry less about the Googlebot and more about social media</title>
		<link>http://hitching.net/2009/11/14/murdoch-should-worry-less-about-the-googlebot-and-more-about-social-media/</link>
		<comments>http://hitching.net/2009/11/14/murdoch-should-worry-less-about-the-googlebot-and-more-about-social-media/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 13:30:10 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[aol]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[friendfeed]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google social search]]></category>
		<category><![CDATA[googlebot]]></category>
		<category><![CDATA[murdoch]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[retweet]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15992</guid>
		<description><![CDATA[I remember in January 2000, old media mogul Rupert Murdoch said he was not going to waste his money buying any &#8216;dotcom&#8217; upstarts. The very next day, AOL bought Time Warner. Not the other way around!
Murdoch had apparently failed to grasp the significance of the interwebs.
However, ten years later Time Warner has regained its mojo [...]]]></description>
			<content:encoded><![CDATA[<p>I remember in January 2000, old media mogul Rupert Murdoch<span id="li_news" style="margin-left:2px"></span> said he was not going to waste his money buying any &#8216;dotcom&#8217; upstarts. The very next day, AOL<span id="li_aol" style="margin-left:2px"></span> <a href="http://news.bbc.co.uk/2/hi/business/597169.stm">bought</a> Time Warner<span id="li_time" style="margin-left:2px"></span>. <strong>Not the other way around!</strong></p>
<p>Murdoch had apparently failed to grasp the significance of the interwebs.</p>
<p>However, ten years later Time Warner has regained its mojo and is now trying to <a href="http://www.techcrunch.com/2009/11/12/cleaning-house-before-its-ipo-will-cost-aol-200-million-and-up-to-1000-jobs/">offload</a> a spent and jaded AOL. Did Murdoch get it wrong ten years ago, or did it simply take a whole decade for him to be proven right?</p>
<p>In 2009, the mob is rushing once again to the conclusion that Murdoch is losing his marbles, planning to charge for his online content and blocking the Googlebot from <a href="http://www.youtube.com/watch?v=M7GkJqRv3BI">stealing</a> it.</p>
<p>Personally I believe that Murdoch should worry less about the Googlebot, and more about how social media is turning his industry on its head.</p>
<p>The problem is that all of those dotcom upstarts have brought us information overload. There has been an exponential increase in the amount of information and content available to us, way beyond the capacity of the human brain to process.</p>
<p>The solution is social media, which empowers us to easily share the content we care about with our friends and contacts, and adds valuable metadata to that shared content, such as Likes or Retweet counts. This metadata helps us filter the signal from the noise, so that we can focus on just the best quality content from our trusted circle of friends.</p>
<p>This works great for movie reviews. People have always listened to the advice of friends when it comes to choosing what movie to watch. Social media simply provides an efficient and scalable way to do this.</p>
<p>The best example of this social filter is currently <a href="http://friendfeed.com">FriendFeed</a><span id="li_ff" style="margin-left:2px"></span>, although we can expect to soon see something <a href="http://www.youtube.com/watch?v=vUmmvIN4-GU">equally impressive</a> on Facebook<span id="li_fb" style="margin-left:2px"></span>. Twitter<span id="li_tw" style="margin-left:2px"></span> Search could do this even better if only it were possible to search the entire tweet history of just your friends, or a chosen social distance into your social graph, rather then merely search 7 days of the public timeline. I am hoping that the <a href="http://googleblog.blogspot.com/2009/10/introducing-google-social-search-i.html">Google Social Search Experiment</a> will enable this sort of social filter when Google<span id="li_goog" style="margin-left:2px"></span> completes its <a href="http://blog.twitter.com/2009/10/google-nice.html">Twitter integration</a>.<em><br />
</em></p>
<p>Back to Mr. Murdoch&#8230; Social media also works for the filtering of news content, however it&#8217;s more tricky than movie reviews because there is a need for trustworthy fact rather than mere opinion. This is why Eric Schmidt believes that figuring out how to rank real-time social content, perhaps based on a reliable measure of <a href="../2009/01/07/whats-the-difference-between-user-generated-content-and-user-generated-rubbish-comments-please/">reputation and authority</a>, is &#8220;<a href="http://www.readwriteweb.com/archives/google_web_in_five_years.php">the great challenge of the age</a>&#8220;. It also explains why Twitter&#8217;s <a href="http://evhead.com/2009/11/why-retweet-works-way-it-does.html">Retweet</a> feature does not allow the original tweet to be modified, because this makes the Retweet count a more reliable indicator of authority.</p>
<p>So my advice to Rupert Murdoch and other media companies struggling with this; worry less about the Googlebot and more about social media. Focus on improving the quality of your content, so that people share it with their friends.</p>
<p>And if your own social media strategy is not delivering any tangible benefits, try moving it from your Marketing department to your Customer Service department. Use social media to listen more carefully to the needs of your customers, so you can improve the quality of your content to the point where a paid online content model becomes viable.</p>
<p>If Marketing and Customer Service argue about who owns the customer relationship, remind them both that thanks to social media it&#8217;s actually <span style="text-decoration: underline;">the customer</span> who owns and controls the relationship with your business. <strong>Not the other way around!</strong><br />
<script src="http://www.linkedin.com/companyInsider?script&#038;useBorder=yes" type="text/javascript"></script><br />
<script type="text/javascript">
new LinkedIn.CompanyInsiderPopup("li_news","News");
new LinkedIn.CompanyInsiderPopup("li_aol","AOL");
new LinkedIn.CompanyInsiderPopup("li_time","Time Warner");
new LinkedIn.CompanyInsiderPopup("li_goog","Google");
new LinkedIn.CompanyInsiderPopup("li_tw","Twitter");
new LinkedIn.CompanyInsiderPopup("li_ff","Friendfeed");
new LinkedIn.CompanyInsiderPopup("li_fb","Facebook");
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/11/14/murdoch-should-worry-less-about-the-googlebot-and-more-about-social-media/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenAustralia Hackfest: &#8216;Mobile + Geo + Social&#8217; slides</title>
		<link>http://hitching.net/2009/11/11/openaustralia-hackfest-mobile-geo-social-slides/</link>
		<comments>http://hitching.net/2009/11/11/openaustralia-hackfest-mobile-geo-social-slides/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 10:44:48 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[gov2.0]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[openaustralia]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15951</guid>
		<description><![CDATA[I popped into the OpenAustralia Hackfest at the weekend to learn and talk about some of the latest developments in the Gov2.0 revolution.
There are now some quite interesting public datasets available, and the developer community is hard at work turning this data into useful APIs, and building innovative applications to consume the data.
Some of the [...]]]></description>
			<content:encoded><![CDATA[<p>I popped into the <a href="http://hackfest.openaustralia.org/">OpenAustralia Hackfest</a> at the weekend to learn and talk about some of the latest developments in the Gov2.0 revolution.</p>
<p>There are now some quite interesting public <a href="http://data.australia.gov.au/">datasets</a> available, and the developer community is hard at work turning this data into useful APIs, and building innovative applications to consume the data.</p>
<p>Some of the notable apps to emerge from OpenAustralia include:</p>
<ul>
<li><a href="http://its-buggered-mate.apps.lpmodules.com/">It&#8217;s Buggered, Mate</a> &#8211; from the Canberra Hackfest, a geo app to crowdsource the reporting of broken public infrastructure.</li>
<li><a href="http://www.suburbmatchmaker.com.au/lgabrowser?">Suburb Matchmaker</a> &#8211; the winner of the Sydney Hackfest, a tool to help you find your ideal suburb to live in.</li>
<li><a href="http://fridgemate.creativepossums.net/">FridgeMate</a> &#8211; currently winning the MashupAustralia contest and only a couple of days away from the $10,000 prize. FridgeMate lets you assemble a map of local public amenities to stick on your fridge door. My advice to the Creative Possums behind FridgeMate would be to look at using the <a href="http://www.zazzle.com/magnets">Zazzle API</a> so people could buy the actual fridge magnet.</li>
</ul>
<p>My own presentation focussed on some mobile, geo and social technologies to create location-aware mobile mashups to share OpenGov content with friends on Twitter, friends on Facebook, and *real* friends on a t-shirt. Here&#8217;s the <a href="http://bit.ly/oahack_mgs">deck</a>:</p>
<p><iframe src="http://docs.google.com/present/embed?id=dfs3s34c_58hdnhg5dh" frameborder="0" width="410" height="342"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/11/11/openaustralia-hackfest-mobile-geo-social-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Location-aware mobile web apps using Google Maps v3 + geolocation</title>
		<link>http://hitching.net/2009/11/10/location-aware-mobile-web-apps-using-google-maps-v3-geolocation/</link>
		<comments>http://hitching.net/2009/11/10/location-aware-mobile-web-apps-using-google-maps-v3-geolocation/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 09:40:27 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[geomeme]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[lbs]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[location]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15909</guid>
		<description><![CDATA[When hiring Engineers, I always look for evidence of pet projects, so recently I thought it was fair to create one of my own: GeoMeme, the fun way to measure and share real-time local twitter trends.
Visitors to GeoMeme choose a location on the map, and two search terms to compare. GeoMeme then measures and compares [...]]]></description>
			<content:encoded><![CDATA[<p>When hiring Engineers, I always look for evidence of pet projects, so recently I thought it was fair to create one of my own: <a href="http://www.geome.me/">GeoMeme</a>, the fun way to measure and share real-time local twitter trends.</p>
<p>Visitors to GeoMeme choose a location on the map, and two search terms to compare. GeoMeme then measures and compares the number of matching tweets within the bounds of the map, based on public data from a number of mobile twitter apps.</p>
<p>As an example, GeoMeme can work out that <a href="http://www.geome.me/bGPjK">&#8216;love&#8217; beats &#8216;hate&#8217; in Manhattan</a>:</p>
<p><a href="http://www.geome.me/bGPjK"><img style="border: 1px solid #cccccc;padding:1px;" src="http://hitching.net/wp-content/uploads/2009/11/i_320x356-269x300.png" /></a></p>
<p><a href="http://www.geome.me/">GeoMeme</a> is a desktop web application and also a location-aware mobile web app for iPhone and Android phones. </p>
<p>Implementing the mobile version of GeoMeme as a web app has some advantages and disadvantages, compared to building native iPhone &#038;/or Android applications.</p>
<p>Native apps are great because they currently offer the deepest integration to the full capability of the phone, for example using device APIs to access Contacts, the Camera Roll, an Accelerometer, or the GPS chip. For some applications, this deep device integration is essential and so a native application is beneficial.</p>
<p>On the other hand, emerging HTML5-based mobile browsers are aiming to standardise integration to such device APIs, starting with Geolocation APIs; meaning that location-aware mobile web apps are now becoming viable. Aligned with this development is the new version of the Google Maps API. v3 has been greatly simplified since v2, and is now optimized for use on mobile phones. Less is more.</p>
<p>The deciding factor for me choosing to build a mobile web app for GeoMeme rather than a native app was development speed. A mobile web app enjoys far greater code re-use from the desktop web version, and it is possible to push regular updates and improvements to users, without having to wait for appstore approval or for users to upgrade.</p>
<p>I believe this need for development speed is common among a good proportion of mobile apps that are still in &#8216;rapid iteration&#8217; or &#8216;release early, release often&#8217; mode, so this post is intended to share some of the techniques used in GeoMeme with developers wanting to build their own location-aware mobile web apps.</p>
<p>Let&#8217;s build an example location-aware mobile web app called &#8216;Here I Am!&#8217;, for the photographically challenged. The app will present some local photographs (from Panoramio) which can be shared with friends on Twitter or Facebook.</p>
<h3>Where on earth is that mobile phone..?</h3>
<p>The first job of a location-aware mobile app is to work out where on earth the mobile phone currently is. Unfortunately, at the time of writing, there is still no universally reliable and accurate solution for a mobile web app to detect the location of the mobile phone it is running on. However the following partial solutions can be combined to good effect:</p>
<p><span id="more-15909"></span></p>
<h4>a) Google Loader</h4>
<p>Load the Google Maps v3 API using <a href="http://code.google.com/apis/ajax/documentation/#AutoLoading">Google Loader</a>:</p>
<pre class="brush: jscript;">
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://www.google.com/jsapi?key=YOUR_API_KEY&amp;amp;autoload=%7Bmodules%3A%5B%7Bname%3A%22maps%22%2Cversion%3A3%2Cother_params%3A%22sensor%3Dtrue%22%7D%5D%7D&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
google.setOnLoadCallback(function() {
    // initialize the mobile map...
});
&amp;lt;/script&amp;gt;
</pre>
<p>Google Loader requires developers to sign up for an API key, however the advantage of this approach is that the <a href="http://code.google.com/apis/ajax/documentation/#ClientLocation">approximate location</a> of the user is revealed, based on network IP address.</p>
<p>In the case of a mobile phone user, this network IP address often refers to the mobile operator&#8217;s internet gateway, which can be shared between a large number of subscribers spread over an entire country. This technique becomes more accurate for mobile phones which are connected to the internet via wi-fi rather than GPRS, or becomes less accurate for some phones (e.g. Blackberry) which can connect to the internet via international proxy servers.</p>
<p>Generally, this technique can be successful in working out which country the user is in, but cannot be assumed to be any more accurate than that.</p>
<p>Some example javascript to locate a map based on Google Loader:</p>
<pre class="brush: jscript;">
if (typeof(google.loader.ClientLocation) != 'undefined') {
	var lat = google.loader.ClientLocation.latitude;
	var lng = google.loader.ClientLocation.longitude;
	var position = new google.maps.LatLng(lat, lng);
	map.setOptions({
		center: position,
		zoom: 10
	});
}
</pre>
<h4>b) W3C Geolocation API</h4>
<p>The World Wide Web Consortium (W3C) has been working since 2008 to standardise web <a href="http://dev.w3.org/geo/api/spec-source.html">geolocation APIs</a>.</p>
<p>Mobile Safari on iPhone (since OS3.0) already supports the emerging W3C standard, to expose location information derived from its GPS chip. The new Chrome mobile browser on Android (from 2.0 Eclair) will also support this standard. For example:</p>
<pre class="brush: jscript;">
if (typeof(navigator.geolocation) != 'undefined') {
	navigator.geolocation.getCurrentPosition(function(position) {
		var lat = position.coords.latitude;
		var lng = position.coords.longitude;
		var position = new google.maps.LatLng(lat, lng);
		map.setOptions({
			center: position,
			zoom: 15
		});
	});
}
</pre>
<p>The W3C Geolocation API looks likely to feature as part of HTML5 (the next major revision of HTML), and will also be supported by the next generation of Webkit-based mobile browsers, so expect this technique to start working on an increasing proportion of new mobile phones.</p>
<h4>c) Google Gears for Mobile</h4>
<p>Gears adds a number of HTML5 features, including a Geolocation API, to legacy web browsers. Although it is possible for Windows IE Mobile and Mobile Opera browsers to become location-aware in this way, the bigger opportunity here is that Android phones (from version 1.0 through 1.6) come with Gears already pre-installed. This means that we can detect the location of these Android phones with the following javascript:</p>
<pre class="brush: jscript;">
if (typeof(google.gears) != 'undefined') {
	var geo = google.gears.factory.create('beta.geolocation');
	geo.getCurrentPosition(function(position) {
		var lat = position.latitude;
		var lng = position.longitude;
		var position = new google.maps.LatLng(lat, lng);
		map.setOptions({
			center: position,
			zoom: 15
		});
	});
}
</pre>
<p>Google Gears for Mobile works out the location of a mobile phone from the GPS chip in the phone, or by <a href="http://googlemobile.blogspot.com/2008/06/google-enables-location-aware.html">crowdsourcing</a> the location of the cell-tower to which the mobile phone is connected.</p>
<h3>&#8230; and fetch me some location-based content, fast!</h3>
<p>Once your mobile web app is location-aware, the next thing to do is to retrieve some relevant content, based on current location. <a href="http://www.geome.me/">GeoMeme</a> retrieves local tweets using the Twitter API, but for &#8216;Here I Am!&#8217; we&#8217;ll retrieve local photos from Panoramio (see <a href="http://www.panoramio.com/api/">http://www.panoramio.com/api/</a> for details of the API).</p>
<p>Google Maps v3 API includes a convenient new &#8216;idle&#8217; event which is fired when the map becomes idle after panning or zooming, or after automatic geo-location using the techniques above. By listening for this event, we can fetch the most popular local photos from Panoramio whenever the map is moved. For example:</p>
<pre class="brush: jscript;">
google.maps.event.addListener(map, 'idle', function() {
    loadPhotos();
});

function loadPhotos() {
    var url = 'http://www.panoramio.com/map/get_panoramas.php?order=popularity&amp;amp;set=public&amp;amp;from=0&amp;amp;to=20&amp;amp;size=mini_square&amp;amp;callback=addPhotos';
    var bounds = map.getBounds();
    url += '&amp;amp;minx=' + bounds.getSouthWest().lng().toFixed(6) + '&amp;amp;miny=' + bounds.getSouthWest().lat().toFixed(6);
    url += '&amp;amp;maxx=' + bounds.getNorthEast().lng().toFixed(6) + '&amp;amp;maxy=' + bounds.getNorthEast().lat().toFixed(6);
    url += '&amp;amp;ts=' + new Date().getTime(); // prevent caching

    // use JSONP to retrieve photo data
    // and trigger a callback to addPhotos()
    var script = document.createElement(&amp;quot;script&amp;quot;);
    script.setAttribute(&amp;quot;src&amp;quot;, url);
    script.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;text/javascript&amp;quot;);
    document.body.appendChild(script);
}
</pre>
<p>The above code sends the resulting JSON data to the <span style="font-family: Courier New;">addPhotos()</span> callback function, which handles the display of the photos on the map using <a href="http://code.google.com/apis/maps/documentation/v3/overlays.html#SimpleIcons">Icons</a>, another new feature of Google Maps v3 API.</p>
<p>For speed, we also implement a performance optimization here. Existing Icons are re-used, rather than simply removing and adding new Icons each time the map is relocated:</p>
<pre class="brush: jscript;">
var markers = {};

function addPhotos(data) {
	var new_markers = {};

	for (var i = 0; i &amp;amp;amp;lt; data.photos.length; i++) {
		var photo = data.photos[i];

		// for speed and to reduce flicker,
		// reuse existing markers rather than removing and re-adding
		if (photo.photo_id in markers) {
			new_markers[photo.photo_id] = markers[photo.photo_id];
		} else {
			// create new marker
			marker = new google.maps.Marker({
				position: new google.maps.LatLng(photo.latitude, photo.longitude),
				icon: photo.photo_file_url,
				map: map
			});
			new_markers[photo.photo_id] = marker;
		}
	}

	// remove old markers
	for (var photo_id in markers) {
		if (!(photo_id in new_markers)) {
			markers[photo_id].setMap(null);
			delete markers[photo_id];
		}
	}

	markers = new_markers;
}
</pre>
<h2>&#8216;Here I Am!&#8217; &#8211; a simple location-aware mobile web application</h2>
<p>The final part of &#8216;Here I Am!&#8217; is a feature to share one of the Panoramio photos to friends on Twitter or Facebook. This is done using ordinary web links to Twitter and Facebook share pages. No complex platform integration is required for web apps to do this because, as they say, &#8220;the web is the platform.&#8221; Simply click on a photo on the map and follow the prompts.</p>
<p>Visit <a href="http://j.mp/lbsdemo">http://j.mp/lbsdemo</a> on your mobile phone to try out &#8216;Here I Am!&#8217;</p>
<p><iframe src="http://lbs-postcard.googlecode.com/svn/trunk/hero_frame.html" width="250" height="500" frameborder="0"><br />
<a href="http://lbs-postcard.googlecode.com/svn/trunk/hero_frame.html"><img src="http://lbs-postcard.googlecode.com/svn/trunk/hero_hereiam.png" /></a></iframe></p>
<p>The full source code of &#8216;Here I Am!&#8217; (weighing in at just under 8Kb) can be located <a href="http://code.google.com/p/lbs-postcard/">here</a>.</p>
<p>The app has been tested to work on iPhone, iPod Touch, Android, and Symbian Series 60 (which remains &#8211; for now at least &#8211; the dominant device family for mobile data consumption).</p>
<p>I hope you enjoy using some of these ideas in your own location-aware mobile web apps.</p>
<p><em>This post is one of a <a href="http://googlegeodevelopers.blogspot.com/2009/11/geolocation-mobile-web-apps-geo.html">series</a> that aims to share some of the technology innovation that can be found in <a href="http://www.geome.me/">GeoMeme</a>. Other posts cover topics such as using Google App Engine for <a href="http://hitching.net/2009/11/10/scalable-fast-accurate-geo-apps-using-google-app-engine-geohash-faultline-correction/">scalable and fast hosting</a> of your location-based content, and <a href="http://hitching.net/2009/11/10/fast-map-re-location-using-google-static-maps-v2-geocoder/">fast map re-location</a> using Google Static Maps v2.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/11/10/location-aware-mobile-web-apps-using-google-maps-v3-geolocation/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Scalable, fast, accurate geo apps using Google App Engine + geohash + faultline correction</title>
		<link>http://hitching.net/2009/11/10/scalable-fast-accurate-geo-apps-using-google-app-engine-geohash-faultline-correction/</link>
		<comments>http://hitching.net/2009/11/10/scalable-fast-accurate-geo-apps-using-google-app-engine-geohash-faultline-correction/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 01:00:00 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[geohash]]></category>
		<category><![CDATA[geomeme]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15953</guid>
		<description><![CDATA[GeoMeme is a web app (and also a mobile web app for iPhone and Android) that I recently developed as a pet project. It measures real-time local twitter trends. 
Visitors to GeoMeme choose a location on the map, and two search terms to compare. GeoMeme then measures and compares the number of matching tweets within [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.geome.me/">GeoMeme</a> is a web app (and also a mobile web app for iPhone and Android) that I recently developed as a pet project. It measures real-time local twitter trends. </p>
<p>Visitors to GeoMeme choose a location on the map, and two search terms to compare. GeoMeme then measures and compares the number of matching tweets within the bounds of the map, based on public data from a number of mobile twitter apps.</p>
<p>As an example, GeoMeme can work out that <a href="http://www.geome.me/VrIXq"> <img src='http://hitching.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  beats <img src='http://hitching.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  in San Francisco</a>:</p>
<p><a href="http://www.geome.me/VrIXq"><img src="http://hitching.net/wp-content/uploads/2009/11/w_screenshot-291x300.png" /></a></p>
<p>A large amount of geo-data is generated by GeoMeme, and so arises a need shared by many geo apps: scalable, fast, and accurate spatial queries, used to select a subset of geo-data for display as markers on a <a href="http://www.geome.me/">map</a>, or on <a href="http://earth.geome.me/">Google Earth</a>.</p>
<h3><img style="width: 21px; height: 34px; float: left; margin-left: 0pt; margin-right: 1em;" src="http://chart.apis.google.com/chart?chst=d_map_pin_letter&#038;chld=:)|FF0000|000000" alt=":)" />Google App Engine</h3>
<p><a href="http://appengine.google.com/">Google App Engine</a> is an obvious choice for hosting your geo app. The App Engine datastore is built on top of Google&#8217;s BigTable technology which scales very well, and is optimized for fast data retrieval. And it doesn&#8217;t cost the earth like some traditional GIS database solutions.</p>
<h3><img style="width: 21px; height: 34px; float: left; margin-left: 0pt; margin-right: 1em;" src="http://chart.apis.google.com/chart?chst=d_map_pin_letter&#038;chld=:(|FF0000|000000" alt=":(" /> Inequality constraint</h3>
<p>If you are coming from a background of relational databases, you might think the solution here would be to store the latitude and longitude of all your markers in a database table, and do a simple query to retrieve only those contained within the bounds of the map.</p>
<p>However, the flipside of being optimized for fast data retrieval is that BigTable only allows inequality filters on a single dimension, to avoid the burden of full table scans. For example, the following form of spatial query is not supported because it specifies inequality filters on both latitude and longitude dimensions:</p>
<p><span id="more-15953"></span></p>
<pre class="brush: python;">
SELECT latitude, longitude, title FROM myMarkers
WHERE latitude &gt;= :south AND latitude &lt;= :north
  AND longitude &gt;= :west AND longitude &lt;= :east

&gt;&gt;&gt; BadFilterError: invalid filter: Only one property per query may have inequality filters
</pre>
<h3><img style="width: 21px; height: 34px; float: left; margin-left: 0pt; margin-right: 1em;" src="http://chart.apis.google.com/chart?chst=d_map_pin_letter&#038;chld=:)|FF0000|000000" alt=":)" /> Geohash to the rescue</h3>
<p>Fortunately, there is an answer to this: <strong>geohash</strong>, the geocoding system invented by Gustavo Niemeyer.</p>
<p>My suspicion is that Niemeyer has travelled back in time after working out how to collapse two-dimensional space into a single dimension, but you might want to read the Wikipedia explanation of <a href="http://en.wikipedia.org/wiki/Geohash">the algorithm</a> instead.</p>
<p>An example: the location of the Sydney Opera House can be specified in two dimensions as {latitude: -33.858, longitude: 151.215}, or in a single dimension as {geohash: <a href="http://geohash.org/r3gx2ur29zzg7">r3gx2ur29zzg7</a>}.</p>
<p>Schuyler Erle has written an open source geohash <a href="http://mappinghacks.com/code/geohash.py.txt">python module</a>, which enables the following form of spatial query on Google App Engine, because the inequality filter is specified only on a single dimension:</p>
<pre class="brush: python;">
sw_geohash = Geohash((west, south))
ne_geohash = Geohash((east, north))

SELECT latitude, longitude, title FROM myMarkers
WHERE geohash &gt;= :sw_geohash AND geohash &lt;= :ne_geohash
</pre>
<h3><img style="width: 21px; height: 34px; float: left; margin-left: 0pt; margin-right: 1em;" src="http://chart.apis.google.com/chart?chst=d_map_pin_letter&#038;chld=;(|FF0000|000000" alt=";(" />Don&#8217;t hash me, coz I&#8217;m close to the edge</h3>
<p>However&#8230;! We&#8217;re not done yet, because an artifact of the geohash algorithm is that queries like the one above can often return rogue markers which are outside of the required bounds, when the map spans what we shall call a geohash &#8220;faultline&#8221;.</p>
<p>This problem is particularly evident near the equator and the Greenwich Meridian, which are the biggest faultlines, but there are actually faultlines all over the place at every zoom level.</p>
<h3><img style="width: 21px; height: 34px; float: left; margin-left: 0pt; margin-right: 1em;" src="http://chart.apis.google.com/chart?chst=d_map_pin_letter&#038;chld=:D|FF0000|000000" alt=":D" />Faultline correction</h3>
<p>GeoMeme solves this problem using &#8220;faultline correction&#8221;, an approach that I would like to share here:</p>
<ul>
<li>If a spatial query is vulnerable to faultlines, it is split into multiple sub-queries that do not cross the faultline.</li>
<li>Sub-query limits are approximately weighted according to their relative size.</li>
<li>Sub-queries are executed in parallel, taking advantage of BigTable&#8217;s distributed goodness, and the results combined, so all this happens very fast.</li>
<li>Even though the sub-queries are executed in parallel without any significant impact on user experience, App Engine CPU costs can increase to around 2x the CPU cost of a single less accurate query. Sub-query results are memcached to reduce this CPU overhead.</li>
</ul>
<p>Here&#8217;s a demo showing the effect of geohash faultlines, and the relative accuracy of spatial queries with or without faultline correction. Rogue markers are shown in the area surrounding the map. Switch between Correction: off / on / double and compare the accuracy.</p>
<p><iframe src="http://geohash-fcdemo.appspot.com/" width="600" height="450" frameborder="0"><br />
<a href="http://geohash-fcdemo.appspot.com/"><img src="http://geohash-fcdemo.googlecode.com/svn/trunk/screenshot.png" /></a></iframe></p>
<p>Note: &#8220;double&#8221; correction is an advanced option which splits the sub-queries into sub-sub-queries so that they do not cross any faultlines either. This can further increase accuracy, but with further CPU cost (up to 8x the CPU cost of a single less accurate query).</p>
<p>All the source code can be found <a href="http://code.google.com/p/geohash-fcdemo/">here</a>, including ffGeoSearch, a python module to handle faultline-friendly geo search, if you want to use this technique on your own geo app.</p>
<p>Enjoy!</p>
<p><em>This post is one of a <a href="http://googlegeodevelopers.blogspot.com/2009/11/geolocation-mobile-web-apps-geo.html">series</a> that aims to share some of the technology innovation that can be found in <a href="http://www.geome.me/">GeoMeme</a>. Other posts cover topics such as <a href="http://hitching.net/2009/11/10/fast-map-re-location-using-google-static-maps-v2-geocoder/">fast map re-location</a> using Google Static Maps v2, and <a href="http://hitching.net/2009/11/10/location-aware-mobile-web-apps-using-google-maps-v3-geolocation/">location-aware mobile web apps</a> using Google Maps v3.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/11/10/scalable-fast-accurate-geo-apps-using-google-app-engine-geohash-faultline-correction/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Fast map re-location using Google Static Maps v2 + geocoder</title>
		<link>http://hitching.net/2009/11/10/fast-map-re-location-using-google-static-maps-v2-geocoder/</link>
		<comments>http://hitching.net/2009/11/10/fast-map-re-location-using-google-static-maps-v2-geocoder/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 01:00:00 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[geo-autocomplete]]></category>
		<category><![CDATA[geocode]]></category>
		<category><![CDATA[geomeme]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[location]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[static maps]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15938</guid>
		<description><![CDATA[GeoMeme is a pet project of mine. It&#8217;s a web app, and also a mobile web app for iPhone and Android, that measures real-time local twitter trends.
Visitors to GeoMeme choose a location on the map, and two search terms to compare. GeoMeme then measures and compares the number of matching tweets within the bounds of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.geome.me/">GeoMeme</a> is a pet project of mine. It&#8217;s a web app, and also a mobile web app for iPhone and Android, that measures real-time local twitter trends.</p>
<p>Visitors to GeoMeme choose a location on the map, and two search terms to compare. GeoMeme then measures and compares the number of matching tweets within the bounds of the map, based on public data from a number of mobile twitter apps.</p>
<p>As an example, GeoMeme can work out that <a href="http://www.geome.me/Rebr1">&#8216;District 9&#8242; beats &#8216;Inglorious Basterds&#8217; in Manhattan</a>.</p>
<p>As well as offering users the normal pan and zoom controls to move the map around, GeoMeme also introduces an innovative geo-autocomplete control which is powered by the geocoder service from <a href="http://code.google.com/apis/maps/documentation/v3/">Google Maps v3 API</a> and the new <a href="http://code.google.com/apis/maps/documentation/staticmaps/">Static Maps v2 API</a>.</p>
<p><img style="width: 301px; height: 314px; border: 1px solid #cccccc; padding: 1px;" src="http://www.geome.me/i/help1.png" /></p>
<p>This blog post shares some details of how the geo-autocomplete control works, and offers some code so you can build your own geo-autocomplete controls.</p>
<p><strong>1. Based on a partial location typed by the user, obtain a list of possible matching locations</strong>:</p>
<p>If the user has already typed &#8216;San&#8217; into a form field, we can obtain a list of possible matching locations by passing this partial location to the geocoder service from Google Maps v3 API, as follows:</p>
<p><span id="more-15938"></span></p>
<pre class="brush: jscript;">
var partial_location = document.getElementById(&quot;location&quot;).value;
var geocoder = new google.maps.Geocoder();

geocoder.geocode({'address': partial_location}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        document.getElementById(&quot;results&quot;).innerHTML = '';
        for (var i = 0; i &lt; results.length; i++) {
            showResult(results[i]);
        }
    } else {
        document.getElementById(&quot;results&quot;).innerHTML = 'Geocode was not successful for the following reason: ' + status;
    }
});

function showResult(result) {
    document.getElementById(&quot;results&quot;).innerHTML += 'It could be: ' + result.formatted_address + '&lt;br/&gt;';
}
</pre>
<p><strong>2. Decorate these possible matching locations with a Static Maps thumbnail to help the user choose the right one:</strong></p>
<p>The geocoder returns more than just a formatted address. The full response is a JSON object of the following form:</p>
<pre class="brush: jscript;">
results[]: {
    types[]: google.maps.GeocoderLocationType,
    formatted_address: String,
    address_components[]: {
        short_name: String,
        long_name: String,
        types[]: String
    },
    geometry: {
        location: LatLng,
        location_type: String,
        viewport: LatLngBounds,
        bounds: LatLngBounds
    }
}
</pre>
<p><strong style="font-family: Courier New;">geometry.viewport</strong> represents the recommended viewport for each returned result, from which we can derive the required Static Maps URL, as follows:</p>
<pre class="brush: jscript;">
function showResult(result) {
    var src = 'http://maps.google.com/maps/api/staticmap';

    // the visible parameter specifies one or more locations
    // to show on the map. so we need to specify the south-west
    // and north-east corners of geometry.viewport
    src += '?visible=' + result.geometry.viewport.getSouthWest().toUrlValue() + '|' + result.geometry.viewport.getNorthEast().toUrlValue();

    // other parameters as per http://code.google.com/apis/maps/documentation/staticmaps/#URL_Parameters
    src += '&amp;size=100x100&amp;maptype=terrain&amp;key=YOUR_API_KEY&amp;sensor=false';

    document.getElementById(&quot;results&quot;).innerHTML += '&lt;img src=&quot;' + src + '&quot; /&gt; ' + result.formatted_address + '&lt;br/&gt;';
}
</pre>
<p>Working out the required Static Maps URL is now a much simpler task with v2 of the Static Maps API, because there is no longer any need to manually calculate a zoom level or latitude / longitude span values.</p>
<p>You can see this working on <a href="http://www.geome.me/Q9zbo">GeoMeme</a> by clicking on the location control at the top of the screen and entering a partial location. When you choose from the list of possible matches, the main map is moved to that location, providing a refreshingly quick way for users to re-position the map.</p>
<p>You can also download a hello world example <a href="http://code.google.com/p/geo-autocomplete/">here</a>, built as a jQuery plugin to work with a modified version of the excellent Autocomplete plugin:</p>
<p><iframe src="http://geo-autocomplete.googlecode.com/svn/trunk/demo/index.html" width="550" height="470" frameborder="0"><br />
<a href="http://geo-autocomplete.googlecode.com/svn/trunk/demo/index.html"><img src="http://geo-autocomplete.googlecode.com/svn/trunk/demo/screenshot.png" /></a></iframe></p>
<p>Using this <a href="http://code.google.com/p/geo-autocomplete/">geo-autocomplete</a> plugin is recommended because it includes a number of features which protect the geocoder service from being hit too often. Including; waiting for keystrokes to stop before sending a request to the geocoder, waiting for a minimum number of characters to by typed, and caching geocoder responses to avoid duplicate requests. Options are also available to set the size and maptype of the Static Map thumbnails.</p>
<p>Enjoy!</p>
<p><em>This post is one of a <a href="http://googlegeodevelopers.blogspot.com/2009/11/geolocation-mobile-web-apps-geo.html">series</a> that aims to share some of the technology innovation that can be found in <a href="http://www.geome.me/">GeoMeme</a>. Other posts cover topics such as <a href="http://hitching.net/2009/11/10/location-aware-mobile-web-apps-using-google-maps-v3-geolocation/">location-aware mobile web apps</a> using Google Maps v3, and <a href="http://hitching.net/2009/11/10/scalable-fast-accurate-geo-apps-using-google-app-engine-geohash-faultline-correction/">scalable geo apps</a> using Google App Engine.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/11/10/fast-map-re-location-using-google-static-maps-v2-geocoder/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Xumii acquired by Myriad Group</title>
		<link>http://hitching.net/2009/09/17/xumii-acquired-by-myriad-group/</link>
		<comments>http://hitching.net/2009/09/17/xumii-acquired-by-myriad-group/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 11:00:47 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[myriad]]></category>
		<category><![CDATA[xumii]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15875</guid>
		<description><![CDATA[ 
Exciting news: Xumii has been acquired by Myriad Group (SIX:MYRN). We are now part of Europe&#8217;s largest mobile technology business with software in more than 2 billion phones.
This is great for Xumii as it means we can take our mobile social networking platform to the next level. And it&#8217;s a great win for Australian [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://hitching.net/wp-content/uploads/2009/09/33222v2-max-250x250.png" align="right"/> <img src="http://hitching.net/wp-content/uploads/2009/09/myriad_logo.gif"/></p>
<p>Exciting news: <a href="http://www.xumii.com">Xumii</a> has been acquired by <a href="http://www.myriadgroup.com">Myriad Group</a> (SIX:MYRN). We are now part of Europe&#8217;s largest mobile technology business with software in more than 2 billion phones.</p>
<p>This is great for Xumii as it means we can take our mobile social networking platform to the next level. And it&#8217;s a great win for Australian mobile technology.</p>
<p>Here&#8217;s the <a href="http://www.myriadgroup.com/en/Media-Centre/Myriad/Myriad-Acquires-Xumii.aspx">press release</a> and some of the blogosphere coverage: <a href="http://gigaom.com/2009/09/15/myriad-acquires-xumii-as-phones-get-social/">GigaOM</a> and <a href="http://www.techcrunch.com/2009/09/15/myriad-group-acquires-xumii-to-expand-mobile-social-networking/">TechCrunch</a> and <a href="http://digital.venturebeat.com/2009/09/15/mobile-social-app-xumii-acquired-by-europes-myriad-group/">VentureBeat</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/09/17/xumii-acquired-by-myriad-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GeoMeme: measure and share real-time local twitter trends</title>
		<link>http://hitching.net/2009/09/13/geomeme-measure-and-share-real-time-local-twitter-trends/</link>
		<comments>http://hitching.net/2009/09/13/geomeme-measure-and-share-real-time-local-twitter-trends/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 11:50:34 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[geomeme]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15848</guid>
		<description><![CDATA[
I am pleased to announce the launch of GeoMeme, the fun way to measure and share real-time local twitter trends.
I got thinking about this when a recent Los Angeles earthquake was being measured in tweets per second rather than using the Richter Scale.
Then came the Magnitwude Calculator as a standard way to measure the magnitude [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.geome.me/" target="_blank"><img src="http://www.geome.me/i/geomeme_logo.png" border="0" /></a></p>
<p>I am pleased to announce the launch of <a href="http://www.geome.me" target="_blank">GeoMeme</a>, the fun way to measure and share real-time local twitter trends.</p>
<p>I got thinking about this when a recent Los Angeles earthquake was being measured in <a href="http://twitter.com/hitching/statuses/1832772593" target="_blank">tweets per second</a> rather than using the <a href="http://en.wikipedia.org/wiki/Richter_magnitude_scale" target="_blank">Richter Scale</a>.</p>
<p>Then came the <a href="http://hitching.net/2009/07/20/how-to-measure-twitter-trending-topics/" target="_blank">Magnitwude Calculator</a> as a standard way to measure the magnitude of Twitter trends.</p>
<p><em>[Then came twotspot.com but that domain name was just too damn <a href="http://twot.urbanup.com/3687907" target="_blank">rude</a>, so it was quickly renamed to GeoMeme.]</em></p>
<h3>What does GeoMeme do?</h3>
<p>GeoMeme measures real-time local twitter trends.</p>
<p><img src="http://www.geome.me/i/help1.png" style="padding:1px;border:1px solid #CCCCCC" /></p>
<p>Tweeps are located on the map using public data from a number of iPhone twitter apps. When twitter launches its <a href="http://blog.twitter.com/2009/08/location-location-location.html" target="_blank">geolocation API</a>, that will be used to locate even more people on the map.</p>
<p>GeoMeme measures and compares how many people on the map are tweeting about each of your two search terms:</p>
<p><img src="http://www.geome.me/i/help3.png" style="padding:1px;border:1px solid #CCCCCC" /></p>
<p>The &#8216;magnitude&#8217; of each search term is equal to the number of unique people tweeting per hour per square kilometer, so it increases when more people are tweeting in a smaller area.</p>
<p>Example: if 100 different people in an area of 10km<sup>2</sup> have tweeted about &#8216;love&#8217; in the last 2 hours, the magnitude is 5.0 (100 divided by 10 divided by 2).</p>
<p>So you can search for &#8216;love&#8217; and &#8216;hate&#8217; and GeoMeme works out which one &#8220;beats&#8221; the other with the higher magnitude.</p>
<p>The default search terms are <img src='http://hitching.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  and <img src='http://hitching.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  smiley faces which provides a good measure of local happiness, as an example.</p>
<h3>Can I use my iPhone?</h3>
<p>Sure, or your iPod Touch. Here&#8217;s the screenshot:</p>
<p><img src="http://hitching.net/wp-content/uploads/2009/09/GeoMeme_iPhone_screenshot.png" style="padding:1px;border:1px solid #CCCCCC" /></p>
<h3>Give me an example!</h3>
<p>Thanks to some early coverage on <a href="http://www.theregister.co.uk/2009/09/01/twitter_tracker/" target="_blank">The Register</a>, <a href="http://mashable.com/2009/09/06/hot-twitter-trends/" target="_blank">Mashable</a>, and <a href="http://googlemapsmania.blogspot.com/2009/09/local-twitter-trends-on-google-maps.html" target="_blank">Google Maps Mania</a>, and winning Mashup of the Day on <a href="http://www.programmableweb.com/mashup/geomeme-2?date" target="_blank">ProgrammableWeb</a>, we&#8217;re off to a flying start. I&#8217;m glad GeoMeme is hosted on Google App Engine for scalability.</p>
<p>Here&#8217;s a selection of the most popular GeoMemes so far:</p>
<ul>
<li><a href="http://www.geome.me/XMFwh"> <img src='http://hitching.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  beats <img src='http://hitching.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  in New York City</a></li>
<li><a href="http://www.geome.me/FG7ts">Mega Shark beats Giant Octopus in LA</a></li>
<li><a href="http://www.geome.me/dcHDb">Snow Leopard beats Windows 7 in Cupertino</a></li>
<li><a href="http://www.geome.me/yLO2x">bridge beats swimming in San Francisco Bay</a></li>
<li><a href="http://www.geome.me/ZuGsi">wtf beats ftw in Washington</a></li>
</ul>
<h3>How does it all work?</h3>
<p>I will leave the details of how it all works to another post, stay tuned for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/09/13/geomeme-measure-and-share-real-time-local-twitter-trends/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to measure Twitter trending topics</title>
		<link>http://hitching.net/2009/07/20/how-to-measure-twitter-trending-topics/</link>
		<comments>http://hitching.net/2009/07/20/how-to-measure-twitter-trending-topics/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 10:56:50 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[magnitude]]></category>
		<category><![CDATA[magnitwude]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[trending topic]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15812</guid>
		<description><![CDATA[2009 has already seen some big Twitter moments, including Michael Jackson&#8217;s death and memorial service, #iranelection, Oprah&#8217;s mainstreaming, and the race between @aplusk and @cnn to reach 1 million followers.
But how can we objectively measure and compare the scale of such things?
A little while ago I got thinking about this when a Los Angeles earthquake [...]]]></description>
			<content:encoded><![CDATA[<p>2009 has already seen some big Twitter moments, including Michael Jackson&#8217;s death and memorial service, #iranelection, Oprah&#8217;s mainstreaming, and the race between @aplusk and @cnn to reach 1 million followers.</p>
<p>But how can we objectively measure and compare the scale of such things?</p>
<p>A little while ago I got thinking about this when a Los Angeles earthquake was being measured in <a href="http://twitter.com/hitching/statuses/1832772593" target=_blank>tweets per second</a> rather than using the <a href="http://en.wikipedia.org/wiki/Richter_magnitude_scale" target=_blank>Richter Scale</a>.</p>
<p>And now here is my solution, the Magnitwude Calculator, which measures the current magnitude of tweets on any topic within any location.</p>
<p>Please have a fiddle. Type in a search term or select from the autocomplete list of currently trending topics, move the map around, and <a href="http://hitching.net/contact">tell me</a> what you think:</p>
<p><iframe src="/magnitwude" id="imag" width="320" height="760" frameborder="0"></iframe></p>
<p>You can link directly to the Magnitwude Calculator at <a href="http://hitching.net/magnitwude">http://hitching.net/magnitwude</a></p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/07/20/how-to-measure-twitter-trending-topics/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wave goodbye to spam</title>
		<link>http://hitching.net/2009/06/04/wave-goodbye-to-spam/</link>
		<comments>http://hitching.net/2009/06/04/wave-goodbye-to-spam/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 13:32:05 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[google friend connect]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[recaptcha]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15788</guid>
		<description><![CDATA[Google Wave combines the best of email, instant messaging and real-time collaborative editing into a new form of online communication.
The email paradigm of &#8217;send and receive&#8217; is replaced with a model of hosted conversations, in which &#8220;people can communicate and work together with richly formatted text, photos, videos, maps, and more.&#8221;
Wave is refreshingly ambitious. In [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wave.google.com/help/wave/about.html" target="_blank">Google Wave</a> combines the best of email, instant messaging and real-time collaborative editing into a new form of online communication.</p>
<p>The email paradigm of &#8217;send and receive&#8217; is replaced with a model of hosted conversations, in which &#8220;people can communicate and work together with richly formatted text, photos, videos, maps, and more.&#8221;</p>
<p>Wave is refreshingly ambitious. In years to come, I hope we will be waving nostalgically about email as &#8220;something that my parents used to do.&#8221;</p>
<p>This blog post describes an idea built upon Google Wave that could also turn email *spam* into the stuff of nostalgia.</p>
<p align="center"><a href="http://www.flickr.com/photos/gov/442222657/" target="_blank"><img src="http://hitching.net/wp-content/uploads/2009/06/442222657_aa808d24bb_m.jpg" /></a></p>
<p>Spam sent by people you don&#8217;t know is a real pain in the inbox. But simply ignoring emails from people you don&#8217;t know is not the answer. (Otherwise I would never have learnt about my recent win on the Nigerian lottery. Just kidding.)</p>
<p>So how might Google Wave help us to finally wave goodbye to spam?</p>
<ul>
<li>assume that developers will build robots to connect my wave account with the rest of my social graph (either that &#038;/or Google plugs in Friend Connect)</li>
<li>if someone (or a spambot) outside of my social graph invites me to a wave, my wave server responds to that invite with a <a href="http://recaptcha.net/" target="_blank">reCAPTCHA</a> challenge (try one out below)</li>
<p><span id="more-15788"></span>
</ul>
<p><iframe height="220" width="500" scrolling="no" style="border: 0px none ;" allowtransparency="true" src="http://recaptcha.net/fastcgi/demo/recaptcha"></iframe></p>
<ul>
<li>a spambot will fail to solve the reCAPTCHA so i am spared the distraction of spam waves</li>
<li>a genuine person however will be able to solve the reCAPTCHA challenge, so i can enjoy an invite for a genuine non-spam wave</li>
<li>alternatively the genuine person can befriend me on Facebook, Twitter, etc. to avoid the need for a reCAPTCHA</li>
<li>and later the genuine person can befriend me on Google Wave to avoid the need for futher reCAPTCHAs</li>
</ul>
<p>Here&#8217;s the translation for my parents: <em>&#8220;if I am sent an email by someone I don&#8217;t know yet, make sure it&#8217;s from a real person before bothering me about more /iagra.&#8221;</em></p>
<p>This solution could be built as an optional extension to a wave server. But that would not be optimal for genuine people waving to others they don&#8217;t yet know, because multiple reCAPTCHAs might be required for a single wave. So an improvement would be:</p>
<ul>
<li>when a reCAPTCHA is solved, my wave server issues a &#8220;<a href="http://en.wikipedia.org/wiki/Turing_test" target="_blank">Turing</a> token&#8221; (proof of humanity) that is also valid for other invitees connected to my social graph</li>
<li>this &#8220;Turing token&#8221; can be securely federated between wave servers so that others in my social graph know that the wave originated from a genuine person</li>
</ul>
<p>That&#8217;s it; an idea for combating spam using Google Wave. Thoughts please!</p>
<p><b>[Update 16 September 09]</b> <a href="http://mashable.com/2009/09/16/google-acquires-recaptcha/">Google Acquires reCAPTCHA</a></p>
<p><small>&#8212;<br/>This post originated as a <a href="http://twitter.com/hitching/statuses/2014763714"  target="_blank">tweet</a> that was imported here by <a href="http://hitching.net/fresh-from-friendfeed-and-twitter/">Fresh From</a>, and then I thought about it some more.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/06/04/wave-goodbye-to-spam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile Social Technology and Alternate Reality Gaming (ARG)</title>
		<link>http://hitching.net/2009/04/22/mobile-social-technology-and-alternate-reality-gaming-arg/</link>
		<comments>http://hitching.net/2009/04/22/mobile-social-technology-and-alternate-reality-gaming-arg/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 11:42:45 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[everything]]></category>
		<category><![CDATA[alternate reality]]></category>
		<category><![CDATA[arg]]></category>
		<category><![CDATA[google latitude]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[malak0]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[photosynth]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[star trek]]></category>
		<category><![CDATA[startrekarg]]></category>
		<category><![CDATA[twitpic]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twittervision]]></category>
		<category><![CDATA[xumii]]></category>

		<guid isPermaLink="false">http://hitching.net/?p=15741</guid>
		<description><![CDATA[Today I spent an enjoyable couple of hours at the Australian Film Television and Radio School (AFTRS), learning about Multi Platform Content, and talking about Mobile Social Technology &#038; Alternate Reality Gaming (ARG).
We examined some emerging mobile social technologies, and how they can enable new forms of story-telling. And we shared my personal journey into [...]]]></description>
			<content:encoded><![CDATA[<p>Today I spent an enjoyable couple of hours at the Australian Film Television and Radio School (<a href="http://www.aftrs.edu.au/">AFTRS</a>), learning about Multi Platform Content, and talking about Mobile Social Technology &#038; Alternate Reality Gaming (ARG).</p>
<p>We examined some emerging mobile social technologies, and how they can enable new forms of story-telling. And we shared my personal journey into a Star Trek Alternate Reality Game which has so far involved me sending pictures of sheep to strangers in Paris, and which explains my recent cryptic Twitter and Facebook status updates. Well some of them anyway.</p>
<p>The <a href="http://www.slideshare.net/hitching/mobile-social-technology-alternate-reality-gaming-arg">slide deck</a> is embedded below, and contains all the links for those of you who asked.</p>
<p align="center"><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mobilesocialarg-090422060136-phpapp02&#038;stripped_title=mobile-social-technology-alternate-reality-gaming-arg" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mobilesocialarg-090422060136-phpapp02&#038;stripped_title=mobile-social-technology-alternate-reality-gaming-arg" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></p>
<p><b>[Update 3 June 2009]</b> OMG! I was chosen as one of the five finalists in the game. Here&#8217;s a video of Leonard Nimoy putting my name into the hat to pick the winner.</p>
<p><span id="more-15741"></span></p>
<p align="center">
<object type="application/x-shockwave-flash" data="http://widgets.clearspring.com/o/49fb448222e9bddc/49ffb492a97517f8/49fb8e02c32842a4/8caa78b1/-cpid/bed7df84c8218cee" id="W49fb448222e9bddc49ffb492a97517f8" width="400" height="245"><param name="movie" value="http://widgets.clearspring.com/o/49fb448222e9bddc/49ffb492a97517f8/49fb8e02c32842a4/8caa78b1/-cpid/bed7df84c8218cee" /><param name="wmode" value="window" /><param name="allowNetworking" value="all" /><param name="allowScriptAccess" value="always" /></object></p>
<p>Massive thanks to everyone involved in this ARG, it was a fantastic journey. LL&#038;P!</p>
]]></content:encoded>
			<wfw:commentRss>http://hitching.net/2009/04/22/mobile-social-technology-and-alternate-reality-gaming-arg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
