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 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

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.