I’m an experienced software engineer specializing in back-end technologies with expertise in architecting well-designed software applications. I bring more than two decades of hands-on experience helping organizations bring their products to market while improving their development and delivery processes.
To better understand my work and approach, please check out my projects, view my résumé, or send me an email.
Featured Software Projects
- migrator (TypeScript)
After building some lightweight Express applications that used Slonik as a simple query builder for PostgreSQL, I built this tool to allow me to easily apply DDL changes to Postgres from my TypeScript applications.
- Fleakr (Ruby)
A full-featured API client for Flickr photostreams that represents my first serious effort at creating a reusable software library. This code demonstrates a departure from the constraints of Rails to really dive deep into some core principles of object oriented design. There are some “clever” spots in the code that I don’t think I would repeat if I were to approach this problem domain again, but there’s a lot of good composition and delegation of responsibility in how this code is designed and implemented.
- dnsimple (Python)
I had been using the dnsimple Ansible module to manage DNS records when creating and destroying servers, but the underlying Python module became out of sync with the way that Ansible was trying to interact with it. I set about updating the code to handle the new API endpoints and structure the code in a way that maximized usability and modularity with an eye to supporting the updated API version. While this never became the canonical Python module for DNSimple, some ideas were ported to the official module.
- resume-generator (TypeScript)
I had been using PDFKit and Ruby to generate PDF versions of my résumé from a collection of Markdown documents, but it seemed like every time I went to update the content and regenerate the document the formatting would be vastly different. After some research, I decided to ditch PDFKit and use Puppeteer to implement the Markdown → HTML → PDF pipeline with much better results.
- minecraft-server (Ansible / Python)
After experiencing lag on our outdated home computers when using “Open to LAN”, I took some time to pull together an existing Ansible role to create an on-demand Minecraft server on Digital Ocean. I experimented a bit with using Block Storage to store world data, but moved to persisting data in a Space to allow for a multi-server setup.
- axios-http-mock (TypeScript)
Implemented as an adapter for the popular Axios HTTP request library, this package allows developers to mock low-level HTTP requests using a fluent type-safe interface.
- Custom HTTP Routing (Go)
In the instances where using a third-party routing library is overkill, I wanted to demonstrate some alternatives with varying degrees of complexity for how to leverage the Go
net/http
package withServeMux
to route requests to different handlers.
Recent Articles
- Serve Your Rails App Over SSL in Development Mode (May 2024)
- Working with External Services in Nest.js (September 2021)
- Managing Connections in Express Apps (June 2021)
- 3 Uses of `git rebase` for Your Daily Workflow (October 2020)
- Two Ways to Share Git Hooks with Your Team (May 2017)
- OTP: The Fun and Frustration of C (February 2015)
- Collaborate with Google Slides, Deliver with Keynote (January 2015)
- Fun with Cellular Automata (April 2014)
- Teaching Kids Programming with Khan Academy (April 2014)
- Game Programming in C with the Ncurses Library (March 2014)