I'm a 22 year old programmer from Seattle, Washington.
I first took an interest in programming from playing Minecraft. I started programming initially out of desire to recreate something like the survival games from The Hive servers. I never did actually get around to doing that. As a matter of fact, I've completed maybe 2 actual published Bukkit plugins. Regardless, I think that I've come a long way since 2013. Although programming was more or less of a side activity when I first started, I've realized that it's become much more than that for me.
telem-filter
is a C++ program that reads SpaceX telemetry data and attempts to extract the horizontal and
vertical velocity measurements. The big issue with the data was deducing the velocity components
lead to a lot of noise in the output telemetry, which means a lot of curve fitting is generally
needed (ref. caojohnny/liftoff
) in order to get good enough data. However, applying
what I learned in my signals class, I attempted to use a digital filter to condition the output
data. In the end, this lead to a shockingly good result, though somewhat inferior to curve fitting
due to the amount of noise still remaining.
gfold
is a C++
implementation of the G-FOLD algorithm. G-FOLD is a guidance algorithm used on Mars landers and
SpaceX rocket boosters to find the most optimal trajectory given a set of constraints. This project
was a long time coming because I had difficulty finding a sufficiently good C++ library to perform
convex optimization. This program runs one of the numerical examples in the original G-FOLD
specification and plots the optimal trajectory. Unfortunately, I have yet to figure out how to
discretize the algorithm, so the implementation is not yet complete. That being said, it still
serves as a demo of the capability to implement real-time guidance computation in C++.
liftoff
is a C++
program that does much the same thing as caojohnny/telem-filter
, but instead utilizes
curve fitting to condition the data rather than DSP techniques. I selected to curve fit the altitude
data as the majority of the issues lie with the low data resolution of the altitude telemetry. I
then implemented curve fitting using some bit of linear algebra to do a least-squares regression
forced through certain points at the edge of events such as liftoff, main engine cutoff and second
stage engine start. This results in very good data which does not propagate through the motion
derivatives modelled using a physical body toolkit written in the project.
landing
is an
Arduino project utilizing FreeRTOS to implement a basic flight computer. This program interacts with
caojohnny/houston
over USB UART to simulate sensors and flight trajectory planning.
This project utilizes a number of techniques to reduce RAM usage and RTOS task scheduling to
organize several simulated components such as a flight termination systems, guidance/control and
telemetry downlink.
bt-support
is
a Zephyr project written in C++ to provide both bluetooth and USB UART support to an Adafruit
nRF52840 Feather. The bluetooth support permits uplink and downlink to Nordic UART, accessible
through the Bluefruit app.
pbft-java
was
another project that has been in the works for a long time. It is a Java implementation of the
PBFT algorithm, which is a protocol developed to create distributed systems capable of tolerating
Byzantine faults. This project is split up into the client and server specification and
implementation modules, which provides flexibility and conformance guarantees for the design of a
PBFT system. PBFT is used for maintaining blockchain ledgers on multiple systems as well as for
replicated flight computers, such as those used by SpaceX rockets.
data-benchmark
is a benchmarking suite for different methods of persisting data, written in Java. There is a lot of
debate over which method of data storage, between different formats of flatfile such as JSON, YAML
and different databases such as MySQL and SQLite. I wrote a suite to measure and gather empirical
evidence to inform my own decisions and design choices and decided to share it for others to benefit
and to write their own test suites.
molarmass
is a
Java program that determines the molar mass of a compound based on its chemical formula. This is
something that I am particularly proud of because it uses a state machine to parse and build a tree
of compound tokens. This is then parsed to obtain the molar mass of each element and their
quantities. In the end, I did not use this for AP Chemistry; but the fact remains that it was a
really elegant way to compute molar masses, at least in the programmatic sense.
I love spending my free time outdoors. I enjoy riding my road bike, playing soccer and running.