Writing
Prose, on various topics.
ECMA-262
The JavaScript specification. I have been contributing to the development of the language since 2015 and serving as editor of the specification since 2020.
More details
In pursuit of filling out some of the missing basic functionality in the standard library, I championed the addition of Object.fromEntries, Set union and friends, and native base64 support, among others.
As part of my editorship I took over maintainence of ecmarkup, the tool used to produce the specification. Among other things, I added support for multipage builds and wrote a prettier-syle auto-formatter.
With a co-editor, I reorganized certain kinds of algorithm to make them easier to follow.
I've been trying to remove inconsistencies and underspecifications more generally. For example, I championed a proposal to nail down property enumeration order in common cases. I now have the second most commits to the spec's repository on GitHub, although that does not capture contributions others made during the two decades when the spec was a Word document.
I also built a web-based runner for test262, the official test suite for JavaScript implementations.
Shift-AST tools for JS
On behalf of my employer, I've substantially contributed to our suite of open-source JS tooling. Not as mature as Babel, but nicer in several ways. Also available in Java, unlike Babel. I'm particularly fond of shift-shrink-js, an automatic test case minimizer for JavaScript ASTs.
z3-solver on npm
I wrote and contributed TypeScript bindings for the Z3 theorem prover. It automatically derives TypeScript types from the C API, adds appropriate glue code, and links against the library compiled to a WebAssembly artifact. Getting this working involved debugging some annoying issues with threads in emscripten.
transcribe-to-gdocs
A tool to write live transcriptions of your audio input to a Google Doc so they can be fixed up by a human in real time. (Other transcription tools do not output to a human-editable document in real time.) Useful for taking precise notes at meetings, if you have dedicated notetakers. Would be a lot more useful if Google's Cloud Speech API was more accurate, but it's better than nothing.
matrix-archive-bot
Makes human-readable logs for Matrix channels. I also host logs for web-platform matrix channels.
Logs are searchable despite being hosted on Github Pages, which I'm pretty pleased with.
slack-archive-bot
Logs for Slack. Text based, but human readable.
reddit-thread
Loads the full comments page for a reddit thread without having to click "load more" fifty times.
MenuBarVolume
A very small macOS app to restore the old functionality of the volume indicator in the menu bar.
Unminify
A general-purpose JavaScript unminifier and deobfuscator.
Salvation
My employer's open-source Java library for parsing and manipulating Content Security Policy headers (CSP), which I rewrote for correctness and simplicity.
dfa-lib and cfgrammar-tool
Tools for working with regular and context-free languages in JS. These were mainly aimed at improving the experience in CS103 at Stanford when I was a TA there, both for students and, by automating certain grading tasks, for teachers. The tools remained in use for several years after I left.
Using dfa-lib I built a tool for checking equivalence of regular expressions, including giving counterexamples when the expressions are not equivalent.
Minor contributions to other people's projects
I try to make improvements to the tools I use when I can reasonably do so. For example, I've
- written a couple dozen tweaks and fixes for Prettier, including fixing one of the longest-standing issues (printing template strings on a single line)
- contributed to the design of Node's built-in argument parser
parseArgs
- made small UX improvements to TubeArchivist and its browser extension
- added TypeScript types for various built-in methods, and improved some diagnostics
- made an online playground for wasm-tools
- gotten a minor convenience method added to
fetch
responses - made minor tweaks to InvokeAI and llama.cpp
Work stuff
I mostly can't talk in detail about projects I've done for work except the open source ones mentioned above, but I do have a patent from my intern project, an obfuscating JavaScript VM which is itself written in JavaScript.