A Short Summary of My Projects

This post will be updated semi-regularly alongside new blog posts highlighting projects which I find to be most significant in terms of my capabilities and learning experience.

Extracurricular Projects

Minecraft Server Stats

Using Java, Eclipse Jetty, and a Minecraft server statistics API, I created a simple website for my friends to be able to see the status of any Minecraft server I was running. The displayed status includes server name, domain, port, offline or online, Minecraft version, and player count.

I’ve recently upgraded the server to use a React frontend and Spring Boot backend with a 3-second cache, with the ability to change which servers have their statuses reported at runtime. The same URL works, and the GitHub repository is here.

SaraAI

One of my first forays into HTTP-based software was this Discord bot which utilized Discord’s publicly-accessible API. What this bot would do was listen in on all the messages it had access to and record the frequencies each word would appear at, alongside the frequencies of the very next word that would appear later. The information would be stored in a JSON file periodically in the case of random crashes. Using this stored data, SaraAI, randomly or by calling it, would randomly choose words, weighted by frequency, and continue to choose words until it encountered the end of a sentence. Technically, the end of a message would count as another word, allowing for SaraAI to randomly choose to end a message.

Long Exposure Averager

The long exposure averager, or picture averager, was a command-line application written in Java which used OpenCV to read videos and images and create a long exposure-style image by stacking each frame on top of one another and either take the average pixel values, take the average of the squared pixel values, or keep the brightest pixel. I want to return to this project at some point in the future and improve the code structure and possibly introduce some convolutional neural network processing to potentially improve the quality of the output images.

Hackabull 2023 - Runner Game

During Hackabull 2023, a 24-hour hackathon, my two teammates and I created an infinite runner game that plays somewhat like Subway Surfers, but rather than being a 3D runner, it was a 2.5D runner, occurring on a flat plane but having objects to jump over and slide under.

Conway’s Game of Life

Using the Godot Engine, I created an implementation of Conway’s Game of Life that uses Godot’s built-in dictionary type, a hashmap, to process an arbitrarily high number of cells.

School Projects

Next Frame Prediction

For my introductory machine learning course in Summer 2024, as my final project I wrote a Python application which implemented a custom convolutional neural network in PyTorch which, trained on the UCF101 dataset, would attempt to predict the next frames given a set of input frames. The neural network was successful in being able to predict somewhat realistic single next frame predictions, but when used multiple times to produce multiple frames, the neural network failed to maintain a cohesive image.

Video Interpolation (in progress)

For my Capstone I project, I am collaborating with four other classmates to create a full stack video interpolation project. The plan is to implement a neural network which is exposed with a REST API that allows users of a JavaFX-based desktop application to upload videos to the server and produce an interpolated video by predicting the middle frames of the uploaded video. So far, I have developed a working PyTorch model and training loop with a Spring Boot-based server that serves video tensors to the training model.

The project has evolved somewhat with my recent knowledge of React. In the future, the project will become a webapp that will allow users to upload the videos from their browser and download the resulting videos easily. The full stack will now be a React-based website frontend, with a Spring Boot REST API that interfaces with the Python neural network processor. When a video is uploaded to the website, it will be queued for processing, after which a frame-interpolated video with an effectively doubled framerate will be made available to the user.

This article was updated on January 16, 2025