Project Portfolio

Here lives an abridged list of projects that I have either worked on in the past or am currently working on. Everything on this page is a personal project unless otherwise mentioned that it was work or class related.

Discord Activity Grapher

For those that don't know Discord is a popular text chat, group call and screen sharing platform (among other things) recently valuated at $15 billion. What this project does is displays the chat activity of members of a community or group chat as intuitive "time vs activity plots" as a way to analyze user trends.

In its current form, this project is set up to parse JSON files containing discord server chat histories and graph them so you can easily see overall activity over time of a certain person, which channels get the most use, etc. It's a pretty nifty tool so I hope to release a more polished version one day; unfortunately do to Discord's relatively rapid development the tool I had previously been using to obtain JSON logs is quite out of date so I will need to look into a newer tool for that.

The heat exchangers held together with custom brackets as well as a few water splitters test parts

A heavily soldered 'perf' board - one of several custom circuit boards used for this project. The soldering is not beautiful but I am actually quite happy that I managed to fit everything on this board. For reference this is an opto-isolated 5x relay array each with their own current shunt used to control and test individual heating elements.

Smart Pool Heater

Over the summer of 2022 I worked on a 'smart pool heater'. This would be one of those "because I can" projects rather than the most practical pool heater. As such it was mostly was used as a learning experience, but to it's credit there are some cool features and it can in fact heat water at upwards of 1800 watts of output power making it suitable for small to medium above ground Intex pools. It also used peltier devices for a modest efficiency increase over purely resistive heaters when connected to an appropriately sized reservoir.

This project involved:

  • -Designing brackets to hold the heat exchangers

  • -Designing a 3D-printable water splitter for diverting flow over multiple heat exchangers in parallel.

  • - Modifying server power supplies to provide DC current to peltier-based heat exchangers on demand.

  • - Writing firmware to run the system, track power usage, control water pumps, check for possible malfunctions that would lead to overheating, etc.

  • - Designing circuit boards

  • - Etching PCBs

  • - A significant amount of soldering both to perf boards and PCBs

  • - Making thermal grease from scratch

  • - Other misc. tasks including routing tubing, calculations and simulations, researching and testing components.

Catalyst: A Chess Engine

A fancy name for a less fancy 'chess engine' and GUI. Written in Java.

I don't expect to ever be much better than average at chess but I remain interested in it none the less. It seems only natural for any programmer who also considers themselves a chess enthusiast to have something resembling a chess engine lying and this is exactly that.

The main goal was just to build it for fun so there aren't plans to create a top tier competitive engine for TCEC or anything. In fact its moves are virtually random due to a very limited search depth and arbitrary heuristics. But if anyone sees this who has a chess engine of their own feel free to contact me about playing a game. Disclaimer I have yet to implement UCI communication but will make that effort as soon as I hear someone is interested.

FAQ: Yes it can do Castling, Promotion, and "En Passant"

2D-Game Tools for Processing

A while ago I began a project aimed at making the creation of 2-D (top down) RPG-style games easier within the processing environment. In it's current form the engine is a java library that allows for user input and allows the creation of tile-maps. In the future will ideally handle collision detection and asset rendering as well.

Seen here is a somewhat lackluster example of the button system used to create a cookie-clicker-like game featuring a list of placeholder buttons and a clickable scotcheroo!

A data display library for Processing

Another project I have on the backburner is a suite of data visualization tools which I hope to eventually release as open-source for the processing community. While it won't necessarily replace the current go-to library, 'graphica,' it has been a good learning experience in creating an intuitive API and provides some nice features such as additional chart types, real-time data collection queues, and even basic statistical capabilities such as regression tests for more scientific needs. It is ideal for Arduino data collection over serial.

Seen here is a very early sample featuring a linear line of best fit for some test data generated from Perlin noise. Also shown is a sample vertical bar graph with unrelated data, the eventual plan is to include several more types of graphs and tables with highly customizable layouts.

Scanline Enumerator and Multifunction Pixel Rendering Apparatus

A GPU made entirely of 'Redstone logic' made to be integrated with other 'Minecraft CPUs' via peripheral interfaces. Its main focus is to render sprite data either sent from the CPU or stored in vRAM making things like text much more powerful while still being able to draw arbitrary images via direct pixel manipulation to the screen. This compares to more conventional ways of creating Minecraft-based-computer displays which often separate display functions such that text requires dedicated segment displays and cannot be rendered to an additional pixel-based display without manipulating individual pixels.

Pictured is a poorly framed image of a 32x32 pixel screen made with 2x2 memory cells I designed myself rendering text sent to it from a test ROM (which in this case intentionally drew the letters in the wrong orientation.)

I have also built a more conventional CPU out of Redstone and an equivalent emulator and rudimentary assembler to program it. I even coded snake by hand in machine code to prove that it works.