Other projects

Home > Projects > Other projects

Poker AI

Tech used: Python, Desmos
Graph of agent performance | Output of the program

One of my favorite classes at JMU was an artificial intelligence class I took my senior year. The project throughout the semester was to iteratively build a bot to play poker in Python. We started by writing a scoring function and using hill climbing with random restart to play Poker Squares. Then we moved to the final project which was to have the agent play Texas Hold 'em. I achieved this by sampling to figure out my probability of winning compared to the other players then compared that percentage to the pot odds (pot odds = call amount/total pot size). This gave the agent a reasonably accurate idea of whether to fold or bet. What I found particularly interesting here was how the agent's performance scaled when the number of samples taken was increased. The more samples the agent performed the more accurate their pot odds calculation was which means more samples lead to a higher stack gain (See graph).

Minecraft redstone computing

The video game Minecraft has a wiring system called Redstone built in which is Turing complete. This means it could theoretically be used to simulate any computer. I started by building all the basic logic gates using Redstone then slowly figured out how to simulate more pieces of a modern computer. Eventually I had an 8 bit storage system, a clock to manage updates to the storage, and binary displays to show the data. Putting everything together I built a device which encodes 8 bits into a single wire as long and short pulses, similarly to how morse code works. On the other end an arbitrary distance away is a decoder which takes the long and short pulses and decodes them into an 8 bit series which can be displayed or used for processing.

Portable VR PC build for JMU

I've built several computers for myself or friends but this was my first build as part of a job. While working as a teacher's assistant at James Madison University I was approached by the professor and asked to choose parts and build a portable VR ready PC on a $2,000 budget. I chose the parts that I thought best fit the intention and verified their compatibility with PCPartPicker. After the build everything came out as expected. Final specs were an i9, Nvidia 2080ti, and 64 GB of RAM mounted on a mini atx board which ran HTC Vive programs flawlessly.

SQL DB normalization/frontend

Tech used: MySQL, Visual Paradigm, PHP, Java, CSS, JS
PHP/JS Frontend | E/R diagram used for project

In my databases class at JMU the main assignment for the semester was to normalize the IMDB database into Boyce-Codd Normal Form. To do this my team performed the necessary changes to the E/R diagram to make the database normalized. We then wrote a combination of Java and SQL scripts to create the tables and migrate the data from the source database to our new, normalized, database. Once this was complete we created a basic injection safe web frontend based on php and javascript with css styling.

Y86 disassembler and interpreter

Tech used: C, Y86 assembly
Snippet of code from main.c

In one of my computer systems class at JMU the main assignment for the semester was to create a Y86 disassembler and interpreter in C. This program would take a Y86 assembly program in, decode the elf header and then perform each step in the fetch, decode, execute cycle. It acted as a virtual CPU, maintaining flags and registers and modifying them as the program instructed.

Slack Bot

Tech used: Ruby, Lita, Slack, TestRails
My Slack-bot in action

During my internship at Cvent I was asked to create a Slack bot to manage user licenses to a service used internally. This was done using Lita, a chatbot written in Ruby with an optional Slack connector. Using this bot, employees who wanted a license the the program could just type "LucidChart add @<username>" and be immediately given access with no need to contact administrators.

Church service live-streaming

Tech used: Blackmagic capture card, Wirecast, Youtube
Church Youtube page

During my internship at Kilmarnock Baptist Church I was asked to design and implement a system to stream each weekly service to YouTube in 1080p on a $1,000 budget. In order to achieve this I needed cameras to record with, capture cards to ingest the video, and software to manage overlays and switching between cameras. In the end I wired some Sony video cameras into Blackmagic capture cards and then into Wirecast. I could then connect Wirecast to the church's YouTube account and stream live. This system is still used to stream the service every Sunday.