Writing
Prose, on various topics.
ECMA-262
The JavaScript specification. I have been serving as editor since 2020.
More details
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.
In pursuit of filling out some of the missing basic functionality in the standard library, I championed the addition of Object.fromEntries.
I also built a web-based runner for the 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.
timer.bakkot.com
A web page which shows a timer without any other cruft. Not remotely technically interesting, but still useful.
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.