I am a senior software developer with full-stack experience developing software on agile teams using test-driven development and related approaches to software quality. I am looking for a full-time position in Europe doing business in English -- especially in a city like Berlin, Amsterdam or Dublin, where a visa will not be difficult to obtain. (Please do not contact me about positions in the United States.)
My technology experience is very broad overall, and I consider myself competent to contribute to work anywhere in the software stack. However, my strongest experience is with server-side programming in dynamic object-oriented programming languages like Ruby and Perl, where I will be able to immediately provide technology leadership, architect and build applications of considerable complexity. In support of this, I also bring experience with SQL databases, NoSQL databases, distributed service-oriented approaches using REST, and hybrid local/cloud application clusters using Amazon AWS.
I am also substantially competent with Node.js and with front-end web development, including HTML, CSS, and browser-based JavaScript, with or without frameworks like Ember or jQuery. I understand C and have a basic familiarity with POSIX library routines. I have also worked with C++ and Java, but do not have much experience with recent developments in these languages, or with the language ecosystems.
Outside these core areas I've also done devops of reasonable complexity to support my own application, set up custom OpenSSL CAs for point-to-point IPSec VPNs, assembled 1U Atom appliances, customized Linux bootloader graphics for installation CDs, and more. My computer science background has prepared me to develop basic algorithms, and I even have a little experience with data mining problems (see Publications).
Finally, I have worked on teams taking a variety of different agile development approaches, including Extreme Programming (XP), Scrum, and Kanban.
Software engineer @ I joined Shutterstock’s Contributor team (later split into the Content team) to assist Shutterstock in overhauling their legacy mod_perl codebase into a service-oriented architecture with Ruby, and to expose the team to agile and pair-programming practices. I architected the code for a new service managing review and approval for images submitted by Shutterstock’s contributors, designed locking schemes enabling no-downtime migrations from legacy systems, and introduced new monitoring tools to improve reliability. From November 2012 to June 2014 (1 year 8 months) Member of Technical Staff @ Rejoining many former coworkers from AirWave, I took to designing visitor analytics systems for physical stores in a multi-tenant managed-services appliance/cloud architecture. Collaborated building system components using Rails and early versions of Ember for cloud-hosted user interfaces, Sinatra for wireless hotspot login pages, Node.js for web traffic analytics, Cassandra for data storage, Puppet for system management. Select highlights include: configuration synchronization software for remote appliances, backup/restore tools and data-at-rest encryption for our (somewhat atypical) AWS instance-store Cassandra ring, and managing a migration into a VPC using a Puppet-managed IPSec point-to-point VPN with a custom OpenSSL CA. From June 2011 to October 2012 (1 year 5 months) Software Engineer @ AirWave Wireless was acquired by Aruba Networks. See information under "AirWave Wireless". From May 2008 to June 2011 (3 years 2 months) Software Engineer @ Pair programming and test-driven development: AirWave Wireless wrote a multi-vendor wireless network monitoring/management tool, and was acquired by Aruba to replace their existing software, leaving the team essentially independent and intact.
We developed monitoring software for a datacenter-appliance model, using Perl software and the PostgreSQL database. Presenting a unified interface for multi-vendor components involved fantastical exercises in object-oriented design and plenty of refactoring (made possible by the extensive test suite).
Some highlights: I was responsible for developing performance enhancements and parallelization of a legacy code path, including a speculative-execution component to maximize throughput on low-priority tasks without overwhelming the appliance’s limited resources. I wrote a tool to adaptively optimize the ORM database fetch patterns in deployed software at runtime, based on actual access patterns (wildly heterogenous across deploys). From May 2007 to May 2008 (1 year 1 month) Systems Engineer @ Part-time full-stack web developer and system administrator role. Integrated disparate student-designed systems (PHP and Perl) into a content management system to empower non-technical users. Migrated systems from Solaris to Linux to simplify support. Configured mailing lists and web servers. Developed MailMan extensions in Python to manipulate raw MIME message envelopes, to enable new academic mailing-list workflows. From May 2003 to May 2007 (4 years 1 month) Preprofessional software engineer @ Developed a new installation tool for IBM's Cluster Systems Management product line, leveraging open-source tools such as SIS (System Installation Suite). Significant exposure to Linux setup and installation techniques including bootloaders and PXEboot over tftp. From 2005 to 2006 (1 year) Intern @ Intranet development using XSLT stylesheets on top of J2EE servlets. From 2001 to 2002 (1 year)
Bachelor of Science, Computer Science @ Wake Forest University From 2003 to 2007 Thomas Whaples is skilled in: Programming, Ruby, Perl, Ruby on Rails, JavaScript, Node.js, Linux, Agile Methodologies, Python, PostgreSQL, Refactoring, Extreme Programming, Object-oriented Software, Shell Scripting, C