Boasting strong team management and project development skills, I’ve invested in a wide array of successful computer applications, playing an integral role in artistic, investigative and practical endeavors.
A Node.js web application for the UMW music department that allows students to sign up for scheduled recitals and faculty to search, delete, view and manage submissions. Contributors include Christopher Richters and Kyle Ortiz (Bootstrap front-end), and Simeon Neisler and Yasmeen Alhinty (Express back-end). I designed the UI prototype, created the database schema, built the MySQL database and worked with Will Jones to implement CRUD functionality.
Intended to assist with library cataloging and purchasing decisions, this Ionic React progressive web application utilizes the Capacitor barcode scanner plugin to help users quickly discover Google Books by ISBN code. Integrates Firebase federated Google login to allow authenticated users to save found books to their private Google Bookshelf. ISBN scanning is available only through the Android version.
Created as part of National Novel Generation Month 2019, this Python program converts videos into pages of ASCII art, which can be viewed as an animation in Adobe Acrobat. This was accomplished by splitting videos into frames through the OpenCV library, converting individual frames to ASCII art using a function created by Christian Diener, and writing the output to a PDF with the ReportLab and PyPDF2 libraries. The flipbook was nominated by Hugo van Kemenade for inclusion in the Electronic Literature Collection.
Styled after a currency exchange board, this p5.js animation represents the current system time in terms of daily accumulated earnings per country. At each tick, the earnings increment by the number of cents an average person would make a second if they worked non-stop, for twenty-four hours. The rate of change depends on the median salary for that country, divided by the number of seconds in a year. The animation also lists a product or service an individual in that country could afford to buy given their current accumulated earnings, thus making visible a global disparity in wealth.
Written in Python with the help of Momal Juda, this Raspberry Pi breadboard project utilizes an array of eight flashlights, along with Timidity, WiringPi and PyGame, to create an air piano. Each flashlight shines onto a photoresistor connected to a Raspberry Pi GPIO pin. When you “press” a key by blocking the light beam, the Pi detects the change in resistance and plays the corresponding musical note. The air piano is portable and can be played on any surface, including the floor. The project was presented during UMW’s 2019 Research and Creativity Symposium, where it was awarded third best program of the year.
A multithreaded C program that computes word frequency in two corpuses, and calculates the log likelihood ratio of each word occurring in both texts. Ratios are outputted in descending order, with most statistically significant words listed first. Optimized through the use of hashtables for word frequency computation and red-black binary search trees for sorting by log likelihood.
Designed and written in collaboration with team members Sabine Wills and Jessica Thomas, Finding Fun in Fredericksburg is a travel website that provides address and rating information for various fictional locations in the Fredericksburg, Virginia area. Users can create accounts and query attractions based on a category and/or search phrase. The website was created using PHP and connects to a normalized MySQL database that we designed. I styled the website and implemented the database schema and data access for the search engine.
Styled after the popular Zork text adventure, this quirky and adorable game, created together with Lauren Wooten, Margaux Tucker and Katie Melhuish, moves the player through the world of a mischievous housecat, on a quest to obtain the elusive porcelain cat. Written in Java, this text adventure features multiple rooms, and supports NPCs, player health and command sentence parsing.
Choosing college classes and calculating time conflicts can become a real hassle. I wrote this Java program to simplify the course registration process. Using the LocalTime library, the scheduler processes the location, date and meeting times of prospective classes from a CSV file and outputs a text-based, visual representation of the weekly schedule, together with the total credit count, the amount of time between classes, and any errors or conflicts.
Inspired by my own difficulties learning to program for the first time in my AP Computer Science class, I created the Java Duck to help beginners push through their creative coding blocks by explaining essential programming concepts, applications and ethical issues in easy-to-understand terms. Working to clear up stereotypes and misconceptions, I ultimately wrote the WordPress website to reveal programming’s empowering and creative potential, showing students that anyone can learn to do it with practice.
This probabilistic, knowledge-based Python agent solves the quintessential AI “Wumpus world” problem, navigating through a partially-observable grid world teeming with bottomless pits, brick walls and a terrible AI-consuming monster known as a wumpus. The agent’s task is to find gold as efficiently as possible, using its limited percepts to make inferences about the location of obstacles. Optimized through the use of A* search.
This adversarial chess playing AI, run on a game simulator written by Stephen Davies, consists of a minimax search algorithm that chooses the move with the highest estimated turnout using a simple, material balance-based heuristic function. The search process is optimized through the use of alpha-beta pruning, Zobrist keys and transposition tables.
Using data provided by the US Department of Agriculture, Hannah Frederick and I conducted this statistical analysis of wildfire causes, complete with contingency tables, kernel density estimates, LOESS lines and box plots. After examining the state, duration, size, landowner and year of wildfires, we employed Bayes’ algorithm to predict wildfire causes, reaching 65% accuracy. We used SQL for data munging, and a Colab Google cloud GPU for machine learning.
As a joint Python project with Hannah Frederick and Sarah Wessel, this analysis examines over 12 million job listing statistics donated by Indeed.com for the 2018 DataFest, in order to provide career advice for high school graduates. I worked specifically to join the dataset with geographic information and plot job availability across the country using the Basemap library. We employed SQL for data munging and a Colab Google cloud GPU for intensive statistical computations.
Conducted with Bradley Dufour, this statistical analysis of Nobel Prize laureates, using data culled from the Nobel Prize API, examines the ratio between men and women based on prize category, institution and country. The analysis was performed using the Python libraries SciPy, matplotlib, pandas and NumPy.