Projects

Since finishing my PhD in 2022 I've been directing my engineering and creative efforts towards a variety of interesting projects. Some of the more interesting ones I've worked on since then include:

  1. Rust Aviation Map

    Avionics are an especially attractive application for Rust, since they are generally implemented in a systems-oriented language and are a safety-critical system that can benefit from Rust's inherent memory safety guarantees. However, those systems tend to be written in older, more mature systems languages for certification reasons and have not yet So to gain experience with the language, I've been building a pure Rust library for rendering a real-time aviation map.

    My goal is to keep developing the library until it approaches having the functionality required for basic VFR navigation. During flight training I learned the FAA publishes all its airport/navigation data in machine-readable formats, so I'm also building the library to exclusively run off of official, publicly available aviation and topographic data.

    The first iteration of this project processed the FAA-provided aviation data and NOAA-provided sattelite topological data to render an image of the terrain, airspaces, airports, and waypoints anywhere in the continental US. The second iteration got it running as a multi-threaded realtime interactive application using the same software renderer. I'm currently working on the third iteration, which will switch to GPU based rendering and hopefully implement most of the remaining map features.

  2. Home Automation

    I've been slowly hacking together a custom home automation system over the last couple years. Currently it controls my house's HVAC system, records data from temperature/environment sensors scattered around the inside and outside of the house, controls many custom smart light strips I made, and manages all the house's security sensors and alarms.

    Initially the system's purpose was to replace my failing thermostat. Once I realized the old thermostate was essentially just touching wires together depending on a temperature reading, I bought a Raspberry Pi Pico for $6, some relays, and a thermistor, and threw them all together to control my heater, A/C, and fan. Some time later I became jealous of a friend who could control their house lighting using their phone, and after finding that I could buy controllable LED strips I combined them with more Picos to achieve the same effect for myself. Even later, my inactive home security system started to malfunction and I had to disable it entirely. In that process I discovered that it had way more sensors than I had previously assumed, and that they were all essentially just reed switches that triggered on different events. So I bought even more Picos and hooked them up to these sensors, allowing the home automation system to control my fire alarm and report on the state of the house's doors, motion sensors, and smoke/heat/water sensors.

    The entire system is built using Python for both the Pico boards and the server that coordinates them all. Additionally, I dipped my toes back into Android development to make a simple app I can use to control and monitor all that from my phone. Going forward I'm planning on extending the system to support security cameras, and potentially a mechanism to manually open and close the house's vented windows depending on the inside and outside temperatures.

  3. Nutrition Tracker

    I had long wanted to make a small CLI food tracker and nutrition calculator for myself, so when I first started learning the Rust programming language I built exactly that. The basic idea is to combine human-readable 'ingredient' and 'food' descriptions like these:

    Leek soup 1 1500g 2 leek 1 yellow onion 25g olive oil 3 gold potato 2 zucchini 8 garlic 4 cup water 30g vegetable base 0.125 cup quinoa 2g black pepper 2g salt Potato 0.35 100g 83 cal 2g protein 0.3g fat 18g carbs 14g fiber 0.5g sugar Egg Bagel 1 5g butter 1 green onion 1 egg 5g olive oil 1g salt 1 bagel 15g cream cheese 10g cheese mix 5g arugula 5g sriracha

    With food logs like these:

    = 2024-01-27 2 hot chocolate 1 sushi rice 2 egg 2 hash brown = 2024-02-24 1 green onion pancake 60g chocolate chips 1 sushi rice 3 egg = 2024-03-10 1 egg bagel 2 fruit drink 10g peanuts 1 sushi rice 1 home fries

    To automatically calculate daily nutrition sums like this:

    = 2024-01-27 2109.1 cal 132.3 g fat 384.3 mg cholesterol 3208.7 mg sodium 200.4 g carbs 64 g fiber 34.2 g sugar 26.7 g protein = 2024-02-24 2149.8 cal 126.3 g fat 619.3 mg cholesterol 3897.6 mg sodium 201.4 g carbs 5.4 g fiber 49.6 g sugar 45.8 g protein = 2024-03-10 2375.4 cal 114.2 g fat 248.2 mg cholesterol 2646.6 mg sodium 261.8 g carbs 47.4 g fiber 112.6 g sugar 33 g protein

    I've been using the tracker daily since finishing it, and it's been very helpful so I consider it a success. Despite being a relatively simple project, writing this small tool helped me better understand a lot of parts of Rust I hadn't previously dealt with. Now that the tool's basic functionality is in place, I may eventually extend it to perform automated meal planning or some amount of 'inventory' tracking.

  4. Games

    VR started to be a real thing just about around when I started grad school, and despite always being jealous of the people working on that stuff I could never justify trying it myself while I was focusing on my studies. Luckily, now that has changed!

    I experimented with Unity and Unreal 5 as game engines for VR development, and decided to go with Unreal because its open source nature clearly makes it way more flexible and easy to learn about. Since then, I've found Unreal to be a great platform for the kind of physics-based and interaction-focused games I'm interested in experimenting with. The Meta Quest 2 has also been a very easy and well-supported VR development platform to work with as a hobbyist, which was a pleasant surprise.

  5. This Website

    Making this website has also been a fun project, especially since I hadn't touched any web dev stuff in about ten years prior to this. I've been happy to find that the new semantic HTML5 tags and new CSS layout features make HTML feel like a bit less of a hack! In addition to creating the site's content, I also made a simple templating system to produce the pages themselves and wrote the web server that serves them (also in Rust).