I have worked on a fair number of projects, and here is an (incomplete) list.


The DMOJ is an online judge developed by me and Tudor. It is a distributed system with the capability of grading massive amounts of submissions simultaneously, as would be required by large programming contests. Some notable features include:

  • Support for IO-based, interactive, and signature-graded tasks.
  • Submission in over 50 programming languages.
  • Live submission status.
  • Powerful administration interface.
  • Secure and powerful sandbox, permitting full control over the user-submitted program.

For more details, see the GitHub project for the site and judging backend.

BGP Networking

Since December of 2022, I’ve started to run my own BGP network—AS200351—for experimental and learning purposes. For more information, see as200351.net.

Open Source Work

I am currently one of the developers for the Looking Glass project, a display solution for virtual machines with GPU passthrough. My work focuses on improving Wayland and Windows support.

I’ve contributed to many open source projects, the most significant of which include emscripten and LLVM. Perhaps the most interesting part of this was porting UndefinedBehaviorSanitizer, LeakSanitizer, and AddressSanitizer to run on WebAssembly emitted by emscripten.

I’ve also made minor contributions to various other open source projects, addressing some of the bugs I ran into, but they are not significant enough to be listed here.

Smaller Projects

Screenshot of correcthorse.pw
punyverse Preview
Python simulation of the solar system, with planets, select moons, asteroids, and man-made satellites.


pip install punyverse
        # Installation finished. Run:
2048 Preview
My version of 2048 game, with multi-instance support, restored from an old high school project.


Run pip install 2048.

Run 2048 to play the game. Enjoy.

On Windows, you can run 2048w to run without the console window.

Resetting the game

If for some reason, the data files get corrupted or you want to clear the high score...

  • On Windows, delete C:\Users\<yourname>\AppData\Roaming\Quantum\2048.
  • On macOS, delete /Users/<yourname>/Library/Application Support/2048.
  • On Linux, delete /home/<yourname>/.local/share/2048.
MusicKeyboard Preview
Turns your computer keyboard into one for music. Easily play any song to your heart's content with any MIDI instrument.

The latest download is available on Jenkins (direct link).

More features include:

  • Full chording support in program, but due to the keyboard chording limitations, only 3 - 7 keys may be pressed simultaneously, so your milage may vary.
  • Multitouch with hardware support.
  • Recording music into a MIDI file.
  • Key signature changing.
  • Different keyboard layouts.
  • Using Windows's builtin beeping functionality when MIDI is unavailable.
Zalgo Preview
A Windows application converting your text to and from Zalgo, Greek, Cyrillic, between Unicode NFC and NFD, and X-SAMPA.

The latest download is available on Jenkins (direct link).


  • Zalgo encoding and decoding,
  • Customizable Zalgo level.
  • Control Unicode diacritics used.
  • Load and save potentially large Zalgo files directly.
  • Quick trascription between Latin, Cyrillic, and Greek.
  • Convert X-SAMPA into IPA.
  • Convert between Unicode normalization format C and D.
clickkeys preview
A tool to use keyboard buttons to click the mouse, for when your mouse button is broken.

Sometimes, your mouse button does not register when clicked, and sometimes it registers as multiple separate clicks. This can be annoying, but you may not be able to replace it right away. This program solves the issue.

The latest download is available on GitHub.


  • A press of the pause/break key is translated into a single instaneous click of the primary button (usually left).
    • This is helpful to click without stopping the mouse.
    • +Alt+Shift+M can be used to toggle this feature.
  • The context menu key press/release is directly translated into press/release of the primary mouse button.
    • This is helpful for dragging.
    • Alt+Shift+M can be used to toggle this feature.
  • Ctrl+Alt+Shift+M can be used to toggle this feature.