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.
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.
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 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.
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.
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 had an unenjoyable but educational few years of interaction 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 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 designed and coded website APIs that were central to their organizations' technical missions, and I always aim for a RESTful, resource-oriented architectural style.
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 been deeply involved in the design and coding of MVC web applications. Most recently, this has meant Ruby on Rails, but before that I had to contend with its PHP knockoff, CakePHP. From 2010 through 2012 I worked extensively with Backbone.js. Before becoming as invested as I am now in the MVC pattern, I became interested in its significance in projects with Zend Framework for PHP, and through self-guided investigations of Cocoa for Objective-C.
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 oughts, 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 have been the administrator and developer of a group of 18 Drupal sites in an institutional environment, and in maintaining the software installation for these sites on their server.
I am expert in a variety of Unix and Unix-like operating systems: Mac 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 now PostgreSQL, since 1999.
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, DPLA: 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