I'm a software engineer by trade, with an interest in music, woodworking, and gardening in my spare time. I mostly do data engineering these days, with secondary interests in Machine Learning, Recommendation Systems, Natural Language Processing, and Functional Programming. I've lead teams working on big data pipelines, built NLP platforms and recommender systems, and helped design and develop systems to calculate complex healthcare quality metrics over billions of medical claims.
I've contributed to or maintain several open-source projects:
CNC Pattern Library
After getting a CNC router to play arond with, I decided to combine my interest in woodworking and my love of coding to produce the
cnc-pattern-lib library, a Haskell-based framework for vector graphics that can be used with CNC routers. Ultimately, I wanted to be able to use it produce interesting tiling patterns that could be used in furntiture making.
cnc-pattern-lib was inspired by Sam Calisch's fold library for Python. It creates SVG files, which can be read directly by many CNC routing software packages, and there are open source programs that allow you to convert between SVG and other common formats like G-Code
It provides several shape primitives—point, line, arc, circle, parallelogram, and hexagon—and functions for transforming single shapes or groups of shapes in cartesian space including rotating, mirroring, and offsetting. As it turns out, Haskell is a nice language in which to express interesting geometries in a way that is both terse and expressive. The pattern shown on the right consists of about 30 lines of Haskell code.
The project includes a gallery of patterns produced by the library and documentation of types and functions it contains.
Robosquirt is an automated watering systems for lawns and gardens I'm building with my friend and former colleague, Ben Johnson as a fun side project. The system allows users to control valves using custom software we've written in Python running on a Raspberry Pi Zero W. The Pi is joined to your home wireless network, which allows you to control your watering system from anywhere.
The software component consists of two pieces. The first is the Robosquirt server, which is a custom python server that controls the valves, and executes scheduled watering events. The server accepts messages over a ØMQ connection which allows other applications to control the system. The second component is a web application written in Django which provides a human-usable interface to the system. This interface lets users turn the system on and off, schedule watering times, and set their geographical location.
Robosquirt has several features:
- Robosquirt is location-aware. Location is supplied by the user as part of the first time login and setup process.
- Robosquirt knows the forecast. Weather data is periodically acquired from the National Weather Service which Roboquirt can use to make watering decisions.
- Robosquirt is secure. Users provide a password to the system during initial setup to contreol who can access the UI.
- Robosquirt uses moisture sensors to decide when to water. (coming soon)
NCSA Logfile Parser
An open-source implementation of a high-performance log file parser for NCSA Common and NCSA Combined log-file types. This project was intended to accompany a blog series I wrote, "High-performance Log Parsing in Haskell" while working at O'Reilly media. That blog has since been lost in sucessive redesigns, but the blog series is archived as part 1 and part 2 on Github with the project.
The series came about after I had written and deployed a Haskell-based logfile parser at the company. The parser was responsible for parsing and processing very large files and replaced a previous version written in Python that had been an order of magnitude slower (while requiring a lot more memory).Visit project page
A static blogging engine written in Haskell.
A reusable application that provides for a generic section/subsection hierarchy in Django.