about:bakkot

Some stuff I've worked on. More organized than my Github profile, maybe.

You can reach me on Twitter as @bakkoting.

In no particular order.

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.