A JavaScript/TypeScript library to parse assembly code and generate an interactive control flow graph visualizaton from it. Powers "Mario's assembly CFG viewer".

Mario's assembly CFG viewer

Paste your (dis-)assembly in the right pane, view the control flow graph in the left pane. Best combined with Compiler Explorer.


The biggest, meanest bitmap font generator you've ever seen.


Recreating the tech that powered 90ies PC games with modern tools. Follow the series on this very blog, get the sources on GitHub, or try the demos in your browser.


A dirty old C++ raycasting "engine" for desktop and web.


A virtual machine and debugger, plus a full fledged IDE in your browser to write DOS-like assembly programs to put pixels on the screen. Safe your projects as Gists. Grab the sources on from GitHub.


A static website generator based on basis-template. This site was built with basis-site. You can find the source code of this site on GitHub.


A templating engine for the JVM. Similar to Jtwig, but a lot faster, more hackable, and with zero dependencies. Want to shoot yourself in the foot with a general purpose scripting language in your templates? Basis-template is for you!


A zero-dependency, magic free command line argument parsing and help text printing library for Java and other JVM languages.


libGDX is a Java cross-platform game development framework for Windows, Linux, macOS, Android, iOS and HTML5-enabled browsers. I started it in 2010 as an innocent side project. Eventually it grew to one of the biggest OSS game development frameworks. And all of that in Java ¯\_(ツ)_/¯.


gifski-java is a JNI wrapper around the C API for Gifski, a most excellent animated GIF encoding library. As with libimagequant-java, this was more of an exercise in using Docker as a cross-compilation platform than a coding challenge.


libimagequant-java is a JNI wrapper for libimagequant, an insanely good image quantization library. While the project itself wasn't terribly challenging, it allowed me to explore Docker as a cross-compilation platform.


RoboVM is/was a JVM byte code to native code compiler by Niklas Therning. I had the good fortune to work with him on it in a commercial capacity and was responsible for the debugger (super fun!), lambdas (fun!) and IDE integrations (not so fun), among general start-up-y things. RoboVM was eventually bought by Xamarin, who got swallowed by Microsoft, who shut the project down. Thankfully, the libGDX community has taken it on.

Beginning Android Games

A book I wrote in 2011 on game development for Android. The book is now in its 3rd edition (though I bailed after the 2nd edition). For a while, it was the best-selling game programming book on Amazon.


Quantum is a real-time strategy game in the spirit of Galcon and Eufloria. It features thousands of units, network play, scriptable AI, a map editor, and even supports IRC for chat! This was my first foray into game development with Java, so the code quality might not be the best.


Spine is 2D skeletal animation software, created by my super best friend Nathan Sweet (who's also the co-creator of libGDX, at least I'm legally required to tell the story like that). I help out on the Spine Runtimes, the code that animates and renders your beautiful skeletons in your game engine of choice. My by far biggest contribution to Spine was tolera^H^H^H hosting Nate for 6 months in my flat. While he was working on the first iteration, I was cheering him on by telling him what a stupid idea it was.


Wee is a tiny educational programming environment, with an ISA and VM (Wee Machine), an assembly language (Wee Assembly), a higher level language (Wee Lang) and a browser-based development environment. That is at least the plan. Currently, only the ISA and assembler are complete. One of these days...