I’ve made a lot of things for fun and curiosity. Here’s a selection of the most substantial ones:

Kalman filter IMU

An IMU which incorporates GPS velocity data to improve its orientation estimate. It sounds counter-intuitive, but in simulation it works surprisingly well. I’ll probably write this one up in more detail soon.


Geomc is an embarrassingly full-featured open source graphics and linear algebra foundation library. It’s fully templated over both type and dimension, and is almost entirely a header library. Functionality centers around matrix and vector math, basic computational geometry (like ray-object and generalized convex object intersection tests), and basic signal generation (noise; interpolation; spherical harmonics).

Here are some completed sub-projects belonging to this endeavor, a few of which I’ll eventually write up:

  • N-dimensional Gilbert-Johnson-Keerthi convex shape intersection
  • Automatic differentiation
  • Compile-time matrix bounds checking
  • Spherical and zonal harmonics
  • General matrix inversion
  • Random floating point selection to avoid excluding bit patterns near zero

This project began years ago when I needed some simple vector classes to do Fun Graphics Stuff. Over the years it grew, and I was compelled to flesh it out and generalize it. I never set out to create something this big, but now that it’s there it has taken a life of its own.

Atmospheric optics simulation

Simulated atmosphere after sunsentA hyper-spectral renderer which simulates the optical physics of Earth’s atmosphere. Shown here is a fish-eye rendering from 5km above the ground a short time after sunset. The color of the sky and horizon (and the barely-visible shadow of Earth’s horizon) are all emergent properties of Rayleigh scattering.

Rigid body dynamics

Rotation simulator
After seeing a video of a crazily-rotating T-handle in space, I became intrigued by the dynamics of rotating objects, and set about to understand the problem as well as I could. This eventually manifested as an RK4-simulated model of a rigid body… to which I eventually attached thrusters and surrounded with asteroids.

2D quantum mechanics simulator

Quantum mechanics simulatorThis simulator solves the time-dependent Schrödinger equation in a limited 2D domain.

Shown to the left is a single particle interacting with a \(\frac{1}{r}\) potential well, with the pole at the center of the image. This scenario is (I think) roughly like what an electron would do in the vicinity of a hydrogen nucleus. White areas are regions where the “electron” is most likely to be found; it’s smeared out and rippled essentially because of quantum uncertainty.

We can even see that the particle loses energy as escapes the potential well: Its wavelength is a little longer further out from the center of the image.

Admittedly, I have not vetted these simulations against a “ground truth”, so I’m not sure how physically accurate they are. No matter, though; it’s only a toy.

Arduino GPS interface

I got myself a Copernicus GPS chip to play with and wrote a library to interface with the chip’s binary communication protocol; it’s now the library which Sparkfun provides (with my permission :).

Blu-ray auto-ingestion daemon for Linux

At one point I really wanted to have a substantial library of good films, and I wanted them tucked nicely away and categorized on a drive, instead of sitting on clumsy physical optical disks. So I wrote a mostly-complete daemon for Linux which ingests Blu-ray disks and writes them to file with no human intervention.

It is designed in particular to make files which are readable by a PlayStation3 client, but the PS3 is so poorly suited to this task that I eventually gave up on that part of it. (I still don’t think home movie watching is well solved. Netflix has the right idea, but the quality and selection could be better. None of this would hard to fix, were it not for an obstinate film industry).

Poker calculator

PokerOdds calculatorMy first-ever programming project was a Java-based Hold’em simulator. The user could deal known (or suspected) cards to themselves or their opponents, deal table cards, or trash known dead cards, and it would tally up the odds for each player and each kind of hand.

This thing exploded in popularity for a time back around 2004 or 2005, but disappeared from view when my university suddenly deleted my web space a few months after I graduated.

 Text editor (“Bix”)

Bix: A text editor

This project started when I was in college, and still new to programming: I built a text editor just the way I liked it. I probably spent a year on it, on and off, and added tweaks whenever I wanted something new. I don’t maintain it anymore, but I still use it as my primary editor for note-taking and writing— I wouldn’t trade it for anything else.

A major aerospace company came sniffing around for a few hundred licenses years ago, but the deal didn’t end up going through. I’m considering putting it back online (since it’s deployable), at the risk of having to maintain it again.

2 thoughts on “Projects

  1. Luis Loret de Mola

    Used the Kalman Filter during grad school to forecast the state of the economy. Interested to read more about what you did.


Leave a Reply

Your email address will not be published. Required fields are marked *