This page is my extended Curriculum Vitae containing all my professional achievements. For a more concise overview, please view my resume.
I'm a software engineer and educator. I have six years of industry experience as a software engineer, and I have taught classes at a university level for eight semesters including one graduate level course and six senior level courses.
¶July 2021 - Present
Key Technologies: Matrix, Python, Go
I am building the infrastructure necessary to connect people on every chat network through Matrix. I work mainly on bridges and other backend projects to enable Beeper to grow and add new users.
Notable projects include...
- Reverse engineered and implemented many core features for Beeper Mini including sending media, tapbacks, typing indicators, read receipts, edits, unsends, link previews, adding and removing group members, and changing group names and avatars.
- Started a project called Hungryserv (Matrix-compatible homeserver written in Go) which enabled us to scale from hundreds to tens of thousands of users. I created the initial proof of concept and then was a core member of the team that productionized the project, implementing many core features along the way.
- Streamlined our support team's ability to chat directly with users by building a Chatwoot bot in Go.
- Reverse-engineered the LinkedIn Messaging API and implemented a LinkedIn bridge in Python.
- Measured message send latency and reliability by instrumenting bridge metrics. Built a service to process those metrics and send them to BigQuery.
- Defined a framework for importing users' chat history, and implemented it in the WhatsApp, Facebook, Instagram, and (in progress) iMessage bridges.
¶August 2018 - December 2023
I have had the opportunity to teach courses in mulitple areas of computer science at my alma mater, Colorado School of Mines.
Courses I've taught:
Algorithms (CSCI 406) in Fall 2018, Spring 2022, and Fall 2023.
I taught Algorithms once while I was a graduate student in 2018 under Dr. Dinesh Mehta. I also taught two sections in Spring 2022 using Dr. Mehta's materials. I co-taught the class with Dr. Mehta in Fall 2023.
Topics that the class covers include: analysis of algorithms, evaluation of data structures, sorting algorithms, dynamic programming, graph algorithms, and NP-completeness.
Computer Organization (CSCI 341) in Spring 2023.
I taught Copmuter Organization with Dr. Qi Han in 2023. Topics that the class covers include: RISC-V assembly, pipelining, and memory hierarchy.
Principles of Programming Languages (CSCI 400) in Spring 2019, Fall 2020, Fall 2021, and Fall 2022.
I taught Principles of Programming Languages once as a graduate student in 2019. Topics that the class covered at that time include: programming language concepts, evaluation, and implementation; object-oriented programming; Lambda Calculus; and Racket (a LISP dialect).
I have since taught the course twice under Dr. Jedidiah McClurg in 2020 and 2021, and once under Amelia Read in Fall 2022. Topics that the course covers include: functional programming concepts, type inference, OCaml, programming language implementation, and formal semantics.
Advanced Computer Architecture (CSCI 564) in Spring 2021.
I taught CSCI 564 Advanced Computer Architecture in Spring of 2021. Topics that the class covered included: performance analysis, cache, virtual memory, pipelining, branch prediction, out-of-order execution, and multiprocessors.
I based the course off of the curriculum provided by Dr. Bo Wu and adapted it for hybrid COVID learning. The main additions/changes were adding lecture worksheets to improve student engagement in lectures, modernizing the slides, and reworking the projects starter code to better focus on the core concepts.
¶June 2019 - July 2021
Key Technologies: React JS, C#, SQL
I was a member of the Connected TV engineering team. I worked on all parts of the stack including the C# backend, the React frontend, and the SQL Server backend database.
Notable projects included...
- Implementing ingestion of the ifa_type field in OpenRTB requests across our fleet of high performance bidders. (C#)
- Building many of the features for the Connected TV incremental reach planning tool. (React, NodeJS, C#)
- Designing and implementing major portions of an AI-powered ad campaign strategy recommendation system. (C#, SQL)
Software Engineering Intern
¶May 2018 - August 2018
I worked on the Infra pod on the Tracker team, the team responsible for developing Pivotal Tracker. I anchored the development of a new system for imaging workstations for consistent workflows on all machines used by the Tracker team. I also participated in a LEAN Product process to determine the needs of the Tracker team.
CS@Mines on Tour Presenter
¶January 2017 - May 2018
I gave presentations to high school students about the Computer Science Department at Mines. I also led computer science related workshops for middle school students.
Teachers Assistant (Data Structures)
¶August 2017 - May 2018
I assisted students during TA office hours and during the in-class lab sessions. I was nominated for the Student Employee of the Year by CPW, the faculty member responsible for the course.
Software Development Intern
¶June 2017 - August 2017
I contributed to OSS projects including React and Node.js on behalf of Kenzan. I also worked to improve the Kenzan.com website by implementing a CI/CD Jenkins pipeline with a WebPack build.
¶February 2013 - August 2016
Key Technologies: C#, ExtJS, SQL
I worked on the Teller Development Team designing and building new features for Teller, an enterprise point-of-sale system geared towards municipal governments.
MS Computer Science
¶August 2018 - May 2019
Colorado School of Mines,
I worked with Dr. Dinesh Mehta on a project to automate group selection for projects in CSCI 406 Algorithms.
I served as the Chair of the Mines Association for Computing Machinery (ACM) Student Chapter, the Linux Help Guru of the Linux Users Group, and the Service Chair of the Mines chapter of the Tau Beta Pi Honor Society.
Notable classes I took include...
- Advanced High Performance Computing
- Parallel Computing
- Advanced Computer Architecture
- Abstract Algebra
- Theory of Computation
- Theory of Cryptography
BS Computer Science
¶August 2016 - May 2018
Colorado School of Mines,
I graduated with a degree in Computer Science from Colorado School of Mines. I was awarded the Outstanding Graduating Senior award for Computer Science.
As a student I served one year as the Vice President of the Mines ACM Student Chapter and one and a half years as Secretary of the Mines Linux Users Group (LUG). I made Dean's List every semester of my undergraduate studies.
Notable classes I took include...
- Operating Systems
- Computer Graphics
- Computer Simulations
- Virtual Reality
- Principles of Programming Languages
- Artificial Intelligence
- Software Engineering and Advanced Software Engineering (Field Session)
- Computer Organization
- Linear Algebra
- Data Structures
Mines Transfer Program
¶August 2012 - May 2016
Red Rocks Community College,
Through high school, I took classes at Red Rocks Community College via the transfer program between Colorado School of Mines and Red Rocks. I was a member of the Phi Theta Kappa Honor Society for three years.
Notable classes I took include...
- Spanish Language I and II
- Calculus I, II, III, and Differential Equations
- Chemistry I and II
- Calculus-Based Physics I and II
¶November 2018 - Present
Sublime Music is a native, GTK3 Subsonic, Airsonic, Revel, Gonic, Navidrome, client for the Linux Desktop that is written in Python. Sublime Music allows users to connect to multiple Subsonic API-compliant servers, and browse and play music from those servers.
Other features include being able to play music through Chromecast devices on the same LAN;
Offline Mode and the ability to cache songs for offline listening; a DBus MPRIS
interface integration for controlling Sublime Music via
i3status-rust, KDE Connect, and other DBus MPRIS clients; a sophisticated play
queue; playlist management; and more.
I began this project after migrating to Airsonic for music hosting because I was dissatisfied with the existing Airsonic clients on Linux.
Mines HSPC Website
¶August 2021 - Present
The Mines HSPC website handles registration for the annual CS@Mines High School Programming Competition. It allows teachers to register teams and manages all of the necessary paperwork for students to be able to participate in the event.
The website uses passwordless authentication and also uses email to verify student emails and send parents the forms they need to sign.
I am a maintainer of the Nix Home Manager project with write access to the repository. I review and merge contributions to the Home Manager project.
Tracktime is a filesystem-backed time tracking solution with a command line interface. It uses a sane directory structure to organize CSV files that store time tracking data for each day.
Tracktime allows you to start, stop, resume, and list time entries for a given day. You can also generate reports for a given month in the reStructuredText, PDF, or HTML formats (optionally restricted to a particular customer). Tracktime also allows you to synchronise the time spent on each issue/merge request to GitLab using the GitLab Time Tracking API.
Read my blog post announcing offlinemsmtp v0.3.5: Introducing offlinemsmtp.
offlinemsmtp allows you to use the msmtp SMTP email sending program offline. While offline, it enqueues emails to be sent once an internet connection is established. While online, it sends the emails immediately.
Visplay is a Mines ACM project. It's goal is to create a digital signage system with a dynamic, hierarchical configuration system which can be used in a wide variety of hardware and infrastructure configurations.
I worked on the initial design of the overall architecture of the project. I have also contributed in a project management role. I worked on the Python components of the project which consume the configuration files and generate playlists. I also led development of the web configuration frontend.
Currently, I am working in an advisory role as an industry project mentor.
This project won Second Place at HackCU V.
Read my blog post about this hackathon: HackCU V.
MLocate is a comprehensive system for tracking and locating devices within an indoor space just using Wi-Fi ping signals. Using three specially configured Wi-Fi access points, we were able to capture signal strength from every device in the room by MAC address. Then, applying Radio Signal Strength Indication (RSSI) models, we were able to derive distance from signal strength which allowed us to use standard triangulation algorithms for determining the location of all of every device in the room.
I worked on the triangulation logic for pinpointing device locations given distances calculated from signal strength. I also built the web frontend for displaying device locations.
This project won First Place at the Facebook Global Hackathon Finals at Facebook HQ.
Read my blog post about this hackathon: Facebook Global Hackathon Finals - The Competition.
HypAR Map helps users navigate around unfamiliar locations by overlaying a map of the area using augmented reality. The map can come from any photo (for example, a fire escape plan) and is calibrated using an intuitive user interface. HypAR Map then uses simultaneous location and mapping to find and display the location of the user in the map in real-time.
I worked on the image import functionality and worked with all of the members of the team to ensure that everything connected properly.
HypAR Map was a hackathon project by Sam Sartor, Jack Garner, Fisher Darling, and myself. We developed it during a 24 hour period at the Facebook Global Hackathon Finals at Facebook HQ in Menlo Park, CA.
CS@Mines Demo at Facebook Global Hackathon Finals
This project won Best Use of GCP and the Facebook Best Social Good Hack award at MHacks.
Datanium is a large-scale network of Raspberry Pis which allow for human-powered transfer of data between places with internet access and places which do not. In the Datanium ecosystem, there are two different types of users: consumers and couriers. Consumers request data, and Datanium ensures that couriers move the requested data to the Datanium Node closest to the consuming user. Datanium does this coordination using only SMS.
I worked on the web frontend for requesting and uploading data to the Datanium nodes.
This project won Judges Favorite, Best Use of AWS, and the Dish Network sponsor challenge at HackCU.
Wii-Track is a distributed inventory tracking system. It utilizes a WiiFit, Rasberry Pi, and Arduino to gather information about packages. All heavy computation is done on AWS Lambda and it uses the DynamoDB NoSQL database as a backend.
I worked on setting up the DynamoDB database and implemented a AWS Lambda function to identify packages by weight.
BlockMRS is a privacy concious, decentralized, blockchain-backed, medical record system for the 21st Century. It stores patient records in IPFS using asymmetric encryption giving patients control over their health data.
I led the development of the protocol specification for this decentralized system. I also built the system for storing encrypted medical records in IPFS.
We created our own library called flight for developing VR applications which implemented a new type of program architecture called Deferred Immediate Mode.
This project won the Grand Prize at the 2017 Xilinx PYNQ Hackathon.
Parqyng Lots tracks the number of cars in an arbitrary number of parking lots with an arbitrary number of entrances to create an up-to-date picture of the parking situation.
I built the web frontend which provided a view of the parking lots' status.
Parqyng: Never Look for a Parking Spot Again
Wireless Debugging is a mobile SDK and sample web server for streaming mobile app logs to a web UI console. I worked on this project on a team of five CS students during Mines Computer Science Field Session. This project was done under supervision of Google.
We designed and built a mobile API, log parsing library, datastore interface, user management interface, and web app. I was the primary writer of the API Specification for communicating between each component. I also built the log parsing library and the mobile API implementation for iOS. I was involved in the development of the other components as well.
Chess++ was my final project for CSCI 261 at Colorado School of Mines during the Summer II Semester of 2016.
Chess++ allows two players to play a standard Chess game against one another on the computer.
A quadratic equation which shows the steps required to get an answer.
Quadratic Solver uses MathJax to display beautifully formatted solutions to quadratic equations.
Dreams of Flight
I wrote this creative writing piece about Orville and Wilbur Wright and the first flight at Kitty Hawk for my Twentieth Century World History class in Fall 2013. I had written this piece for an assignment called A Picture is Worth a Thousand Words. We were tasked with writing an approximately 1000 word narrative from the perspective of a person in a significant photo from the 20th Century. Later in 2013 I was published in the 2013 edition of CLARO, Red Rock Community College's Interdisciplinary Scholarly Journal. In May 2014, I presented at the CLARO academic conference.
¶February, September 2023
I gave this presentation at the Mines ACM student chapter as a guest speaker in their tech workshop series. The talk was designed to provide students with a mental model of Git so that they understand how it works, rather than just knowing a bunch of commands.
Architecting for Scale
I gave this presentation at the Mines ACM student chapter as a guest speaker in their tech talk series. The talk was designed to help students understand the architectural challenges that software engineers/architects have to think about. I also presented a case-study in how we are scaling the architecture of Beeper via sharding.
Creating a Matrix Bot in 30 minutes using simplematrixbotlib or maubot
I presented this workshop at the 2022 Berlin Matrix Community Summit with Kim Brose. We covered two Python libraries for writing Matrix bots: maubot and simplematrixbotlib. We presented the libraries and then helped participants create bots using the libraries.
What is Beeper Working on?
I gave this presentation at the 2022 Berlin Matrix Community Summit. I described Beeper's vision, what we have built so far, what our current challenges are and how we are solving them, and what it's like working at Beeper.
Hungryserv: A Homeserver Optimized for Unfederated Use-Cases
I gave this presentation at the 2022 Berlin Matrix Community Summit. I discussed Hungryserv, a homeserver that Beeper is building to optimize unfederated bridge traffic. I also discussed our current architecture and why we decided to start building Hungryserv.
I gave this presentation at the Mines Linux Users Group with Robby Zampino. We discussed what standards exist, and why open standards are better than closed ones. We also gave a few examples of different open standards in many different industries.
I gave this presentation at the Mines Linux Users Group. I covered the basics of GNU make as well as how to make a Makefile.
I gave this presentation at the Mines Linux Users Group. I covered the basics of the Mutt CLI email client. I discussed the basics of using Mutt and some of the most useful configurations including how to configure it to be used with GPG encryption and signatures.
I gave this presentation at the Mines Cybersecurity Club (OreSec) with David Florness. We discussed the cryptographic theory behind PGP/GPG such as symmetric vs. asymmetric encryption and the PGP protocol. Then we had an interactive time where we showed how to use GPG.
I gave this presentation at the Mines Linux Users Group with Jordan Newport. We covered ZSH, an alternative shell to BASH. We discussed everything from the basics, to some really cool quality-of-life improvements which make using the shell enjoyable.
I gave this presentation at the Mines Linux Users Group with Joseph McKinsey. We gave an extensive introduction to the LaTeX typesetting language. We covered everything from the very basics of using LaTeX all the way up to advanced LaTeX topics such as using it for presentations!
¶March 2017, October 2018
I gave this presentation at the Mines Linux Users Group. I discussed the traditional motif for window management and then presented a better alternative: tiling window managers. I presented i3wm, my personal favourite tiling window manager. I talked about the pros of using it as well as how to use it and customize it.
¶March, June 2018
I first gave this presentation at the Mines Linux Users Group with Sam Sartor. We also gave the presentation for the Wednesday tech talk while interning at Pivotal. In both talks, we covered Idris, dependent types, and using Idris as a proof assistant.
Universal Package Formats
I gave this presentation at the Mines Linux Users Group with Robby Zampino. We covered the background and history of packages and package formats, and some of the new universal package formats: AppImage, Snaps, and Flatpak.
I gave this presentation at the Mines Linux Users Group with
We covered the background and history of filesystems and some current filesystems used in
Linux, Windows, and macOS. We also covered some more fringe filesystems like Btrfs and ZFS and
network filesystems such as Samba and sshfs as well as virtual filesystems such as
I gave this presentation at the Mines Linux Users Group. I discussed what SSH is and its applications and then demonstrated how to configure it for easier login and management. Then I briefly talked about how to set up SSH on your own server.
Dreams of Flight
I presented my creative writing piece about Orville and Wilbur Wright at the 2014 CLARO academic conference. I had written this piece for an assignment called A Picture is Worth a Thousand Words. We were tasked with writing an approximately 1000 word narrative from the perspective of a person in a significant photo from the 20th Century.