I graduated from Oregon State University in June of 2024 with a
BS in Computer Science. My focus was computer systems, which involved
operating systems, computer networking & security,
compilers, and embedded systems.
During my time at OSU I learned many practical skills on a range
of topics; I learned how to work on a large project as
part of a team, organizational and time management skills,
practical development processes, and a number of different
languages, tools, and techniques.
My senior capstone project presentation at the College of Engineering expo
My senior capstone project was a prototype data logger designed
for amateur aerospace and automotive enthusiasts called the
Personal Data Acquisition Prototype, or P-DAQ. It is a physical
device that can be attached to a cart, bike, model rocket, etc.
with sensors for measuring temperature, acceleration, and GPS position
to monitor performance. Our project targets an untapped market;
devices such as this exist on the market already, but they are
designed for industry professionals and are prohibitively expensive
for amateur hobbyists. Our device is designed to be cheap, modular and
easy to setup and use in order to target these potential users.
I worked as part of a team consisting of myself, my classmates Aidan Agee,
Jake Goodwin, and Patrick Iacob, along with industry professional
Chris Patton, former SpaceX engineer.
The project was developed from start to finished in Rust over nine
months with the direction of our project partner Chris Patton and
the oversight of a teacher's assistant. After completion, me and my
teammates presented our project at a public expo for College of
Engineering capstone projects.
I was part of the UI development subteam, and my focus was on data processing and display. I created data structures and functions to automatically refresh and asynchronously receive read data from a SQLite database to be displayed in graphs and tables using the Rust eGui framework. I took great effort to ensure null safety and modularity, to reduce unexpected behavior and allow for extensibility if sensors are added and removed.
Top of the user interface home page showing graphs of acceleration and temperature over time
The user interface was designed by myself and my teammate Aidan Agee using the eGui Rust framework. It is hosted as a Rust Rocket webserver from the Raspberry PI, which could then be connected to over WiFi by a user's personal device. The map, graphs, and tables in the UI all use asynchronous functions to live-update based on data from the device's sensors stored in a SQLite database.
A snapshot of the project kanban board
For this project we learned the practicalities of version
control and project & team organization. We loosely followed the Scrum
framework, holding weekly meetings with both our project TA and project
partner to review progress and plan sprints.
Along the way we learned the importance of establishing appropriate deadlines
regularly reporting our progress, and by the end
of the project we were working very well together and I am proud
of what we created.
The course taught us how to explicitly define requirements,
architecture, and our development process in documents and how
to write up weekly reports. This was unfamiliar to us at first
because we had never needed to explicitly define these things
as we had never worked on a project of this scale or duration
before, but it ended up being useful to clearly define our plans
and expectations beforehand.
GIF demonstrating smallsh's features (sped up)
A small shell made in C for my operating systems class as an exercise
to learn how forking and processes work. Reads user input and
parses it into command and arguments. Implements built-in
commands cd
, status
and exit
;
all other commands are executed by forking the process and
replacing the child using the built in Unix command exec
.
Also supports input and
output redirection, running processes in the background, and reading
the shell's pid.
Plot of project simulation results
Active queue management (AQM) is a general approach for managing congestion in computer networks. As part of a group project for my Computer Networking class myself and two classmates researched, implemented, and tested several different AQM techniques. We read a series of IEEE papers where each technique was first introduced, then based on what we read we implemented the techniques in the NS3 C++ network simulator, ran experiments with them, and finally reported our results, which roughly matched what we found in our research.