<?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/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>Aral Balkan &#187; App Engine</title>
	<atom:link href="http://aralbalkan.com/category/development/google-app-engine/feed" rel="self" type="application/rss+xml" />
	<link>http://aralbalkan.com</link>
	<description>Passionate geekisms.</description>
	<lastBuildDate>Mon, 15 Mar 2010 18:17:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
		<item>
		<title>Google App Engine removes evil High CPU Quota, raises file sizes to 10MB, requests to 30 seconds.</title>
		<link>http://aralbalkan.com/1975</link>
		<comments>http://aralbalkan.com/1975#comments</comments>
		<pubDate>Fri, 13 Feb 2009 12:15:41 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1975</guid>
		<description><![CDATA[
I woke up this morning to some great news in my inbox from Pete Koomen, one of the engineers on the App Engine team who was kindly helping me out with the issues I was having last year and whom I've been liaising with since regarding App Engine:

Subject: I think you might enjoy this
http://googleappengine.blogspot.com/2009/02/skys-almost-limit-high-cpu-is-no-more.html
Thanks for [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><img src="http://aralbalkan.com/wp-content/uploads/2009/02/app-engine-limits-removed.jpg" alt="App Engine limits removed" height="190" width="295"></p>
<p>I woke up this morning to some great news in my inbox from Pete Koomen, one of the engineers on the App Engine team who was kindly helping me out with the issues I was having last year and whom I've been liaising with since regarding App Engine:</p>
<p><span id="more-1975"></span></p>
<p><strong>Subject:</strong> I think you might enjoy this</p>
<blockquote><p><a href="http://googleappengine.blogspot.com/2009/02/skys-almost-limit-high-cpu-is-no-more.html">http://googleappengine.blogspot.com/2009/02/skys-almost-limit-high-cpu-is-no-more.html</a></p>
<p>Thanks for all the feedback and patience, Aral &mdash; it really made it clear to us how much of a pain point this was for developers, and I'm thrilled to see this limit erased!</p></blockquote>
<p>Basically, the crippling high CPU quotas that I've been bitching high and low about have been entirely removed, file size limits have been raised to 10MB from 1MB, and the response deadline quota has been raised to 30 seconds from 10.</p>
<p>Woot! Thanks for the heads up and thanks for listening, Pete, Paul, Guido! You guys rock! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1975/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
		<item>
		<title>Gaebar Beta 3 (version 0.3) released</title>
		<link>http://aralbalkan.com/1907</link>
		<comments>http://aralbalkan.com/1907#comments</comments>
		<pubDate>Wed, 21 Jan 2009 13:01:09 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1907</guid>
		<description><![CDATA[
I've just tagged Gaebar Beta 3 (version 0.3) in GitHub.

This is a bugfix release, with changes almost entirely submitted by or suggested by the community. 
Thanks go to gumptionthomas, Martin Kleppmann, Tony Andrews, Rafal Jonca, and, of course, Guido van Rossum, for your patches and feedback.
Changes in Beta 3

Merged gumptionthomas's pull request (commit)

Fixed unicode and [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><a href="http://github.com/aral/gaebar/tree/0.3" title="aral's gaebar at 0.3 - GitHub"><img src="http://aralbalkan.com/wp-content/uploads/2009/01/gaebar-beta-3-release.jpg" alt="Gaebar Beta 3 Release" height="190" width="295" style="float:right; margin-left:2em;"></a></p>
<p>I've just tagged <a href="http://github.com/aral/gaebar/tree/0.3" title="aral's gaebar at 0.3 - GitHub">Gaebar Beta 3 (version 0.3)</a> in GitHub.</p>
<p><span id="more-1907"></span></p>
<p>This is a bugfix release, with changes almost entirely submitted by or suggested by the community. </p>
<p>Thanks go to gumptionthomas, Martin Kleppmann, Tony Andrews, Rafal Jonca, and, of course, Guido van Rossum, for your patches and feedback.</p>
<h3>Changes in Beta 3</h3>
<ul>
<li>Merged gumptionthomas's pull request (<a href="http://github.com/aral/gaebar/commit/98415f1f988139987b71522e2f97ccd23ba8a68e" title="Commit 98415f1f988139987b71522e2f97ccd23ba8a68e to aral's gaebar - GitHub">commit</a>)
<ul>
<li>Fixed unicode and escape string issues with key_names</li>
<li>Properly reference InternalError as db.InternalError</li>
</ul>
</li>
<li>Applied patch by Martin Kleppmann (<a href="http://github.com/aral/gaebar/commit/7cb964e36c44be0190d1413ad71030a9b916ff63" title="Commit 7cb964e36c44be0190d1413ad71030a9b916ff63 to aral's gaebar - GitHub">commit</a>)</li>
<ul>
<li>Backup doesn't blow up when there are non-backup files/folders in the backups folder. (e.g., if your project uses SVN)</li>
</ul>
<li>Updated the readme.txt based on Guido's feedback (<a href="http://github.com/aral/gaebar/commit/95a4b99c85c9d0724f21627616248bb23922d680" title="Commit 95a4b99c85c9d0724f21627616248bb23922d680 to aral's gaebar - GitHub">commit</a>)</li>
<li>Added note to readme.txt regarding getting more detailed exceptions (thanks to Tony Andrews; <a href="http://github.com/aral/gaebar/commit/5a9d40a0cf77c14b08f2cdcf673ab7bf9ecef42d" title="Commit 5a9d40a0cf77c14b08f2cdcf673ab7bf9ecef42d to aral's gaebar - GitHub">commit</a>).</li>
<li>Applied patch by Rafal Jonca (<a href="http://github.com/aral/gaebar/commit/95ed388f6d871913ca94f4fd37698262d762fbda" title="Commit 95ed388f6d871913ca94f4fd37698262d762fbda to aral's gaebar - GitHub">commit</a>):
<ul>
<li>Key names may now contain unicode</li>
<li>ReferenceProperties can now be created with keys of parents, not just model instances</li>
<li>Now using global datastore's delete, put, and get methods instead of model's</li>
</ul>
</li>
</ul>
<p><a href="http://aralbalkan.com/1784">See the original announcement</a> for a screencast and general information on Gaebar.</p>
<p>Please do keep your feedback coming and, of course, if you have pull requests, patches, or suggestions, please send them my way (and thank you!)</p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1907/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
		<item>
		<title>Real-world Google App Engine</title>
		<link>http://aralbalkan.com/1903</link>
		<comments>http://aralbalkan.com/1903#comments</comments>
		<pubDate>Tue, 20 Jan 2009 13:06:47 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1903</guid>
		<description><![CDATA[
Real World Google App Engine   Aral Balkan   Jan 2009
View more presentations or upload your own. (tags: google app)


I just posted my slides from last night's talk at the London Django User Group on SlideShare (and you can view them above). 
A big thank you to Rob and the DJUGL team for [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />
<div style="width:425px;text-align:left" id="__ss_934238"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/aralbalkan/real-world-google-app-engine-aral-balkan-jan-2009-presentation?type=presentation" title="Real World Google App Engine   Aral Balkan   Jan 2009">Real World Google App Engine   Aral Balkan   Jan 2009</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=real-world-google-app-engine-aral-balkan-jan-2009-1232455652197054-1&stripped_title=real-world-google-app-engine-aral-balkan-jan-2009-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=real-world-google-app-engine-aral-balkan-jan-2009-1232455652197054-1&stripped_title=real-world-google-app-engine-aral-balkan-jan-2009-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=presentation">upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/google">google</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/app">app</a>)</div>
<p><span id="more-1903"></span></p>
</div>
<p>I just posted my slides from last night's talk at the London Django User Group on SlideShare (and you can view them above). </p>
<p>A big thank you to <a href="http://www.siudesign.co.uk/" title="Home | Siu Design | Passionate about design">Rob</a> and the DJUGL team for organizing the event and kindly inviting me over to speak. I had a great time and it seems like the audience enjoyed it too! :)</p>
<p><img src="http://aralbalkan.com/wp-content/uploads/2009/01/google-app-engine-fake-it-slide-small.jpg" alt="Google app Engine Fake it Slide Small" height="190" width="295" style="display:none;"></p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1903/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
		<item>
		<title>Gaebar Beta 2 Released</title>
		<link>http://aralbalkan.com/1837</link>
		<comments>http://aralbalkan.com/1837#comments</comments>
		<pubDate>Wed, 31 Dec 2008 21:24:57 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1837</guid>
		<description><![CDATA[
I'm happy to announce that there's quite an important update to Gaebar that brings with it some essential bug fixes and should help shave quite a bit of time off of your restores.

I've also created a new project called gaebar-gaed-skeleton on GitHub that gives you an empty Google App Engine Django (Helper) project with Gaebar [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><img src="http://aralbalkan.com/wp-content/uploads/2008/12/gaebar-beta-2-release.jpg" alt="Gaebar Beta 2 Release" height="190" width="295" style="float:left; margin-right:2em;"></p>
<p>I'm happy to announce that there's quite an important update to <a href="http://aralbalkan.com/1784" title="Aral Balkan - Google App Engine Backup and Restore (Gaebar) released">Gaebar</a> that brings with it some essential bug fixes and should help shave quite a bit of time off of your restores.</p>
<p><span id="more-1837"></span></p>
<p>I've also created a new project called <a href="https://github.com/aral/gaebar-gaed-skeleton/tree/master">gaebar-gaed-skeleton</a> on GitHub that gives you an empty Google App Engine Django (Helper) project with Gaebar pre-installed to start you off when creating your own applications.</p>
<p>Here's a list of changes in Beta 2:</p>
<ul>
<li><strong>Fixed:</strong> All required properties, including references should work correctly now. Required properties would raise an exception during the restore process in Beta 1.</li>
<li><strong>Refactored:</strong> We are no longer using actual entity references (which was unnecessary) but keys to create reference properties. This means that creation order of references doesnâ€™t matter any more (thanks to Pete Koomen who explained all this to me in an email ages ago; it only just sunk in, Pete!)</li>
<li><strong>New feature:</strong> Due to above changes, the restore process is now one-pass, not two. This means that restores should now take considerably less time.</li>
<li><strong>Refactored:</strong> I moved the functional tests out to their own GitHub module since they were being shared by both the gaebar-gaed and gaebar-aep test apps. This will make maintaining them much easier.</li>
</ul>
<p>I want to thank Jonathan Ricketson for alerting me in the comments earlier today that the Beta 1 release was not handling required properties correctly (thanks, Jonathan). I also want to thank Thomas Bohmbach, Jr. for providing feedback and helping me test.</p>
<p>You can <a href="http://github.com/aral/" title="aral's Profile &mdash; GitHub">download Gaebar Beta 2 and the other Gaebar projects from my GitHub account</a>.</p>
<p>If you'd like to learn more about Gaebar, <a href="http://aralbalkan.com/1784" title="Aral Balkan - Google App Engine Backup and Restore (Gaebar) released">please see my original announcement</a>, which contains a screencast showing Gaebar (albeit Beta 1) in use.</p>
<p>As always, I value your bug reports, comments, and suggestions so please feel free to leave a comment and let me know of your experiences with Gaebar.</p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1837/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
		<item>
		<title>Google App Engine Backup and Restore (Gaebar) released</title>
		<link>http://aralbalkan.com/1784</link>
		<comments>http://aralbalkan.com/1784#comments</comments>
		<pubDate>Thu, 25 Dec 2008 01:26:52 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tools and Utilities]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[gaebar]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[restore]]></category>
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/?p=1784</guid>
		<description><![CDATA[
Update: Beta 2 Released! See the Gaebar Beta 2 announcement.

Here's my Christmas present for the Google App Engine community: Google App Engine Backup and Restore (or Gaebar, for short).
Gaebar is an easy-to-use, standalone Django application that you can plug in to your existing Google App Engine Django or app-engine-patch-based Django applications on Google App Engine [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="512" height="426" id="viddler_fed9d8b6"><param name="movie" value="http://www.viddler.com/player/fed9d8b6/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><embed src="http://www.viddler.com/player/fed9d8b6/" width="512" height="426" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" name="viddler_fed9d8b6" ></embed></object></p>
<p><strong>Update: Beta 2 Released!</strong> <a href="http://aralbalkan.com/1837" title="Gaebar Beta 2 release announcement">See the Gaebar Beta 2 announcement</a>.</p>
<p><span id="more-1784"></span></p>
<p>Here's my Christmas present for the Google App Engine community: Google App Engine Backup and Restore (or Gaebar, for short).</p>
<p>Gaebar is an easy-to-use, standalone Django application that you can plug in to your existing <a href="http://code.google.com/p/google-app-engine-django/" title="google-app-engine-django -</p>
<p> Google Code">Google App Engine Django</a> or <a href="http://code.google.com/p/app-engine-patch/" title="app-engine-patch -</p>
<p>  Google Code">app-engine-patch</a>-based Django applications on Google App Engine to give them datastore backup and restore functionality. </p>
<p>For a quick overview of Gaebar, watch the screencast, above. For the impatient, links to the project pages where you can download Gaebar follow.</p>
<h3>Downloads</h3>
<p>Gaebar is hosted on GitHub. You can either download archives or clone the repository (or install Gaebar as a git submodule) via git. Alongside the Gaebar project itself are two sample applications &mdash; one built on Google App Engine Django and the other on app-engine-patch &mdash; that contain the Gaebar functional test suite. The functional test suite tests every datatype supported by Google App Engine as well as references, Expandos, and ancestor relationships.</p>
<p>Please make sure you read the readme files after downloading the projects for installation and usage instructions.</p>
<ul>
<li>Gaebar: <a href="http://github.com/aral/gaebar/tree/master">http://github.com/aral/gaebar/tree/master</a></li>
<li>Gaebar-gaed: <a href="http://github.com/aral/gaebar-gaed/tree/master">http://github.com/aral/gaebar-gaed/tree/master</a></li>
<li>Gaebar-aep: <a href="http://github.com/aral/gaebar-aep/tree/master">http://github.com/aral/gaebar-aep/tree/master</a></li>
</ul>
<h3>What you can do with Gaebar</h3>
<ul>
<li>Backup your deployment application's datastore for safekeeping.</li>
<li>Restore that backup on your local development server for testing with real data during development.</li>
<li>Restore that backup to a <em>different</em> Google App Engine application and use that application as a <strong>staging application</strong> much in the same way you would use a staging server in traditional development.</li>
</ul>
<p>(You can, of course, also backup and restore your local development datastore as well as your staging application, etc.)</p>
<h3>I've got a huge datastore, will Gaebar work for me?</h3>
<p>Congratulations on the impressive size of your datastore! The answer should be "yes!" The largest datastore I've tested it with is the <a href="http://www.headconference.com">&lt;head&gt; web conference</a> datastore. The latest backup had 18, 969 rows from 14 models backed up into 225 code shards.</p>
<h3>What's a staging application?</h3>
<p>A staging application is a new Google App Engine concept made possible by Gaebar. Basically, if your application is <em>myapp.appspot.com</em>, you can use a separate application (say, <em>myapp-staging.appspot.com</em>) in the same way as you would use a staging server in traditional development. </p>
<p>Your staging application can let you try out new features and test with real data without having your users see your changes until you are ready to deploy to your main application.</p>
<p>In fact, it's a perfect staging environment since it is identical to your deployment environment. For an example of this, see the screencast.</p>
<h3>How Gaebar works</h3>
<p>Gaebar backs up the data in your datastore to Python code. It restores your data by running the generated Python code.</p>
<p>Since a backup is a long running process, and since Google App Engine doesn't support long-running processes, Gaebar fakes a long running process by breaking up the backup and restore processes into bite-sized chunks and repeatedly hitting the server via Ajax calls. </p>
<p>By default, Gaebar backs up 5 rows at a time to avoid the short term CPU and 10-second call duration quotas and splits the generated code into code shards of approx. 300KB to avoid the 1MB limit on objects. You can change these defaults in the views.py file if your app has higher quotas and you want faster backups and restores.</p>
<p>Once a backup of a remote server is complete, Gaebar automatically hits your local development server. From there on, the local development server makes a series of calls to the remote server to download the backup files (code shards) from the remote server. Once the backup is complete, you will see a new backup folder in <em>gaebar/backups</em> with the contents of your backup. </p>
<p>Here's an example of some generated backup code from the Google App Engine Django test application <strong>(updated for the upcoming Beta 2 release)</strong>:</p>
<pre class="python"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">pickle</span>
<span style="color: #ff7700;font-weight:bold;">from</span> google.<span style="color: black;">appengine</span>.<span style="color: black;">api</span>.<span style="color: black;">datastore</span> <span style="color: #ff7700;font-weight:bold;">import</span> datastore_types
<span style="color: #ff7700;font-weight:bold;">from</span> app1.<span style="color: black;">models</span> <span style="color: #ff7700;font-weight:bold;">import</span> *
<span style="color: #ff7700;font-weight:bold;">from</span> app2.<span style="color: black;">models</span> <span style="color: #ff7700;font-weight:bold;">import</span> *
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> row_0<span style="color: black;">&#40;</span>app_name<span style="color: black;">&#41;</span>:
	existing_entity = Profile.<span style="color: black;">get</span><span style="color: black;">&#40;</span>datastore_types.<span style="color: black;">Key</span>.<span style="color: black;">from_path</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Profile'</span>, <span style="color: #ff4500;">1</span>, _app=app_name<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> existing_entity:
		existing_entity.<span style="color: black;">delete</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	profile_0 = Profile<span style="color: black;">&#40;</span>key_name=<span style="color: #483d8b;">&quot;id1&quot;</span>, friends = <span style="color: #dc143c;">pickle</span>.<span style="color: black;">loads</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'(lp0<span style="color: #000099; font-weight: bold;">\n</span>.'</span><span style="color: black;">&#41;</span>, in_relationship_with = <span style="color: #dc143c;">pickle</span>.<span style="color: black;">loads</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'N.'</span><span style="color: black;">&#41;</span>, full_name = <span style="color: #dc143c;">pickle</span>.<span style="color: black;">loads</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'VPaul Booth<span style="color: #000099; font-weight: bold;">\n</span>p0<span style="color: #000099; font-weight: bold;">\n</span>.'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
	profile_0.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> row_1<span style="color: black;">&#40;</span>app_name<span style="color: black;">&#41;</span>:
	existing_entity = Profile.<span style="color: black;">get</span><span style="color: black;">&#40;</span>datastore_types.<span style="color: black;">Key</span>.<span style="color: black;">from_path</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Profile'</span>, <span style="color: #ff4500;">2</span>, _app=app_name<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> existing_entity:
		existing_entity.<span style="color: black;">delete</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	profile_1 = Profile<span style="color: black;">&#40;</span>key_name=<span style="color: #483d8b;">&quot;id2&quot;</span>, full_name = <span style="color: #dc143c;">pickle</span>.<span style="color: black;">loads</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'VAral Balkan<span style="color: #000099; font-weight: bold;">\n</span>p0<span style="color: #000099; font-weight: bold;">\n</span>.'</span><span style="color: black;">&#41;</span>, friends = <span style="color: black;">&#91;</span>datastore_types.<span style="color: black;">Key</span>.<span style="color: black;">from_path</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Profile'</span>, u<span style="color: #483d8b;">'stephalicious'</span>, _app=app_name<span style="color: black;">&#41;</span>, datastore_types.<span style="color: black;">Key</span>.<span style="color: black;">from_path</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Profile'</span>, <span style="color: #483d8b;">'id1'</span>, _app=app_name<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>, in_relationship_with = datastore_types.<span style="color: black;">Key</span>.<span style="color: black;">from_path</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Profile'</span>, u<span style="color: #483d8b;">'stephalicious'</span>, _app=app_name<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
	profile_1.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre>
<p>To restore, you simply deploy your application, along with the backup folder, to your deployment environment and hit the Restore button in Gaebar. (If you have a large datastore both the backup and restore processes will take a long time, especially when restoring to a local development server.)</p>
<p>The restore process simply calls each of the generated row functions and each row function restores a single row into the datastore. </p>
<h3>A note on the screencast</h3>
<p>When mentioning how to install Gaebar, I left out that you also need to add the URL mapping for Gaebar to your application's urls.py. That, along with the rest of the installation instructions are in the readme.txt file, which I highly recommend that you peruse.</p>
<h3>Have your say!</h3>
<p>As in all things, my approach to blog posts is that they should evolve over time and your feedback is invaluable in achieving this by helping me fix factual errors, fill in details, and expand the original post. </p>
<p>What do you think of Gaebar? Have you run into any issues that need fixing? Do you have other suggestions on how to improve it? Or do you, perhaps, have a patch to send me that adds Webapp support or some other feature? Leave me a comment and let me know!</p>
<p><em>Gaebar is a Naklabâ„¢ production released under GNU GPL v3 and sponsored by the <a href="http://www.headconference.com">&lt;head&gt; web conference</a>.</em></p>
<p><img src="http://aralbalkan.com/wp-content/uploads/2008/12/gaebar-logo.jpg" alt="Gaebar Logo" height="190" width="295" style="display:none;"></p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1784/feed</wfw:commentRss>
		<slash:comments>49</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
		<item>
		<title>Running Google App Engine Helper trunk with Django trunk (zipimport)</title>
		<link>http://aralbalkan.com/1757</link>
		<comments>http://aralbalkan.com/1757#comments</comments>
		<pubDate>Sat, 20 Dec 2008 09:16:42 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1757</guid>
		<description><![CDATA[Dan Sanderson has a good article on Google Code on Using Django 1.0 on App Engine with Zipimport, however it misses two steps in preparing the django.zip file if you want to use the latest Django trunk with the latest Google App Engine Helper.
To create a new Django application for Google App Engine using Google [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Dan Sanderson has a good article on Google Code on <a href="http://code.google.com/appengine/articles/django10_zipimport.html">Using Django 1.0 on App Engine with Zipimport</a>, however it misses two steps in preparing the django.zip file if you want to use the latest Django trunk with the latest <a href="http://code.google.com/p/google-app-engine-django/">Google App Engine Helper</a>.</p>
<p>To create a new Django application for Google App Engine using Google App Engine Helper, start by exporting the latest Google App Engine Helper:</p>
<p><span id="more-1757"></span></p>
<pre>svn export http://google-app-engine-django.googlecode.com/svn/trunk/ ~/myapp</pre>
<p>To create a django.zip file to use with the latest Google App Engine:</p>
<ol>
<li>Export the latest Django trunk
<pre>svn export http://code.djangoproject.com/svn/django/trunk/ django</pre>
</li>
<li>Follow steps #2 and #3 in <a href="http://code.google.com/appengine/articles/django10_zipimport.html">Dan's instructions</a> under the "Archiving Django 1.0" section of his article</li>
<li>Add contrib/auth:
<pre>zip -r django.zip django/contrib/__init__.py \
	                  django/contrib/auth</pre>
</li>
<li>Add contrib/sessions:
<pre>zip -r django.zip django/contrib/__init__.py \
	                  django/contrib/sessions</pre>
</li>
<li>Copy the django.zip file into the root folder of your new app:
<pre>cp django.zip ~/myapp</pre>
</li>
<li>Uncomment the sessions middleware or auth middleware lines in settings.py file  in your app so that it looks like:
<pre>MIDDLEWARE_CLASSES = (
	    'django.middleware.common.CommonMiddleware',
	    'django.contrib.sessions.middleware.SessionMiddleware',
	    'django.contrib.auth.middleware.AuthenticationMiddleware',
	#    'django.middleware.doc.XViewMiddleware',
	)</pre>
</li>
</ol>
<p>That's it! To test it out:</p>
<pre>./manage.py runserver</pre>
<p>Hit http://localhost:8000/ and you should see the default Django welcome page.</p>
<p><strong>Update:</strong> Don't make the mistake of adding django.contrib.auth or django.contrib.sessions to your INSTALLED_APPS, even though you are including those apps in the django.zip file. If you do, ./manage.py runserver will work but ./manage.py shell and ./manage.py flush will return errors.</p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1757/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
		<item>
		<title>Weird error with urlfetch and localhost</title>
		<link>http://aralbalkan.com/1755</link>
		<comments>http://aralbalkan.com/1755#comments</comments>
		<pubDate>Mon, 15 Dec 2008 21:20:10 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[App Engine]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1755</guid>
		<description><![CDATA[I'm getting a weird Invalid Argument error while trying to hit localhost with urlfetch in the latest Google App Engine SDK.
I traced the issue to the _RetrieveURL method in /usr/local/google_appengine/google/appengine/api/urlfetch_stub.py and implemented a quick hack, adding the following at line 152:

# Aral - hack: for some reason urlfetch doesn't like localhost
# so we translate it [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />I'm getting a weird Invalid Argument error while trying to hit localhost with urlfetch in the latest Google App Engine SDK.</p>
<p>I traced the issue to the <code>_RetrieveURL</code> method in <em>/usr/local/google_appengine/google/appengine/api/urlfetch_stub.py</em> and implemented a quick hack, adding the following at line 152:</p>
<p><span id="more-1755"></span></p>
<pre class="python"><span style="color: #808080; font-style: italic;"># Aral - hack: for some reason urlfetch doesn't like localhost</span>
<span style="color: #808080; font-style: italic;"># so we translate it to 127.0.0.1. This is for local testing only.</span>
<span style="color: #ff7700;font-weight:bold;">if</span> host == <span style="color: #483d8b;">'localhost:8080'</span>:
  host = <span style="color: #483d8b;">'127.0.0.1:8080'</span></pre>
<p>This basically allows me to hit one instance of the local dev server from another for testing some functionality I need for the Google App Engine backup/restore solution I'm working on. Without this hack, I can't hit localhost with urlfetch at all.</p>
<p>I'm still not sure why this is happening. (Could appenginepatch be messing things up &mdash; it was working under AppEngineHelper... hmm?)</p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1755/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
		<item>
		<title>Clarifying SSL: Google App Engine still doesn&#8217;t support it, appspot.com does.</title>
		<link>http://aralbalkan.com/1632</link>
		<comments>http://aralbalkan.com/1632#comments</comments>
		<pubDate>Tue, 25 Nov 2008 11:49:03 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[<head>]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[appspot.com]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1632</guid>
		<description><![CDATA[
I'm seeing a lot of misinformation out there that Google App Engine has SSL support. It doesn't. 

If you read Google's announcement from last month carefully, you will see that it is titled "Announcing HTTPS support for appspot.com", not "for Google App Engine"	.
"What's the difference?", you may be wondering. It's quite big.
What google supports is [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><img src="http://aralbalkan.com/wp-content/uploads/2008/11/google-app-engine-still-doesnt-support-ssl.jpg" alt="Google App Engine still doesn't support SSL" height="190" width="295" style="float: left; margin-right: 1em;"></p>
<p>I'm seeing a lot of <a href="http://broadcast.oreilly.com/2008/10/google-app-engine-gets-https.html" title="Google App Engine Gets HTTPS! - O'Reilly Broadcast">misinformation</a> out there that Google App Engine has SSL support. It doesn't. </p>
<p><span id="more-1632"></span></p>
<p>If you read <a href="http://googleappengine.blogspot.com/2008/10/announcing-https-support-for-appspotcom.html" title="Google App Engine Blog: Announcing HTTPS support for appspot.com!">Google's announcement from last month carefully</a>, you will see that it is titled "<a href="http://googleappengine.blogspot.com/2008/10/announcing-https-support-for-appspotcom.html" title="Google App Engine Blog: Announcing HTTPS support for appspot.com!">Announcing HTTPS support for appspot.com</a>", not "for Google App Engine"	.</p>
<p>"What's the difference?", you may be wondering. It's quite big.</p>
<p>What google supports is SSL for subdomains for appspot.com. So, if you're happy with hosting your application <em>only</em> from your appspot.com subdomain, then you can use SSL in your application. For example, I have several simple open source apps that I host on Google App Engine, like <a href="http://opencountrycodes.appspot.com/" title="ISO 3166-1 country names and corresponding ISO 3166-1-alpha-2 codes">opencountrycodes</a> and <a href="http://isvat.appspot.com/" title="European VAT Number Validation API">isvat</a>. Since I'm not worried about having custom domains for these, I host them on appspot.com subdomains (e.g., <a href="http://opencountrycodes.appspot.com/" title="ISO 3166-1 country names and corresponding ISO 3166-1-alpha-2 codes">opencountrycodes.appspot.com</a>). If I wanted to use HTTPS on these apps, I could and you could hit, for example, https://opencountrycodes.appspot.com to get to the secure version of the site.</p>
<p>The issue arises when you want to use your own domain for your App Engine application. The &lt;head&gt; conference web site, for example, resides at http://www.headconference.com. It also has a subdomain on appspot.com but I don't publicize that. Currently, there is no way I can use SSL on the Head Conference web site as Google App Engine only supports SSL for appspot.com subdomains (so, if the headconference subdomain on appspot.com was headconference.appspot.com, I <em>could</em> use SSL on that subdomain).</p>
<p>"So", I can hear you ask, "why don't you just use headconference.com for everything and headconference.appspot.com for the SSL connections?"</p>
<p>The answer: sessions and usability. </p>
<p>Take this example:</p>
<p>I want to use PayPal to process a payment. My user hits www.headconference.com, signs in, and starts the checkout process. I forward the user to PayPal and pass the secure URL of my notification script to PayPal (e.g., https://headconference.appspot.com/my/notification/handler/). When the user returns from PayPal, they are no longer on the headconference.com site, their session is no longer valid, and they need to sign in again. </p>
<p>In other words, this is not a usable solution for custom domains.</p>
<p>The problem is that implementing SSL on Google App Engine is not a trivial solution. One possible methodx that has been suggested several times in the forums is to use the <a href="http://en.wikipedia.org/wiki/Server_Name_Indication" title="Server Name Indication - Wikipedia, the free encyclopedia">Server Name Indication (SLI) extension to Transport Layer Security (TLS)</a>.</p>
<p>So what is the current state of SSL on Google App Engine? It's still not supported, with the exception of applications that are hosted only at appspot.com subdomains. In other words &mdash; given that most real-world applications, whether commercial or not, will want to be hosted under their own domains &mdash; SSL is still not supported for real-world applications on Google App Engine.</p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1632/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
		<item>
		<title>Google App Engine SDK 1.1.6 released, brings sortable datastore keys</title>
		<link>http://aralbalkan.com/1629</link>
		<comments>http://aralbalkan.com/1629#comments</comments>
		<pubDate>Fri, 21 Nov 2008 16:42:30 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[1.1.6]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[batch]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[datastore]]></category>
		<category><![CDATA[keys]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1629</guid>
		<description><![CDATA[
Google today released Google App Engine SDK 1.1.6 (announcement, download) which, among other things, brings with it datastore keys that you can sort and filter on.

What this means is that you can now do batch operations on data. 
So it's time for me to go back to my Google App Engine backup solution, which broke [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><a href="http://groups.google.com/group/google-appengine/browse_thread/thread/9a3b55cb6a1f1443" title="SDK 1.1.6 Released -<br />
  Google App Engine |<br />
  Google Groups"><img src="http://aralbalkan.com/wp-content/uploads/2008/11/app-engine-in-flight.jpg" alt="App Engine in Flight" height="190" width="295" style="float:left; margin-right:1em;"></a></p>
<p>Google today released Google App Engine SDK 1.1.6 (<a href="http://groups.google.com/group/google-appengine/browse_thread/thread/9a3b55cb6a1f1443" title="SDK 1.1.6 Released -<br />
  Google App Engine |<br />
  Google Groups">announcement</a>, <a href="http://code.google.com/appengine/downloads.html" title="Downloads - Google App Engine - Google Code">download</a>) which, among other things, brings with it datastore keys that you can sort and filter on.</p>
<p><span id="more-1629"></span></p>
<p>What this means is that you can now do batch operations on data. </p>
<p>So it's time for me to go back to <a href="http://aralbalkan.com/1448" title="Aral Balkan - Screencast demonstrating the first Google App Engine data export solution (full backup and restore)">my Google App Engine backup solution</a>, which broke after Google introduced artificial limits on query offsets, and update it to use sortable keys.</p>
<p>With 1.1.6, the SDK also makes inroads into <a href="http://aralbalkan.com/1444" title="Aral Balkan - Local SDK _does not_ emulate deployment environment quotas">emulating deployment environment quotas</a> by implementing URLFetch call timeouts after 5 seconds.</p>
<p>Good work, guys! Here's hoping that the next thing you're working on is map/reduce and long-running processes.</p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1629/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
		<item>
		<title>&lt;/head&gt;</title>
		<link>http://aralbalkan.com/1522</link>
		<comments>http://aralbalkan.com/1522#comments</comments>
		<pubDate>Mon, 03 Nov 2008 15:38:51 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
				<category><![CDATA[<head>]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Tools and Utilities]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1522</guid>
		<description><![CDATA[
Last week, we made a little history when over 70 speakers and 500 attendees from around the world congregated on the Interwebs for the &#60;head&#62; web conference and, in doing so, took part in creating the world's first virtual web conference. Last week, thanks to you, we proved that there is a new model for [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><a href="http://www.flickr.com/photos/bru/2970721561/" title="NOT Staff, FRIENDS @ headconference on Flickr - Photo Sharing!"><img src="http://aralbalkan.com/wp-content/uploads/2008/11/head-london-hub-by-bru-76.jpeg" alt="Head London hub by - bru 76" height="440" width="624"></a></p>
<p>Last week, we made a little history when over 70 speakers and 500 attendees from around the world congregated on the Interwebs for the <a href="http://www.headconference.com/" title="&lt;head&gt; Web Conference: October 24-26, 2008">&lt;head&gt; web conference</a> and, in doing so, took part in creating the world's first virtual web conference. Last week, thanks to you, we proved that there is a new model for conferences that is engaging, environmentally-friendly, and affordable. </p>
<p><span id="more-1522"></span></p>
<p><em>Voilà, l'âge de la Conférence 2.0 commence</em></p>
<p>Presenters spoke from home, from hotels, from our local conference hubs in London, Brighton, and San Francisco, and, in one case, from a car parked on a street-side in downtown New York City.</p>
<p>I'm overwhelmed by the wonderful reviews I'm reading from attendees and speakers alike, as well as the lovely feedback we've been receiving directly. I'd like to share some of this with you here, starting with this gem from my friend <a href="http://adactio.com/journal/" title="Adactio: Journal">Jeremy Keith</a>, who opened the conference with his excellent talk on The Long Web:</p>
<blockquote><p>It spanned three days and as many continents. It was a preposterously ambitions undertaking and, incredibly, it worked! <em>(<a href="http://adactio.com/journal/1523" title="Adactio: Journal&mdash;&lt;/head&gt;">Read the full post</a>.)</em></p></blockquote>
<blockquote><p>One of the things that I loved about the conference was finding out more about the things I had heard of, but knew nothing about (both Richard Rutter and Ann McKeekin's talks come to mind) . . . Thank you again for a wonderful conference, I'm looking forward to next year. <em>(<a href="http://spiralarm.com/" title="Spiral Arm - Home Page">Jonathan Ferguson</a>, attendee.)</em></p></blockquote>
<blockquote><p> I had great time interacting with the crowd by telling my stories, answering questions, giving away books and hopefully instilling some inspiration to the one hundred in my apartment. <em>(Christopher Schmitt, speaker; <a href="http://www.christopherschmitt.com/2008/10/29/head-conference-the-virtual-conference/" title="Head Conference, The Virtual Conference : Christopher Schmitt">read the full post</a>.)</em></p></blockquote>
<blockquote><p>I really enjoyed the conference sessions last weekend. Congratulations on a great event! <em>(Stuart Giles, attendee.)</em></p></blockquote>
<blockquote><p>The Head Conference was an ambitious, timely, and much needed creative exploration of the potential for "green" conferencing using Adobe Connect Pro, Second Life and local conference hubs in various cities. <em>(Tish Shute, <a href="http://www.ugotrade.com/2008/10/28/doing-something-useful-with-virtual-worlds/" title="UgoTrade &raquo; Blog Archive &raquo; Doing Something Useful With Virtual Worlds">read the full post</a>.)</em></p></blockquote>
<blockquote><p>Great job with the Head Conference. I had a blast . . . Was surprised how interactive and social and online conference could be.  Already looking forward to next year. <em>(<a href="http://blog.ickydime.com/" title="ickydime">Mark Grossnickle</a>, attendee.)</em></p></blockquote>
<blockquote><p>All by all, it turned out to be an amazing experience, that not only made you realize again why you love internet, but also contributed to your sense of commitment to the . . . community. I guess the best thing I like about &lt;head&gt; is that you can come together, interact and learn from the cracks, sitting in your lazy chair, no matter where you are! (Jeff Winder, attendee; <a href="http://seedylifestyle.blogspot.com/2008/10/2008-future-is-here.html" title="seedylifestyle: &lt;head&gt 2008: The Future Is Here">read the full post</a>.)</p></blockquote>
<p>(I won't go on so this post doesn't turn into a testimonials page &mdash; suffice to say we got a heap more of lovely reviews on the web, on twitter, and in emails &mdash; thank you all so much for sharing them with us. We're wonderfully happy by the response, and we're listening to your feedback so that we can evolve the conference and make it even better for next year.)</p>
<p>Undoubtedly, following the success of &lt;head&gt;, we are going to see more conferences embrace virtual aspects and I can only assume that we will see more virtual conferences popping up. &lt;head&gt;, of course, will not be standing still. We have learned tons by staging this conference and I have very definite plans for where I want to see &lt;head&gt; go next as we evolve and continue to explore the concept of Conference 2.0. </p>
<p>In closing, I want to once again thank our wonderful <a href="http://www.headconference.com/speakers/" title="Speakers at the &lt;head&gt; Web Conference">speakers</a>, <a href="http://www.headconference.com/sponsors/" title="Sponsors at the &lt;head&gt; Web Conference">sponsors</a>, <a href="http://www.headconference.com/micro-sponsors/">micro-sponsors</a>, and, of course, our attendees for breathing life into the conference and making &lt;head&gt; a success &mdash; thank you all for your support and here's to an even better &lt;head&gt; 2009!</p>
<h4>Photos</h4>
<ul>
<li><a href="http://www.flickr.com/photos/tags/head2008/" title="Flickr: "head2008"">Flickr tag head2008</a></li>
<li><a href="http://www.flickr.com/photos/tags/headconference/" title="Flickr: "headconference"">Flickr tag headconference</a></li>
<li><a href="http://www.flickr.com/groups/head08/" title="Flickr: &lt;head&gt; Conference '08">Flickr group: head08</a></li>
</ul>
<h4>Related posts from speakers</h4>
<ul>
<li>Jeremy Keith - <a href="http://adactio.com/journal/1523" title="Adactio: Journal&mdash;&lt;/head&gt;">&lt;/head&gt;</a></li>
<li>Yahoo! Developer Network Blog - <a href="http://developer.yahoo.net/blog/archives/2008/10/moving_on_with.html" title="Moving on with the style of conferences: &lt;head&gt; was a great success (Yahoo! Developer Network Blog)">Moving on with the style of conferences: &lt;head&gt; was a great success</a></li>
<li>Christopher Schmitt - <a href="http://www.christopherschmitt.com/2008/10/29/head-conference-the-virtual-conference/" title="Head Conference, The Virtual Conference : Christopher Schmitt">Head Conference, The Virtual Conference</a></li>
<li>Chris Heilmann - <a href="http://www.wait-till-i.com/2008/10/24/seven-reasons-why-web-development-is-running-in-circles/" title="Wait till I come! &raquo; Blog Archive &raquo; Seven reasons why web development is running in circles">Seven reasons why web development is running around in circles</a>, <a href="http://www.wait-till-i.com/2008/10/26/the-art-and-pain-of-teaching-javascript-my-talk-at-head/" title="Wait till I come! &raquo; Blog Archive &raquo; The art and pain of teaching JavaScript - my talk at &lt;head&gt;">The art and pain of teaching JavaScript - my talk at &lt;head&gt;</a></li>
<li>Seb Lee-Delisle - <a href="http://www.sebleedelisle.com/?p=288" title="Seb Lee-Delisle">Reprezenting the Flash crew at the &lt;head&gt; conference</a>.</li>
<li>Henny Swan - <a href="http://my.opera.com/ODIN/blog/2008/10/30/have-you-got-the-x-factor-building-websites-for-mobile-and-disabled-users" title="Have you got the X Factor? Building websites for mobile and disabled users - ODIN - by ODIN">Have you got the X Factor? Building websites for mobile and disabled users</a></li>
<li>Joshua Hirsch - <a href="http://labs.bigspaceship.com/2008/10/28/conference/" title="Big Spaceship Labs&nbsp;&raquo;&nbsp;&lt;head&gt; conference">&lt;head&gt; conference</a></li>
</ul>
<h4>Related posts from attendees</h4>
<ul>
<li>Jeff Winder - <a href="http://seedylifestyle.blogspot.com/2008/10/2008-future-is-here.html" title="seedylifestyle: &lt;head&gt 2008: The Future Is Here">&lt;head&gt; 2008: The Future Is Here</a></li>
<li>Tish Shute - <a href="http://www.ugotrade.com/2008/10/28/doing-something-useful-with-virtual-worlds/" title="UgoTrade &raquo; Blog Archive &raquo; Doing Something Useful With Virtual Worlds">Doing Something Useful With Virtual Worlds</a>, <a href="http://www.ugotrade.com/2008/11/02/tim-oreilly-instrumenting-the-world/" title="UgoTrade &raquo; Blog Archive &raquo; Tim O&#8217;Reilly: &#8220;Instrumenting the World&#8221;">Tim O'Reilly: Instrumenting the World</a></li>
<li>Tom Morris - <a href="http://tommorris.org/blog/2008/10/24#When:22:32:41" title="Tom Morris: 2008-10-24">Taking the hat off my head</a>, <a href="http://tommorris.org/blog/2008/10/27#When:08:45:25" title="Tom Morris: 2008-10-27">On not banging one's head against a brick wall</a></li>
<li>Mark Grossnickle - Head conference wrap-up: <a href="http://blog.ickydime.com/2008/10/head-conference-day-1.html" title="ickydime: HEAD Conference: Day 1">Day 1</a>, <a href="http://blog.ickydime.com/2008/10/head-conference-wrap-up-day-2.html" title="ickydime: Head Conference Wrap Up: Day 2">Day 2</a>, <a href="http://blog.ickydime.com/2008/10/head-conference-wrap-up-day-3.html" title="ickydime: Head Conference Wrap Up: Day 3">Day 3</a></li>
</ul>
<p>(If you have a blog post or review that I missed, please leave me a link to it in the comments &mdash; thanks!)</p>
]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1522/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	</item>
	</channel>
</rss>
