I dislike lazily enumerated lists of every degree ever acquired, position ever held, and skill ever learned. Context is far more insightful and interesting. So here’s a brief history of my experiences, when I learned each skill, and a few mentionable projects.
(Alternative formats of my experience: traditional CV or 1-page resume)

  • 2002: Self-taught basic HTML and the late 90’s art of making ugly sites with dumb gifs
  • 2004: Learned my first programming language, QBasic ❤ to make ASCII “videos”
  • 2006-2007: First year university courses introduced me to C++
    • 2008: Built a C++-based HTTP 1.1 web server for a course project
  • 2008: Self-taught C for networking applications
    • Built a file copying program and an IRC-like chat application
  • 2009-2010: Year-and-a-half long internship at Qualcomm Canada
    • Kernel-level development in C for video processing drivers
    • Created custom test case generator in C++
  • 2010: Internetworking course introduced me to Linux networking and Cisco IOS
    • Discovered the Holy Trinity for debugging: tcpdump, ping, and traceroute
  • 2010-2011: Self-taught basic Objective-C for Apple iOS app development
    • App collected and monitored vehicle telemetry via the OBD-II interface
  • 2011: First foray into Python (no types, what?!) for summer research
    • Used to verify and build new models in an optical network simulator
  • 2011: Picked up CUDA-C for a course project
    • Parallelized video-editing software performing high dynamic range (HDR) imaging
  • 2012-2021: Joined the SAVI project as a developer and sysadmin
    • Self-taught Bash scripting and regex through debugging and enhancing OpenStack’s horrendously long stack.sh script
    • Created top-level network management component, written in Python, that configures the underlying network via OpenFlow
    • Picked up SQL, Git, Docker, Kubernetes, and manually making way too many RJ45 Ethernet cables along the way…
    • Experienced many pitfalls developing, operating and maintaining clusters of distributed servers, networks, and the software services within them. The lessons learned are summarized here.
  • 2013: Prototyped a system to survey users while they watch videos
    • Built a simple web app, learning JavaScript and CSS in the process
    • Used ffmpeg to generate and edit custom video content
  • 2014: Picked up basic Java while debugging and fixing an Android application
  • 2015: Learned Ansible for automating multi-server software deployments
    • Side note: I’ve since created my own Bash scripts to do pretty much the same thing; much easier to debug
  • 2016: Self-taught NodeJS for creating the back-end of a NetFlow analysis framework
  • 2016: Fiddled with Perl to debug and enhance a course auto-marking suite
  • 2016: Created a Python-based tool to deploy multi-region VXLAN SDN overlay networks
    • Used in at least two courses to teach students software-defined networking (SDN)
  • 2017: Self-taught Go to create a monitoring tool to track changes in network latency
  • 2017: Supervised team of summer students to develop a framework for tracking and counting people by sniffing Wi-Fi frames
  • 2019-2020: Led a team of 4th year students in developing a P2P service mesh using Go
    • A subset of the work was part of the students’ capstone project
    • Codenamed PhysarumSM, the service mesh was built upon the libp2p framework
    • PhysarumSM was published in Integrated Management (IM) 2021
  • 2019-2020: Created a new lab environment & auto-marking framework in pure Bash
    • Enables students to work remotely, auto-updates, and remotely submit work
    • Usable for variety of courses from basic programming to networking
  • 2021-Present: Led software team in the design & development of a suite of drivers and other tools as part of a space access launch stack
    • Designed, extended, or refactored software related to: flight management, GNC, ECU, TVC, and flight termination subsystems
    • Interfaced with various sensors & actuators via a variety of communication standards, including RS-232/RS-422 UART, CAN, I2C/SMBus, as well as traditional TCP/IP
    • Avionics software stack largely built on the ROS2 framework