Jake Donham


Hello! I am a computer programmer living in San Francisco. I have two kids and a steady job.

email: jake@donham.org | Twitter: @jakedonham | Github: @jaked

New stuff

Technical Difficulties, blog (2021-now)

Mostly programming? Maybe some stuff about bikes too, we'll see.

Programmable Matter, a dynamic data-driven document development environment (2019-now)

A live-coding environment for making documents; an experimental tool for thought; a place to work out some ideas about "casual computing".

Leverage vs. Autonomy in a Large Software System, Strange Loop (2018)

Describes Strato, an internal platform-as-a-service built at Twitter, and some of the technical and organizational pressures that motivated its development.

A Domain-Specific Language for Microservices talk and paper, Scala Symposium (2018)

Describes the design and implementation of a simple Scala-like language used in Strato (see above), with a somewhat interesting type system.

Stitch, a Library for Composing RPC Services, Scala By the Bay / Twitter University (2014)

Describes Stitch, a Scala library for concurrent composition similar to Haxl. Stitch was built at Twitter, and Strato (see above) is based on it. (These are the pretty much the same talk; the second one went better.)

Old stuff

A Consistent Semantics of Self-Adjusting Computation, Journal of Functional Programming (2013)

A proof of correctness for an idealized version of Acar's self-adjusting computation, with a Twelf formalization.

Better AJAX UIs with Functional Reactive Programming, Jane St. Capital and Twitter (2010)

Overview of froc, a system for functional reactive programming in OCaml. The slides are a froc program: you can interact with UI elements, and use arrow keys to navigate.

froc, a library for functional reactive programming in OCaml (2008-2010)

Based on Acar's self-adjusting computation; works with ocamljs for FRP web programming. See Sudoku in ocamljs, part 3: functional reactive programming for an example, and How froc works for an overview of the implementation. This probably still works in current OCaml versions, but see react or Incremental for actively-maintained alternatives.

A Natural Platform for Artificial Intelligence, SIGBOVIK (2010)

A goof, but serious.

Ambassador to the Computers, mostly OCaml blog (2008-2011)

Most of this is no longer interesting even to OCaml people. But this mini-series on implementing logic programming in Scala is fun (parts 1, 2, and 3); and Mixing monadic and direct-style code with delimited continuations is sort of a mind-bender.

Reading Camlp4, blog series about the Camlp4 preprocessor for OCaml (2008-2010)

Camlp4 is a cool code preprocessor with an extensible parser. I spent a bunch of time trying to figure out how it works by reading the code and experimenting, which was fun!

From OCaml to Javascript at Skydeck, Commercial Users of Functional Programming (2008)

Overview of ocamljs, a Javascript backend for OCaml.

ocamljs, a Javascript backend for OCaml (2007-2010)

Translates OCaml's "lambda" intermediate language to Javascript. It's a set of compiler patches, so will not work with current versions of OCaml; see js_of_ocaml or Bucklescript for actively-maintained alternatives.

Fun with Twelf, Bay Area Functional Programmers (2008)

Introduction to Twelf, a dependently-typed logic programming system useful for writing proofs about programming languages.

Compacting, Composting Garbage Collection, SIGBOVIK (2007)

A goof.

Combining SAT Methods with Non-Clausal Decision Heuristics, PDPAR (2004)

A good example of Emery Berger's "eyeball statistics" (see Performance Matters) although I did not know it at the time.

Hack Technology and Matte-Black Technology in Terminator 2 (1994)

A badly-written college paper. But I think all the time about technology that empowers people and technology that oppresses them. See also: Authoritarian and Democratic Technics (Lewis Mumford, 1964), Tools for Conviviality (Ivan Illich, 1975), and The Real World of Technology (Ursula Frankin, 1989).