I wrote the Python and Go clients for the genderize.io web service, which tries to guess the gender of a given first name and optional locale.
State of the art structured storage for 1986: a Go wrapper around the POSIX NDBM database interface. I wrote the first version of this library on a Mac on a cruise ship, where I needed a persistent key-value store, but had no Internet connection, just OS X system libraries, man pages, and Go documentation. It was a good way to learn cgo.
KIXEYE in 2014
to support logins with OpenID Connect
for our Monocle customer service app after Google deprecated OpenID 1.0.
It's now maintained by the industrious Patrick Uiterwijk, who got it working for the Ipsilon IdP as well as Google's IdP.
Fracture is a fractal image encoder intended for high-quality image enlargement. It contains a GPGPU hardware-accelerated fractal image encoder (implemented as OpenGL shader programs suitable for the GeForce 7600), as well as a software reference encoder and decoder (implemented in Python).
Here's Lena after being reduced 2✕ and then enlarged 2✕. Note where the conventional upscaler's output is blurry, Fracture's output preserves lines and texture.
|original||conventional upscaler||Fracture software encoder||Fracture GPU encoder|
I developed Fracture at Caltech as an undergraduate computer science project (CS 81) in graphics, mentored by my exemplary advisor, Prof. Al Barr. At the time, we thought it was the first GPU-accelerated fractal image encoder, but a more recent literature search turned up "Toward Real Time Fractal Image Compression Using Graphics Hardware" from 2005, which means that Dr. Ugo Erra beat me by 4 years. Hats off to you, Ugo.
Perhaps my most popular software. GPT Surgeon is a command-line tool for
repairing corruption of HFS+ partition labels on GPT-partitioned drives.
Generally this manifests as the partition not mounting,
accompanied by the Apple Disk Utility error
invalid BS_jmpBoot in boot block: 000000.
Disk image manager for Mac OS X. Mounts necessary images when you launch an app, unmounts them when you quit.
I found a subtle bug in the PHP JSON extension's parser while at Thumbtack, filed PHP bug report #68938 with a fix, got the fix merged into PHP 5.5 and 5.6, and then saw it promptly reverted because someone was concerned it'd break PHP code that relied on the incorrect behavior. Shortly afterward, for PHP 7, the entire JSON extension was replaced anyway, including a JSON-compliant parser, and my patch survives only as a regression test. I like to think there was an important PHP lesson in all this.
mod_auth_openid( – )
Before Monocle used
flask-oidc, we used Apache
mod_auth_openid module to handle
SSO through Google's
OpenID 1.x. KIXEYE needed it to work with
OpenID Attribute Exchange so we could get email addresses from our users,
contributed support for AX queries,
single IdP mode, and secure cookie options (see previous commits as well).
Later on, KIXEYE also needed support for storing sessions in an external DB
so that multiple web servers behind a load balancer could share sessions.
mod_auth_openid's session storage to use
the Apache DBD SQL abstraction layer
so that we could use MySQL instead of SQLite.
KIXEYE's Monocle app needed to store credentials for quite a few internal game
DBs and APIs, so we kept them in a
.kdb file in the Monocle repo, encrypted with
a master password that was provisioned separately and never kept in the repo.
We used the
keepass package to read the password databases,
and eventually needed to write them as well, so I
contributed code for writing
KeePass files are encrypted and binary and this makes them a bear to diff, so we eventually replaced them with a YAML-based format called Line Oriented Password Storage (LOPS for short) where only the actual secrets were encrypted, but the metadata such as game names and environments were in the clear. While LOPS was never open-sourced, I was amused to see that Mozilla SOPS not only independently arrived at the same functionality, but also ¾ of the same name.
.vtt file format used by Vito SmartMap for Symbian Series 60 phones,
from hex dumps of a few walks around the neighborhood. This took three days
and no small amount of head-scratching. Once I'd figured it out, I contributed
to the very useful GPSBabel
so that I could visualize my routes in Google Earth.