Matthew Hawthorne
mhawthorne@gmail.com
mhawthorne.net
github.com/mhawthorne
Summary
I’ve been writing software for over 10 years. My main areas of work have been:
- Writing code in Java, Python, and Ruby
- Building HTTP-centric RESTful services
- Writing functional tests and unit tests
- Casual Linux system administration: package installation, shell scripting, and service management.
- Working in an Agile environment: short iterations, daily scrums, estimating with story points, defining requirements with product owners.
Technologies
- Languages: Java, Python, Ruby
- Web: HTML, CSS, Javascript, a bit of jQuery
- Storage: MySql, SQLite, Riak
- Amazon Web Services: S3, EC2, a bit of SQS
- Java Tools: Eclipse, Maven, Jetty, Tomcat, Ant, JUnit, Spring, Log4j
- Ruby Tools: Rake, Rspec, Hpricot
- Python Tools: Google AppEngine, a bit of Django, also libraries such as: feedparser, httplib2, mox, simplejson
- Operating Systems: Linux (Ubuntu & Debian), Mac, Solaris
- Other tools: Subversion, Apache, a bit of Squid, a bit of Git
Work Experience
Netflix – Los Gatos, CA
Senior Software Engineer (5/2011 - present)
- I work on the API Platform team; that’s all I can say for now.
(CIM is a division of Comcast responsible for comcast.net, fancast.com, and xfinity.com. I worked mainly on an HTTP key-value store (also known as HOSS) and a CMS.)
Sr. Software Engineer (1/2010 - 5/2011)
- Served as Tech Lead and Scrum Master for Strategic Infrastructure team. This involved running planning and review meetings, working with product owners to define requirements, decomposing user stories into tasks, and working with our Operations team to get our systems deployed.
- Designed data migration for moving 50+ million records from Amazon S3 into a set of replicating Riak clusters. Implemented hybrid writer that stores data in both S3 and Riak during migration period.
Software Engineer (6/2007 - 12/2009)
- Refined criteria for internal data storage system for the purpose of migrating data away from S3. Wrote a prototype version of HOSS using Cassandra for storage.
- Secured HOSS with 2-legged OAuth implementation backed by a Java keystore. Defined configuration syntax for limiting reads and writes for URL patterns to specific groups of users.
- Implemented fail-fast behavior in HOSS in order to provide maximum performance for targeted clients; HTTP 503 was returned during S3 timeouts or when system was over capacity. Wrapped failure detection using “circuit breakers” to disallow costly repeated failures.
- Authored restoration tool to push S3 backups from disk into HOSS in case of data loss.
- Created EC2 installer scripts that used Ruby’s Net::SSH library to initialize and configure nodes in preparation for load testing.
- Wrote functional tests to verify HOSS behavior for all use cases (simple GETs/PUTs, conditionals using If-Match header, content types using Accept header, etc.)
- Exposed HTTP services in “sandbox” for external clients by integrating with Akamai (for caching) and Mashery (for API key management). Wrote origin-side verification of Akamai’s Signature Header Authentication in both Java and Python.
- Created job controller to handle scheduling, monitoring, and throttling of concurrent ingest and publishing jobs within a CMS.
- Monitored performance of production CMS: analyzed data trends, wrote MBeans to report throughput of bottleneck areas, wired MBeans into Hyperic to provide alerting, wrote custom logs to report performance, wrote queries in Splunk to graph performance over time.
- Provided 24/7 on-call support for our production CMS to handle problems and operability issues. Developers rotated this responsibility weekly; it involved answering calls, investigating and analyzing issues, writing and deploying fixes.
- Created schemas and user interfaces for managing editorial content on CIM’s websites. This involved data modeling, collaboration with product owners, UI developers, and middleware engineers, data migration for modified content types, and planning for production deployments.
- Wrote components to Ingest feed content from providers into CMS for publishing to Comcast.net.
FGM – San Diego, CA
(FGM provides software and services for the U.S. Department of Defense. I worked in the Navy Division, but was also involved in projects for other defense agencies such as DISA and JPMIS.)
Software Developer 3 (7/2004 - 3/2007)
- Created mediation layer between applications and web services which performed data translation and conversion. Also implemented a callback mechanism which allowed clients to receive status updates for asynchronous service requests.
- Created an API to access user information from an LDAP data store. It allowed creating, editing, and deleting of users and groups, as well as adding or removing users from groups.
- Prototyped a portal for integrating the capabilities of several web applications. Investigated different portlet delivery techniques.
- Investigated the use of SAML and smart cards to transmit security credentials and provide single-sign on functionality.
- Authored a component that calculated prospective vehicle fuel usage by gathering and analyzing a unit’s scheduling information.
- Wrote an algorithm to synchronize our system’s geographic data with an external data source (~100,000 records). Created a detailed log to display the results in a simple, easy to read format.
- Designed and implemented a job scheduling component using Quartz. It allowed for periodic calculation and storage of derived data, as well as system integrity checks.
- Created a component for sending system email notifications during different workflow phases of a scheduling application.
- Designed and configured automated build systems using CruiseControl, Ant, and Maven.
Software Developer 2 (7/2003 - 6/2004)
- Designed database schema and data access layer for web application using Apache Axis and EJBs.
- Created a mechanism to import a large external data set into our database using Python, XML, XSLT and Java.
- Optimized application response time by improving SQL queries, adding indexes to tables, and refactoring web service interface to serialize references instead of values into SOAP.
TMP Worldwide / CDI Corporation – Pittsburgh, PA
(TMP/CDI had many consultants working onsite at the Westinghouse Electric Company. I worked in the Core Technologies division, writing nuclear engineering software.)
Software Engineer (5/2001 - 5/2003)
- Designed an XML schema used to transmit nuclear calculation data between Java applications and legacy C and FORTRAN systems.
- Designed data service for providing nuclear modeling data to Swing clients over HTTP.
Soleil Technologies – Pittsburgh, PA
(Soleil was a startup company that built software for clients in the health care and telecommunications industries.)
Software Engineer (6/2000 - 2/2001)
- Worked on-site to assist a customer’s development team and enable a timely product release.
Goodyear Tire & Rubber Company – Akron, OH
(I worked in Goodyear’s Technical Computer Operations division, which provided internal software to the rest of the company.)
Engineer (intern) (9/1999 -12/1999)
- Collaborated with project manager, DBA, and internal users to maintain an internal Java inventory application.
Independent Experience
Apache Software Foundation - Contributor/Committer - (2003 - 2005)
- Developed initial version of mutable numbers package for Jakarta Commons Lang.
- Created initial version of a combined List/Set implementation for Jakarta Commons Collections.
- Contributed sorted and unsorted bidirectional map implementations (mapped values to keys as well as keys to values) for Jakarta Commons Collections.
- Added the ability to set parser properties (to, for example, set the location of an XSD file) to Ant’s “xmlvalidate” task.
Education
University of Pittsburgh (8/1996 - 5/2000) – Pittsburgh, PA
- Bachelor of Science, Computer Engineering