<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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" version="2.0">

<channel>
	<title>Alan deLevie</title>
	
	<link>http://www.alandelevie.com</link>
	<description>The website of Alan deLevie</description>
	<pubDate>Mon, 15 Feb 2010 19:27:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AlanDelevie" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="alandelevie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Track CATA buses on your non-iPhone</title>
		<link>http://www.alandelevie.com/2010/02/15/track-cata-buses-on-your-non-iphone/</link>
		<comments>http://www.alandelevie.com/2010/02/15/track-cata-buses-on-your-non-iphone/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 19:27:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[app engine]]></category>

		<category><![CDATA[cata]]></category>

		<category><![CDATA[cata android]]></category>

		<category><![CDATA[cata iphone app]]></category>

		<category><![CDATA[catafind]]></category>

		<category><![CDATA[penn state]]></category>

		<category><![CDATA[real time cata]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=380</guid>
		<description><![CDATA[CATA (Centre Area Transportation Authority) recently released a free iPhone app for tracking their buses in real time. Although I don&#8217;t own an iPhone, based off the few times I&#8217;ve seen my friends use the app, I&#8217;ll say that CATA did an excellent job with it. 
The iPhone app wasn&#8217;t CATA&#8217;s first foray into real-time [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.alandelevie.com/images/blueloop.png' alt='' class='alignleft' /><a href="http://www.catabus.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.catabus.com');">CATA</a> (Centre Area Transportation Authority) recently released a <a href="http://onwardstate.com/2010/01/21/freebie-alert-cata-iphone-app/" onclick="javascript:pageTracker._trackPageview('/outbound/article/onwardstate.com');">free iPhone app</a> for tracking their buses in real time. Although I don&#8217;t own an iPhone, based off the few times I&#8217;ve seen my friends use the app, I&#8217;ll say that CATA did an excellent job with it. </p>
<p>The iPhone app wasn&#8217;t CATA&#8217;s first foray into real-time bus tracking. About a year ago, CATA released a live <a href="http://realtime.catabus.com/InfoPoint/" onclick="javascript:pageTracker._trackPageview('/outbound/article/realtime.catabus.com');">Google map</a> of their bus routes. While useful when you&#8217;re a near a computer, my biggest gripe was that the map wouldn&#8217;t load on most (if any) phones. </p>
<p>So one weekend last Spring I built <a href="http://catafind.appspot.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/catafind.appspot.com');">Catafind</a>.</p>
<p>It&#8217;s not as flashy or polished as the iPhone app, but it works on virtually any phone with Internet access.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2010%2F02%2F15%2Ftrack-cata-buses-on-your-non-iphone%2F';
  addthis_title  = 'Track+CATA+buses+on+your+non-iPhone';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2010/02/15/track-cata-buses-on-your-non-iphone/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Demystifying eager loading with ActiveRecord</title>
		<link>http://www.alandelevie.com/2010/01/26/demystifying-eager-loading-with-activerecord/</link>
		<comments>http://www.alandelevie.com/2010/01/26/demystifying-eager-loading-with-activerecord/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 03:23:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[activerecord]]></category>

		<category><![CDATA[eager loading]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=362</guid>
		<description><![CDATA[
Eager loading in ActiveRecord is a great feature. It prevents what&#8217;s called the &#8220;n+1&#8243; problem. From the docs (emphasis mine):
Eager loading is a way to find objects of a certain class and a number of named associations. This is one of the easiest ways of to prevent the dreaded 1+N problem in which fetching 100 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://imgur.com/NMiQi.png" alt="eager loading not working" /></p>
<p>Eager loading in ActiveRecord is a great feature. It prevents what&#8217;s called the &#8220;n+1&#8243; problem. From the <a href="http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/api.rubyonrails.org');">docs</a> (emphasis mine):</p>
<blockquote><p>Eager loading is a way to find objects of a certain class and a number of named associations. This is one of the easiest ways of to prevent the dreaded 1+N problem in which fetching 100 posts that each need to display their author triggers 101 database queries. Through the use of eager loading, the <strong>101 queries can be reduced to 2</strong>.</p></blockquote>
<p>The docs then give this example:<br />
<span id="more-362"></span></p>
<p><script src="http://gist.github.com/286504.js?file=gistfile1.rb"></script><br />
 This can scare beginners, as it did to me when I started learning about eager loading. This query doesn&#8217;t magically work by itself. You must have the proper associations set up in your models. Once I started to think of that include clause in terms of the associations, everything made sense:<br />
 <script src="http://gist.github.com/286510.js?file=gistfile1.rb"></script></p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2010%2F01%2F26%2Fdemystifying-eager-loading-with-activerecord%2F';
  addthis_title  = 'Demystifying+eager+loading+with+ActiveRecord';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2010/01/26/demystifying-eager-loading-with-activerecord/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Facebook callback urls with Rails</title>
		<link>http://www.alandelevie.com/2010/01/09/facebook-callback-urls-rails/</link>
		<comments>http://www.alandelevie.com/2010/01/09/facebook-callback-urls-rails/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 23:51:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[callbacks]]></category>

		<category><![CDATA[facebook]]></category>

		<category><![CDATA[post authorize]]></category>

		<category><![CDATA[post deauthorize]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=352</guid>
		<description><![CDATA[Fellow Three Screen Games (the company that created FanGamb) co-founder, Robert Shedd, wrote a tutorial detailing how to safely update a database using the Facebook platform&#8217;s callback urls in a Rails app.

  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2010%2F01%2F09%2Ffacebook-callback-urls-rails%2F';
  addthis_title  = 'Facebook+callback+urls+with+Rails';
  addthis_pub    = '';

]]></description>
			<content:encoded><![CDATA[<p>Fellow Three Screen Games (the company that created <a href="http://www.fangamb.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.fangamb.com');">FanGamb</a>) co-founder, <a href="http://robert.shedd.us" onclick="javascript:pageTracker._trackPageview('/outbound/article/robert.shedd.us');">Robert Shedd</a>, wrote a <a href="http://blog.shedd.us/post/325834010/rails-facebook-development" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.shedd.us');">tutorial</a> detailing how to safely update a database using the Facebook platform&#8217;s callback urls in a Rails app.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2010%2F01%2F09%2Ffacebook-callback-urls-rails%2F';
  addthis_title  = 'Facebook+callback+urls+with+Rails';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2010/01/09/facebook-callback-urls-rails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>From ActiveRecord to Raw SQL</title>
		<link>http://www.alandelevie.com/2009/11/19/from-activerecord-to-raw-sql/</link>
		<comments>http://www.alandelevie.com/2009/11/19/from-activerecord-to-raw-sql/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 10:02:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[activerecord]]></category>

		<category><![CDATA[find_by_sql]]></category>

		<category><![CDATA[hash]]></category>

		<category><![CDATA[metaprogramming]]></category>

		<category><![CDATA[method missing]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[ruby hash]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=337</guid>
		<description><![CDATA[ActiveRecord is awesome. Its dynamic finder methods, scopes, and effortless joins make working with a database a snap. But there are always those times when writing raw sql makes more sense. In my case, I was joining across several tables, and then sorting by a value from the joined table. The problem was that my [...]]]></description>
			<content:encoded><![CDATA[<p>ActiveRecord is awesome. Its dynamic finder methods, scopes, and effortless joins make working with a database a snap. But there are always those times when writing raw sql makes more sense. In my case, I was joining across several tables, and then sorting by a value from the joined table. The problem was that my views were written to handle an ActiveRecord object, not a simple hash, which is what a find_by_sql query returns.</p>
<p>Before:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color:#008000; font-style:italic;">#controller:</span>
<span style="color:#0066ff; font-weight:bold;">@posts</span> = Post.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#view:</span>
<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#0066ff; font-weight:bold;">@posts</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>post<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
   <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post.<span style="color:#9900CC;">title</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
   <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post.<span style="color:#9900CC;">body</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
   <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post.<span style="color:#9900CC;">author</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
   <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post.<span style="color:#9900CC;">date</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>After:<br />
<span id="more-337"></span></p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color:#008000; font-style:italic;">#controller:</span>
<span style="color:#0066ff; font-weight:bold;">@posts</span> = <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">connection</span>.<span style="color:#9900CC;">execute</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;SELECT * FROM posts&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#008000; font-style:italic;"># @posts.class #=&gt; Hash</span>
<span style="color:#008000; font-style:italic;"># @posts[0].title will return a method missing error</span></pre></div></div>

<p>For the view you have two choices.<br />
1)Rewrite the method calls:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#0066ff; font-weight:bold;">@posts</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>post<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'title'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'body'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
   <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'author'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'date'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
<span style="color:#006600; font-weight:bold;">&amp;</span>lt; <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&amp;</span>gt;
<span style="color:#008000; font-style:italic;">#this is tedious</span></pre></div></div>

<p>or<br />
2) Hack the hash to make keys act as methods. There are several ways to do this. From a <a href="http://stackoverflow.com/questions/1753336/hashkey-to-hash-key-in-ruby" onclick="javascript:pageTracker._trackPageview('/outbound/article/stackoverflow.com');">stackoverflow</a> question I asked, someone showed me a module in the Ruby standard library called OpenStruct:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color:#008000; font-style:italic;">#controller</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'ostruct'</span>
<span style="color:#0066ff; font-weight:bold;">@posts</span> = OpenStruct.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">connection</span>.<span style="color:#9900CC;">execute</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;SELECT * FROM posts&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#view</span>
<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#0066ff; font-weight:bold;">@posts</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>post<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
   <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post.<span style="color:#9900CC;">title</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
   <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post.<span style="color:#9900CC;">body</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
   <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post.<span style="color:#9900CC;">author</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
   <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= post.<span style="color:#9900CC;">date</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Other ways to do this (from stackoverflow answerers):</p>
<ul>
<li>define the method_missing function for the <code>Hash</code> class</li>
<li>define the method_missing function for just the hash instance you&#8217;re dealing with</li>
</ul>
<p>You can try these out with a really cool <a href="http://www.ideone.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ideone.com');">pastebin</a> that actually runs the code:</p>
<ul>
<li><a href="http://ideone.com/ZbYoUlSG" onclick="javascript:pageTracker._trackPageview('/outbound/article/ideone.com');">OpenStruct</a></li>
<li><a href="http://ideone.com/AtwQIR2l" onclick="javascript:pageTracker._trackPageview('/outbound/article/ideone.com');">modify <code>Hash</code> class</a></li>
<li><a href="http://ideone.com/uK74aaBu" onclick="javascript:pageTracker._trackPageview('/outbound/article/ideone.com');">modify specific hash instance</a></li>
</ul>
<p>It&#8217;s interesting that all of these solutions used about 5mb of memory according to the <a href="http://www.ideone.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ideone.com');">ideone.com</a>.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2009%2F11%2F19%2Ffrom-activerecord-to-raw-sql%2F';
  addthis_title  = 'From+ActiveRecord+to+Raw+SQL';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2009/11/19/from-activerecord-to-raw-sql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cron Jobs on Google App Engine</title>
		<link>http://www.alandelevie.com/2009/04/14/cron-jobs-on-google-app-engine/</link>
		<comments>http://www.alandelevie.com/2009/04/14/cron-jobs-on-google-app-engine/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 16:45:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[cron]]></category>

		<category><![CDATA[cron jobs]]></category>

		<category><![CDATA[google app engine]]></category>

		<category><![CDATA[google app engine cron]]></category>

		<category><![CDATA[google app engine cron jobs]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=312</guid>
		<description><![CDATA[As a side project, I&#8217;ve been working on a mobile site to track my local bus system. I&#8217;ll have a more detailed post about that once it is a fully polished site. Essentially, the site parses some xml with longitude/latitude data and uses a maps api to display the location. All fairly simple, and it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>As a side project, I&#8217;ve been working on a mobile site to track my local bus system. I&#8217;ll have a more detailed post about that once it is a fully polished site. Essentially, the site parses some xml with longitude/latitude data and uses a maps api to display the location. All fairly simple, and it&#8217;s built on Google App Engine, which means it will be free/cheap to maintain.</p>
<p>I always wanted the app to be able to continually check the xml feeds, which are updated every minute, so I could store the data persistently and then use memcache to handle large spikes in traffic (hopefully my site will have this good problem). In order to do this, I needed to set up a cron job. Well I was in luck as Google recently <a href="http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/googleappengine.blogspot.com');">added support</a> for cron jobs, a feature not previously built in to App Engine. </p>
<p><span id="more-312"></span></p>
<p>The setup is really simple and intuitive. Here&#8217;s the relevant file structure:<br />
/app.yaml<br />
/cron.yaml<br />
/main.py<br />
/models.py<br />
/my_cron.py</p>
<p>app.yaml:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre>application: myapp
version: 1
runtime: python
api_version: 1
&nbsp;
handlers:
- url: /my_cron
  script: my_cron.py
  login: admin
&nbsp;
- url: .*
  script: main.py</pre></td></tr></table></div>

<p>Whenever a request is sent to your app, its url is checked against the list of handlers. If the url is myapp.appspot.com/my_cron, the file my_cron.py is executed. All other urls go to the main guts of the site, main.py. Notice the <code>login: admin</code> part. This makes sure only the admin can access this url.</p>
<p>my_cron.py:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="python"><span style="color: #ff7700;font-weight:bold;">from</span> models <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
<span style="color: #ff7700;font-weight:bold;">from</span> tools <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#pseudocode:</span>
info = get_data<span style="color: black;">&#40;</span>args<span style="color: black;">&#41;</span>
i = MyModel<span style="color: black;">&#40;</span>info=info<span style="color: black;">&#41;</span>
i.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Another benefit from setting up this cron job was that it forced me to separate my models from main.py (the code is looking more Django-y by the day).</p>
<p>Now let&#8217;s tell App Engine how often we want my_cron.py to be executed. </p>
<p>cron.yaml:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre>cron:
-description: grabs some data
  url: /my_cron
  schedule: every 20 minutes</pre></td></tr></table></div>

<p>The <code>schedule</code> parameter is the most important part. It can be simple, as I have shown, or very complex, following <a href="http://code.google.com/appengine/docs/python/config/cron.html#The_Schedule_Format" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');">these conventions</a>.</p>
<p>That was easy.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2009%2F04%2F14%2Fcron-jobs-on-google-app-engine%2F';
  addthis_title  = 'Cron+Jobs+on+Google+App+Engine';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2009/04/14/cron-jobs-on-google-app-engine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Social search is Twitter’s next killer app? It’s already Aardvark’s killer app</title>
		<link>http://www.alandelevie.com/2009/03/13/social-search-is-twitters-next-killer-app-its-already-aardvarks-killer-app/</link>
		<comments>http://www.alandelevie.com/2009/03/13/social-search-is-twitters-next-killer-app-its-already-aardvarks-killer-app/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 18:06:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[aardvark]]></category>

		<category><![CDATA[adage]]></category>

		<category><![CDATA[advertsing age]]></category>

		<category><![CDATA[adwords]]></category>

		<category><![CDATA[institutional venture partners]]></category>

		<category><![CDATA[social]]></category>

		<category><![CDATA[social search]]></category>

		<category><![CDATA[todd chaffee]]></category>

		<category><![CDATA[twitter]]></category>

		<category><![CDATA[vark]]></category>

		<category><![CDATA[vark.com]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=295</guid>
		<description><![CDATA[A fun game has been sweeping the Internets. No, it doesn&#8217;t involve answering 25 questions on Facebook. It is speculation about Twitter&#8217;s future as a profitable business. Advertising Age recently published an article with (well-sourced) speculation of their own:

Certainly there&#8217;s an AdWords-like business there, but, as [Todd] Chaffee [an Institutional Venture Partners general partner and [...]]]></description>
			<content:encoded><![CDATA[<p>A fun game has been sweeping the Internets. No, it doesn&#8217;t involve answering 25 questions on Facebook. It is speculation about Twitter&#8217;s future as a profitable business. Advertising Age recently published an <a href="http://adage.com/digital/article?article_id=135016" onclick="javascript:pageTracker._trackPageview('/outbound/article/adage.com');">article</a> with (well-sourced) speculation of their own:</p>
<blockquote><p>
Certainly there&#8217;s an AdWords-like business there, but, as [Todd] Chaffee [an Institutional Venture Partners general partner and a new Twitter backer] told us, Twitter has another &#8220;wild card.&#8221; </p>
<p>In the future, searches won&#8217;t only query what&#8217;s being said at the moment, but will go out to the Twitter audience in the form of a question, like a faster and less-filtered Yahoo Answers or Wiki Answers. Users would be able to tap the collective knowledge of the 6 million or so members of the Twitterverse. </p>
<p>&#8220;You put a question out to the global mind, and it comes back,&#8221; Mr. Chaffee explained. &#8220;Millions of people are contributing to the knowledge base. The engine is alive. You get feedback in real time from people, not just documents.&#8221;
</p></blockquote>
<p>This is essentially what Aardvark does. And a really good job of it, I might add. Around the same time that Twitter&#8217;s biggest goal was to <a href="http://natishalom.typepad.com/nati_shaloms_blog/2008/05/twitter-as-an-e.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/natishalom.typepad.com');">stop crashing</a>, the Aardvark team received <a href="http://www.techcrunch.com/2008/10/29/mechanical-zoo-gets-6-million-to-build-aardvark-social-search-product/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.techcrunch.com');">$6 million in investment</a> to refine social search. Right now, Aardvark routes its questions and answers between several channels: Google Chat, AIM, Windows Live Messenger, as well as good old e-mail. I posed this question to &#8220;assistant curator of birds&#8221; of Aardvark, Rob Spiro:</p>
<blockquote>
<p><a href="http://twitter.com/adelevie" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">adelevie</a>: <span class="entry-content">@<a href="http://www.twitter.com/robsp" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.twitter.com');">robsp</a> can Vark work through Twitter the same way it works through GChat and e-mail?</span></p>
<p><i><span class="meta entry-meta"><a href="http://twitter.com/adelevie/status/1280312137" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');" class="entry-date" rel="bookmark"><span class="published">12:55 PM Mar 4th</span></a> <span>from web</span> </span></i></p>
</blockquote>
<p>His reply:</p>
<blockquote>
<p><a href="http://twitter.com/robsp" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">robsp</a>: <span class="entry-content">@<a href="http:/www.twitter.com/adelevie">adelevie</a> yup, we&#8217;re definitely planning an aardvark-twitter integration, using Twitter as another communication channel&#8230; coming soon&#8230;</span></p>
<p><i><span class="meta entry-meta"><a href="http://twitter.com/robsp/status/1281103492" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');" class="entry-date" rel="bookmark"><span class="published">4:24 PM Mar 4th</span></a> <span>from web</span> <a href="http://twitter.com/adelevie/status/1280312137" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">in reply to adelevie</a></span></i></p>
</blockquote>
<p>Would their two services compete? Could Twitter acquire Aardvark? We&#8217;ll just have to wait and see.</p>
<p>Aardvark has recently been <a href="http://www.techcrunch.com/2009/03/13/aardvark-social-search-service-arrives/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.techcrunch.com');">ramping up activity</a>, changing the name of their company from Mechanical Zoo to Aardvark, preparing to offer unlimited friend invites to current users, and launching a <a href="http://blog.vark.com/?p=10" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.vark.com');">blog</a>.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2009%2F03%2F13%2Fsocial-search-is-twitters-next-killer-app-its-already-aardvarks-killer-app%2F';
  addthis_title  = 'Social+search+is+Twitter%26%238217%3Bs+next+killer+app%3F+It%26%238217%3Bs+already+Aardvark%26%238217%3Bs+killer+app';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2009/03/13/social-search-is-twitters-next-killer-app-its-already-aardvarks-killer-app/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Better project template for Google App Engine</title>
		<link>http://www.alandelevie.com/2009/03/13/better-project-template-for-google-app-engine/</link>
		<comments>http://www.alandelevie.com/2009/03/13/better-project-template-for-google-app-engine/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 07:12:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[app engine]]></category>

		<category><![CDATA[beautiful soup]]></category>

		<category><![CDATA[beautifulsoup]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[google app engine]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=284</guid>
		<description><![CDATA[I&#8217;ve been playing around with Google App Engine quite a bit lately. Whenever I&#8217;d create a new project, I&#8217;d start by copying and pasting a folder called &#8220;new_project_template&#8221; which is included in the software developers kit. The template contains a bare-minimum hello world script. As I made more and more apps, I realized that I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing around with <a href="http://code.google.com/appengine/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');">Google App Engine</a> quite a bit lately. Whenever I&#8217;d create a new project, I&#8217;d start by copying and pasting a folder called &#8220;new_project_template&#8221; which is included in the software developers kit. The template contains a bare-minimum hello world script. As I made more and more apps, I realized that I always added the same things to this folder before writing the actual &#8220;guts&#8221; of the code. </p>
<p>I always had to fix the indents, add some basic <code>import</code> statements, and include my favorite web scraping library, <a href="http://www.crummy.com/software/BeautifulSoup/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.crummy.com');">Beautiful Soup</a>. So I created a template of my own and named it &#8220;better_project_template&#8221; (creative? I know). The folder has the Beautiful Soup module, base.html and index.html templates, as well as some useful <a href="http://www.alandelevie.com/2009/02/11/dumb-app-engine-shortcuts/" >shortcuts</a>  added to the main.py file. Anyone interested can <a href="http://www.alandelevie.com/scripts/better_project_template.zip" onclick="javascript:pageTracker._trackPageview('/downloads/scripts/better_project_template.zip');">download</a> this folder here for their own use.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2009%2F03%2F13%2Fbetter-project-template-for-google-app-engine%2F';
  addthis_title  = 'Better+project+template+for+Google+App+Engine';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2009/03/13/better-project-template-for-google-app-engine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>No one will know you’re using bit.ly</title>
		<link>http://www.alandelevie.com/2009/03/04/no-one-will-know-youre-using-bitly/</link>
		<comments>http://www.alandelevie.com/2009/03/04/no-one-will-know-youre-using-bitly/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 01:59:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[bit.ly]]></category>

		<category><![CDATA[biturlly]]></category>

		<category><![CDATA[biturlly.appspot.com]]></category>

		<category><![CDATA[tinyurl]]></category>

		<category><![CDATA[tinyurl.com]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=277</guid>
		<description><![CDATA[I&#8217;ve been a big fan of Bit.ly. The added utility it provides to link shortening is unmatched. It makes tinyurl.com look like the url shortener of simpletons. Using Bit.ly conveys that you are tech-savvy to a certain degree. But what if you want the benefits of Bit.ly, without looking pretentious? Use biturlly. It&#8217;s a simple [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a big fan of Bit.ly. The added utility it provides to link shortening is unmatched. It makes tinyurl.com look like the url shortener of simpletons. Using Bit.ly conveys that you are tech-savvy to a certain degree. But what if you want the benefits of Bit.ly, without looking pretentious? Use<a href="http://biturlly.appspot.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/biturlly.appspot.com');"> biturlly</a>. It&#8217;s a simple tool I developed last week that takes a long url, shortens it through Bit.ly, then shortens the Bit.ly link through tinyurl. You&#8217;ll get the click tracking of Bit.ly with the humility of tinyurl.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2009%2F03%2F04%2Fno-one-will-know-youre-using-bitly%2F';
  addthis_title  = 'No+one+will+know+you%26%238217%3Bre+using+bit.ly';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2009/03/04/no-one-will-know-youre-using-bitly/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bit.ly: Almost the Delicious of the Semantic Web</title>
		<link>http://www.alandelevie.com/2009/02/28/bitly-almost-the-delicious-of-the-semantic-web/</link>
		<comments>http://www.alandelevie.com/2009/02/28/bitly-almost-the-delicious-of-the-semantic-web/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 16:58:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[bit.ly]]></category>

		<category><![CDATA[calais]]></category>

		<category><![CDATA[delicious]]></category>

		<category><![CDATA[open calais]]></category>

		<category><![CDATA[reuters]]></category>

		<category><![CDATA[semantic]]></category>

		<category><![CDATA[semantic web]]></category>

		<category><![CDATA[twitter]]></category>

		<category><![CDATA[twitturly]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=265</guid>
		<description><![CDATA[A little while back I wrote about how Bit.ly has the potential to bring us ever closer to the &#8220;semantic web&#8221; comparing it to the seemingly out-of-date delicious.com. Since that post, Bit.ly has added a few features as well as refined its user interface which suggest where Bit.ly may be headed.
The most significant new feature [...]]]></description>
			<content:encoded><![CDATA[<p>A little while back I <a href="http://www.alandelevie.com/2008/11/05/bitly-and-teaching-the-machine/" >wrote</a> about how Bit.ly has the potential to bring us ever closer to the &#8220;semantic web&#8221; comparing it to the seemingly out-of-date delicious.com. Since that post, Bit.ly has added a few features as well as refined its user interface which suggest where Bit.ly may be headed.</p>
<p>The most significant new feature is profile pages. Just as Delicious accounts are in the form of <a href="http://delicious.com/adelevie" onclick="javascript:pageTracker._trackPageview('/outbound/article/delicious.com');">delicious.com/username</a>, Bit.ly accounts are in the form of <a href="http://adelevie.bit.ly" onclick="javascript:pageTracker._trackPageview('/outbound/article/adelevie.bit.ly');">username.bit.ly</a>. Instead of linking to a Delicious account to show the world what you are sharing, you can just link to your Bit.ly account. However some features are missing from the profile pages, most notably, share/click counts. Bit.ly could easily list next to each link on adelevie.bit.ly the number of times someone has shortened the same url as well as total number of times people have clicked on that link. The data is all there, it&#8217;s only a matter of incorporating it into the user interface. Nevertheless, the people at Bit.ly do seem to understand the power of using their own click data to find what is relevant on the web. They&#8217;re testing the waters very slowly with this concept.<br />
<img src="http://alandelevie.nfshost.com/images/bitlyvsdelicious.png" alt="screenshot comparison of delicious and bitly profile pages" /></p>
<p>Back in October of 2008, the Bit.ly blog had a post titled <a href="http://blog.bit.ly/post/57297640/yesterdays-top-bits" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.bit.ly');">Yesterday&#8217;s Top Bits</a> where they simply listed the highest-clicked Bit.ly links. Later, in <a href="http://blog.bit.ly/post/79406457/fresh-from-the-labs-bitlynow-twitter-bot" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.bit.ly');">February of 2009</a>, Bit.ly created a Twitter <a href="http://twitter.com/bitlynow" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">account</a> called bitlynow which tweets the highest-clicked Bit.ly links for a certain time period. This gives Bit.ly the ability to keep a pulse as to what&#8217;s being shared on the web in a similar manner as <a href="http://twitturly.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitturly.com');">Twitturly</a>. Twitturly&#8217;s advantage is that its data include just about every link that goes through Twitter. Bit.ly&#8217;s advantage is that its click/referral tracking feature allows it to look beyond just Twitter. I&#8217;d like to see some amalgamation of Twitter, Twitturly and Bit.ly. </p>
<p>While Bit.ly&#8217;s new features are encouraging, they still don&#8217;t address the 800 pound gorilla in the room: its growing database of semantic data about each Bit.ly link (from <a href="http://www.opencalais.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.opencalais.com');">Open Calais</a>&#8216; api). Solely tracking the flow of links only gives part of the picture. Tracking the flow of the meaning of those links is a lot more valuable. It would be nice to see Bit.ly make sense of all this data.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2009%2F02%2F28%2Fbitly-almost-the-delicious-of-the-semantic-web%2F';
  addthis_title  = 'Bit.ly%3A+Almost+the+Delicious+of+the+Semantic+Web';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2009/02/28/bitly-almost-the-delicious-of-the-semantic-web/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dumb App Engine Shortcuts</title>
		<link>http://www.alandelevie.com/2009/02/11/dumb-app-engine-shortcuts/</link>
		<comments>http://www.alandelevie.com/2009/02/11/dumb-app-engine-shortcuts/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 03:08:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[app engine]]></category>

		<category><![CDATA[app engine templates]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[google app engine]]></category>

		<category><![CDATA[render_to_response]]></category>

		<category><![CDATA[templates]]></category>

		<category><![CDATA[webapp]]></category>

		<category><![CDATA[webpy]]></category>

		<guid isPermaLink="false">http://www.alandelevie.com/?p=258</guid>
		<description><![CDATA[I like using App Engine&#8217;s webapp framework. It&#8217;s very simple and similar to the web.py framework. However, simple tasks such as outputting data or rendering templates require way too much boilerplate text. For example, to output a rendered template, you must type:

1
2
3
4
5
6
7
8
    template_values = &#123;
      'greetings': greetings,
 [...]]]></description>
			<content:encoded><![CDATA[<p>I like using App Engine&#8217;s webapp framework. It&#8217;s very simple and similar to the web.py framework. However, simple tasks such as outputting data or rendering templates require way too much boilerplate text. For example, to output a rendered template, you must type:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="python">    template_values = <span style="color: black;">&#123;</span>
      <span style="color: #483d8b;">'greetings'</span>: greetings,
      <span style="color: #483d8b;">'url'</span>: url,
      <span style="color: #483d8b;">'url_linktext'</span>: url_linktext,
      <span style="color: black;">&#125;</span>
&nbsp;
    path = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>__file__<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'index.html'</span><span style="color: black;">&#41;</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">response</span>.<span style="color: black;">out</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span>template.<span style="color: black;">render</span><span style="color: black;">&#40;</span>path, template_values<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>To avoid this morass of boilerplate code, and to better keep track of your code, simply add the following snippet to the beginning of every instance of the <code>RequestHandler</code> class (each &#8220;page,&#8221; if you will):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="python">disp = <span style="color: #008000;">self</span>.<span style="color: black;">response</span>.<span style="color: black;">out</span>.<span style="color: black;">write</span>
<span style="color: #ff7700;font-weight:bold;">def</span> render<span style="color: black;">&#40;</span>template_name, template_values<span style="color: black;">&#41;</span>:
          path = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>__file__<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'%s'</span> <span style="color: #66cc66;">%</span> template_name<span style="color: black;">&#41;</span>
          disp<span style="color: black;">&#40;</span>template.<span style="color: black;">render</span><span style="color: black;">&#40;</span>path, template_values<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Now to render a template, simply use <code>return render('index.html', {'form' : someForm()}).</code><br />
Think of this as App Engine&#8217;s version of Django&#8217;s <code>Render_to_Response</code> function ;).<br />
Similarly, if all you want to do is spit out data that won&#8217;t go through a template just use <code>return disp("some string")</code>.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fwww.alandelevie.com%2F2009%2F02%2F11%2Fdumb-app-engine-shortcuts%2F';
  addthis_title  = 'Dumb+App+Engine+Shortcuts';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
]]></content:encoded>
			<wfw:commentRss>http://www.alandelevie.com/2009/02/11/dumb-app-engine-shortcuts/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
