Mandelbrot Set Generator
Coded in Java, this program generates color images of the Mandelbrot set and Julia set.
I utilized the convenience of multithreading in Java with lambda functions to fully utilize
a multithreaded processor. The final program has a simple user interface in which you can
drag click to move around in the set and scroll to zoom in and out. It also allows for
capturing high resolution images of the set at the current location and zoom with keyboard shortcuts.
HTTP 1.1 Server
This HTTP server was coded entirely in C using the C standard libraries, as well as openssl3 and zlib.
It utilizes pthreads to handle multiple connections at once, openssl3 to implement HTTPS, and also zlib
for serving compressed content. I just finished implementing HTTPS to allow for secure connections using
TSL sockets. This has been my most ambitions upgrade after changing from HTTP/1.0, as the openssl documentation
is a little spotty.
The server is currently implementing the full HTTP 1.1 protocol which allows caching and continuous connections for multiple requests. I broke down the problem into two structures and files that handle each structure. By breaking down the problem this way, it should be easy to implement new methods and serve dynamic webpages.
In the future, I plan to also implement a server using the HTTP2 protocol, but this is a significant change from the text based 1.0 and 1.1 protocols, so it will likely require a full redesign. It would also be interesting to try to implement more dynamic services.
Versions of this program can be given on request as I don't wish to needlessly expose potential vulnerabilities. Just email me and I can give you a version of the code.
The server is currently implementing the full HTTP 1.1 protocol which allows caching and continuous connections for multiple requests. I broke down the problem into two structures and files that handle each structure. By breaking down the problem this way, it should be easy to implement new methods and serve dynamic webpages.
In the future, I plan to also implement a server using the HTTP2 protocol, but this is a significant change from the text based 1.0 and 1.1 protocols, so it will likely require a full redesign. It would also be interesting to try to implement more dynamic services.
Versions of this program can be given on request as I don't wish to needlessly expose potential vulnerabilities. Just email me and I can give you a version of the code.
Music Based RGB Light Controller
This project uses a Raspberry Pi to control a RBG light strip based on an AUX audio input.
The Raspberry Pi is controlled by a Java program I wrote that analyzes the FFT of the
audio input to change the color and intensity of the light. The native 5v GPIO of the
Raspberry Pi controls three MOSFETs to supply the lights with 12v DC.
Some of the source code to this project can be found here.
Some of the source code to this project can be found here.
Text Depixelator
This program depixelates images of a certain font. It uses a procedural approach
by trying one letter at a time and computing the difference between the two images.
My program is much faster than other project as it was coded entirely in Java,
a compiled language.
All of the source code is found on my github located here.
This is the image that inspired this project:
and after running my program on the file I found out that the first word was confidently "Sample" as seen below. It wasn't exactly what I wanted but the code I wrote is widely applicable.
All of the source code is found on my github located here.
This is the image that inspired this project:

and after running my program on the file I found out that the first word was confidently "Sample" as seen below. It wasn't exactly what I wanted but the code I wrote is widely applicable.


Mancala AI
This program uses a minimax algorithm to play mancala
optimally. There are many rule-sets for mancala, but this AI only plays under the Kalah rule-set.
Although this is a relatively simple game, there are still a great number of board states, so the minimax
algorithm must utilize alpha-beta pruning. I also attempted using a hash to save board states, but ultimately
this did not improve performance. If the AI goes first, it seems to be practically solved, as I have been
unable to beat it. Going second, it still performs very well against most players.
I also made a version of this program with the 'avalanche' rule-set. With these rules, even with randomized starting positions, it is often possible for the player going first to win on the first turn.
All of the source code is found on my github located here.
I also made a version of this program with the 'avalanche' rule-set. With these rules, even with randomized starting positions, it is often possible for the player going first to win on the first turn.
All of the source code is found on my github located here.