Eric M. Hopper
Seattle, WA
(206) 588-5677
eric-job@omnifarious.org

Social Media

StackOverflow: http://stackoverflow.com/users/167958/omnifarious GitHub: https://bitbucket.org/omnifarious/ LinkedIn: https://www.linkedin.com/in/omnifarious/


Summary


Skilled engineer with strong communications skills gathered over 25 years of industry experience. Able to innovate, and advocate successfully for a vision with technical and non-technical stakeholders. Committed to high-quality, reusable code that will stand the test of time.

Technologies


Languages
C++, Python, Java, perl, C, SQL, Scheme, Pascal, FORTRAN, bash, bourne shell, shell scripting, assembly language, 6502 assembly, 68000 assembly, Ruby, Ant, Puppet, Ansible
APIs
Java, STL, JNI, PRO*C, Win32, AES, DES, 3DES, CGI, POSIX threads, POSIX, Unix, X-Windows, Xerces, TurboGears, OpenSSL, WSGI
Operating Systems
RedHat Linux, Linux, Unix, Solaris, HP-UX, AIX, True 64 Unix, Microsoft Windows NT, Microsoft Windows 2000, Microsoft Windws 7
Protocols
SSL, NFS, NIS, IPv6, NTP, VPN, HTTP, SMTP, LDAP, SNMP, TCP/IP, UDP/IP, IP, Ethernet, SSL, CORBA, RPC, 802.1q, VLAN, X.509, ssh, secsh
Ideas
OO design, OO programming, functional programming, extreme programming, test-first design, code reviews, system administration, cryptography, multi-threaded programming, network administration, firewalls, PKI, P2P, relational databases, code reviews, distributed systems, XML, layer-2 networking, security, computer security, secure coding, cryptography, abstract algebra, reed-solomon coding
Other
Sybase, Oracle, Visual C++, ssh, NIS, NFS, ethernet, NTP, logical volume manager, cron, CVS, Subversion, Apache, HTML, CSS, GNU Emacs, GNU C++, GNU C, Networking Hardware, VirtualBox, Jenkins, Bugzilla

Experience


Good examples of my writing and code can be found in the technical section of my website at http://www.omnifarious.org/~hopper/technical/

Please also see my 'Other Experience' section.

02/2020-10/2021
QAnalysts (at Facebook)

Here I was a build and release engineer for a set of research data collection platforms (hardware and software) supporting Facebook's augmented reality and virtual reality research.

  • Changed build process to no longer involve many manual steps to combine piece from different developers.
  • Implemented upgrade process that allows simple and reliable upgrades of existing software without re-imaging whole device.
  • Planned and guided implementation of new imaging process that leveraged existing OS imaging instead of using error prone and laborious custom process.
  • Simplified, streamlined, and oversaw process for calibrating and qualifying hardware/software platforms for use in research data collections.
  • Educated new team on build and qualification processes (and the complications of each) when several research platforms were transitioned to a product team.
  • Coordinated and tracked parts of process involving other teams and made sure internal processes continued to support our use-cases.
03/2018-07/2020
Unloop (Volunteer)

Here I volunteer for individual tutoring and also group instruction on computer science fundamentals for the recently incarcerated.

  • Come up with lesson plans for computer science concepts.
  • Dyanmically individualize instruction for strengths and weaknesses of particular class participants.
  • Answer questions about programming, software engineering, computer science, or the software industry.
10/2018-10/2019
Virtuosity Consulting (at ServiceNow)

Here I was hired to be a senior devops engineer for the datacenters and systems that support ServiceNow's software as a service.

  • Drove monitoring effort for Confluent Kafka and introduced new processes to measure operations readiness to support new infrastructure services.
  • Wrote several Confluent Kafka monitoring scripts in Python, and the Puppet configurations necessary to deploy them.
  • Created, planned, and kicked off an effort to vastly improve Python deployment, testing, and packaging withing the systems engineer organization..
05/2018-10/2018
Virtuosity Consulting (at Microsoft/Mojang)

Here I was hired to be the tech lead for a team in India with little C++ experience assist Mojang in refactoring parts of the Minecraft Bedrock engine.

  • Learn CMake, then teach it to the team in India and assist in designing and creating CMake based build system for Bedrock engine.
  • Suggest useful changes to the code or development processes at Mojang.
  • Educate C# programmers on important subtle differences between C# and C++.
  • Come up with coding standards for new C++ constructs used in adding intrusive profiler to Minecraft Bedrock engine.
05/2017-02/2018
Virtuosity Consulting (at Microsoft)

Here I was hired to help a team with little Linux experience port a feature of SQL Server to Linux. This feature involved SQL Server launching R, Python, and other processes to handle parts of the query, and in order to continue to meet SQL Server security guarantees, these processes had to be isolated from one-another.

  • Designing and building a Docker-like process isolation system for SQL Server external query processes on Linux using Linux namespaces, cgroups, and capabilities in C++ to enable Linux to be at feature parity with Windows.
  • Re-writing that same system in Go once requirements changed.
  • Educating others about Linux systems level programming so code could be extended and maintained after my contract ended.
  • Educating others about the cultural concerns surrounding Linux systems and Open Source.
04/2013-12/2016
Break for personal reasons

During this time I had to take a break from the working world for personal reasons. I did some professionally relevant programming and studying during this time. Here are some highlights:

  • Taught myself a new branch of math related to error correction and cryptography.
  • Wrote a Python library to allow me to do arbitrary galois field calculations as part of my learning (you can see it on my BitBucket account).
  • Achieved a Toastmasters' Competent Communicator certification and partly completed an Advanced Communicator Bronze certification.
  • Gave some instruction on beginning and intermediate level computer science concepts.
01/2012-04/2013
Innovative Converged Devices (renamed to 1066 labs, then acquired by DAQRI)

Build Engineer

Linux, bash, Windows 7, VirtualBox, Jenkins, Mercurial, Git, Subversion, C++, Windows Automotive, Bugzilla

I was hired to bring order to a very chaotic development process at ICD. Through clever use of VirtualBox and Jenkins I was able to ensure the repeatability of builds of Windows Automotive based software. Through planning, training and automation I was able to assist developers in using the Git source repository in a way conducive to well-managed software development.

  • Maintain and administer Git source repositories both locally and on Github
  • Ensure repeatability of bilds of Windows Automative based software
  • Set up and maintain Bugzilla bug reporting systems
  • Provided internal training, support and automation for source repository and bug reporting tools.
08/10-02/11
iMatch LLC

Release Engineer

Linux, bash, Hudson, Mercurial, Subversion, C++

I worked for iMatch on a contract they had with a company that (among other things) serves advertising. I was the build and release engineer for a hosted ad serving system written in C++, and also played the role of technical lead for the same project.

  • Key resource when team members needed technical assistance with open source technologies.
  • Championed coding techniques for achieving higher quality.
  • Managed the team's source repository and continuous integration system.
  • Sucessfully used Mercurial as a tool for dealing with indiscriminate branching in a Subversion repository and re-exported the result back to Subversion.
  • Played a role in managing people and personalities to help the team become more effective.
03/10-06/10
TradeTech

Systems Administrator

Linux, Postfix, Python, Perl, bash

I worked here as a system administrator shoring up their systems until they hired someone permanently.

  • Designed and implemented spam filter customization wrapper for gluing spamassassin and postfix together.
  • Created a wiki for capturing tribal knowledge.
  • Provided consulting that resulted in significant performance improvements for their web application.
09/08-04/09
Attachmate

Senior Software Engineer

C++, Linux, Unix, PKI, OpenSSL, ssh, secsh

Assisted in development of Attachmate's implementation of ssh (i.e. the IETF secsh standard). I assisted in reviewing code for bugs, making design decisions with a security impact and writing code to fix bugs and add new features.

  • Discovered important bugs in code by inspection. Either fixed bugs myself or assisted in fixing them. Assisted in creating tests to show bug's existence and prevent regression.
  • Convinced people to clearly articulate the reasons for design choices, and discovered better ways to optimize all design criteria.
  • Learned new complex cryptography APIs and implemented software on top of them.
  • Helped several team members learn better and safer C++ coding techniques. Wrote reusable code demonstrating those techniques.
11/07-02/08
Evri

Build Engineer

Ant, Subversion, Linux, Maven

I was the build engineer for Evri. I was responsible for making sure the build environment, build system, and source control system supported the needs of the developers who used it.

  • Improved integration with Maven so many build products could be removed from source control.
  • Made several tweaks to improve modularity of Ant scripts as well as moving them from a procedural to a declarative style so developers could invoke any target at any time instead of having to invoke them in a particular order.
  • Made a case for and sketched out preliminary plans for moving to a distributed source control system. Git was already informally used by many developers.
  • Changed build system to invoke new automated deployment system to run integrated, full-system tests.
  • Moved several operations from external perl scripts into Ant so the build was easier to understand.
  • Assisted test engineer in understanding and using Ant to its full capabilities.
02/07-08/07
Regence Blue Shield on a contract for Kforce.

Release Manager

Python, AIX, Java, Source Code Management, Turbogears, Ant

I was a release coordinator for Regence. I managed the source code control system, official builds, the build system, and releases for a team of developers. I also did other miscellaneous coordination tasks as required, and was sometimes called on to investigate version histories to determine how some change happened or where lost changes might be.

I was also responsible for ensuring that developers have followed Regence policies and good software engineering practices in both testing and creating a system that can be built with a well defined set of tools.

  • Wrote a web app in Turbogears (a Python web app framework) to automate certain portions of my job and provide better visibility into which builds of which projects have been released.
  • Started building mindshare and comfort with new version control tools that work better than existing tools to ease possible future transition to those tools.
  • Ensured mission critical applications were not deployed to production without adequate testing.
  • Provided a communications channel for disparate groups to learn surprising ways their actions might affect each other, thereby enabling them to make better plans to minimize the negative impact of those actions.
  • Coordinated the actions of different groups to ensure that an environment is adequately set up for a new piece of software or changes to an existing piece of software.
05/06-11/06
Lockdown Networks

Senior Software Engineer

Ruby, Linux, Layer-2 networking, switches, Ethernet, VLAN, 802.1q, SNMP

Lockdown Networks makes a network appliance that controls the switches on your network in an attempt to enforce a security policy that both ensures only authorized users use the network, and that those user's systems are clear of various forms of infectious software. It does this by isolating them from the main network until they pass a configurable policy.

  • Add and/or confirm support for new switches in the Ruby based switch controller.
  • Participate in design discussions about future directions for various parts of the software.
06/05-05/06
TeraCloud Inc.

Senior Software Engineer

C++, Linux, TCP/IP, HTTP, SSL, XML, Xerces, OO design, OO programming, Python, z/OS, mainframe

TeraCloud makes software that customers use to get a handle on what all the hard-drive space is being used for on the computers they own. It does this using an agent that's installed on the computers whose storage is to be monitored, a server that maintains a database and periodically fetches data from the agents, and a client that queries the server for its data.

  • Maintain an agent that acts as an ersatz web service written in C++ that runs on an IBM mainframe running z/OS. This agent makes calls to mainframe assembly code written by other programmers in the organization and it also queries VSAM tables.
  • Act as a resource for questions about Unix systems and C++.
  • Participate in design decisions and reviews for all parts of TeraCloud's product line.
11/03-05/05
Amazon.com

SDE III (Software Development Engineer 3)

Linux, C, C++, TCP/IP, relational databases, Oracle, multi-threaded programming, Python, shell scripting, NFS, system administration, OO design, OO programming, perl

Amazon is the worlds biggest online retailer. I worked in the supply-chain side of things where Amazon makes extensive use of information technology to reduce costs.

  • Front-line, pageable support for common errors and problems of a set of Amazon's supply-chain Oracle databases. More difficult problems were brought to the attention of an Oracle DBA.
  • Wrote reports in perl and Python that combined data from multiple data sources to provide insight into holiday supply-chain operations for upper management.
  • Maintained existing C, C++, and perl code.
  • Answered questions about internal details of Unix, Linux and Oracle for developers and support staff.
  • Provided some mentoring for less experienced developers.
2/01-3/03
TIE Commerce (formerly St. Paul Software)

Senior Software Engineer

Unix, Linux, Solaris, AIX, HP-UX, C, C++, Java, TCP/IP, SMTP, relational databases, multi-threaded programming, Python, shell scripting, cron, CVS, Subversion, test-first design, extreme programming, NIS, NFS, system administration, OO design, OO programming, perl, Ethernet, IPv6, cryptography, AES

  • Unix, systems programming and software engineering mentor/guru.
  • Managed version control, meshed backups with ITs backup scheme using Unix shell scripts and cron.
  • Administered hardware and software environments for Product Development using NIS and NFS. Also compiled, installed and maintained Open Source tools for our various platforms.
  • Fixed bugs and implemented new features in flagship eVision product, which was written in C++ and Java. Solved many tricky issues involving interactions between threads and other operating system features. Worked to plan least risky change that would solve a customer's problem.
  • Developed escalation procedures for support department and assisted in implementing them.
  • Led an effort to port all existing C++ code to the new ISO C++ standard to increase portability.

The code that I wrote when I worked at St. Paul Software is still in operation. Of the sections of code of that maturity level, it is among the most bug free.

8/99-2/01
eBenX

Senior Software Engineer

C, Unix, Solaris, Linux, Sybase, relational databases, CVS, OO design, OO programming, Python, perl, CGI

eBenX administrates healthcare plans for large companies. From a technical standpoint, this mostly involves reading large payroll databases exported in a flat file format into a database, then exporting the data to insurance companies in the format they ask for.

  • Developed procedures and software for release and version management using Python, Sybase, and CVS
  • Answered questions about Unix and systems programming
  • Assisted Keith Willenson in re-engineering mission critical software.
5/97-7/99
Global Maintech (http://www.globalmt.com)

Senior Software Engineer

Unix, Tru 64 Unix, DEC, Linux, embedded systems, realtime systems, C, C++, perl, Java, JNI, multi-threaded programming, CVS, OO design, OO programming, TCP/IP, SNMP, OS/2, HMC, shell scripting, software engineering

This company makes a unique enterprise management product. It's a combined hardware/software solution that's capable of agentless management of a wide range of systems, including mainframes, Unix, VMS, and some NT.

  • Implemented program to assist in testing using TCP/IP and my StreamModule framework.
  • Transformed script interpreter into daemon that forks copies of itself to lower startup time for scripts.
  • Debugged SNMP and OS/2 based system for managing IBM mainframes.
  • Visited several different customer sites for onsite service and repair of software. Our customer's opinion of our company repeatedly went up on the basis of my knowledge, analytic ability, honesty, and experience.
  • Assisted in creating multithreaded object-oriented designs and answered questions on C++ and Unix issues.
  • Participated in a system of rigorous code review.
3/96-5/97
St. Paul Software, St Paul, Minnesota (currently known as TIE Commerce)

Software Author

Unix, DGUX, SCO Unix, AIX, Solaris, Microsoft Windows NT, C++, C, perl, shell scripting, TCP/IP, Visual C++, protocol design, OO design, OO programming

This company creates software that helps people work with EDI (Electronic Data Interchange) transactions. At the time that I worked there most of the software was in C, but they were moving to C++. They were using C++ for most new development. The software had also been moving to a three tier client/server architecture. Their product ran on almost any flavor of Unix or MSDOS. They had been trying to port to NT, and were about midway through porting/re-architecting for the NT platform when I left. Most of my work there was on the 2nd tier of a three-tier client/server system.

  • Sole designer and implementor of middle tier of three-tier client server architecture. Used StreamModule.
  • Also responsible for communications protocol between UI and middle tier.
    • Documented this well enough that another program that used the protocol was written in Java after I left.
  • Learned Windows NT and ported middle tier to NT in three months.
  • Wrote a perl script to automate FTP uploads and downloads of EDI data to and from a mainframe.
  • Coded a perl script that mapped data from several formats into one format.
  • Served as a C++ and Unix mentor/guru, assisted other developers in moving to C++ from C.
  • Helped identify and solve systems portability issues.
10/95-12/95
Insource, Oklahoma City, Oklahoma

Software Engineer

Unix, Solaris, C, Oracle, relational database, protocol design

This company is a consulting firm that often hires outside contractors. At that time in Oklahoma City, they did most of the Unix/C/Oracle development for a company called Datatimes. Datatimes marketed a search engine running on MS Windows that connected via an X.25 network to a multiple terabyte database of news articles. The database ran on a Sun Solaris platform. All of my work there was done under Solaris 2.4, and used Oracle PRO*C for all database accesses.

  • Learned Oracle's Pro*C in a couple of weeks and wrote code that processed large queries of several joined tables.
  • Took initiative in suggesting and implementing design changes to increase portability in the future.
  • Coordinated changes between middleware, management GUI and end-user GUI.
1/93-9/95
WinterFire Software, Inc., St. Paul, Minnesota

Software Engineer

C++, Microsoft Windows 3.1, Unix, OO design, OO programming, Paradox, relational databases

This company consulted for companies trying to move their programming shops towards a more object oriented way of doing things. WinterFire designed and wrote object oriented software. I wrote pieces of the software WinterFire's clients had contracted for. All of the work was in C++, usually for IBM PC's running DOS, or MS Windows. My typical project was to write a few C++ classes that interfaced with a relational database and provided services for a user interface layer.

  • Wrote a large piece of a code generator currently used at a client site to write a highly praised hospital control and scheduling application.
  • Ported StreamModule to OS/2 and used it for the same hospital scheduling package.
  • Designed and implemented part of a translation layer between an object oriented database and a relational database.
9/89-2/95
Bellboy Incorporated, St. Louis Park, Minnesota

Software Engineer

C, C++, GW-Basic, QuickBasic, MS-DOS, Windows 3.1, Paradox, B-Trees, system administration, Quatro Pro, OO design, OO programming

Wrote and maintained programs in C, C++, GW-BASIC, and QuickBasic for PCs running MS-DOS, MS Windows, and Lantastic. This was mostly accounting and inventory control software.

  • Learned Paradox and wrote a useful application with multi-table entry forms, lookup tables, a several level menu hierarchy, and a wide variety of report formats within 2 1/2 days of getting Paradox.
  • Sole IT person for 10 PC shop. Troubleshoot and solve all software problems, and advise on a course of action for hardware problems.
  • Wrote software that significantly improved the speed and accuracy of accounting.
  • Wrote my own B-Tree based database manager
9/89-7/92
University of Minnesota, Minneapolis, Minnesota (volunteer work)

C, C++, Unix, Solaris, HP-UX, FORTRAN, Pascal, Scheme, shell scripting, X-Windows, Motif

Helped maintain a network of Sun Sparcstations and HP Series 400 workstations. Volunteer consultant for students working with C, C++, FORTRAN, and Pascal on Sun Sparcstations, or an Encore Multimax running a BSD 4.3 compatible, multi-processor Unix.

  • Answered programming questions from students ranging from freshman to graduate students.
  • Also answered questions about systems and networking
  • Helped system administrators maintain the campus computing facilities
  • Wrote software to generate and analyze data for a paper on usefulness of TCP or UDP over ATM for video traffic
8/88-7/89
Electronic Specialties, Brooklyn Park, Minnesota

Software Engineer

C, MS-DOS

Wrote a program for MSDOS that serves as a simple database for blind people. It is a substitute for those things that most people would use notes by the telephone or personal organizers. This was done on contract while I was still in high school. This program should now be commercially available.

  • Created new version of CP/M based filing application for MS-DOS.
  • With advice from a blind person, carefully tweaked the user interface to work well for someone using a text-to-voice system.

Other related experience


8/92-present

I've owned and administer a Unix system in my home. This system was running SCO Unix 3.2r4 until late 1993, when I switched to UnixWare. I switched again in 1999 to running Linux. It's currently not serving anything right now, though I expect that to change in the near future.

Right now, this page is hosted on a server at a hosting company.

Here is a list of stuff running on my home network that I've installed, and configured myself:

  • postfix based mail server (where most of my mail is delivered)
  • Firewall, with logging of likely intrusion attempts (there are several a day)
  • Web servers (http://www.omnifarious.org/, and http://hg.omnifarious.org/~hopper/) with and without SSL.
  • IMAP server (with and without SSL)
  • DNS server
  • IPv6, every computer on the network has a globally routable IPv6 address.
  • GNU mailman mailing list server
  • DHCP server
  • NTP time server

There has never been a successful break in on my network except for the time I unwisely allowed someone to run a Windows 2000 server on it. There are many attempts per day to do so.

This résumé is hand coded in conforming XHTML. This entire site is hand coded in more-or-less conforming HTML or XHTML.

Open Source Projects
The StreamModule system

This project has been licensed to some of my employers under a proprietary license, and has gone through a complete refactoring or two as I discovered more about the problem domain.

Mercurial

Mercurial is a version control system I found, and liked so much I started contributing to the project. The project is written in Python, and you can check out the commit log for the project to see what kinds of things I've added to it. I've also written a simple Python program to keep a Mercurial repository in sync with a directory in a Perforce depot.

Here is an explicit link to my changes in the commit log: https://www.mercurial-scm.org/repo/hg/log?rev=hopper%40omnifarious.org&revcount=65

Education


In the course of pursuing a BS in computer science at the University of MN, I wrote several notable pieces of software. The dates are important. Few people were doing any serious distributed computing in 1991.

In 1989, wrote a Mandlebrot set generator using TCP/IP to distribute processing over several CPUs from different manufacturers.

In 1990, wrote a C++ class library around XLib, a low level X-Windows function library. Motif builds on Xt, which builds on XLib.

In 1991, wrote an asynchronous I/O, and event processing package in C++ that was the genesis of the StreamModule system. This package was subsequently used with TCP/IP in a distributed ray tracing application. When we ran the application we achieved a nearly linear speedup proportional to the number of processors used.

References


Available upon request.




Email Snail mail Web page
eric-job@omnifarious.org Eric Hopper
123 Bellevue Ave E APT K
Seattle, WA 98102-5514
Phone: (206) 588-5677
http://www.omnifarious.org/~hopper/