<?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>Bubble Foundry &#187; Google</title>
	<atom:link href="http://www.bubblefoundry.com/blog/tag/google/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bubblefoundry.com</link>
	<description></description>
	<lastBuildDate>Wed, 08 Feb 2012 18:23:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<atom:link rel='hub' href='http://www.bubblefoundry.com/?pushpress=hub'/>
		<item>
		<title>This is why Google Maps is so good</title>
		<link>http://www.bubblefoundry.com/blog/2009/10/this-is-why-google-maps-is-so-good/</link>
		<comments>http://www.bubblefoundry.com/blog/2009/10/this-is-why-google-maps-is-so-good/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 23:18:32 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[aesthetics]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Maps]]></category>

		<guid isPermaLink="false">http://www.bubblefoundry.com/?p=295</guid>
		<description><![CDATA[Check out the blog post Google LatLong: Evolving the look of Google Maps and I&#8217;m sure you&#8217;ll agree that Google Maps is by far the most usable and aesthetically pleasing online mapping service out there.]]></description>
			<content:encoded><![CDATA[<p>Check out the blog post <a href="http://google-latlong.blogspot.com/2009/10/evolving-look-of-google-maps.html">Google LatLong: Evolving the look of Google Maps</a> and I&#8217;m sure you&#8217;ll agree that Google Maps is by far the most usable and aesthetically pleasing online mapping service out there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubblefoundry.com/blog/2009/10/this-is-why-google-maps-is-so-good/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emerce eDay</title>
		<link>http://www.bubblefoundry.com/blog/2009/08/emerce-eday/</link>
		<comments>http://www.bubblefoundry.com/blog/2009/08/emerce-eday/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 00:04:54 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[eDay]]></category>
		<category><![CDATA[Emerce]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Wave]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[Wave]]></category>

		<guid isPermaLink="false">http://www.bubblefoundry.com/?p=243</guid>
		<description><![CDATA[Just a quick note that I&#8217;ll be talking about Google Wave at the social media tools session at Emerce eDay on September 17 in Rotterdam.]]></description>
			<content:encoded><![CDATA[<p>Just a quick note that I&#8217;ll be talking about <a href="http://wave.google.com/">Google Wave</a> at the <a href="http://emerceeday.nl/eday/programma">social media tools session</a> at <a href="http://emerce.nl">Emerce</a> <a href="http://emerceeday.nl/">eDay</a> on September 17 in Rotterdam.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubblefoundry.com/blog/2009/08/emerce-eday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>oAuth on App Engine, Part 2</title>
		<link>http://www.bubblefoundry.com/blog/2009/05/oauth-on-app-engine-part-2/</link>
		<comments>http://www.bubblefoundry.com/blog/2009/05/oauth-on-app-engine-part-2/#comments</comments>
		<pubDate>Sun, 24 May 2009 15:45:14 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Gdata]]></category>
		<category><![CDATA[gdata-python-client]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[oAuth]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.bubblefoundry.com/?p=219</guid>
		<description><![CDATA[In my previous post I described how to use Google&#8217;s federated login to get an oAuth access token. Now that we&#8217;ve stored our access token, we&#8217;re going to want to use it in future requests to access the user&#8217;s data. Here&#8217;s how: # set up service gdata_service = gdata.service.GDataService() gdata.alt.appengine.run_on_appengine(gdata_service) gdata_service.SetOAuthInputParameters(gdata.auth.OAuthSignatureMethod.HMAC_SHA1, settings.GOOGLE_CONSUMER_KEY, settings.GOOGLE_CONSUMER_SECRET) # build [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous post I described <a href="http://www.bubblefoundry.com/blog/2009/05/openid-and-oauth-on-app-engine/">how to use Google&#8217;s federated login</a> to get an oAuth access token. Now that we&#8217;ve stored our access token, we&#8217;re going to want to use it in future requests to access the user&#8217;s data. Here&#8217;s how:<br />
<code><br />
# set up service<br />
gdata_service = gdata.service.GDataService()<br />
gdata.alt.appengine.run_on_appengine(gdata_service)<br />
gdata_service.SetOAuthInputParameters(gdata.auth.OAuthSignatureMethod.HMAC_SHA1, settings.GOOGLE_CONSUMER_KEY, settings.GOOGLE_CONSUMER_SECRET)<br />
</code><code><br />
# build access_token object and signed request<br />
scopes = [settings.GOOGLE_ANALYTICS_ACCOUNT_URI, settings.GOOGLE_ANALYTICS_DATA_URI]<br />
oauth_input_params = gdata.auth.OAuthInputParams(gdata.auth.OAuthSignatureMethod.HMAC_SHA1, settings.GOOGLE_CONSUMER_KEY, settings.GOOGLE_CONSUMER_SECRET)<br />
access_token = gdata.auth.OAuthToken(scopes=scopes, oauth_input_params=oauth_input_params)<br />
access_token.set_token_string(person.accessToken)<br />
gdata_service.current_token = access_token<br />
</code><code><br />
# request feed<br />
feed = data_service.GetFeed(settings.GOOGLE_ANALYTICS_ACCOUNT_URI)<br />
</code></p>
<p><code>feed</code> is a GDataFeed object which can easily be iterated over, like so:<br />
<code><br />
for entry in feed.entry:<br />
&nbsp;&nbsp;&nbsp;&nbsp;print entry.title.text<br />
</code></p>
<p>To be honest, I&#8217;m not sure if the scopes are necessary but I included them for the sake of completeness. Setting <code>oauth_input_params</code> for the oAuth token is essential and something that took me a while to figure out – I had assumed that setting the parameters for the Gdata service would be enough.</p>
<p>I am directly assigning the access token to the Gdata service. I had originally tried to use the setter – <code>gdata_service.SetOAuthToken(access_token)</code> – but had problems and switched to direct assignment. However, my problem could very well have been somewhere else, so feel free to try using the method.</p>
<p>Finally, you may have noticed that I&#8217;m querying the <a href="http://code.google.com/apis/analytics/docs/gdata/gdataDeveloperGuide.html">Analytics Data API</a>. I hope to have more to announce about that soon. In the meantime, I&#8217;ll note that <code><a href="http://code.google.com/p/gdata-python-client/">gdata-python-client</a></code> doesn&#8217;t have specific Analytics support, which is why I&#8217;m using the generic Gdata service.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubblefoundry.com/blog/2009/05/oauth-on-app-engine-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OpenID and oAuth on App Engine</title>
		<link>http://www.bubblefoundry.com/blog/2009/05/openid-and-oauth-on-app-engine/</link>
		<comments>http://www.bubblefoundry.com/blog/2009/05/openid-and-oauth-on-app-engine/#comments</comments>
		<pubDate>Mon, 11 May 2009 02:27:08 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Gdata]]></category>
		<category><![CDATA[gdata-python-client]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[google-app-engine-django-openid]]></category>
		<category><![CDATA[Hybrid]]></category>
		<category><![CDATA[oAuth]]></category>
		<category><![CDATA[Open Stack]]></category>
		<category><![CDATA[OpenID]]></category>

		<guid isPermaLink="false">http://www.bubblefoundry.com/?p=208</guid>
		<description><![CDATA[Building on my previous post, here are some things I learned today while working to get OpenID and oAuth playing nicely with Django on App Engine. While App Engine has a very nice login system that hooks seamlessly into Google Accounts, gaining access to the user&#8217;s data via one of the Gdata feeds requires an [...]]]></description>
			<content:encoded><![CDATA[<p>Building on my <a href="http://www.bubblefoundry.com/blog/2009/05/installing-the-google-app-engine-sdk-and-django-102/">previous post</a>, here are some things I learned today while working to get OpenID and oAuth playing nicely with Django on App Engine.</p>
<p>While App Engine has a very nice login system that hooks seamlessly into Google Accounts, gaining access to the user&#8217;s data via one of the <a href="http://code.google.com/apis/gdata/">Gdata</a> feeds requires an <a href="http://code.google.com/apis/gdata/auth.html">additional authorization</a> (you would use oAuth of course). However, Google has also introduced a <a href="http://code.google.com/apis/accounts/docs/OpenID.html">federated login method</a> whereby you can send the user to one screen where they both login and approve your access via oAuth to their data. So, I gave up development speed in favor of something that is hopefully simpler for my users. If you want to know more, Joseph Smarr of Plaxo has a good writeup of <a href="http://josephsmarr.com/2009/02/03/test-driving-the-new-hybrid/">how the hybrid OpenID + oAuth combination came about</a>.<span id="more-208"></span></p>
<p>After many frustrating attempts trying to get any of the <em>many</em> Django OpenID apps to work, all of which seemed to go haywire when touching App Engine (even if they claimed support), I found the <a href="http://code.google.com/p/google-app-engine-django-openid/">google-app-engine-django-openid</a> app. It&#8217;s quite simplistic – it doesn&#8217;t seem to connect to Django&#8217;s auth system at all – but, most importantly, it worked right out of the box on my App Engine install. Thanks, <a href="http://wtanaka.com/">Wesley</a>! Since I am requiring all users to login via a Google account, I simply skipped the first step in google-app-engine-django-openid&#8217;s login process, having the user enter their OpenID URL, and went to the next step, endpoint discovery. Beyond that all I had to do was add the <a href="http://code.google.com/apis/accounts/docs/OpenID.html#Parameters">additional oAuth parameters</a> to my OpenID request and, on the return, upgrade the signed request token to an access token. <a href="http://code.google.com/p/gdata-python-client/">gdata-python-client</a> provides all the oAuth mechanisms you need as part of its authorization suite.</p>
<p>Of course, getting an access token was easier said than done, due the gdata library&#8217;s oAuth module being designed with the normal oAuth authorization flow in mind. To start using it much later in the oAuth process required me to initialize a bunch of things I wouldn&#8217;t have otherwise needed to handle. In the interest in saving people time, here&#8217;s the final code:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">signed_request_token = gdata.<span style="color: black;">auth</span>.<span style="color: black;">OAuthToken</span><span style="color: black;">&#40;</span>key=args<span style="color: black;">&#91;</span><span style="color: #483d8b;">'openid.ext2.request_token'</span><span style="color: black;">&#93;</span>, secret=<span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
gdata_service = gdata.<span style="color: black;">service</span>.<span style="color: black;">GDataService</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
gdata.<span style="color: black;">alt</span>.<span style="color: black;">appengine</span>.<span style="color: black;">run_on_appengine</span><span style="color: black;">&#40;</span>gdata_service<span style="color: black;">&#41;</span>
gdata_service.<span style="color: black;">SetOAuthInputParameters</span><span style="color: black;">&#40;</span>gdata.<span style="color: black;">auth</span>.<span style="color: black;">OAuthSignatureMethod</span>.<span style="color: black;">HMAC_SHA1</span>, settings.<span style="color: black;">GOOGLE_CONSUMER_KEY</span>, settings.<span style="color: black;">GOOGLE_CONSUMER_SECRET</span><span style="color: black;">&#41;</span>
access_token = gdata_service.<span style="color: black;">UpgradeToOAuthAccessToken</span><span style="color: black;">&#40;</span>signed_request_token<span style="color: black;">&#41;</span>
person.<span style="color: black;">accessToken</span> = <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>access_token<span style="color: black;">&#41;</span></pre></div></div>

<p>It&#8217;s not a lot of code, really, but it took a <em>lot</em> of poking through the gdata code to figure it all out! Note that the access token returned by <code>UpgradeToOAuthAccessToken()</code> is not a string but can easily be converted to and from a string for storage.</p>
<p>When using parts of the <a href="http://code.google.com/p/gdata-python-client/">gdata-python-client</a> library, always make sure to <a href="http://googledataapis.blogspot.com/2008/04/release-hounds-support-for-app-engine.html">set the http transport</a> to App Engine&#8217;s urllib: <code>gdata.service.http_request_handler = gdata.urlfetch</code>. In general, if you&#8217;re getting any sort of weird error from something that uses a network connection, it&#8217;s probably because you&#8217;re not using Google&#8217;s <a href="http://code.google.com/appengine/docs/python/urlfetch/">URL fetch service</a>.</p>
<p>In additional, one key thing I learned is that, while you don&#8217;t get a secret back with your signed request token, you <em>must</em> <a href="http://groups.google.com/group/google-federated-login-api/web/oauth-support-in-googles-federated-login-api">pass along an empty string</a> for the secret when calling <code>gdata.service.GDataService.UpgradeToOAuthAccessToken</code>. <code>None</code> or <code>False</code> will cause errors in gdata&#8217;s oAuth library.</p>
<p>Finally, testing. Because Google requires your realm to match your domain for the oAuth request, I couldn&#8217;t test the authentication and authorization process on my local machine running the App Engine SDK behind a router. Instead, I just keep pushed changes to my live install on App Engine. I&#8217;m sure there&#8217;s a better solution, most likely running the SDK on a machine with a public address and getting an oAuth consumer key from Google tied to that address. Also, I didn&#8217;t use it but the <a href="http://googlecodesamples.com/oauth_playground/">oAuth Playground</a> looks like a good place to test your oAuth interaction with Gdata services.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubblefoundry.com/blog/2009/05/openid-and-oauth-on-app-engine/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Installing the Google App Engine SDK and Django 1.0.2</title>
		<link>http://www.bubblefoundry.com/blog/2009/05/installing-the-google-app-engine-sdk-and-django-102/</link>
		<comments>http://www.bubblefoundry.com/blog/2009/05/installing-the-google-app-engine-sdk-and-django-102/#comments</comments>
		<pubDate>Wed, 06 May 2009 16:38:49 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Django 1.0]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[google-app-engine-django]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SDK]]></category>

		<guid isPermaLink="false">http://www.bubblefoundry.com/?p=199</guid>
		<description><![CDATA[This was quite tricky for me, so I&#8217;m writing this down to share it with others. Install the SDK Simply download the SDK and install it. On Mac OS X that meant that I mounted the disk image, dragged the SDK app to my applications directory, and launched it. Make sure to give the app [...]]]></description>
			<content:encoded><![CDATA[<p>This was quite tricky for me, so I&#8217;m writing this down to share it with others.</p>
<ol>
<li>
<h4>Install the SDK</h4>
<p>Simply <a href="http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Python">download</a> the SDK and install it. On Mac OS X that meant that I mounted the disk image, dragged the SDK app to my applications directory, and launched it. Make sure to give the app the necessary permission to create symlinks.</li>
<li>
<h4>Get the latest version of google-app-engine-django</h4>
<p>Use SVN to export the latest version of <a href="http://code.google.com/p/google-app-engine-django/">google-app-engine-django</a>: <code>svn export http://google-app-engine-django.googlecode.com/svn/trunk/ your-app-dir</code></p>
</li>
<li>
<h4>Get the latest stable version of Django</h4>
<p>Download from <a href="http://www.djangoproject.com/download/">http://www.djangoproject.com/download/</a>. Decompress it.</p>
</li>
<li>
<h4>Zip up Django</h4>
<p>Google Apps currently uses version 0.96 of Django and they do not plan to switch in the near future. Thus, you need to put a <code><a href="http://code.google.com/appengine/articles/django10_zipimport.html">django.zip</a></code> file in your App Engine app directory, <code>your-app-dir</code>. You create the file by, from the Terminal, going to the directory of the new version of Django you downloaded and typing:</p>
<ol>
<li><code>zip -r django.zip django/__init__.py django/bin django/core django/db django/dispatch django/forms django/http django/middleware django/shortcuts  django/template django/templatetags  django/test django/utils django/views</code></li>
<li><code>zip -r django.zip django/conf -x 'django/conf/locale/*'</code></li>
<li><code>zip -r django.zip django/contrib/__init__.py django/contrib/formtools django/contrib/auth django/contrib/sessions</code>
<p>Note there is an oversight in the <a href="http://code.google.com/appengine/articles/django10_zipimport.html">App Engine article about zipping Django 1.0</a>; the <a href="http://markmail.org/message/tx5nf4ynvktah2du">last two directories are necessary</a>.</li>
</ol>
</li>
<li>
<h4>Edit settings</h4>
<p>Open <code>app.yaml</code> in your App Engine app directory and change the application name on line 1 to the name of your application. Then, open <code>settings.py</code> and uncomment line 83 so that <code>django.contrib.sessions.middleware.SessionMiddleware</code> is included.</p>
</li>
<li>
<h4>Launch the default app</h4>
<p>From your App Engine app directory, launch the server: <code>python manage.py runserver</code>. If everything went correctly you should see the server mention using zipimporter and then announce that your app is running at http://localhost:8000. Open the URL and your should see a simple welcome message.</li>
<li>
<h4>Build your app!</h4>
<p>Now you can get started building a Django app on App Engine. Make sure to read the <a href="http://code.google.com/appengine/articles/appengine_helper_for_django.html">article on using the Django App Engine helper</a> to see how to start building your app.</p>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.bubblefoundry.com/blog/2009/05/installing-the-google-app-engine-sdk-and-django-102/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Conference Season</title>
		<link>http://www.bubblefoundry.com/blog/2009/04/conference-season/</link>
		<comments>http://www.bubblefoundry.com/blog/2009/04/conference-season/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 11:44:46 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google I/O]]></category>
		<category><![CDATA[Silicon Valley]]></category>
		<category><![CDATA[Where 2.0]]></category>
		<category><![CDATA[WWDC]]></category>

		<guid isPermaLink="false">http://www.bubblefoundry.com/?p=189</guid>
		<description><![CDATA[Or, should I spend a month in Silicon Valley soon? May 19-21 is Where 2.0 May 27-28 is Google I/O June 8-12 is WWDC All nice events and ones that are relevant to the work I&#8217;m doing but not cheap&#8230; Will you be at any of these conferences?]]></description>
			<content:encoded><![CDATA[<p>Or, should I spend a month in Silicon Valley soon?</p>
<p>May 19-21 is <a href="http://en.oreilly.com/where2009/">Where 2.0</a></p>
<p>May 27-28 is <a href="http://code.google.com/events/io/">Google I/O</a></p>
<p>June 8-12 is <a href="http://developer.apple.com/WWDC/">WWDC</a></p>
<p>All nice events and ones that are relevant to the work I&#8217;m doing but not cheap&#8230; Will you be at any of these conferences?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubblefoundry.com/blog/2009/04/conference-season/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTML5</title>
		<link>http://www.bubblefoundry.com/blog/2009/04/html5/</link>
		<comments>http://www.bubblefoundry.com/blog/2009/04/html5/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 09:05:02 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[2D]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[canvas tag]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[GCal]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile apps]]></category>
		<category><![CDATA[RaphaëlJS]]></category>
		<category><![CDATA[web apps]]></category>
		<category><![CDATA[WebKit]]></category>

		<guid isPermaLink="false">http://www.bubblefoundry.com/?p=187</guid>
		<description><![CDATA[Google says it very succinctly: &#8220;HTML5 and WebKit pave the way for mobile web applications.&#8221; HTML5 is coming and it has a lot of interesting features, from audio and video support to local storage. Combine this with the fact that web apps are a particularly attractive way to reach many mobile platforms and the WebKit [...]]]></description>
			<content:encoded><![CDATA[<p>Google says it very succinctly: <a href="http://google-code-updates.blogspot.com/2009/04/html5-and-webkit-pave-way-for-mobile.html">&#8220;HTML5 and WebKit pave the way for mobile web applications.&#8221;</a> <a href="http://www.whatwg.org/specs/web-apps/current-work/">HTML5</a> is coming and it has a lot of interesting features, from audio and video support to local storage. Combine this with the fact that web apps are a particularly attractive way to reach many mobile platforms and the <a href="http://webkit.org">WebKit</a> browser found on the iPhone and Android platforms already implements many of the HTML5 standard, and you can see why HTML5 is so attractive for mobile apps.</p>
<p>With the ability of HTML5 web apps to store data locally and have the browser pass along the device&#8217;s hardware states, I believe that HTML5 wbe apps can do almost anything you could want an internet-using application to do. The only exception I can think of is high performance 3D graphics, as even great 2D graphics are possible with <a href="http://www.w3.org/Style/CSS/current-work#CSS3">CSS3</a> and HTML5&#8242;s canvas tag. Already there are nice libraries like <a href="http://raphaeljs.com/">RaphaëlJS</a> that work in the iPhone&#8217;s Mobile Safari.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubblefoundry.com/blog/2009/04/html5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google versus Yahoo</title>
		<link>http://www.bubblefoundry.com/blog/2008/11/google-versus-yahoo/</link>
		<comments>http://www.bubblefoundry.com/blog/2008/11/google-versus-yahoo/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 00:28:10 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Wakoopa]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.bubblefoundry.com/?p=142</guid>
		<description><![CDATA[It&#8217;s pretty obvious who&#8217;s winning the battle for user attention. I really love Yahoo services such as Upcoming and Flickr but you can&#8217;t lose site of the fact that most of them are niche services.]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s pretty obvious who&#8217;s winning the battle for user attention. I really love Yahoo services such as Upcoming and Flickr but you can&#8217;t lose site of the fact that most of them are niche services.</p>
<div id="attachment_141" class="wp-caption aligncenter" style="width: 212px"><a href="http://wakoopa.com/web"><img class="size-full wp-image-141" title="Google Power" src="http://www.bubblefoundry.com/files/2008/11/google-power.jpg" alt="Google vs Yahoo" width="202" height="724" /></a><p class="wp-caption-text">Google vs Yahoo</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.bubblefoundry.com/blog/2008/11/google-versus-yahoo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Maps of Human Tragedies</title>
		<link>http://www.bubblefoundry.com/blog/2008/11/maps-of-human-tragedies/</link>
		<comments>http://www.bubblefoundry.com/blog/2008/11/maps-of-human-tragedies/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 01:19:56 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[crime]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[emergencies]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[marijuana]]></category>
		<category><![CDATA[mashups]]></category>
		<category><![CDATA[piracy]]></category>

		<guid isPermaLink="false">http://www.bubblefoundry.com/?p=132</guid>
		<description><![CDATA[For some reason I have run across a lot of Google Maps mashups in the last 24 hours ago dealing with the less happy side of life. In fact, they (almost) all show recent or event real time events. Some examples: Public911.com plots 911 calls in Seattle as they happen. Alarmeringen.nl shows emergency calls throughout [...]]]></description>
			<content:encoded><![CDATA[<p>For some reason I have run across a lot of Google Maps mashups in the last 24 hours ago dealing with the less happy side of life. In fact, they (almost) all show recent or event real time events. Some examples:</p>
<ul>
<li><a href="http://www.public911.com/911/seattle">Public911.com</a> plots 911 calls in Seattle as they happen.</li>
<li><a href="http://www.alarmeringen.nl/">Alarmeringen.nl</a> shows emergency calls throughout the Netherlands.</li>
<li><a href="http://misdaadkaart.nl/">Misdaadkaart.nl</a> shows reported crimes throughout the Netherlands.</li>
<li><a href="http://www.icc-ccs.org/index.php?option=com_fabrik&amp;view=visualization&amp;controller=visualization.googlemap&amp;Itemid=89">Live Piracy Map</a> shows acts of piracy throughout the world.</li>
</ul>
<p>Not in real time but along the same lines (and admittedly <a href="http://uk.techcrunch.com/2008/11/19/one-more-bnp-thing-heatmaps-replace-pins-but-pandoras-box-is-now-open/">quite controversial</a>), there have been <a href="http://www.guardian.co.uk/uk/interactive/2008/nov/19/bnp">several</a> <a href="http://www.bnpnearme.co.uk/">maps</a> made of membership in the far-right BNP in the UK in the last day as the party&#8217;s membership list was leaked online.</p>
<p>On a lighter note, the US Office of National Drug Control Policy made a <a href="http://pushingback.com/blogs/pushing_back/archive/2008/11/03/44881.aspx">map of medical marijuana dispensories and Starbucks cafés</a> in San Francisco, eliciting <a href="http://blog.wired.com/27bstroke6/2008/11/us-drug-czar-po.html">predictable responses</a>.</p>
<p>As you can see, a website mapping important events or locations can be a very powerful way to make a political or business point.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubblefoundry.com/blog/2008/11/maps-of-human-tragedies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

