<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: google-app-engine</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/google-app-engine.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2010-08-20T18:46:00+00:00</updated><author><name>Simon Willison</name></author><entry><title>Polymaps</title><link href="https://simonwillison.net/2010/Aug/20/polymaps/#atom-tag" rel="alternate"/><published>2010-08-20T18:46:00+00:00</published><updated>2010-08-20T18:46:00+00:00</updated><id>https://simonwillison.net/2010/Aug/20/polymaps/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://polymaps.org/"&gt;Polymaps&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Absurdly classy: “a JavaScript library for image- and vector-tiled maps using SVG”. It can pull in image tiles from sources such as OpenStreetMap, then overlay SVG paths specified using GeoJSON. The demos make use of GeoJSON tiles for US states and counties hosted on AppEngine. The library is developed by Stamen and SimpleGeo, and released under a BSD license. SVG support in the browser is required.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mapping"&gt;mapping&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openstreetmap"&gt;openstreetmap&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stamen-design"&gt;stamen-design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/svg"&gt;svg&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geojson"&gt;geojson&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/polymaps"&gt;polymaps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/simplegeo"&gt;simplegeo&lt;/a&gt;&lt;/p&gt;



</summary><category term="google-app-engine"/><category term="javascript"/><category term="mapping"/><category term="openstreetmap"/><category term="stamen-design"/><category term="svg"/><category term="recovered"/><category term="geojson"/><category term="polymaps"/><category term="simplegeo"/></entry><entry><title>App Engine at Google I/O 2010</title><link href="https://simonwillison.net/2010/May/20/appengine/#atom-tag" rel="alternate"/><published>2010-05-20T15:30:00+00:00</published><updated>2010-05-20T15:30:00+00:00</updated><id>https://simonwillison.net/2010/May/20/appengine/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://googleappengine.blogspot.com/2010/05/app-engine-at-google-io-2010.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A GoogleAppEngineBlog %28Google App Engine Blog%29"&gt;App Engine at Google I/O 2010&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
OpenID and OAuth are now baked in to the AppEngine users API. They’re also demoing two very exciting new features—a mapper API for doing map/reduce style queries against the data store, and a Channel API for building comet applications.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mapreduce"&gt;mapreduce&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/oauth"&gt;oauth&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openid"&gt;openid&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-io"&gt;google-io&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="comet"/><category term="google"/><category term="google-app-engine"/><category term="mapreduce"/><category term="oauth"/><category term="openid"/><category term="google-io"/><category term="recovered"/></entry><entry><title>Why toppcloud will not be agnostic</title><link href="https://simonwillison.net/2010/Feb/12/toppcloud/#atom-tag" rel="alternate"/><published>2010-02-12T09:21:32+00:00</published><updated>2010-02-12T09:21:32+00:00</updated><id>https://simonwillison.net/2010/Feb/12/toppcloud/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.ianbicking.org/2010/02/10/why-toppcloud-not-agnostic/"&gt;Why toppcloud will not be agnostic&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ian Bicking’s toppcloud aims to offer deployment with the ease of use of AppEngine against a standard, open source Ubuntu + Python 2.6 + mod_wsgi + Varnish stack. Here he explains why he’s not going to vary the required components: keeping everything completely standardised means everyone gets the same bugs (and the same fixes).


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/deployment"&gt;deployment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/modwsgi"&gt;modwsgi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/toppcloud"&gt;toppcloud&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ubuntu"&gt;ubuntu&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/varnish"&gt;varnish&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wsgi"&gt;wsgi&lt;/a&gt;&lt;/p&gt;



</summary><category term="deployment"/><category term="django"/><category term="google-app-engine"/><category term="ian-bicking"/><category term="modwsgi"/><category term="python"/><category term="toppcloud"/><category term="ubuntu"/><category term="varnish"/><category term="wsgi"/></entry><entry><title>What's hot? Introducing Zeitgeist</title><link href="https://simonwillison.net/2010/Feb/5/zeitgeist/#atom-tag" rel="alternate"/><published>2010-02-05T12:17:32+00:00</published><updated>2010-02-05T12:17:32+00:00</updated><id>https://simonwillison.net/2010/Feb/5/zeitgeist/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/help/insideguardian/2010/feb/03/zeitgeist"&gt;What&amp;#x27;s hot? Introducing Zeitgeist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Dan Catt’s first project at the Guardian. “When something appears on the Zeitgeist page, it’s because it performed better (got more attention) than the norm for that content type/section/day”. The application itself is written in Python and runs on Google App Engine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/dan-catt"&gt;dan-catt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/zeitgeist"&gt;zeitgeist&lt;/a&gt;&lt;/p&gt;



</summary><category term="dan-catt"/><category term="google-app-engine"/><category term="guardian"/><category term="python"/><category term="zeitgeist"/></entry><entry><title>Introducing docent</title><link href="https://simonwillison.net/2010/Jan/28/huskorg/#atom-tag" rel="alternate"/><published>2010-01-28T20:35:22+00:00</published><updated>2010-01-28T20:35:22+00:00</updated><id>https://simonwillison.net/2010/Jan/28/huskorg/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://husk.org/blog/arch/introducing-docent.html"&gt;Introducing docent&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Paul Mison’s clever little Flickr app for viewing galleries that have been added by your contacts. It runs in Python on App Engine and makes extensive use of the Task Queue API.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/docent"&gt;docent&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/flickr"&gt;flickr&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/paul-mison"&gt;paul-mison&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/queues"&gt;queues&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/taskqueue"&gt;taskqueue&lt;/a&gt;&lt;/p&gt;



</summary><category term="docent"/><category term="flickr"/><category term="google-app-engine"/><category term="paul-mison"/><category term="python"/><category term="queues"/><category term="taskqueue"/></entry><entry><title>Djangopeople JSON parser</title><link href="https://simonwillison.net/2009/Nov/28/djangopeople/#atom-tag" rel="alternate"/><published>2009-11-28T11:29:25+00:00</published><updated>2009-11-28T11:29:25+00:00</updated><id>https://simonwillison.net/2009/Nov/28/djangopeople/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.agmweb.ca/blog/andy/2233/"&gt;Djangopeople JSON parser&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Awesome—Andy McKay has compensated for the lack of an official DjangoPeople API by creating a JSONP screen scraped API and hosting it on App Engine. As far as I’m concerned this is an officially supported feature—I’ll make sure future site changes don’t break it, and when I do add an API I’ll try to keep it compatible and help Andy set up redirects.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andy-mckay"&gt;andy-mckay&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/api"&gt;api&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django-people"&gt;django-people&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsonp"&gt;jsonp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="andy-mckay"/><category term="api"/><category term="django"/><category term="django-people"/><category term="google-app-engine"/><category term="json"/><category term="jsonp"/><category term="python"/></entry><entry><title>Tornado Web Server</title><link href="https://simonwillison.net/2009/Sep/10/tornado/#atom-tag" rel="alternate"/><published>2009-09-10T21:32:57+00:00</published><updated>2009-09-10T21:32:57+00:00</updated><id>https://simonwillison.net/2009/Sep/10/tornado/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.tornadoweb.org/"&gt;Tornado Web Server&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
An extremely exciting addition to the Python web landscape, Tornado is the open sourced version of FriendFeed’s custom web stack. It’s a non-blocking (epoll) Python web server designed for handling thousands of simultaneous connections, perfect for building Comet applications. The web framework is cosmetically similar to web.py or App Engine’s webapp but has decorators for writing asynchronous request handlers. The template language uses Django-style syntax but allows you to use full Python expressions. FriendFeed have benchmarked it handling 8,000 requests a second running as four load-balanced processes on a 4 core server.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://bret.appspot.com/entry/tornado-web-server"&gt;Bret Taylor&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bret-taylor"&gt;bret-taylor&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/epoll"&gt;epoll&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/friendfeed"&gt;friendfeed&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tornado"&gt;tornado&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapp"&gt;webapp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webpy"&gt;webpy&lt;/a&gt;&lt;/p&gt;



</summary><category term="bret-taylor"/><category term="comet"/><category term="django"/><category term="epoll"/><category term="friendfeed"/><category term="google-app-engine"/><category term="python"/><category term="tornado"/><category term="webapp"/><category term="webpy"/></entry><entry><title>Scriptlets - Quick web scripts</title><link href="https://simonwillison.net/2009/Aug/13/scriptlets/#atom-tag" rel="alternate"/><published>2009-08-13T13:51:10+00:00</published><updated>2009-08-13T13:51:10+00:00</updated><id>https://simonwillison.net/2009/Aug/13/scriptlets/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.scriptlets.org/"&gt;Scriptlets - Quick web scripts&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
From the prolific Jeff Lindsay, a pastebin-style tool for short server-side scripts written in Python, JavaScript or PHP that executes them within a Google App Engine powered sandbox. The Java code that implements the service is available on GitHub.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://blog.webhooks.org/2009/04/18/easy-hook-scripts-with-scriptlets/"&gt;Easy hook scripts with Scriptlets&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jeff-lindsay"&gt;jeff-lindsay&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/php"&gt;php&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scriptlets"&gt;scriptlets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webhooks"&gt;webhooks&lt;/a&gt;&lt;/p&gt;



</summary><category term="github"/><category term="google-app-engine"/><category term="java"/><category term="javascript"/><category term="jeff-lindsay"/><category term="open-source"/><category term="php"/><category term="python"/><category term="scriptlets"/><category term="webhooks"/></entry><entry><title>Curating conversations</title><link href="https://simonwillison.net/2009/Jul/16/curating/#atom-tag" rel="alternate"/><published>2009-07-16T19:34:08+00:00</published><updated>2009-07-16T19:34:08+00:00</updated><id>https://simonwillison.net/2009/Jul/16/curating/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/open-platform/blog/curating-conversations"&gt;Curating conversations&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Chris Thorpe has open-sourced the Guardian’s moderated Twitter backchannel app, for displaying back channels at high profile (and hence high potential for abuse) events. It’s a Python application that runs on App Engine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/chris-thorpe"&gt;chris-thorpe&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;&lt;/p&gt;



</summary><category term="chris-thorpe"/><category term="google-app-engine"/><category term="guardian"/><category term="python"/><category term="twitter"/></entry><entry><title>App Engine outage postmortem</title><link href="https://simonwillison.net/2009/Jul/9/postmortem/#atom-tag" rel="alternate"/><published>2009-07-09T12:49:07+00:00</published><updated>2009-07-09T12:49:07+00:00</updated><id>https://simonwillison.net/2009/Jul/9/postmortem/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://groups.google.com/group/google-appengine/msg/ba95ded980c8c179"&gt;App Engine outage postmortem&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Interesting peek behind the scenes. The primary cause of the error was a bug in a GFS (Google File System) Master server caused by a MapReduce process sending a malformed filehandle, reminiscent of the error which took down S3 last year.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/downtime"&gt;downtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gfs"&gt;gfs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/s3"&gt;s3&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/postmortem"&gt;postmortem&lt;/a&gt;&lt;/p&gt;



</summary><category term="downtime"/><category term="gfs"/><category term="google"/><category term="google-app-engine"/><category term="s3"/><category term="postmortem"/></entry><entry><title>Address Extractor</title><link href="https://simonwillison.net/2009/Jul/1/address/#atom-tag" rel="alternate"/><published>2009-07-01T20:03:11+00:00</published><updated>2009-07-01T20:03:11+00:00</updated><id>https://simonwillison.net/2009/Jul/1/address/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://addressextract.appspot.com/"&gt;Address Extractor&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Running on App Engine, an address extractor web service using code from the EveryBlock open source release.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/addressextractor"&gt;addressextractor&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/everyblock"&gt;everyblock&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="addressextractor"/><category term="everyblock"/><category term="google-app-engine"/><category term="python"/></entry><entry><title>Offline Processing on App Engine: a Look Ahead</title><link href="https://simonwillison.net/2009/May/20/google/#atom-tag" rel="alternate"/><published>2009-05-20T12:40:12+00:00</published><updated>2009-05-20T12:40:12+00:00</updated><id>https://simonwillison.net/2009/May/20/google/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/events/io/sessions/OfflineProcessingAppEngine.html"&gt;Offline Processing on App Engine: a Look Ahead&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A session at IO next week: “App Engine was designed to run request-driven web applications, although this will change in the coming year with the release of a number of offline computing components. In this session, we’ll explore the task queue/executor model of computation and some of the more interesting applications.”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/io"&gt;io&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/message-queues"&gt;message-queues&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/offlineprocessing"&gt;offlineprocessing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/workers"&gt;workers&lt;/a&gt;&lt;/p&gt;



</summary><category term="google"/><category term="google-app-engine"/><category term="io"/><category term="message-queues"/><category term="offlineprocessing"/><category term="workers"/></entry><entry><title>python-sqlparse</title><link href="https://simonwillison.net/2009/Apr/28/pythonsqlparse/#atom-tag" rel="alternate"/><published>2009-04-28T20:25:44+00:00</published><updated>2009-04-28T20:25:44+00:00</updated><id>https://simonwillison.net/2009/Apr/28/pythonsqlparse/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/python-sqlparse/"&gt;python-sqlparse&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Python library for re-identing SQL statements. This could make debugging Django’s generated SQL a whole lot easier. You can try the library out using an App Engine hosted application (complete with an API).

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://stackoverflow.com/questions/798180/algorithm-for-neatly-indenting-sql-statements-python-implementation-would-be-nic"&gt;Stack Overflow&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sql"&gt;sql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlparse"&gt;sqlparse&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="google-app-engine"/><category term="python"/><category term="sql"/><category term="sqlparse"/></entry><entry><title>pubsubhubbub</title><link href="https://simonwillison.net/2009/Apr/20/pubsubhubbub/#atom-tag" rel="alternate"/><published>2009-04-20T18:49:45+00:00</published><updated>2009-04-20T18:49:45+00:00</updated><id>https://simonwillison.net/2009/Apr/20/pubsubhubbub/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/pubsubhubbub/"&gt;pubsubhubbub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
From Brad Fitzpatrick, a simple but clever way of using web hooks (HTTP callbacks) to inform subscribers that an Atom feed has updated in almost real-time—solving the constant polling problem and making it easier for small sites to offer publish-subscribe APIs. Any Atom feed can delegate subscriber updates to a “hub” server. An example hub server implementation is provided running on App Engine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/atom"&gt;atom&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/brad-fitzpatrick"&gt;brad-fitzpatrick&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pubsub"&gt;pubsub&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pubsubhubbub"&gt;pubsubhubbub&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webhooks"&gt;webhooks&lt;/a&gt;&lt;/p&gt;



</summary><category term="atom"/><category term="brad-fitzpatrick"/><category term="google-app-engine"/><category term="pubsub"/><category term="pubsubhubbub"/><category term="python"/><category term="realtime"/><category term="webhooks"/></entry><entry><title>Running Rhino and Helma NG on Google App Engine</title><link href="https://simonwillison.net/2009/Apr/12/running/#atom-tag" rel="alternate"/><published>2009-04-12T12:52:18+00:00</published><updated>2009-04-12T12:52:18+00:00</updated><id>https://simonwillison.net/2009/Apr/12/running/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://dev.helma.org/ng/Running Rhino and Helma NG on Google App Engine/"&gt;Running Rhino and Helma NG on Google App Engine&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Helma NG is a JavaScript web app framework, which now works on App Engine out of the box.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/helma"&gt;helma&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/helmang"&gt;helmang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rhino"&gt;rhino&lt;/a&gt;&lt;/p&gt;



</summary><category term="google"/><category term="google-app-engine"/><category term="helma"/><category term="helmang"/><category term="javascript"/><category term="rhino"/></entry><entry><title>Using Scala with Google App Engine</title><link href="https://simonwillison.net/2009/Apr/11/print/#atom-tag" rel="alternate"/><published>2009-04-11T15:28:48+00:00</published><updated>2009-04-11T15:28:48+00:00</updated><id>https://simonwillison.net/2009/Apr/11/print/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.riffraff.info/2009/4/9/using-scala-with-google-app-engine"&gt;Using Scala with Google App Engine&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Scala works, but I haven’t seen confirmation on actors yet (which are likely to break due to their dependency on threads).


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scala"&gt;scala&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/threads"&gt;threads&lt;/a&gt;&lt;/p&gt;



</summary><category term="google"/><category term="google-app-engine"/><category term="java"/><category term="scala"/><category term="threads"/></entry><entry><title>Dynamic languages on Google App Engine - an overview</title><link href="https://simonwillison.net/2009/Apr/8/dynamic/#atom-tag" rel="alternate"/><published>2009-04-08T14:08:29+00:00</published><updated>2009-04-08T14:08:29+00:00</updated><id>https://simonwillison.net/2009/Apr/8/dynamic/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://olabini.com/blog/2009/04/dynamic-languages-on-google-app-engine-an-overview/"&gt;Dynamic languages on Google App Engine - an overview&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ola Bini’s notes on exploring the new Java support for App Engine with the aim of getting JVM dynamic languages such as JRuby running. Restrictions include a complete lack of threads (which will make it hard to get Scala up and running), but JRuby trunk now works without modification.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jruby"&gt;jruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jvm"&gt;jvm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/olabini"&gt;olabini&lt;/a&gt;&lt;/p&gt;



</summary><category term="google"/><category term="google-app-engine"/><category term="java"/><category term="jruby"/><category term="jvm"/><category term="olabini"/></entry><entry><title>App Engine: Scheduled Tasks With Cron</title><link href="https://simonwillison.net/2009/Apr/8/cron/#atom-tag" rel="alternate"/><published>2009-04-08T14:04:45+00:00</published><updated>2009-04-08T14:04:45+00:00</updated><id>https://simonwillison.net/2009/Apr/8/cron/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/appengine/docs/python/config/cron.html"&gt;App Engine: Scheduled Tasks With Cron&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Cron tasks simply hit a URL on your application, and can be run as frequently as once a minute. They made up their own syntax, which much nicer than traditional unix cron.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cron"&gt;cron&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;&lt;/p&gt;



</summary><category term="cron"/><category term="google"/><category term="google-app-engine"/></entry><entry><title>django-gae2django</title><link href="https://simonwillison.net/2009/Mar/9/gae2django/#atom-tag" rel="alternate"/><published>2009-03-09T15:37:51+00:00</published><updated>2009-03-09T15:37:51+00:00</updated><id>https://simonwillison.net/2009/Mar/9/gae2django/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/django-gae2django/"&gt;django-gae2django&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
An implementation of the Google App Engine API (datastore, memcache, urlfetch, users and mail) that runs on Django, allowing you to take an existing application written for App Engine and deploy it on your own server on top of Django.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gae2django"&gt;gae2django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="gae2django"/><category term="google"/><category term="google-app-engine"/></entry><entry><title>Google App Engine 1.1.9 boosts capacity and compatibility</title><link href="https://simonwillison.net/2009/Feb/16/google/#atom-tag" rel="alternate"/><published>2009-02-16T20:35:23+00:00</published><updated>2009-02-16T20:35:23+00:00</updated><id>https://simonwillison.net/2009/Feb/16/google/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.niallkennedy.com/blog/2009/02/google-app-engine-119.html"&gt;Google App Engine 1.1.9 boosts capacity and compatibility&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Niall summarises the recent changes to App Engine. urllib and urllib2 support plus massively increased upload limits and request duration quotas will make it a whole lot easier to deploy serious projects on the platform.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/niall-kennedy"&gt;niall-kennedy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/urllib"&gt;urllib&lt;/a&gt;&lt;/p&gt;



</summary><category term="google"/><category term="google-app-engine"/><category term="niall-kennedy"/><category term="urllib"/></entry><entry><title>Yahoo! Query Language thoughts</title><link href="https://simonwillison.net/2009/Feb/9/yahoo/#atom-tag" rel="alternate"/><published>2009-02-09T22:29:21+00:00</published><updated>2009-02-09T22:29:21+00:00</updated><id>https://simonwillison.net/2009/Feb/9/yahoo/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://snarfed.org/space/yql yahoo query language thoughts"&gt;Yahoo! Query Language thoughts&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
An engineer on Google’s App Engine provides an expert review of Yahoo!’s YQL. I found this more useful than the official documentation.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yahoo"&gt;yahoo&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yql"&gt;yql&lt;/a&gt;&lt;/p&gt;



</summary><category term="google"/><category term="google-app-engine"/><category term="yahoo"/><category term="yql"/></entry><entry><title>Google App Engine: A roadmap update!</title><link href="https://simonwillison.net/2009/Feb/9/xmpp/#atom-tag" rel="alternate"/><published>2009-02-09T19:00:38+00:00</published><updated>2009-02-09T19:00:38+00:00</updated><id>https://simonwillison.net/2009/Feb/9/xmpp/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://googleappengine.blogspot.com/2009/02/roadmap-update.html"&gt;Google App Engine: A roadmap update!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Receiving e-mail, background tasks and XMPP. I predict a bunch of sites will start building small parts of their overall functionality on App Engine when some of these features land (much easier than hosting your own custom XMPP server).


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cloud-computing"&gt;cloud-computing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/email"&gt;email&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xmpp"&gt;xmpp&lt;/a&gt;&lt;/p&gt;



</summary><category term="cloud-computing"/><category term="email"/><category term="google"/><category term="google-app-engine"/><category term="python"/><category term="xmpp"/></entry><entry><title>Sharding Counters on Google App Engine</title><link href="https://simonwillison.net/2009/Jan/27/sharding/#atom-tag" rel="alternate"/><published>2009-01-27T20:27:41+00:00</published><updated>2009-01-27T20:27:41+00:00</updated><id>https://simonwillison.net/2009/Jan/27/sharding/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/appengine/articles/sharding_counters.html"&gt;Sharding Counters on Google App Engine&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“While the datastore for App Engine scales to support a huge number of entities it is important to note that you can only expect to update any single entity, or entity-group, about five times a second”. This article explains a technique for sharding writes across multiple counters in detail, including a way to keep a memcache counter updated at the same time for faster reads.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/caching"&gt;caching&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/memcache"&gt;memcache&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sharding"&gt;sharding&lt;/a&gt;&lt;/p&gt;



</summary><category term="caching"/><category term="google"/><category term="google-app-engine"/><category term="memcache"/><category term="python"/><category term="scaling"/><category term="sharding"/></entry><entry><title>Why Google App Engine is broken and what Google must do to fix it</title><link href="https://simonwillison.net/2008/Oct/3/google/#atom-tag" rel="alternate"/><published>2008-10-03T22:00:43+00:00</published><updated>2008-10-03T22:00:43+00:00</updated><id>https://simonwillison.net/2008/Oct/3/google/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://aralbalkan.com/1504"&gt;Why Google App Engine is broken and what Google must do to fix it&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Aral Balkan describes a number of critical issues with App Engine. If you’re considering building something serious on it you need to read this article; I’ve run in to several of these problems myself just running toy projects on the platform. Here’s hoping they get addressed in the near future.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/aral-balkan"&gt;aral-balkan&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scalability"&gt;scalability&lt;/a&gt;&lt;/p&gt;



</summary><category term="aral-balkan"/><category term="google"/><category term="google-app-engine"/><category term="scalability"/></entry><entry><title>html-whitelist</title><link href="https://simonwillison.net/2008/Sep/24/htmlwhitelist/#atom-tag" rel="alternate"/><published>2008-09-24T23:54:23+00:00</published><updated>2008-09-24T23:54:23+00:00</updated><id>https://simonwillison.net/2008/Sep/24/htmlwhitelist/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://html-whitelist.appspot.com/"&gt;html-whitelist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
DeWitt Clinton’s web service wrapper aroud the html5lib HTML sanitiser, hosted on AppEngine.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://friendfeed.com/e/d943d089-e0d3-4344-8e83-1a52a71e82c4/html-whitelist/"&gt;DeWitt Clinton&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/dewitt-clinton"&gt;dewitt-clinton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5lib"&gt;html5lib&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sanitisation"&gt;sanitisation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;&lt;/p&gt;



</summary><category term="dewitt-clinton"/><category term="google-app-engine"/><category term="html5"/><category term="html5lib"/><category term="sanitisation"/><category term="security"/></entry><entry><title>We haven't changed the name of the conference to "Over Quota"</title><link href="https://simonwillison.net/2008/Sep/3/we/#atom-tag" rel="alternate"/><published>2008-09-03T13:37:50+00:00</published><updated>2008-09-03T13:37:50+00:00</updated><id>https://simonwillison.net/2008/Sep/3/we/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://aralbalkan.com/1471"&gt;We haven&amp;#x27;t changed the name of the conference to &amp;quot;Over Quota&amp;quot;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Aral is having intermittent App Engine quota problems, which are proving impossible to debug. I had a similar problem with an App Engine app a while ago—the quota / debugging story really needs fixing.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/aral-balkan"&gt;aral-balkan&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;&lt;/p&gt;



</summary><category term="aral-balkan"/><category term="google"/><category term="google-app-engine"/></entry><entry><title>json-tinyurl</title><link href="https://simonwillison.net/2008/Aug/27/jsontinyurl/#atom-tag" rel="alternate"/><published>2008-08-27T10:58:37+00:00</published><updated>2008-08-27T10:58:37+00:00</updated><id>https://simonwillison.net/2008/Aug/27/jsontinyurl/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://json-tinyurl.appspot.com/"&gt;json-tinyurl&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Because sometimes you want to be able to create a shorter version of a URL directly from JavaScript without hosting your own server-side proxy.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsonp"&gt;jsonp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsontinyurl"&gt;jsontinyurl&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tinyurl"&gt;tinyurl&lt;/a&gt;&lt;/p&gt;



</summary><category term="google-app-engine"/><category term="javascript"/><category term="json"/><category term="jsonp"/><category term="jsontinyurl"/><category term="projects"/><category term="tinyurl"/></entry><entry><title>IMG-2-JSON</title><link href="https://simonwillison.net/2008/Aug/12/imgjson/#atom-tag" rel="alternate"/><published>2008-08-12T09:43:00+00:00</published><updated>2008-08-12T09:43:00+00:00</updated><id>https://simonwillison.net/2008/Aug/12/imgjson/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://img2json.appspot.com/"&gt;IMG-2-JSON&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’m not the only person deploying simple JSON-P APIs on App Engine: Adam Burmister’s tool extracts dimension, mimetype and EXIF metadata when provided the URL to an image file.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://ajaxian.com/archives/img2json-get-your-image-metadata-via-app-engine"&gt;Ajaxian&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/adam-burmister"&gt;adam-burmister&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/api"&gt;api&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/exif"&gt;exif&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/img2json"&gt;img2json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsonp"&gt;jsonp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mimetype"&gt;mimetype&lt;/a&gt;&lt;/p&gt;



</summary><category term="adam-burmister"/><category term="api"/><category term="exif"/><category term="google-app-engine"/><category term="img2json"/><category term="json"/><category term="jsonp"/><category term="mimetype"/></entry><entry><title>json-head</title><link href="https://simonwillison.net/2008/Jul/29/jsonhead/#atom-tag" rel="alternate"/><published>2008-07-29T15:41:57+00:00</published><updated>2008-07-29T15:41:57+00:00</updated><id>https://simonwillison.net/2008/Jul/29/jsonhead/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://json-head.appspot.com/"&gt;json-head&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’ve deployed another App Engine mini-app, which provides a JSON-P API for running HEAD requests against an arbitrary URL (useful for checking things like Content-Length and Content-Type headers and whether a URL returns 200). App Engine’s urlfetch limitations mean it can only deal with port 80 and 443 requests. 


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsonhead"&gt;jsonhead&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsonp"&gt;jsonp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;&lt;/p&gt;



</summary><category term="google-app-engine"/><category term="json"/><category term="jsonhead"/><category term="jsonp"/><category term="projects"/></entry><entry><title>How-to: Full-text search in Google App Engine</title><link href="https://simonwillison.net/2008/Jun/27/app/#atom-tag" rel="alternate"/><published>2008-06-27T08:25:35+00:00</published><updated>2008-06-27T08:25:35+00:00</updated><id>https://simonwillison.net/2008/Jun/27/app/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://appengineguy.com/2008/06/how-to-full-text-search-in-google-app.html"&gt;How-to: Full-text search in Google App Engine&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Use search.SearchableModel instead of db.Model—it’s pretty rough at the moment which is probably why it’s still undocumented.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/full-text-search"&gt;full-text-search&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/search"&gt;search&lt;/a&gt;&lt;/p&gt;



</summary><category term="full-text-search"/><category term="google-app-engine"/><category term="python"/><category term="search"/></entry></feed>