# Rob McBroom # employment@skurfer.com ## Experience {#experience} ## ### LeafLink ### #### Senior Backend Engineer, May 2022 – August 2025 #### Worked across multiple teams to create a first-class marketplace experience for sellers and buyers. * Implemented a new, frictionless workflow for creating orders approximately 8X faster * Designed a flexible system for interfacing with multiple advertising providers * Improved performance of our brand catalog by 4X, as well as improving other key endpoints * Led the team in implementing best practices and improved coding style * Mentored other developers across different teams ### Six Feet Up ### #### Developer/Senior Developer, August 2014 – May 2022 #### As a developer at a small consulting company, I worked on dozens of projects in different areas, from managing servers to front-end design. My primary role involved writing Python code, but I was also able to apply my experience as a sysadmin. I spent much of my time working with Django, PostgreSQL, Redis, Poetry, Buildout, and other tools common in the Python world. * Custom Django and Flask application design for large, institutional clients * Backend Python-based services * Managing systems and orchestrations using SaltStack * System configuration and maintenance (primarily FreeBSD and Ubuntu) * Supporting the rest of the team as the resident macOS, Homebrew, and Git expert * Custom exports of content from Zope/Plone to JSON or CSV (for clients migrating to Wordpress and other platforms) ### ADESA, Inc. ### #### Linux Administrator, July 2008 – July 2014 #### Responsible for over 100 Red Hat based Linux servers as part of ADESA’s UNIX team. * Manage packages, patches, filesystems, backups, users and groups on Linux systems * Implemented and maintain an LDAP-based system for tracking machines (Linux, OpenLDAP, Python, PHP) * Transitioned systems to centralized authentication (Linux, OpenLDAP, Kerberos) * Implemented Puppet infrastructure for managing servers * Automated monitoring and alerting for Linux systems (Xymon, Python) * Identify and address hardware problems ### Georgia Institute of Technology - Atlanta, GA ### #### Systems Support Specialist II, November 2004 – May 2008 #### Worked in the Office of Information Technology’s Architecture & Infrastructure group providing services to the Georgia Tech campus. Primary responsibilities involved building and maintaining web-based applications and performing a variety of system administration tasks. * Maintained a central web server for hosting 400+ departmental websites (Solaris, Apache, MySQL, Perl, PHP, shell) * Installed/maintained the mailing list server for campus (Linux, Sympa, Postfix, MySQL, Perl, shell) * Developed secure web-based software distribution application (Solaris, Apache, PHP, MySQL, LDAP, Remedy) * Developed code that allows self-service account management web site to interact with various back-end systems (Solaris, Apache, PHP, MySQL, PostgreSQL, Oracle, XML-RPC, LDAP) * Developed back-end for the Frequently Asked Questions website and authored most FAQ content (Solaris, Apache, Perl, HTML, CSS) * Maintained Google search appliance * Scripted migration of calendar events from Oracle Calendar to Zimbra (Linux, Oracle Calendar, Zimbra, shell) * Maintained the newsgroup server for campus (Solaris, INN, Diablo) * Supported customers via e-mail, phone, and face to face * Maintained top-level web infrastructure (to support www.gatech.edu) [backup role] (Solaris, Apache, MySQL, shell) * Maintained central web-based e-mail client (based on IMP) [backup role] (Solaris, Apache, PHP, MySQL, IMAP, LDAP) ### Quicksilver ### #### Lead Developer, December 2010 – Present #### Part of a small international [team](https://github.com/quicksilver/Quicksilver/contributors) of volunteer programmers dedicated to maintaining the open source [Quicksilver application](http://qsapp.com/) for macOS. * Fix bugs * Add features * Improve internal structure and stability * Help set direction and priorities for the project * Support users ## Examples {#examples} ## You can always see what I’m up to on [GitHub](https://github.com/skurfer) and [Stack Overflow](http://stackoverflow.com/users/491598/rob-mcbroom). Some of the other projects I’ve worked on are discussed below. ### This Résumé ### I wanted to make my résumé available as both text and HTML without manually maintaining two versions. I also wanted to learn a bit about [Pyramid][pyramid]. The result was a small application that served both the HTML and the original Markdown source. Then, I decided that was overkill and rewrote it using [Flask][flask], which is what you’re viewing now. [pyramid]: http://www.pylonsproject.org/projects/pyramid/about [flask]: https://flask.palletsprojects.com/ ### Managing Machine Info using LDAP ### I can’t take credit for this idea, as it was being done at Georgia Tech, but in my role as system administrator at ADESA, I saw the need to implement it there. When I was hired, Linux machines were being tracked in an Excel spreadsheet. This is sufficient for getting information to human eyes, but I saw an opportunity to automate a large number of tasks by storing the information in a format that both humans and machines could get to. I also wanted to be able to view and change information in a variety of ways, rather than depending on Excel. The answer was OpenLDAP for a number of reasons. * Many existing applications (Postfix, Puppet) can use LDAP data * LDAP tools are pre-installed on most systems * It’s available in most scripting environments (Shell, Python, PHP, Perl) * The data can be viewed and edited in many ways (including plain-text) * The data’s structure is more flexible than a spreadsheet or RDBMS * We were going to need an LDAP server anyway (for authentication) * It’s easy for people to read and gather information * It’s easy for machines and automated processes to read and gather information ## Skills {#skills} ## (In order of proficiency) ### Languages ### {: .floatlist} * Python * Objective-C * HTML/CSS * Markdown * Shell Scripting * Swift ### Development ### {: .floatlist} * Django * Flask * Pyramid * Plone * Zope ### Data Sources ### {: .floatlist} * OpenLDAP * PostgreSQL * JSON * CSV * MySQL * ZODB * SQLite * Redis * Parquet ### Operating Systems ### {: .floatlist} * NeXTstep/Mac OS X/macOS * Linux (Debian, RHEL, Ubuntu) * Microsoft Windows * FreeBSD * Solaris * AIX * MS-DOS * Mac OS ### Tools and Applications ### {: .floatlist} * Quicksilver * TextMate * Zed * Visual Studio Code * Homebrew * Git * Poetry * Pipenv * tmux * Xcode * Vim * Dash * Xymon (formerly Hobbit) * Remedy AR System User Tool * Microsoft Office Suite ### Services ### {: .floatlist} * SSH * Nginx * Varnish * HAProxy * Apache * Postfix * Kafka * Kerberos * IMAP (UW, Dovecot) * DHCP * BIND (DNS) * inetd/xinetd * NFS ### Other ### {: .floatlist} * OpenSSL * Puppet * SaltStack * Docker * Kubernetes * Amazon Web Services ## Education {#education} ## ### Indiana University - Bloomington, IN ### #### BS, Information Systems, May 1998 #### Studied Computer Information Systems in the IU School of Business. A strong interest in math and science is reflected in courses taken outside of the School of Business. ## Training {#training} ## * Mastering Python - Big Nerd Ranch * Red Hat Linux System Administration (RH133) - Red Hat Global Learning Services * Solaris 8 Admin II (SA-288) - Sun Training U.S. * UNIX Shell Programming - Georgia Tech Professional Education * Multivendor [UNIX] System Administration - Georgia Tech Professional Education * PHP 5 Bootcamp - Big Nerd Ranch ## Activities {#activities} ## ### IndyPy, 2011 – Present ### Regularly attend monthly meetings of the [Indianapolis Python users’ group][indypy] to discuss Python and other technical topics. [indypy]: https://indypy.org/ ### Volleyball Coach, 2016 – 2019 ### When my daughter was playing for the [Carmel Dads’ Club][cdc], I volunteered to coach her team. [cdc]: https://www.carmeldadsclub.org/ ### Secretary, IU Water Ski Club, 1996 – 1998 ### Created and maintained the club web page. Monitored and responded to club related e-mail. Organized teams to attend tournaments with other schools. Taught and learned various water skiing skills with other club members. Drove and maintained the club’s competition ski boat.