-
Software Developer, 2Wire
(May 2005–present)
-
Currently member of ~10-person system software team for the
HomePortal, a high-end home DSL router. Our FreeBSD-based
system contains three million lines of C. As part of this team, I
- developed new userspace code. One typical feature retained
arbitrary integer statistics gathered at frequent intervals in a
ring buffer for less frequent collection by 2Wire's management
server (CMS).
- adapted open source code to run on unforgiving
environment—no MMU, limited RAM and CPU, long uptimes.
Deglobalized, substituted custom configuration store, scrutinized
every malloc(), sent error path bugs upstream where
relevant.
- designed data models and documented RPC model for upcoming
iNID product, which is split into several networked units.
- created infrastructure for our new white box testing group.
Configured and enhanced Buildbot, a distributed continuous
integration framework. Created robust framework for flashing new
code and launching commands over a serial console after every
checkin.
- with two other busy people, administrated a dozen engineering
infrastructure servers. Created Linux kickstarts and
Nagios/rrdtool-based monitoring so this task would take as little
time from software development as possible.
Began as member of six-person team developing CMS, a
Java-based management server for millions of HomePortals and other
devices. Wrote software to run on clusters of J2EE application
servers. As part of this team, I
- replaced complex threaded handler for proprietary protocol
(OGMP) with much smaller asynchronous design. This doubled
performance and eliminated many races and deadlocks found in
production.
- refactored (heavily trimmed, fixed) existing OGMP load tester to
verify these claims, reusing new protocol code. Generated
production load from single machine.
- replaced broken 10,000-line threaded Java load tester for
HTTP-based protocol (CWMP) with working 500-line Python-Twisted
design. This tool has since been used by our QA team to find
many performance and synchronization bugs.
- created database and web-based graphing tool for load test
results, using PostgreSQL, Python, Django, MochiKit, and
gnuplot.
-
Database Programmer, UI Hospitals & Clinics, Internal
Medicine
(Sep 2001–Mar 2005)
-
Member of five-person team supporting Oracle database needs of
over 100 active users. Gathered requirements from users, designed
schemas, implemented front ends, documented systems with writing and
diagrams, presented systems to users, and created database-driven
reports. Maintained production systems. Trained new developers. Led
team to rewrite personnel system and migrate existing data. Primary
developer of financial reporting system used to make crucial
business decisions for the largest clinical department of a major
teaching hospital.
-
Open Source Developer
(1998–present)
-
Designed and implemented several projects consisting
of thousands of lines of code. My documented and released projects,
available at http://www.slamb.org/projects/,
include:
- sigsafe, a C/assembly library for
safe cross-platform UNIX signal handling.
- Axamol SQL Library, a Java library used for
encapsulating SQL statements and embedded descriptions. Supports
calling statements with named parameters. Automatically produces
well-formatted documentation.
- NetGrowler, a simple yet popular
OS X tool to notify of network changes.
My unpolished projects, code available in an open Subversion
repository, include:
- a generic load test graphing framework based on Python,
SQLite, and gnuplot.
- a Python-Twisted server for reliable gathering and short-term
retention of system monitoring data. This may one day be used by a
central monitoring server.
- atoms++, a C++ object-oriented
wrapper around UNIX APIs with a focus on developing network
servers.
Gave and received assistance using and designing OSS projects on
mailing lists. Made minor code and documentation contributions to
many OSS projects (Buildbot, libevent, Apache, Subversion, gaim,
Adium, etc.).