
I've been a software developer since my parents first bought me a TI-99/4A in kindergarten, and professionally since 2000. I've worked on all sorts of systems, including customer service, intranets, data collection, point-of-sale, emergency telephony, automotive sales, and hospitality. I've also been active in the open-source community, both contributing to others' and maintaining my own projects, working in areas like software packaging, web application platforms, virtualization, and deployment.
I believe in simplicity and correctness in software design, seeking to create software that solves problems neatly and understandably, not just in development, but in deployment and operations as well.
Open Source Projects
- brewdo – A sandboxing wrapper for Homebrew
- octothorpe – A Python library for controlling telephony applications
- xon – A library to easily adapt JSON-supporting APIs to readable
Papers and Presentations
-
The Modern Command-line Tool Stack: Pipenv, Click, and Friends
- PyOhio | July 2018
-
Electron in the Real World
- Beer City Code | June 2018
- SE Michigan JavaScript Meetup | March 2018
- CodeMash | January 2018
- SoftwareGR | November 2017
- Michigan!/usr/group | November 2017
-
Security Hygiene for Software Professionals: Lightning Edition
- PyOhio 2017 | July 2017
-
Command Injection, or How /bin/sh can rm -rf your server
- PyOhio | July 2016
-
Making and Taking Calls with Octothorpe
- PyOhio | July 2014
-
Python Packaging and Distribution: bdist_rpm
- Grand Rapids Python User Group | March 2014
-
Packaging and RPM
- DevOps West Michigan | January 2013
Meet the Atoms
- Leadership & Operations
- Development
- Delivery
- Design
- Testing
- GR BhBrittanyBrittany Hunterbio →
- CeCarlCarl Ericksonbio →
- A2 JbJonahJonah Baileybio →
- A2 JfJohnJohn Fisherbio →
- Ch JsJordanJordan Schaenzlebio →
- GR JwJeffJeff Williamsbio →
- MaMicahMicah Allesbio →
- MmMikeMike Marsigliabio →
- MoMaryMary O'Neillbio →
- Ch RcRebeccaRebecca Canterburybio →
- ScShawnShawn Crowleybio →
- AmAdamAdam Medemabio →
- A2 DgDylanDylan Goingsbio →
- DmDanielleDanielle Marsigliabio →
- EeElaineElaine Ezekielbio →
- KdKellyKelly Danielsbio →
- LmLinaLina Millerbio →
- GR TvTerriTerri Vrugginkbio →
- GR AjAllenAllen Janyskabio →
- GR AmAnjaliAnjali Munasinghebio →
- GR AzAlexAlex Zurekbio →
- GR BmBrianBrian Maybio →
- GR BvBrianBrian Vanderwalbio →
- A2 CfCaseyCasey Falkowskibio →
- GR DcDrewDrew Colthorpbio →
- Ch DkDanDan Kelchbio →
- A2 DsDougDoug Shippbio →
- Ch GvGageGage Vander Claybio →
- GR JcJoeJoe Chryslerbio →
- GR JcJonathanJonathan Chafferbio →
- A2 JfJingJing Fanbio →
- GR JpJasonJason Porrittbio →
- GR JrJohnJohn Rublebio →
- A2 JsJakeJake Silasbio →
- A2 KdKoryKory Dondzilabio →
- GR KhKendraKendra Haanbio →
- GR LbLouieLouie Berwangerbio →
- GR LcLydiaLydia Cuperybio →
- GR LeLaurenLauren Ebelsbio →
- A2 MbMattieMattie Behrensbio →
- GR MlMeredithMeredith Lindbio →
- A2 MlMichaelMichael Libio →
- A2 MsMattMatt Sotobio →
- GR MsMikeMike Swietonbio →
- A2 NgNathanielNathaniel Gittlenbio →
- GR NhNickNick Hawnbio →
- GR NhNickNick Hazekampbio →
- GR NkNickNick Keuningbio →
- A2 NpNathanNathan Papesbio →
- GR PbPatrickPatrick Baconbio →
- A2 PpPatrickPatrick Palebio →
- Ch PpPavanPavan Policherlabio →
- A2 RbRobRob Bellbio →
- GR RmRachaelRachael McQuaterbio →
- A2 RrRebeccaRebecca Rayfordbio →
- Ch SbSimonSimon Budisavljevicbio →
- A2 SsSivhaunSivhaun Serabio →
- A2 StSamSam Tahiribio →
- Ch TkTeagenTeagen Kielbio →
- GR TsTyTy Swansonbio →
- A2 VrVivianaViviana Rosas Romerobio →
- A2 ZjZacharyZachary Johnsonbio →
- InInternsAtomic Interns→