Projects

I'm a co-founder of the DMOJ, an open-source online programming contest platform.
I also maintain a bunch of projects on my Github profile.

I've worked on many dozens of projects over the years, so I've created this page in an attempt to catalog at least some of them.

DMOJ: Modern Online Judge
Canada's largest online judge, hosting over 1000 problems and supporting 60+ runtimes.
Emulator.NES
A cross-platform C# emulator for Nintendo Entertainment System (NES) hardware.
Nitrous Emulator
A high-performance Java emulator for Nintendo Gameboy and Gameboy Color hardware.
T258 CPU
A RISC CPU implemented in Verilog, as well as a compilation toolchain for it.
TapKey!
Biometric 3-factor authentication device for online services. Hack the North '18 winner.
withhost
Linux/FreeBSD utility for overriding DNS address lookup responses.
Space Torus
Flying through tori in a scenic universe, the goal is to be able to pass through all tori. Rendered using OpenGL, from Python.
JAVI
Java Audio/Video Interface; fluent API for interfacing with native FFmpeg bindings.
slack-mathoid
Math rendering as a Slack integration via Wikimedia Mathoid.
type!mania
An osu!-like speed typing game, complete with flashy graphics!
Roller Coaster Simulator
A 2D roller coaster editor and physics simulation.
java-sandbox-agent
Policy-based JVM sandbox with instrumentation support, optimized for online judges.
Fancy Hangman
3D modeling and colors... in a terminal!
OCR
A multi-character handwritten character recognition app utilising a Kohonen network and Zhang-Suen thinning.
Old Slack Emojis
Slack client patch to bring back Apple-style emojis to new Slack clients.
Texoid
Lightweight Python Tornado server for rendering LaTeX documents to SVG and PNG.
Amber IDE
A fully-featured IDE for streamlined 2D/3D tile-based game development and scripting.
Runtime Swing Debugger
Attaches to a Swing/AWT process and displays its component hierarchy as a tree to easily debug layout issues.
ASM Late-Binding Agent
A demo late binding Java agent utilising ASM for transforming classes.
Black Hole Simulator
A time dilation physics simulation: fly a rocket around a black hole!.
GRAPHic Traveler
Visualization for various graph traversal algorithms.
sphere2cube
Python script to map an equirectangular (cylindrical projection, skysphere) map into 6 cube (cubemap, skybox) faces.
cube2sphere
Python script to map 6 cube (cubemap, skybox) faces into an equirectangular (cylindrical projection, skysphere) map.
XyEngine
Java OpenGL engine implementing normal/specular/parallax mapping, antialiasing, reflections, bloom and more.
BNSBoost
Import address table redirect injector for NCSoft's Blade and Soul, enabling the running of patched game files.
Pycraft
A partial Python Minecraft client implementation. Multiprocessed, rendering using OpenGL.
Visual Cellular Automata
Visualization for cellular automata.
Xwing Layout Toolkit
Takes a JavaScript-enabled HTML-like version of your layout and generates your desired window.
Planet Gravity Sim
Simple interactive n-body gravity simulation... with graphics!
Typing-B
A fun typing game, partly meant to demo some Swing/Java2D tricks.
WebGL Photosphere Viewer
A Dart + WebGL photosphere viewer webapp.
Java Bytecode Library
A high-performance modular library for JVM bytecode modification, implemented in Java.
Jrofiler
Lightweight cProfile-like profiling for Java programs with performance problems.
UnicodeTable
A Unicode search engine bundled in an intuitive UI, for when Unicode makes you feel small.
Jalgo
Java Unicode text polluter. H̙̬͋̓̌̎͂͂͊͞E̢͎͇̓͛̍̌̍̚͞ ̡͉͎͈͚̯̂̀C͌ͮͪͯͮ̇̊̏͟͠Ǫ̸̯̠̼̰͎̆͌M̢͔̦̺̤̾ͧ͑̽̀Eͧ̿҉̙͇̗̠̳͕̲Ṡ̒ͯͣͤͣ¯̡͙͕̠̖̲̮̋͘ͅ!̧̰̠̠͗͊ͦͩ̚͘
VirtualSynth
A keyboard for trying MIDI instruments. For all the MIDI goodness.