Becquerel is a gateway server that provides an OData 4.0 interface to BigQuery, Elasticsearch, and SQL databases. Want your CRM or customer support system to be able to read from your big data warehouse? Becquerel has the hookup. I developed and open-sourced it at Thumbtack, where it's currently used in production to provide Thumbtack's Salesforce instance with customer data from BigQuery and Elasticsearch.
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.
I wrote flask-oidc
at
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 spoke at LWT about ADHD and strategies for coping with it in the tech industry. ADHD is not a moral failing, and we can treat it as a tech problem.
I covered how and why KIXEYE built the Monocle customer support system as a web app, the challenges and rewards of building a uniform support API across multiple games, and how designing games with support scenarios in mind yields benefits across the whole product. Pretty exciting to get to show off my whole team’s work.
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
with the
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,
so I
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.
I
rewrote mod_auth_openid
's session storage to use
mod_dbd
and
the Apache DBD SQL abstraction layer
so that we could use MySQL instead of SQLite.
keepass
package ()
KIXEYE's Monocle app needed to store credentials for quite a few internal game
DBs and APIs, so we kept them in a
KeePass 1.x .kdb
file in the Monocle repo, encrypted with
a master password that was provisioned separately and never kept in the repo.
We used the
Python keepass
package to read the password databases,
and eventually needed to write them as well, so I
contributed code for writing .kdb
files.
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.
I reverse-engineered
the .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
the vitovtt
format
to the very useful GPSBabel
so that I could visualize my routes in Google Earth.