Bill Katz

My Brain

An occasionally updated repository of thoughts, past work, and links.

Articles tagged with 'Software'

Simple Full Text Search for App Engine

Revised 2009-07-12 to include addition of stemming, multi-word exact matching, multiple search entities, and stowing of designated parent titles in index entity keys.

After rewatching Brett Slatkin's Building Scalable, Complex Apps talk at Google I/O, I came across the old SearchableModel module and realized it could be greatly improved by using the "Relation Index" technique described in the talk.  So after a day of hacking, I ...

Addressing App Engine Lock-in

One of the biggest criticisms of Google App Engine is the lock-in factor.  Although the App Engine SDK is open source (Apache 2.0 license) and you can use Django to make your app more portable, there's no easy way to port your App Engine code to Amazon EC2 without creating your own datastore, etc.

AppScale addresses this concern.  It's a cool looking project out of ...

Git: Commit, Push, Amend, Push Error

I'm a fan of the git version control system, but distributed revision control forces you to think a lot more.  Today, I ran into a gotcha that I'm documenting to help the next poor schlep.

I'm the only developer working on my web projects, so unless I'm merging changes across forked projects, merge conflicts don't rear their ugly head.  I like using dropbox ...

Fault-tolerant counters for App Engine

The datastore in Google App Engine can occasionally throw an error.  It might be a timeout, quota violation, a result of maintenance (CapabilityDisabledError), or other exceptions thrown by the db and apiproxy_errors module.

So how do you gracefully handle datastore failures?  You could just inform the user to try again later.  Another approach is to use the memcache API and build a buffer for failed datastore puts.  That ...

A SearchableModel for App Engine

SearchableModel, a nice little extension to db.Model, can be found in the App Engine SDK.  It's a lite full-text index that can provide some search capability to your app.  Using it is simple.  When declaring your model class replace db.Model with search.SearchableModel:

from google.appengine.ext import search
class Article(search.SearchableModel):
 some_searchable_prop = db.StringProperty()
 another_big_searchable = db.TextProperty()
 ...

Then in your handler, use the ...