Senior Site Reliability Engineer
July 2013 - December 2014
  • Server configuration management via Puppet
  • Advanced MySQL replication hierarchies
  • Hierarchical replication Postgresql deployment
  • Replication integrity testing via pt-table-checksum
  • Automatic backup validation infrastructure
  • System orchestration via Ansible
Senior DevOps Engineer/DBA
February 2010 - June 2013
  • Server configuration management via Puppet
  • Tomcat high availability via Keepalived
  • Wrote Java MySQL proxy with query cache support
  • Squid based reverse caching proxy for assets
  • Multi-master MySQL setup over 10 servers
  • Monitoring via Nagios (NRPE) and Diamond
  • Networking improvements targeting latency
  • Backup, archival, and validation procedures
  • Improved queries, indexes, and database schema
  • Setup and administered firewalls using Shorewall
  • MySQL replication integrity testing
  • Advanced OpenVPN deployment
  • Capacity planning, Bottleneck identification
  • Schema change timing and testing utility
  • Database query log processing in Python
  • PXE kickstarting of CentOS servers
  • Subversion server administration and replication
Senior Development Engineer
Adapp Solutions
June 2009 - February 2010
  • Integrated Jquery based front-end elements
  • Wrote object cache layer backed by Memcache
  • Developed schema upgrade and management tool
  • Developed database schema verification tool
  • Developed self contained deployment code
  • Enhanced error reporting code
  • Co-lead agile development team of 5 developers
  • Improved 'brand' creation time by a factor of 20x
  • Improved core CakePHP libraries
  • Developed peer code review process
  • Standardized development and staging environments
  • Added internationalization features
  • Audited and repaired production database schema
  • Improved developer debugging tools
  • Audited and tuned production MySQL servers
  • Improved Nagios health check scripts
Lead Developer
Name Intelligence
June 2008 - June 2009
  • Managed team of 5 developers
  • Development of staging process
  • Lead the design of a middle tier unified API layer
  • Reduced avg page time from 4.4 seconds to 1.5
  • Refactor to reduce memory footprint
  • Development of customized live auction system
  • Deployment scripts to standardize code roll outs
  • Designed an site resource limits system
  • Enhanced shared security framework
  • Implemented per user 'click stream' tracking
  • Refactor billing system to increase reliability
  • Utilized SEO improvements to increase placement
  • Increased ad revenue by following UX research
  • Wrote Memcache object cache layer
  • Integrated Jquery based front-end elements
Silicon Mechanics
March 2005 - June 2008
  • MySQL multi-master replication setup
  • Wrote core PHP web application libraries
  • Code architecture planning and implementation
  • Clarify existing code to reflect best practices
  • Convert existing procedural code by objectification
  • Added Web 2.0 functionality with PrototypeJS
  • Performance tuning in critical areas
  • Solved process inconsistencies
  • Architecture planning to satisfy growing needs
  • Addition of redundant servers for critical services
  • Off site backup coordination and restoration plans
  • Networking architecture implementation
  • Introduced the factory design pattern to the code
  • Managed help desk technician
  • Administrated CentOS PXE/Kickstart servers
  • Administrated Mitel VOIP system
  • Setup and administered firewalls using Shorewall
Application Developer
Reprint Management Services
Jan 2003 - March 2004
Tech Overview: PHP, MySQL, VB 6
Helped in 2013

Organized the 2013 Seattle GNU/Linux Conference at SCCC.

Java MySQL Proxy
Released June 2012

A high performance daemon that sits between your client and MySQL server(s) that can monitor, analyze or transform their communication. Written with a modular, threaded structure, you can write plugins to convert queries, update/modify result sets, redirect traffic, automatically shard, anything you want.

December 2011 - Present

Diamond is a python daemon that collects system metrics and publishes them to Graphite (and others). It is capable of collecting CPU, memory, network, i/o, load and disk metrics. Additionally, it features an API for implementing custom collectors for gathering metrics from almost any source.

Released December 2011

An advanced, but easy to install, UI for pt-query-digest or mk-query-digest.

MythTV - Mythweb
February 2007 - February 2012

Mythweb provides a front-end for scheduling and managing recordings on your Myth-Box from a web browser located on another machine.

An intensive one-day workshop for MySQL database administrators and systems administrators that covers InnoDB and XtraDB, the most popular storage engines for MySQL.

  • Learn to be systematic about fixing performance problems
  • Optimize query performance
  • Understand the basic operation of InnoDB - including how data is stored on disk and in memory
  • Understand what InnoDB does internally when data is written, and how features like the transaction log files and undo space work
  • Understand how key features of InnoDB work, including the buffer pool, transaction logs, clustered indexes, insert buffer, adaptive hash, double write buffer
  • Learn to read diagnostic Information from InnoDB and make informed decisions while tuning configuration
  • Discover how XtraDB, and the Percona and Google patches will provide you better diagnostics and performance
MySQL 5.0 Performance Tuning
MySQL AB, March 2007
  • Develop a tuning strategy
  • Display knowledge of MySQL architecture
  • Display knowledge and ability to use diagnostic tools
  • Display knowledge and ability to use tuning tools
  • Write queries against the INFORMATION_SCHEMA database and be able to decipher the meta data obtained
  • Understand the relational database model and both the positive and negative implications on performance
  • Display, decipher and edit server configuration variables to improve performance of your applications
  • Display and analyze status variables to ensure that their applications are utilizing the settings in the most effective manner
  • Write queries that take advantage of the MySQL 5.0 performance enhancements dealing with queries and indexing
  • Decide which of the storage engines could be used in their specific application needs
  • Evaluate the application architecture for efficient design, structure, caching, number of connections and other factors affecting performance
  • Evaluate hardware and OS for effects on performance
  • Evaluate techniques for loading data into the database and effects on performance