Tech CV

I am a web application developer, website engineer and system administrator, and database designer. I've been active in these fields since 1998, and am a DevOps Engineer at MIT, in the Open Learning Department.

Skills Summary

I program mostly in Python, which is my strongest language, and in my most recent position I used a lot of Ruby and Javascript (plus Node.js), and some Scala. I'm very good with bash and Unix shells in general, having used them for more than a couple of decades now. I've done some work in Max/MSP (see my Cutupsampler project) and would like to do more some day. Going farther back, I used to use a lot of Perl and have had enough contact with Java to understand what I need in the capacity of a sysadmin. I am fluent in HTML5, XHTML, CSS, and XML markup in general. I used to use PHP, and have retained some of my ability to diagnose issues related to it, though I prefer not to use it anymore. I have a reading comprehension of C, which I taught myself years ago on my spare time, and which has enhanced my understanding of OSes and other programming languages.

I've done a great deal of work in a DevOps capacity, using Ansible in addition to many of the Amazon Web Services products. I have created Vagrant virtual machines with VirtualBox and have created customized Docker images for deployment and development purposes. I eventually transitioned our organization over from running Ansible playbooks by hand, to employing Jenkins to provide a user interface on top of most of the organization's automated activities.

I believe strongly in writing good tests for all of the code I write, and have consistently realized the benefits of good tests in the development process. I've used unit testing libraries like pytest (Python), mocha (Node), and rspec (Ruby). I have also experienced how good integration testing practices can save you from unforeseeable changes to external services and data sources. To this end, I have primarily used Jenkins to run Postman automatically on a schedule, and also triggered by the completion of build jobs. One showcase of my dedication to good tests is the test suite in the dplaapi app. I have seen services like Travis CI, Codacy, and Snyk appear over the course of my career and am very appreciative of the time and effort that they free up.

I have an experienced developer / engineer's level of familiarity with Elasticsearch, having provisioned and configured it for a large-scale production search engine at the DPLA, and having written mappings and analyzers for search suggestions and more-like-this queries; in addition to fine-tuning term searches. I have investigated Rsyslog, Logstash, and Kibana for log stream processing and have a good understanding of their setup and usage.

I worked for a few years with BigCouch (CouchDB), the No-SQL key / value database, which the DPLA used to run as its repository of record for library metadata documents.

I've worked with Apache Spark for large-scale batch processing of documents within a Big Data context, and have automated Spark clusters with Flintrock.

I am adept in the Git revision control system, and used Subversion, CVS, and rcs before that. I have worked extensively with issue-tracking and project management software in the form of Redmine, Atlassian JIRA, Mantis, and Basecamp. Aspects of the Agile and Kanban methodologies have been useful in my projects.

I have been deeply involved in the design and coding of web applications, especially REST APIs, where I have most enjoyed using Starlette. I think that Flask is a good Python framework, and would generally choose a minimalist framework like it if the circumstances permit. I have used Ruby on Rails and its PHP equivalent, CakePHP, but these would not be my first choice for a new project. From 2010 through 2012 I worked extensively with Backbone.js. Before using web frameworks that employ the MVC pattern, I became interested in MVC through projects with Zend Framework for PHP, and through self-guided investigations of Cocoa for Objective-C.

I created a production-grade video transcoding workflow for a web application that used the Zencoder service.

I have engineered and implemented a mission-critical payment system that integrates a commerce and subscription-based website with Authorize.net and PayPal.

I have worked extensively with the Nginx and Apache webservers, configuring them to meet the complex needs of institutional hosting environments and high-volume web applications; and compiling, installing, and maintaining customized compliments of modules.

I have planned and implemented load-balanced server farms for websites that combine the the capabilities of Apache, mod_pagespeed, memcached, APC, PHP, MySQL, and dedicated f5 hardware to reliably deliver content and stay available in high-volume situations.

Going back to the early aughts, I have administered and customized the Drupal, WordPress, and Plone content management systems, and (going back to the 90's) have worked with Vignette to the extent of customizing another application to work with its database. I was the administrator and developer of a group of 18 Drupal sites at the American Museum of Natural History.

I am expert in a variety of Unix and Unix-like operating systems: OS X / macOS , Linux (Red Hat / CentOS, Debian / Ubuntu, Slackware), Solaris, and (to a lesser extent) BSD. I am well-versed in the Debian and Red Hat package-management systems, which I use to streamline the maintenance of custom packages when they are necessary. I have nineteen years of experience performance-tuning Unix-based web and database servers.

I have also been designing and performance-tuning relational databases running first on Oracle, then MySQL, and later PostgreSQL, since 1999.

Professional Software-Development Highlights

DevOps Project Highlights

Writing and Speaking Samples

Examples of documentation and instructional material that I have written at the DPLA.

Employment History

Formal Education