Experience and Expertise
Expertise isn’t just about knowing
different computer languages and
frameworks and therefore being able to create software that will reliably
serve your needs. It is crucial to have had relevant and meaningful
experiences in previous projects, and to have learned valuable lessons
from customers and colleagues during those experiences.
As an employee, open source contributor, and consultant, I have served a
multitude of customers,
from individual users of open source
projects to multinational corporations, in engagements that ranged from
providing simple advice to solving production problems. In addition to
learning many lessons unique to software reliability, I have taken to
heart the traits that shape beneficial human interaction in all contexts:
honesty, openness, and humility.
Here are some of the more important roles I have held as an employee or contributor to open source projects:
- Apache HTTP Server Project, Apache Portable
Runtime Project
Committer, Project Management Committee member, ASF member, V.P. for Apache Portable Runtime - Oracle HTTP Server
Architect - Sun GlassFish Web Stack
Different roles, including Engineering Lead for the product and Architect for the Apache HTTP Server component - IBM HTTP Server
Team lead for development and L3 support
Regarding specific expertise, consider first the technologies used in the bulk of my current work, which I've used successfully across a number of projects:
- Web applications
- Backends written in the Python programming language and varying amounts of JavaScript in the browser
- Using the Django web application framework, along with Django CMS, django REST Framework, Tastypie, and other Django extensions ("apps") as appropriate
- Using Celery with RabbitMQ or Huey with Redis for task management
- Using PostgreSQL, Redis, memcached, and occasionally other services
- Using Google, Twilio, Sendgrid, Authorize.net, Square, and/or other cloud services
- Deployed to virtualized Linux servers with Ansible
- Automatically backed up and maintained with a mixture of Ansible, Python, and Bash scripting
In support of those more obvious skills, I have years of experience developing and diagnosing problems in web applications, open source and commercial web servers and other networking software, helping me to effectively address many different types of problems or other considerations which can arise with web applications.
Here is a rundown of my experiences in today’s most in-demand areas of IT:
- C Extensive I started programming with C in 1985 and it was my primary or secondary language for many years, including network-layer products at IBM and network applications. I was one of the several most frequent committers to Apache HTTP Server and Apache Portable Runtime over a long period of time, working extensively in portable code, such as bundled plugin modules that provide different types of processing for requests, as well as system-specific code, such as the MPMs for Windows and Unix, which manage processes and threads and the mapping of requests to them. I’ve used many of the usual build tools extensively — several make flavors, autoconf, libtool, cmake. I did much of the work to create maintainable builds of these projects for Windows using cmake.
- Cloud and virtualization Meaningful I’ve deployed applications to popular PaaS platforms such as Google App Engine and Heroku, though my standard deployment is using VPSs running Linux on providers such as Linode and Digital Ocean and managing all the services. Popular tools I've used include VMware, VirtualBox, Vagrant, and Docker. I wrote a web server plugin to route requests by tenant to the proper backend, for one of that employer's early cloud offerings.
- Cybersecurity Meaningful My work in this area has been in the software development, support, and configuration roles, including reviewing code for potential issues, identifying vulnerabilities, and the workflow stemming from third-party reports of suspected vulnerabilities.
- C++ Dated but meaningful I started experimenting with C++ in the late 80’s and used it regularly in the 90’s. I have used it most recently when helping resolve issues in web server plugins written in C++.
- C# Zero
- Data Science Meaningful but not expert Most of my experience is on the data wrangling side — sanity checking, normalizing, or otherwise manipulating data in a variety of formats, using Pandas and other tools in Python or other languages.
- Go Beginner
- Java Meaningful but not expert I started experimenting with Java soon after it came out in the 90’s. In the 2000’s I created some useful Java-based projects that were instrumental for a product I worked on. While supporting web servers in the WebSphere and WebLogic product organizations at IBM and Oracle, I regularly worked on issues with Java applications, so bits of Java code and Java application considerations were never far away. I've worked in mixed Java/Jython and Java/JRuby projects. I still use Java semi-regularly but not at a high level of expertise. Java build tools: Some Ant and Ivy, no Maven, no Gradle
- JavaScript Meaningful but not expert I regularly write useful, and occasionally copious, amounts of JavaScript. I implemented a small project in Angular 1 several years ago, but the remainder of my JavaScript work has not used any frameworks. Most commonly I've used JavaScript to augment backend-rendered pages to add the usual features — behaviors on user action, selected refresh of portions of the page, etc. One of the more interesting pieces of JavaScript I've written was a complex SPA interface for iPads that interacted with the Square native app for scanning credit cards. It utilized some interesting JavaScript libraries, including Resumable.js and jSignature. jQuery? Of course. Webpack is my build tool of choice. I’ve worked in more projects that used Gulp however.
- Linux Extensive expertise Many years of experience, from the time of SLS (floppies!) to this very moment, from configuring Raspberry Pis as appliances to developing and supporting products for Linux on IBM zSeries. Of course, I've developed and debugged applications on a number of other OSs in the Unix family over the years and have a lot of experience with debugging tools, portable as well as system-specific. (I even have a couple of fixes in lsof.)
- Lua Near zero I wrote just enough Lua to experiment with Apache HTTP Server’s mod_lua.
- Machine Learning Beginner I have taken Andrew Ng's well-known machine learning MOOC but as of yet I don't have any practical experience applying it.
- Matlab Meaningful but not expert I've used Octave quite a lot in a machine learning class. (Octave is a largely-compatible open source application.)
- Mobile Development Beginner I’ve experimented a small amount with native development for Android; otherwise, no (but yes to responsive web sites ;) ).
- Pascal Dated Back in the day I wrote loads of Pascal code, and even taught the advanced Pascal course one semester when I was in graduate school. But any current Pascal demand must surely refer to Delphi, which I haven’t touched.
- Perl Meaningful, but not expert Perl was my language of choice for scripting and software testing for a long period. Although I used it mostly on Linux/Unix, the discovery of a decent Perl for z/OS's Unix System Services was a cause for celebration.
- Python Expert I’ve used Python in one way or another for 8+ years. While working in Oracle's WebLogic product organization I wrote a fair amount of Python which was run via Jython. Over the last 5-6 years Python has become my primary language, usually in conjunction with the Django web framework.
- PHP Beginner Nothing beyond small scripts used to experiment with PHP and web servers in order to diagnose suspected problems. I have made a commit or two to the PHP project.
- R Zero
- Ruby Meaningful, but not expert I started working with this in the late 2000’s as a potential successor to my use of Perl for scripting and small applications. I enjoyed it, and still play with it from time to time since I have a JRuby program that reconciles my bank account. A few more recent uses of Ruby: A UC Berkeley MOOC which taught Ruby and RoR, a Sinatra application I studied in order to understand how to integrate its features into another web application, and Dan Grossman's Programming Languages MOOC.
- Scala Beginner I enjoyed Martin Odersky’s Scala MOOC from Coursera, but that’s my only use of the language. Other functional programming languages I've studied recently are SML and Racket, for Dan Grossman's Programming Languages MOOC.
- SQL Meaningful, but not expert I’ve written simple SQL on many occasions, but most commonly interact with it while studying the use of SQL by Django (ORM or migrations) to understand the code or to look for unnecessary queries that weren’t obvious to me from ORM calls.
- Windows native Meaningful, but not expert Most of my Windows development experience in the recent past has been with Apache HTTP Server or Apache Portable Runtime, fixing platform-specific defects and porting enhancements to that platform.
Education
Undergraduate
-
University of Alabama, College of Arts and Sciences
Major: Applied Mathematics
Minors: Computer-Based Honors Program (now known as the Randall Research Scholars Program), English
Graduate
-
University of Alabama, College of Engineering
Master of Science in Computer Science
Recent professional development
- Online learning with Coursera, Udacity, etc., as recently as 2018
- Conferences such as ApacheCon, All Things Open, DjangoCon, and some local conferences