Jake Donham

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

Reach me


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.

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.


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 worked by reading the code and experimenting, which was fun!

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) and Tools for Conviviality (Ivan Illich, 1975).

Talks and Papers

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 (an internal platform-as-a-service built at Twitter), with a somewhat interesting type system.

An Applicative Functor for Composing RPC Services, Scala By the Bay (2014)

Stitch, a Library for Composing RPC Services, 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.)

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.

A Natural Platform for Artificial Intelligence, SIGBOVIK (2010)

A goof, but serious.

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

Overview of ocamljs, a Javascript backend for OCaml.

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, Pragmatics of Decision Procedures (2004)

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