Dan Sanderson



Hi, I’m Dan. I’m a software engineer and writer in Seattle, Washington, USA. I currently work at Google.


picotool, a Python library for PICO-8

picotool is a Python library for manipulating game "cartridge" files for the PICO-8 fantasy console. The library includes a complete Lua parser written from scratch.


Programming Google App Engine

Programming Google App Engine is a book I wrote about Google App Engine, the scalable web application hosting service. Originally written as a single volume, I am currently (2014) updating the text to be published as multiple volumes, one for Java and one for Python. The 2nd edition was published in October 2012 by O’Reilly Media. The 1st edition, published in 2009, was translated into Japanese.

From the back cover of the 2nd edition:

Google App Engine makes it easy to create a web application that can serve millions of people as easily as serving hundreds, with minimal up-front investment. With Programming Google App Engine, Google engineer Dan Sanderson provides practical guidance for designing and developing your application on Google’s vast infrastructure, using App Engine’s scalable services and simple development model.

Through clear and concise instructions, you’ll learn how to get the most out of App Engine’s nearly unlimited computing power. This second edition is fully updated and expanded to cover Python 2.7 and Java 6 support, multithreading, asynchronous service APIs, and the use of frameworks such as Django 1.3 and webapp2.

IFComp 2014 Prize Game

I donated several prizes to Interactive Fiction Competition 2014, and hid a puzzle game in each prize.

Lost Cat

Lost Cat, a small game I made for the Ludum Dare 29 game jam. The jam version was written in Python, and runs in a terminal window.


Scriv2DocBook is a simple workflow for writing technical books in Scrivener, the text composition application from Literature & Latte. The end result is DocBook XML suitable for delivery to a publisher, or rendering into other formats using DocBook tools.

Scriv2DocBook consists of:

  • a method for composing a technical book as a Scrivener project
  • a tool for exporting such a project as DocBook XML
  • a tool for importing a subset of DocBook XML back into Scrivener

The tools are tuned especially for writing for O’Reilly Media, but the result is standard DocBook.


Cologo [2008-2013] was an experimental collaborative computer programming and learning environment based on Google Spreadsheets. Students wrote programs in a significant subset of Berkeley Logo, using a novel cell-based syntax in a Google Spreadsheet. Programs manipulated a turtle graphics environment built as a Spreadsheets gadget, which could also be embedded in a web page. The widget featured a command prompt and pop-up documentation.

Google discontinued spreadsheet gadgets in 2013, so the collaborative features no longer function. You can still visit the site, enter commands into the gadget, and see example sheets.


BrainLog was my weblog from 1999 to 2011. Since 2011 I have been link blogging at Google+, so I have retired the “BrainLog” name and archives. I continue to post articles to this website, just not to the older blog.


BlogTracker [2000-2004] was a web-based utility for reading weblogs, which presented a list of your favorite sites ordered by their most recent update. Originally known as “The Subhonker Filter” (an inside joke), BlogTracker was the first public configurable view of aggregated Weblogs.com “ping” data, a standard for federated update notifications. Soon after, the popularity of blogs surged, and update broadcasts were replaced with content syndication and feed readers.


Builderoo [2004-2007] was a text processing plugin for the Movable Type blogging engine that allowed you to call out to special-purpose processors for regions of text. The main intent was to enable server-side build-time evaluation of LaTeX (mathematical notation), Lilypond (music notation), and Graphviz (data visualization) markup languages inline with blog entry text edited in the Movable Type interface. The bracketing syntax is meant to be robust enough to support most other text markup applications, protect against conflicting syntaxes, and allow nested regions.

Today, it is more common to use JavaScript-based client-side real-time methods for rendering mathematical equations (MathJax) and data visualizations (D3.js), or to produce static images manually. A modern templating system such as Jinja2 could be extended to perform a similar function as Builderoo in a text build system.