Personal Public Projects

These are projects that I've done personally, either in my free time or as part of my PhD. This list does not include things I've done professionally, most of which is not publicly available. Also it doesn't include most of my toy or pedagogical projects, as I've tried to list only things that are relatively useful or interesting.

Major Projects

Rash - next-generation shell language embedded in Racket.

Xsmith - a DSL for writing fuzzers for programming languages. On a Gitlab instance instead of Github.

Chido Parse - implementation of my Parsing With Delimited Continuations algorithm. World's most expressive parsing system. But... not the fastest. It needs to be approximately a factor of 10 faster to start being practically useful. I have a follow-up system planned that should have significantly faster performance by restricting the possible ambiguity. This will reduce some theoretical expressiveness, but will not seriously harm expressiveness in practice for programming language parsers. I'm not sure when I'll find time to implement it, though.

Minor Projects

Rackterm - Terminal emulator in Racket. It was my first Racket project, done as an exercise to learn Racket. It's almost fully featured, but it renders very slowly. Some day I would like to improve it a bit, turn it into a more flexible library, and use the same code for a terminal multiplexer (a la tmux) and a graphical terminal with an opengl renderer. But it's pretty low priority at this point.

The Unicoder - A unicode input method. Really it's a prototype that's slower than I'd like, but it's the style of unicode (and macro) input that I'd like to use and I haven't seen another one that is quite similar. At any rate it works well enough that I use it, but it's slow enough to be annoying. I think it really needs to be integrated with the window manager for better performance.

I've written many Racket libraries. Rather than list them here, I'll just link to the searchable Racket Package Catalog.

I've written a couple of useful Emacs packages: Repeatable Motion and On Parens.

Rootgit Tools is basically a hacky cousin to GNU Stow. I wrote it to manage system configurations stored in git repositories where things needed to be linked in to /etc and other places. It lacks some features of Stow, but has some features that Stow doesn't. It's implemented in Bash so I can use it with essentially no dependencies to get a system set up.

Keycount shows just how easy it is to write a keylogger for X11. But this one is pro-social! I wrote it to track frequency of key usage, including bigraph and trigraph frequency. It's a pretty hacky tool that I made by gutting someone else's X11 program, but it got the job done. At this point I've collected several years' worth of keyboard usage data. But ultimately it's not the most important data/idea that will go into designing my new keyboard layout... when I eventually get around to making it.

I wrote several Zsh plugins at one point. Zaw is the coolest Zsh plugin I worked on (I maintained it but wasn't the original author). These two are simply sources for use with Zaw. zsh-cdr is really just a thin wrapper around a Zsh built-in functionality, the package just provides quick setup. zsh-saneopt was an attempt to define a better baseline of what zsh options should be, but ultimately Zsh and all Bourne/Posix derived shells are just insane languages. zsh-snippets is basically put together from a collection of snippets for creating snippets accross the web put together into a package for easy use. Megaprompt is my Zsh prompt. It has a couple interesting features I haven't seen anywhere else, but it's probably not as good for people to just pick up as some other Zsh prompt packages.

My Github profile has various other projects not mentioned here. Little toys, school projects, incomplete stuff, etc. These mostly don't pass the bar of being useful or interesting.