Home | Projects | Blog


Projects

These are some of my projects, but some more things can be found on my GitHub. I’ve put a 📌 next to all my favorite projects.

Table of Contents


Personal Projects

These projects are things I have done on my own time for fun or to explore a new topic I want to learn. Here you will find mostly games I have attempted to make, but also some tools I have developed for my own use.

Ray Tracing

This project can’t really be attributed to me since it was a guided by an online and free textbook called Ray Tracing in One Weekend written by Peter Shirley. However, it was a cool, fun, and accessible project that I wanted to share. True to the name, I did in fact read the entire textbook and complete the project over a weekend while in college; I wanted an excuse to learn a little more about C++, a language that still baffles me sometimes.

rtx weekend

rtx picture

This project really doesn’t have much of a description other than that I thought it’d be cool to have my own link shortener, so I made one. It’s not particularly sophisticated, but it works well enough for my small scale use. The site uses a base62 counter to generate UIDs for links that do not use custom aliases, and it maps those IDs or aliases to the corresponding destination. Links are persisted by writing the program state to files.

I’ve also learned some lessons about the internet through this project. I wrote about those here: Lessons Learned From Creating My URL Shortening Site.

URL Shortener

ethans.link example

📌 DCS Real Weather

This project brings some nice flavor to missions in DCS World, a flight combat simulator made by Eagle Dynamics. The project fetches live METAR data from a given airport using CheckWxAPI and then updates a supplied mission file with this real world weather. The project was inspired by DCS Weather Injector by destotelhorus, but that project ended support, and the group I was part of wanted a compiled, standalone program that could be incorporated into the server scripts. Despite not playing DCS all that much anymore, I still enjoy maintaining this tool for the hundred or so users it has.

Real Weather

real weather

Simple Restful HTML Games

As a way to learn about REST APIs and how to make webservers in Go, I decided to make some very simple games. Using only Go, HTML, and redirects, I recreated tictactoe and checkers. The result is quite crude, but it was an interesting way to test out some basic webserver stuff with Go. If you really want to play them, the games are hosted here.

Restful HTML Games

rest games

GoPong

To teach myself Go, one of the very projects I took on was making Pong using SDL2 bindings. I started off by following the tutorial series Games With Go by Jack Mott. At the completion of the tutorial series, I tested my understanding by expanding upon the game. Read a little more detail on the GitHub page, or view the releases to download and try the game yourself.

GoPong

pong

Research Projects

In both high school and college, I was passionate about undergraduate research. I worked in two different laboratories, one in cognitive science called the Computational Cognition and Learning Laboratory, and the other in intelligent systems engineering which we just called the Roth Lab since Dr. Eatai Roth was the principal investigator. Here are some of the projects I completed while working in those labs.

📌 Haptic Robot Arm

My primary project while working in the Roth Lab was to develop a haptic robotic arm. Most people are familiar with haptics through small vibration motors found in things like mobile phones and game controllers, but the haptics I studied sought to simulate more complicated touch-feedback that could be used for studying human-machine interactions. If that sounds interesting, there is more detail on the GitHub linked below. I also made some slides for a presentation while I was still working on the project in 2020, you can view those too if you’d like.

haptic-arm

📌 Haptic Back-Drivable Servo

The first project I completed in the Roth Lab was a mimic project based off a Hackaday post (which I no longer seem able to find). The goal was to modify a standard RC servo into a haptic device. By intentionally weakening the servo horn, some rigidity was removed. This allowed a magnet to be mounted in the servo horn which then enabled deflections of the servo horn to be detected via a hall effect sensor. By measuring the magnitude of deflection the total force could be calculated with the help of numerical integration.

This processing was done on an Arduino also driving the servo, so that the input could be processed and the servo driven to simulate the kinematics of a damped spring. Unfortunately the code seems to have been lost to somewhere beyond my knowledge, but I do have this poster which I presented after 10 weeks of working in the Roth Lab. Click the image for a high resolution PDF.

haptic servo

Temporal Heat Map

In my senior year of high school, I developed a visual research tool to help interpret eye tracking data taken from studies done in the Computational Cognition and Learning Lab. The tool creates a heat map and incorporates some function of time to weight certain parts of the data. The poster below was made about halfway through the project and isn’t very good in all honesty, but I also made these slides for a presentation to my lab group which are of slightly higher quality. Click the poster for a higher resolution PDF.

heat_map

Dyadic Social Interaction Visualizer

My first year working in the CCL Lab, I was tasked with developing a visual tool to aid in studying interactions between parent and child subjects. The tool takes data from a top-down camera looking at a table where the subjects play with prescribed toys. The interface then uses precoded data which describes when certain behaviors and interactions happen, and it plots these events in a spatially representative way. The tool also compares behaviors and shows researchers the proportion of time which two behaviors intersect. Click the poster for a higher resolution PDF.

eye tracking


Class Projects

Below are some of my favorite projects and assignments from courses I have completed.

📌 Pathfinding Simulations

This project was a part of an advanced robotics course where we focused on different ways robots can navigate and understand the environments around them. The class touched on topics like LIDAR mapping, pathfinding, and the Robot Operating System (ROS). These pathfinding simulations evolved throughout the course as we studied different methods of control and planning. While the code isn’t particularly elegant, I find the resulting simulations to be quite satisfying. A more detailed write-up and further videos can be found on the GitHub.

pathfinding simulations

Machine Learning Role Playing Game

This project was completed as part of my classwork for an intelligent systems and cloud computing class. The game is a simple web RPG with a few characters and different move types. The player clicks on actions and the AI simultaneously takes an action. The computer opponent uses Q-learning to develop the optimal strategy. You can read a much more in depth write-up on the GitHub page. It’s not a very fun game, but feel free to try it out here.

go-ml-rpg

rpg

Strain Sense Wearable Device

“Strain Sense” was a proof-of-concept wearable device completed as the final project of a wearable sensors class. I completed this project in collaboration with a friend of mine. The project uses a PyBadge along with the internal accelerometer and an external flexible resistor to monitor the activity of people as they sit and work/learn at home. Unfortunately the project is hard to demonstrate since it requires the hardware, but a detailed write-up and some video examples are available on my GitHub.

strain sense

straing sense

📌 N-body Simulation of Massive Bodies

As a combination physics and high performance computing project, I created a simple n-body simulation of gravitational bodies. At the project page below, I discuss the restricted 3-body problem in reasonable depth, but the code can also scale with systems of many bodies. The simulation is done through C++, and the visualizations are created afterwards with Python.

n-body-simulation

n body simulation

Astronomical Image Processing

One of the classes I took over the summer for fun focused on the art of astronomy. For the final project in this class, I used OpenCV and Python to create a program that could process astronomical data and turn it into pretty pictures.

astro image processing

astro processing

Electrocardiogram

Using an Arduino and AD8232 heart sensor, I made an electrocardiogram and studied how its functions could be understood through electricity and magnetism. A formal report on the project is available via the GitHub link.

electrocardiogram

ecg

WIP Abandoned Projects

I’m not ashamed to admit I’ve got a few skeletons in my closet. I like to try new things and learn new things, and sometimes that means finding stuff I don’t like or don’t want to continue, so here are some of the things I’ve started but never finished for one reason or another.

Space Game

This game is a simple “game” developed in Unity. I tasked myself with wanting to learn how to develop inside of a game engine, and I picked Unity for its popularity and vast network of tutorials. This game was the first game I ever tried to develop entirely on my own. It’s not that fun, but it can be played here if you’re really interested.

space-game

space game

Coffee Shop

This project started as a collaboration with a couple of my friends. The idea was to port a game that has been a longtime childhood favorite, coffee shop, to a mobile format and with some newly imagined features, but it never really took off since we were busy college students at the time.

View on GitHub