My name is James, and I work on the Firefox Developer Tools. I like to create things and write about technology.

Exploring Continuations: Resumable Exceptions

June 08, 2016

Today we're going to implement resumable exceptions. Common Lisp is known for this feature. Few other languages implement them, but I found an implementation for OCaml by (unsurprisingly) Kiselyov.

Implementing a Stepping Debugger in JavaScript

May 26, 2016

In my previous post I introduced Unwinder, a project which implements continuations (and stepping debuggers) in JavaScript. In this article I explain how the compiler is implemented.

What’s in a Continuation

May 17, 2016

Many people have heard the word “continuation” because it has something to do with node’s callback hell. I don’t think most people understand what continuations really are, though. They aren’t just a callback function used by async functions.

Two Weird Tricks with Redux

April 13, 2016

I have now used Redux pretty extensively in multiple projects by now, especially the Firefox Developer Tools. While I think it breaks down in a few specific scenarios, generally I think it holds up well in complex apps. Certainly nothing is perfect, and the good news is when you want to do something outside of the normal workflow, it’s not hard.

RIP Over-Engineered Blog

April 01, 2016

It’s been 6 months since my last blog rewrite, so it’s time for another one. This time, let’s subtract.


  • LLJS fork of LLJS that compiles to asm.js
  • nunjucks powerful templating system for javascript
  • outlet simple Lisp languange that compiles to javascript
  • dcpu-lisp static Lisp that compiles to DCPU-16 assembly code
  • shade terrible WebGL graphics engine
  • octoshot multiplayer WebGL 3d first person shooter
  • css-animations.js easily use CSS3 keyframe animations from javascript
  • dom3d 3d objects with purely 2d CSS transforms