I am a web application developer, website engineer and system administrator, and database designer. I've been active in these fields since 1998, and most recently was the Senior Developer at The Digital Public Library of America.
- Skills Summary
- Professional Software-Development Highlights
- DevOps Project Highlights
- Writing and Speaking Samples
- Employment History
- Formal Education
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
- My Github profile page
- dplaapi: the DPLA's web API application, which I wrote to replace an older Rails app
- The legacy DPLA metadata ingest system, which I didn't design, but worked on maintaining in my first few years at the DPLA. (my pull requests)
- The video uploading and transcoding features of DPLA Primary Source Sets, an integration with the Zencoder service. (my pull requests)
- Thumbnail image proxy server, a Node.js application I wrote to reverse-proxy images in order to avoid cross-origin resource errors in the context of an SSL website. It ran on its own for years before being incorporated into the organization's new frontend application.
DevOps Project Highlights
- The DPLA's automation project, a collection of Ansible playbooks and roles, in addition to a Vagrantfile and documentation for developers. It's smaller than it used to be, because we were able to get rid of some of the servers that we used to run, and run other services on Elastic Beanstalk!
- Docker images, for API development and for a workshop that the DPLA Tech Team gave on Apache Spark. The
dplaapiimages are referenced in my developer documentation.
Writing and Speaking Samples
Examples of documentation and instructional material that I have written at the DPLA.
- Profiling memory growth and execution time in a Rails app
- Documentation that I produced regarding a major performance-tuning effort that took place in 2016, for an iteration of the DPLA's ingest system that has since been scuttled. I produced some of this documentation in order to communicate with the maintainers of the Apache Marmotta project. (mail thread 1) (mail thread 2)
- Webinar on the DPLA's API given in February of 2016.
- Senior Developer, Digital Public Library of America: January 2014 - November 2018
- Technical Director, See.me: March 2012 - December 2013
- Senior Developer, See.me, Inc. (formerly Artists Wanted): January 2011 - February 2012
- Freelance Web Application Programmer and Sound Designer: 2010 - 2011
- Web Application and Database Developer / Informatics Manager, American Museum of Natural History: 2001 - 2010
- Senior Implementation Consultant, NetGenesis, Inc. (Bought by SPSS): 1999 - 2001
- Bachelor of Science, The New School, New York, 2009. Studied Film, Sound Design, and Photography.