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