<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Aral Balkan</title>
	
	<link>http://aralbalkan.com</link>
	<description>Aral on Flash, SWX, Flex, ActionScript, and life.</description>
	<pubDate>Mon, 06 Oct 2008 23:04:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/3.0/</creativeCommons:license>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/aralbalkan" type="application/rss+xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Faralbalkan" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Faralbalkan" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Faralbalkan" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.rojo.com/add-subscription?resource=http%3A%2F%2Ffeeds.feedburner.com%2Faralbalkan" src="http://blog.rojo.com/RojoWideRed.gif">Subscribe with Rojo</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/aralbalkan" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Faralbalkan" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Faralbalkan" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Faralbalkan" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item>
		<title>Another day, another App Engine issue - solved!</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/413132542/1510</link>
		<comments>http://aralbalkan.com/1510#comments</comments>
		<pubDate>Mon, 06 Oct 2008 20:48:37 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[App Engine]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1510</guid>
		<description><![CDATA[Seems everyday I am discovering new issues with Google App Engine. Today, I implemented the Qik video channel for the conference, which pulls in the media RSS feed from Qik and displays the latest videos from the &#60;head&#62; event on Qik.
Unfortunately, Google App Engine's urlfetch api caches requests and doesn't give you a means not [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Seems everyday I am discovering new issues with Google App Engine. Today, I implemented the <a href="http://www.headconference.com/qik/" title="Qik at &lt;head&gt; Web Conference">Qik video channel for the conference</a>, which pulls in the media RSS feed from Qik and displays the latest videos from <a href="http://qik.com/event/397/ltheadgt-web-conference" title="QIK | Streaming video right from your phone">the &lt;head&gt; event on Qik</a>.</p>
<p>Unfortunately, Google App Engine's urlfetch api caches requests and <a href="http://code.google.com/p/googleappengine/issues/detail?id=739&amp;q=cache&amp;colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log" title="Issue 739 - googleappengine - Google Code">doesn't give you a means not to cache the results</a> or to set the cache duration (an issue that has been <a href="http://groups.google.com/group/google-appengine/search?group=google-appengine&amp;q=urlfetch+cache&amp;qt_g=Search+this+group" title="Google Groups">discussed several times on the forum too</a>.)</p>
<p>For us, this means that there's an unknown delay between when you record your video and when it shows up on the video page, even though it is added to the Qik RSS immediately after it is recorded. </p>
<p><a href="http://code.google.com/p/googleappengine/issues/detail?id=739" title="Issue 739 - googleappengine - Google Code">There is an open issue for this</a>. Please star! Thanks! <img src='http://aralbalkan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Update: </strong>Thanks to argladd86 on the App Engine issue tracker, <a href="http://code.google.com/p/googleappengine/issues/detail?id=739#c5">this problem has now been solved!</a> <img src='http://aralbalkan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The solution involves using the max-age property, as shown below:</p>
<pre>fetch_headers = {'Cache-Control':'no-cache,max-age=0', 'Pragma':'no-cache'}
qik_rss_result = urlfetch.fetch("http://qik.com/event/rss/397/ltheadgt-web-conference", None, urlfetch.GET, fetch_headers)</pre>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1510" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=ElOBm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=ElOBm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=fv0BM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=fv0BM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=G4uzM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=G4uzM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=aMW2m"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=aMW2m" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=WMCwm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=WMCwm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=EQXfm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=EQXfm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=U9adM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=U9adM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/413132542" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1510/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1510</feedburner:origLink></item>
		<item>
		<title>Yahoo! Pipes breaks for Flash if you customize your pipe URLs</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/412972680/1509</link>
		<comments>http://aralbalkan.com/1509#comments</comments>
		<pubDate>Mon, 06 Oct 2008 17:12:20 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[BUG]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Yahoo! Pipes]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1509</guid>
		<description><![CDATA[I love Yahoo! Pipes. It has saved my butt on several occasions when I've needed to transform feeds. However, I think I broke it (for myself, at least) by customizing the URL for my pipes.
When you do that, you lose the ability to refer to your pipes using the yahooapis.com domain and thus you cannot [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />I love <a href="http://pipes.yahoo.com">Yahoo! Pipes</a>. It has saved my butt on several occasions when I've needed to transform feeds. However, I think I broke it (for myself, at least) by customizing the URL for my pipes.</p>
<p>When you do that, you lose the ability to refer to your pipes using the yahooapis.com domain and thus you cannot load your data from Flash. There doesn't seem to be a way to revert to non-customized URLs either once you've made the switch. </p>
<p>The problem is that the yahooapis.com domain contains the necessary crossdomain.xml file but yahoo.com doesn't. Normally, what you do is replace the yahoo.com URL you get for your pipe with yahooapis.com to use it in Flash (why not just give the yahooapis.com URL as default and save Flash developers a bunch of confusion?)</p>
<p>Once you've customized your domain, however, that substitution results in a 404.</p>
<p>Here's hoping the Yahoo! Pipes team fixes this soon. </p>
<p>In the meanwhile, I guess my only recourse is to set up a new Yahoo! account and use that for my pipe.</p>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1509" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=6fDnm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=6fDnm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=K1cWM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=K1cWM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=5rOfM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=5rOfM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=Pmcfm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=Pmcfm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=ciUtm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=ciUtm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=DqIqm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=DqIqm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=rzKTM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=rzKTM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/412972680" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1509/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1509</feedburner:origLink></item>
		<item>
		<title>Simple cookie fix for session.put() error with pyamf shell after upgrading the Google App Engine SDK</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/411854597/1508</link>
		<comments>http://aralbalkan.com/1508#comments</comments>
		<pubDate>Sun, 05 Oct 2008 12:11:28 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[App Engine]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1508</guid>
		<description><![CDATA[On the off chance that you are running app-engine-patch and have started getting errors similar to…
Traceback (most recent call last):
  File "/Users/aral/projects/headconference/trunk/shell/gateway.py", line 218, in evalCode
    session.put()
AttributeError: 'NoneType' object has no attribute 'put'

…while using the PyAMF Shell after upgrading your Google App Engine SDK (to the latest 1.1.5, for example) the [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />On the off chance that you are running <a href="http://code.google.com/p/app-engine-patch/" title="app-engine-patch - Google Code">app-engine-patch</a> and have started getting errors similar to…</p>
<pre>Traceback (most recent call last):
  File "/Users/aral/projects/headconference/trunk/shell/gateway.py", line 218, in evalCode
    session.put()
AttributeError: 'NoneType' object has no attribute 'put'
</pre>
<p>…while using the <a href="http://aralbalkan.com/1503" title="Running the PyAMF shell with Django 1.0 and app-engine-patch at Aral Balkan">PyAMF Shell</a> <em>after upgrading your Google App Engine SDK</em> (to the latest <a href="http://code.google.com/appengine/downloads.html" title="Downloads - Google App Engine - Google Code">1.1.5</a>, for example) the fix is really quite simple: delete the cookies in your browser.</p>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1508" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=lKsOm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=lKsOm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=5EwlM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=5EwlM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=N5zRM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=N5zRM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=O13Nm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=O13Nm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=FjKtm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=FjKtm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=yVt2m"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=yVt2m" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=CrP7M"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=CrP7M" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/411854597" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1508/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1508</feedburner:origLink></item>
		<item>
		<title>SDK 1.1.5 released - App Engine development speeding up?</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/411104352/1507</link>
		<comments>http://aralbalkan.com/1507#comments</comments>
		<pubDate>Sat, 04 Oct 2008 13:26:22 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[App Engine]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1507</guid>
		<description><![CDATA[
Google updated the App Engine SDK to version 1.1.5 today (release notes). 
Among the new features, the one that really caught my eye was: "Sped up the datastore stub." 
I didn't notice a speed up in the initial start-up time of the dev server with a large datastore, but it does seem that my app [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><img src="http://aralbalkan.com/wp-content/uploads/2008/10/app-engine-sdk-releases1.jpg" alt="App Engine sdk Releases" height="400" width="624"></p>
<p><a href="http://groups.google.com/group/google-appengine/browse_thread/thread/a6bf08e6b738ae7b" title="SDK 1.1.5 Released - Google App Engine | Google Groups">Google updated the App Engine SDK to version 1.1.5 today</a> (<a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes" title="SdkReleaseNotes - googleappengine - Google Code - Google App Engine SDK Release Notes">release notes</a>). </p>
<p>Among the new features, the one that really caught my eye was: "Sped up the datastore stub." </p>
<p>I didn't notice a speed up in the initial start-up time of the dev server with a large datastore, but it does seem that my app is more responsive. I need to test further and get some real data though.</p>
<p>One thing I've noticed is that the mean time between SDK releases has been decreasing quite considerably as of late. I hope that means that development on App Engine is speeding up and that we'll start seeing new feature implementations on the deployment environment also.</p>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1507" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=MF1zm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=MF1zm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=Lz4OM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=Lz4OM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=a0oKM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=a0oKM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=TlITm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=TlITm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=u9Drm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=u9Drm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=gUhFm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=gUhFm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=FGt0M"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=FGt0M" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/411104352" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1507/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1507</feedburner:origLink></item>
		<item>
		<title>Why Google App Engine is broken and what Google must do to fix it.</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/410479913/1504</link>
		<comments>http://aralbalkan.com/1504#comments</comments>
		<pubDate>Fri, 03 Oct 2008 17:30:14 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[App Engine]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[1mb limit]]></category>

		<category><![CDATA[administration]]></category>

		<category><![CDATA[app engine]]></category>

		<category><![CDATA[backup]]></category>

		<category><![CDATA[cloud computing]]></category>

		<category><![CDATA[datastore]]></category>

		<category><![CDATA[Email]]></category>

		<category><![CDATA[fix]]></category>

		<category><![CDATA[issues]]></category>

		<category><![CDATA[limits]]></category>

		<category><![CDATA[long-running processes]]></category>

		<category><![CDATA[quotas]]></category>

		<category><![CDATA[scalability]]></category>

		<category><![CDATA[showstoppers]]></category>

		<category><![CDATA[the cloud]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1504</guid>
		<description><![CDATA[I've been working a lot with Google App Engine in the past few months. I still maintain, as I reiterated recently in my Boagworld interview with Paul, that it's a great idea and has great potential. And the Google App Engine team has been wonderful in working with me and helping me out. Unfortunately, there [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />I've been working a lot with Google App Engine in the past few months. I still maintain, as I reiterated recently <a href="http://boagworld.com/podcast/137/" title="137. Adobe : Boagworld web design podcast">in my Boagworld interview with Paul</a>, that it's a great idea and has great potential. And the Google App Engine team has been wonderful in working with me and helping me out. Unfortunately, there are a couple of fundamental issues that must be addressed, and addressed properly, before Google App Engine can be taken seriously as a web application platform. </p>
<p>(And no, Java support is most definitely not one of them.)</p>
<p>Rather than writing a lengthy diatribe, I am going to succinctly list the main showstoppers that Google needs to fix to make Google App Engine work:</p>
<h4>1MB limit on data structures</h4>
<p>Although this is hinted at in various bits of the documentation, it is not stated plainly anywhere so let me state it for the record:</p>
<p><strong>Google App Engine does not support any data structure that is larger than 1MB in size.</strong></p>
<p>This includes files. So you can't host that 1.2MB PDF you want to offer for download as part of your site.</p>
<p>The limit affects blobs, text, and any other fields in the datastore, as well as variables in Python (so you cannot get around the limitation by breaking things up into smaller pieces in the datastore and stitching them together later in code). </p>
<p>The only way to get around this limit is to stitch the data structure together on the client by making several Ajax calls. The number of use cases where this is useful, of course, is severely limited.</p>
<p>Among other things, the 1MB limit on data structures makes it nigh on impossible to run reports and <a href="http://aralbalkan.com/1503" title="Running the PyAMF shell with Django 1.0 and app-engine-patch at Aral Balkan">makes having an administrative shell on the deployment environment pretty much useless</a> as serialized results of queries with hundreds of items will quickly hit the limit.</p>
<h4>1,000 item limit on query offsets</h4>
<p>The datastore has always had a 1,000 item limit on query results. I don't have a problem with this. </p>
<p>However, they recently also introduced a 1,000 item limit on <em>offsets</em>. This means that you can at most get the 2,000th entity for a given kind.</p>
<p>Again this isn't documented anywhere.</p>
<p>Unless you have been keeping a sortable field (like a numeric index that you were manually saving) in your datastore, this new limitation effectively locks you out of your data beyond the 2,000th item for each kind. </p>
<p>The fact that such a radical change was introduced without any forewarning or even an announcement is, in and of itself, troubling. </p>
<p>Currently, the only way to get around this limitation is to make sure that you have a sortable field that you can limit your queries on. I would highly recommend saving a numeric key for every entity. This does mean, however, that you will be doing two datastore writes for every entity (once to save the record and get its numeric id, and another to write the numeric id into a separate field that you can sort on). This is both more cumbersome and will no doubt raise the risk of your running into another Google App Engine limit: The short-term high CPU quota.</p>
<p>(From what I've heard, the Google team is working on adding sortable keys in a future update.)</p>
<h4>The short-term high CPU quota</h4>
<p>Not only are your calls limited to returning in 10 seconds but if you actually try to do anything too stressful within those calls, you will quickly hit the short-term high CPU quota limit. </p>
<p>Thankfully, Google has raised this limit (and the other limits) for my app but plain vanilla apps are not as lucky. In my tests, I've found that the high CPU limit can be randomly triggered even in calls that return within a second. To tell you the truth, I don't actually know what causes these. I memcache nearly everything and try my hardest not to stress the system out and yet I routinely see the high CPU warnings in my logs for even the most mundane calls.</p>
<p>(I've also seen strange high CPU errors in my logs informing me that I am 1.0x above the high CPU limit which makes no sense at all.)</p>
<p>The short-term high CPU quotas must be removed. Not only that but Google must review how it handles quotas in general. </p>
<h4>Quotas in general</h4>
<p>When was the last time you saw an "over quota" error on one of your favorite web applications?</p>
<p>Google's handing of quotas is a major step backwards to the days of Geocities and "this user has used too much bandwidth" errors. Probably acceptable if you're hosting pictures of Little Timmy and Sally Jo's Summer Camp Adventure on Geocities, not so acceptable if you're hosting your next big web app on what you thought was Google's infinitely-scalable Cloud solution.</p>
<p>Simply put, they couldn't have come up with a worse PR campaign for Google App Engine if they had hired Steve Ballmer to handle the job. </p>
<p>Think about it: </p>
<p>You build an awesome new app on Google App Engine. You tell your friends. They tell 1,000 of their friends on Twitter who tell 1,000 of their friends and then, suddenly, you have all these developers hitting Google App Engine for the first time to see your app. Paradoxically, by doing that, they trigger the "intelligent throttling" "feature" in Google App Engine which freaks out and shuts down your app with an "Over Quota" error -- effectively making the "Over Quota" message the first impression most of your audience has of Google App Engine.</p>
<p>Not good.</p>
<p>Especially not good when your unique selling point is that your system can scale. </p>
<p>We don't care that it <em>can</em> scale. We care that it <em>does</em> scale. And that it scales when you need it the most. </p>
<p>But that's not the worst bit.</p>
<h4>Admin? What's that?</h4>
<p>Currently Google App Engine does only one half of what a web application needs (and does that only half well). As it stands today, Google App Engine is a highly scalable request/response system that is tuned to handle lots of tiny calls. </p>
<p>A typical web application, however, needs more than that.</p>
<p>While concentrating on making applications scalable, Google App Engine entirely ignores a crucial use case of any web application: administration. The administrative features of your web application may not be consumer-facing but they are just as important. They may include features for running reports or mailing all of your users. Key, essential tasks for any modern web application.</p>
<p>With Google App Engine today, if you have more than a couple of thousand members/records in your datastore, you can forget about running any sort of admin task. </p>
<p>A total lack of long running processes, coupled with the 1MB limit on data structures and the 1,000 limit on query offsets means that you cannot run reports or backups. (Not that there is a data backup system currently available for Google App Engine -- I have one that I wrote myself <a href="http://aralbalkan.com/1448">which used to work</a> but is currently crippled due to the 1,000 item limit on offsets.)</p>
<p>Similarly, unless you knew to plan ahead and create a sortable key to query on, you will find yourself locked out reaching certain records in your datastore (for example, not being able to email all of your members).</p>
<p>These are core showstoppers for anyone considering building a real-world application on Google App Engine and I can only hope that they are at the top of the engineering team's list of new features. </p>
<h4>25% ready for prime-time</h4>
<p>As things stand, Google App Engine is about 25% ready for prime time. Once quotas are handled properly and the 1MB limit removed, it will be about 50% ready. The other 50% has nothing to do with scalability and everything to do with everything else that a typical web application needs. Specifically, long running processes and the ability to run reports, aggregate data, and perform operations on large data sets. </p>
<p>In effect, Google App Engine is entirely missing a separate mode of operation and this glaring omission must be addressed before Google App Engine can be deemed a serious web application platform.</p>
<h4>Priorities and showstoppers</h4>
<p>I really hope that Google is not working on adding support for other languages to Google App Engine, as they mentioned that they were at the Google Developer Day in London, when there are such fundamentally crippling issues with the platform that must be addressed first. Adding support for other languages to Google App Engine today is like sewing a new set of drapes for a house that doesn't have any walls yet.</p>
<p>In summary, before Google App Engine can be used for real web applications, the following issues have to be addressed:</p>
<ul>
<li>1MB limit on data structures must be removed.</li>
<li>Quotas must be handled optimistically, without crippling applications at the very moment that they should be benefitting from The Cloud. The "intelligent throttling" "feature" and short-term CPU quotas must be removed.</li>
<li>The 1,000 item limit for offsets in queries must be removed.</li>
<li>Support for long-running processes must be added.</li>
</ul>
<p>It may just be that Google has to implement two modes of operation for each application on Google App Engine: one that is  request/response-only and scales (i.e., basically what we have today, with better quota handling) and a separate admin mode that has long-running processes and isn't crippled by data structure size limits and short-term high CPU quotas.</p>
<p>As things stand today, running a real-world application on Google App Engine is a complete nightmare because the system completely ignores the essential administration-related use cases for web applications that we take for granted on other platforms.</p>
<p><strong>Update:</strong> Several people have brought it to my attention that I forgot to mention another major showstopper for most applications, which is the lack of SSL. I ran into this early on, did my research, and found that PayPal was the only viable e-commerce solution at the time if your application needs to receive notification callbacks on purchases (ironically, Google Checkout requires SSL for its notifications API).</p>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1504" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=Z8Dfm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=Z8Dfm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=j8FRM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=j8FRM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=EV42M"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=EV42M" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=VnbSm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=VnbSm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=b8A8m"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=b8A8m" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=LyLum"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=LyLum" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=zowGM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=zowGM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/410479913" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1504/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1504</feedburner:origLink></item>
		<item>
		<title>Running the PyAMF shell with Django 1.0 and app-engine-patch</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/409279587/1503</link>
		<comments>http://aralbalkan.com/1503#comments</comments>
		<pubDate>Thu, 02 Oct 2008 13:04:17 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[App Engine]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[app engine]]></category>

		<category><![CDATA[app-engine-patch]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[Google]]></category>

		<category><![CDATA[pyamf]]></category>

		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1503</guid>
		<description><![CDATA[I lost quite a bit of time trying to get the PyAMF shell up and running on the &#60;head&#62; web site this week. 
I started out by downloading the source for the shell app via a link on a post on the PyAMF blog. Unfortunately, the link was to the wrong version of the shell [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />I lost quite a bit of time trying to get the <a href="http://blog.pyamf.org/archives/interactive-python-shell-with-flex" title="PyAMF blog  &raquo; Blog Archive   &raquo; Interactive Python shell with Flex">PyAMF shell</a> up and running on the <a href="http://www.headconference.com">&lt;head&gt; web site</a> this week. </p>
<p>I started out by downloading the source for the shell app via a link <a href="http://blog.pyamf.org/archives/interactive-python-shell-with-flex" title="PyAMF blog  &raquo; Blog Archive   &raquo; Interactive Python shell with Flex">on a post on the PyAMF blog</a>. Unfortunately, the link was to the wrong version of the shell app (I've since informed the PyAMF team and Nick's fixed the link.)</p>
<p>Seeing that the example used sessions, I decided to port the site from Google App Engine Helper to app-engine-patch, which has support for sessions in Google App Engine. Porting to app-engine-patch meant that I had to port the site to Django 1.0 also. <a href="http://aralbalkan.com/1502" title="Dictionary lookup removed for request object in Django 1.0 and other fun facts. at Aral Balkan">I've chronicled my experience with this previously</a>. </p>
<p>Today, I pinged the PyAMF folks on IRC and realized that there was a Google App Engine-specific version available. Unfortunately, that didn't work out of the box either due to a clash between its sessions implementation and the sessions implementation in app-engine-patch. That, however, was simple enough to fix.</p>
<p>If you're running app-enginge-patch and want to run the PyAMF shell, refactor the gateway.py module to rename the <code>Sessions</code> class to <code>ShellSessions</code> and Bob's your uncle. (It might be an idea for the PyAMF team to modify the example so that it works out of the box with app-engine-shell.)</p>
<p>Also, make sure that you protect the shell by only allowing admin access to it.</p>
<p>I can't begin to express how empowering it is to have shell access to your app on Google App Engine and I have no idea how I got by without it for so long. A big thank-you to the PyAMF team for making the shell app and releasing it. Great job, guys!</p>
<p>I would love to see a standalone Django app of the shell that you can simply plug in to your existing apps. Unfortunately, this is currently not possible since the app has static files and you need to add static folders manually to your application's app.yaml file. <a href="http://code.google.com/p/googleappengine/issues/detail?id=662&amp;can=1&amp;q=standalone&amp;colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log" title="Issue 662 - googleappengine - Google Code">I've filed an ECR on this</a> -- star it if you'd like that feature.</p>
<p><strong>Update:</strong> Scratch that, I keep running into the 1MB limit for datastructures while trying to run queries, etc., through the shell, making it practically useless.</p>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1503" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=dZAfm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=dZAfm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=dOHUM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=dOHUM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=tO9lM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=tO9lM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=JbHQm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=JbHQm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=ooiNm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=ooiNm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=dS0Mm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=dS0Mm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=NJOwM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=NJOwM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/409279587" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1503/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1503</feedburner:origLink></item>
		<item>
		<title>Dictionary lookup removed for request object in Django 1.0 and other fun facts.</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/408309941/1502</link>
		<comments>http://aralbalkan.com/1502#comments</comments>
		<pubDate>Wed, 01 Oct 2008 14:50:33 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1502</guid>
		<description><![CDATA[Porting pre 1.0 Django to 1.0 is apparently not a walk in the park.
For one thing django.core.validators, which I was using, was removed. The fix: copy it back from the earlier version. 
Not sure if it was a bad practice or not but I was also doing dictionary lookups on the request object and that's [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Porting pre 1.0 Django to 1.0 is apparently not a walk in the park.</p>
<p>For one thing django.core.validators, which I was using, was removed. The fix: copy it back from the earlier version. </p>
<p>Not sure if it was a bad practice or not but I was also doing dictionary lookups on the request object and <a href="http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges#Removeddictionaryaccesstorequestobject" title="BackwardsIncompatibleChanges - Django - Trac">that's been removed now</a>. </p>
<p>The errors you will get are:</p>
<ul>
<li>'WSGIRequest' object is not iterable</li>
<li>'WSGIRequest' object is unsubscriptable</li>
</ul>
<p>If you're in the same boat, here's the regular expressions you need to find/replace in TextMate: </p>
<h4>Fix 'WSGIRequest' object is not iterable:</h4>
<p>Find: </p>
<pre>' in request(?!\.)</pre>
<p>Replace:</p>
<pre>' in request.REQUEST</pre>
<h4>'WSGIRequest' object is unsubscriptable:</h4>
<p>Find: </p>
<pre>request\['</pre>
<p>Replace:</p>
<pre>request.REQUEST['</pre>
<p>Also, I switched from using <a href="http://code.google.com/p/google-app-engine-django/" title="google-app-engine-django - Google Code">Google App Engine Helper for Django</a> to <a href="http://code.google.com/p/app-engine-patch/" title="app-engine-patch - Google Code">app-engine-patch</a>. The main reason? So I could have the sessions middleware and run the <a href="http://blog.pyamf.org/archives/interactive-python-shell-with-flex" title="PyAMF blog &raquo; Blog Archive &raquo; Interactive Python shell with Flex">PyAMF Shell</a>. (And, of course, it's good to be running Django 1.0 now.)</p>
<p>App-engine-patch supports Django's mail feature so I stopped using google.appengine.api.mail.EmailMessage and replaced it with django.core.mail.EmailMessage. One thing to note if you do this is that you need to change the <code>to</code> properties on your EmailMessage instances to be lists, not strings, lest you end up trying to email each letter in the email address separately. </p>
<p>(Also, on my local server, I keep getting a Broken Pipe (error 32) since I upgraded to Django 1.0. I set fail_silently to True on my <code>send()</code> calls and that's fixed it. I don't have any issues on the deployment server. Looking into that one but it's a hairy one to track down.)</p>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1502" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=TMUrm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=TMUrm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=FT6OM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=FT6OM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=HCdYM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=HCdYM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=o0gLm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=o0gLm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=8osHm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=8osHm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=Z0xjm"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=Z0xjm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=RYOrM"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=RYOrM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/408309941" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1502/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1502</feedburner:origLink></item>
		<item>
		<title>&lt;head&gt; early-bird discount ends today!</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/407224179/1501</link>
		<comments>http://aralbalkan.com/1501#comments</comments>
		<pubDate>Tue, 30 Sep 2008 12:29:52 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1501</guid>
		<description><![CDATA[
Today is your last chance to take advantage of the $99 early-bird discount for the &#60;head&#62; web conference. 
Starting October 1st, tickets will be available at the regular price of $149. 
Don't miss the early-bird discount and get your ticket now!
]]></description>
			<content:encoded><![CDATA[<p id="top" /><a href="http://www.headconference.com" title="<strong>&lt;head&gt;</strong> web conference new web site"><img src="http://aralbalkan.com/wp-content/uploads/2008/09/head-conference-new-web-site-screenshot.jpg" alt="head conference new web site screenshot" height="205" width="624"></a></p>
<p>Today is your last chance to take advantage of the $99 early-bird discount for the <a href="http://www.headconference.com/" title="&lt;head&gt; Web Conference: October 24-26, 2008">&lt;head&gt; web conference</a>. </p>
<p>Starting October 1st, tickets will be available at the regular price of $149. </p>
<p>Don't miss the early-bird discount and <a href="http://www.headconference.com/tickets/" title="Tickets for the &lt;head&gt; Web Conference">get your ticket now</a>!</p>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1501" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=dh8Cl"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=dh8Cl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=26QHL"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=26QHL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=xTyYL"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=xTyYL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=87XRl"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=87XRl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=QI72l"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=QI72l" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=OhC5l"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=OhC5l" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=oRCYL"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=oRCYL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/407224179" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1501/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1501</feedburner:origLink></item>
		<item>
		<title>What are you doing at 9am after tonight’s party?</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/406464283/1499</link>
		<comments>http://aralbalkan.com/1499#comments</comments>
		<pubDate>Mon, 29 Sep 2008 17:58:25 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<category><![CDATA[flash on the beach]]></category>

		<category><![CDATA[fotb08]]></category>

		<category><![CDATA[session]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1499</guid>
		<description><![CDATA[
A quick reminder that the session I'm presenting tomorrow at FOTB has changed. My new session is called Grab the low-hanging fruit: or 5 rules for Hedonistic Creatives. 
The session may have changed but, lest you worry, it's still taking place at the awesome time of 9am. So, once you've left tonight's party at Audio, [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><a href="http://flashonthebeach.com/sessions/index.php?pageid=2103" title="Flash on the Beach 08 - Aral Balkan - Session"><img src="http://aralbalkan.com/wp-content/uploads/2008/09/fotb-session-reminder1.jpg" alt="Fotb Session Reminder" height="214" width="624"></a></p>
<p>A quick reminder that the session I'm presenting tomorrow at FOTB has changed. My new session is called <a href="http://flashonthebeach.com/sessions/index.php?pageid=2103" title="Flash on the Beach 08 - Aral Balkan - Session">Grab the low-hanging fruit: or 5 rules for Hedonistic Creatives</a>. </p>
<p>The session may have changed but, lest you worry, it's still taking place at the awesome time of 9am. So, once you've left tonight's party at Audio, head straight down to the Dome for some after-party fun!</p>
<p>Hoping to see at least three of you there tomorrow morning (and yes, that's you, Mom, Dad, and Stephanie!) <img src='http://aralbalkan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1499" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=Ol4yl"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=Ol4yl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=PwtVL"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=PwtVL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=YNVZL"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=YNVZL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=SpDVl"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=SpDVl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=50Mil"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=50Mil" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=rdvJl"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=rdvJl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=o7pZL"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=o7pZL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/406464283" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1499/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1499</feedburner:origLink></item>
		<item>
		<title>&lt;head&gt; moo stickers at FOTB</title>
		<link>http://feeds.feedburner.com/~r/aralbalkan/~3/405315013/1497</link>
		<comments>http://aralbalkan.com/1497#comments</comments>
		<pubDate>Sun, 28 Sep 2008 09:13:12 +0000</pubDate>
		<dc:creator>Aral</dc:creator>
		
		<category><![CDATA[Community]]></category>

		<category><![CDATA[Conferences]]></category>

		<category><![CDATA[&lt;head&gt;]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[fotb]]></category>

		<category><![CDATA[Moo]]></category>

		<category><![CDATA[stickers]]></category>

		<guid isPermaLink="false">http://aralbalkan.com/1497</guid>
		<description><![CDATA[
Don't forget to ask me for &#60;head&#62; moo stickers when you see me at FOTB this week!
Not at FOTB? You can order your own in just two clicks thanks to the magic of the moo API  
(Oh yeah, and the $99 &#60;head&#62; early-bird discount ends in just two days so get your ticket if [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><img src="http://aralbalkan.com/wp-content/uploads/2008/09/head-moo-stickers-at-fotb.jpg" alt="Head Moo Stickers at FOTB" height="292" width="624"></p>
<p>Don't forget to ask me for <a href="http://www.headconference.com">&lt;head&gt;</a> moo stickers when you see me at <a href="http://www.flashonthebeach.com">FOTB</a> this week!</p>
<p>Not at FOTB? You can <a href="http://headconference.com/moo" title="Moo! the &lt;head&gt; Web Conference">order your own in just two clicks</a> thanks to the magic of the moo API <img src='http://aralbalkan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>(Oh yeah, and the $99 &lt;head&gt; early-bird discount ends in just two days so get your ticket if you haven't already!)</p>
<script src="http://feeds.feedburner.com/~s/aralbalkan?i=http%3A%2F%2Faralbalkan.com%2F1497" type="text/javascript" charset="utf-8"></script><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/aralbalkan?a=ZiNul"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=ZiNul" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=OtfKL"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=OtfKL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=RDEAL"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=RDEAL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=Mntzl"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=Mntzl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=ihN6l"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=ihN6l" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=eeAil"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=eeAil" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/aralbalkan?a=6QhLL"><img src="http://feeds.feedburner.com/~f/aralbalkan?i=6QhLL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aralbalkan/~4/405315013" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://aralbalkan.com/1497/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/uk/</creativeCommons:license>
	<feedburner:origLink>http://aralbalkan.com/1497</feedburner:origLink></item>
	</channel>
</rss>
