Work
This page lists most of the projects I’ve had. I’ve probably forgotten quite a few.
This page doesn’t detail my employment history. If you are interested in that, please refer to my CV/Résumé instead.
- Software
- Old software
- Web sites
- Old web sites
- Talks
- Articles
Software
Instantly serve a local directory as a web site — with optional auto-reloading. Great for local development.
A Ruby library for building command-line applications.
A tool for maintaining a local environment for development.
A Ruby library for in-memory, non-timeseries metrics.
A Ruby library that assists in building modular code with plugins.
A game of Solitaire for macOS and other desktop operating systems.
A markup language aimed at technical writers for semantically marking up prose, without limiting itself to the semantics provided by HTML or Markdown.
A tool for creating properly-formatted manuscript PDFs from Markdown files.
A powerful and flexible static-site generator, used at GitHub, at GitLab, at PayPal, for Prometheus, at FOSDEM, for Atom, at Disney, and in many more places.
A Ruby library for buffering and merging slow enumerators.
Old software
The following pieces of software are not actively maintained. Some of them were experimental and unstable, and others simply have reached their end of life.
A powerful, memory-efficient Ruby library for memoizing.
A game engine implemented in Crystal.
An experimental parser combinator library for Ruby.
A set of extensions for writing stream-processing code in Ruby.
A 2D game engine written in Crystal.
A cloud music player with a retro look.
Memory
A memory game, written in Crystal using Glove, a game engine I built.
A virtual machine emulator and assembler written in Crystal.
A game made at the Berlin Mini Game Jam on August 31st, 2014.
Translizzator
A web-based tool to aid in the manual translation of documents and UI copy.
nPages
A simple CMS written in PHP. In some ways, this is what let me to create Nanoc soon after.
Alurio
An advanced chat system. We had a few exciting prototypes up and running, but we did not get far with it.
Verenia
A point-and-click adventure game. It never made it far. Making games is hard.
Web sites
Over the years, I’ve created a handful of web sites. I still do create the new one once in a while.
My own web site! You are looking at it righ tnow. It has been online for a long time, in various places, with many different designs.
The small, one-page site for D★Mark.
I built Nanoc to manage my own web site, and then created a web site using Nanoc for Nanoc.
Old web sites
These are web sites that I no longer maintain, or have disappeared completely. But I’d like to remember them, because I’m proud of having worked on them.
I updated the existing Myst Online web site, replacing Flash and IFRAMEs with modern (for the time) HTML and CSS. The web site shot up in search engine rankings as a result. I improved the look with homemade graphical assets, bringing the site more in line with the game. Lastly, I got together a team of translators and made the web site available in a handful of additional languages.
EuroMysterium.org
I created the web site for EuroMysterium, the European counterpart to Mysterium, the yearly Myst fan convention.
Talks
I’ve given a handful of talks over the past few years. The pandemic had taken some of the joy (and possibility) out of it, but I’m slowly picking up my public speaking habits. Here is a list of talks I have given.
A language built with third-party code reuse in mind
It’s unthinkable to build a piece of software without using existing libraries and frameworks. But reusing code written by other people comes with risks. Can we create a language that facilitates safe code reuse, across an open-source ecosystem?
The importance of naming
Naming is hard — but at a previous company I worked for, the naming problems were more than just annoying. Based on examples of bad naming, I formulated a set of principles that I consider indispensable for any well-running tech team.
An introduction to fibers
An introduction to fibers in Ruby, along with a handful of use cases.
Code as data
An exploration of the business advantages of treating code as data to be analysed and transformed.
Clean & fast code with enumerators
Ruby’s Enumerator class is a powerful tool for writing code for dealing with streams of data and events. This talk also shows how to effectively use enumerators for slow data sources.
How to memoize
A journey through the many intricacies of writing a memoization library in Ruby.
Let’s create a programming language!
I wanted a computer, but all I got was a transistor
Simulating a CPU with Ruby
Taming memory: performance-tuning a Crystal application
Creating games with entities and components
Static site generation for the masses
Extending a base product for multiple customers
Make your web sites faster!
Metaprogramming and DSLs in Ruby
Articles
Take a look at the list of articles I’ve written.