Summer of 2017, I created a new website from scratch for the UTD Ultimate Frisbee team to replace their old website.
Old Website:
Programming Languages Used:
Web Tools Used:
Maps:
Software Used:
Hardware Used:
Skills Learned:
This is the site you are viewing right now.
Created Summer of 2018, this website is coded in HTML, CSS, Javascript, and PHP. It is hosted by an Apache webserver on a Raspbery Pi Model 3+ (see Raspberry Pi 3+ project).
Sponsored by State Farm.
First Place Project @ Spring 2019 CS Expo.
Goal: The goal of our senior design project was to augment the existing beaconless solution (Drivelytics 1.0) and implement application enhancements and an improved scoring algorithm to produce a more accurate and nuanced representation and rating of the driver’s performance and to create an all in one mobile application for State Farm insured drivers.
Impact:
Summary: Throughout the course of the Spring 2019 capstone project, our team researched and implemented enhanced functionalities to the existing Drivelytics mobile application. The three primary enhancements accomplished by our team were speeding, traffic, and construction. These enhancements improve the existing implementation of the driver scoring algorithm by increasing robustness through the addition of new metrics. Additionally, our team implemented push notification support for before and after trips to notify users of drive scores, billing cycles, and emergency weather alerts. Lastly, we added a toggleable option to allow users to customize which additional metrics would influence the calculation of their drive scores. In conclusion, our team was able to improve multiple aspects of the previous semester’s Drivelytics mobile application, such as algorithm design, external data usage, user experience, and application robustness.
Poster:
Goal: Create an Android mobile application that manages contancts. This project was split into four phases.
Phase One: Design screen layout and simple I/O functionality using a text file as a database.
Phase Two: Use sensor detection to switch sort order of contact list.
Phase Three: Overhaul text file database and implement SQLite Database.
Phase Four: Add address fields and google map API reverse geocoding.
Main Activity:
Menu Options:
New Contact:
Existing Contact:
Date Picker:
Map Activity:
Programming Languages Used:
Software Used:
Android App Concepts:
Goal: Create a mobile application annoucing activites at your school including dates, times, and contat infomration. With this app include an events list that retrieves events starting at the current day and extending into the next few months. Include a banner image scroller to this application.
Initial Empty Calendar:
Image Banner:
Options from Main View:
Manage Activies View:
Pick a Color Popup:
Success Message:
Remove Activity:
Calendar with One Activity:
Event Popup:
Manage Colors View:
Contact Us View:
Help View:
Calendar with Many Activities:
Programming Languages Used:
Software Used:
Android App Concepts:
Goal: This is a computer game version of the board game Boggle by Hasbro created in VB.NET complete with Profile Loading, Statistics, Game-Saving, and Music!
To Play: download the zip, unzip, and click on the Boggle shortcut. If the shortcut does not work, nagivate to "Boggle/bin/Debug/Boggle.exe". The zip file is 620MB because of background music files, so it will take a few minutes to download.
Download boggle.zipMain Menu:
Gameplay:
Post-Gameplay:
Load Profile Menu:
Saved Games Menu:
Statistics Menu:
Programming Languages Used:
Software Used:
Computer Science Concepts:
I split this project up into three chunks:
1) Creating the 4x4 grid of letters:
My first attempt to create a playable grid with a decent amount of words failed. For each of the 16 letters, I generated a random number from 1-26 and selected corresponding letters (1=A, 2=B, 3=C, etc). This created unplayable consonant-heavy grids that did not contain enough vowels.
My second attempt was based on English letter frequencies I found on Wikipedia. The frequency of the letter determined the probability it would be selected for the grid. For example the letter "e" makes up 12.702% of the English language (according to Wikipedia), so there was a 12.702% chance that the letter "e" would be choosen for the grid. This method was not effective either; the grid was cluttered with too many vowels (E, A, I, O) since vowels are among the most popular letters in the English language.
My third attempt was the best. After reading websites on creating playable Boggle boards, I noticed that all the "good" grids had vowels spread out all over the board with 1 or 2 vowels for each row. I based my board generation on this observation:
After detetermining how many vowels per a row, the generator randomly distributes the vowel(s) throughout the row. Then consonants are selected to fill the non-vowel spots. I split the consonants into popular consonants and unpopular consonants based on their frequency in the English language. When choosing a consonant, there is a 90% chance for a popular consonant and a 10% chance for an unpopular consonant. I tested via trial-and-error to find the best probabilities that would consistently generate boards with many words.
2) Creating a solver that found all the words in the grid
While looking online for different ways to code a boggle solver, I stumbled upon code by avarcher on StackOverflow which utilized recursion to find words. I decided to do a similiar approach using recursion. In the end, my code is less efficient than avarcher's code, but I am proud of it because I wrote it and troubleshooted it.
To create a solver, I had to complile a list of English words needed to validate player-entered words. I searched the internet for txt files with English words listed and found several. In a Microsoft Excel Spreadsheet, I combined the txt files and processed the data. I changed all the words to lowercase, deleted duplicate words, deleted words less than 3 letters long, alphabetized them, and exported to a new txt file.
To speed up the process of checking player-entered words as valid English words, the solver first, before the game even starts, finds all the paths through the grid. It then checks if each path is an English word and if it is, stores it into an ArrayList. Then, as the player enters words during the game, the solver checks them against the ArrayList of known words, instead of the whole entire list of English words. This speeds up the game considerably as the solver doesn't have to loop through all the English words everytime the player enters a word.
3) Creating a game around the grid with timers, statistics, game-saving, music, etc.
Lastly I built the game around the boggle grid. I added a 2 minute timer for the game, ListViews that displays the user's found words and all the words, and other extras like profile loading, statistics, game-saving, and music. All the profile information, statistics, and game-saving is stored in txt files, which are read as the application starts and overwritten with new data as the application closes. The Last Player is just another txt file with the name of the last player in the first line. The game searches for that name through all the profiles and loads that profile before the game even starts.
The music I downloaded from YouTube via a link in the video description. It music file was orginally an 1 hour long mp3 file. I figured no one (in their right mind) would play this game for 1 hour, so using Audacity, I split the mp3 file into three 20 minute segments. As the game starts, one out of the three segments will start playing, as determined by a random number generator. Also I used Audacity to convert the mp3 files to wav so VB.NET would be able to play the music.
Goal: This is a computer game version of the popular game Hangman created in VB.NET complete with Profile Loading, Statistics, and Music!
To Play: download the zip, unzip, and click on the Hangmaster Dynasty shortcut. If the shortcut does not work, nagivate to "Hangmaster Dynasty/bin/Debug/Hangmaster Dyansty.exe". The zip file is 760MB because of background music files, so it will take a few minutes to download.
Download hangmaster-dynasty.zipMain Menu:
Load Profile Menu:
Statistics Menu:
Gameplay:
Post-Gameplay:
Programming Languages Used:
Software Used:
Computer Science Concepts:
Goal: Automatically scrape the Billboard Top 100 RSS feed and save the data to a google drive spreadsheet.
I wrote a Google Script that automatically scrapes the Billboard Top 100 RSS feed every week and saves the data to a google drive spreadsheet.
I have collected weekly data starting July 26, 2014 to December 30, 2017.
At the beginning of 2018, the RSS feed was deprecated so my scraper does not work anymore.
Download Billboard Top 100 weekly data scraped by my script:
Goal: Led a team of three and created an original 2D computer game using C#.
Stroopsanity is a one-player 2D computer game developed using the Unity Game Engine. The game is based on the Stroop effect, which is a demonstration of delayed reaction time due to conflicting word definitions and colors.
To Play: Download the zip, which includes Stroopsanity.exe and Stroopsanity_data. Unzip. Click Stroopsanity.exe to start the game. Use the left and right arrow keys to move. You score points when you collect a falling trash whose color corresponds with the word displayed and NOT the color of the word displayed. You lose one life if you collect trash of the wrong color, and you have 5 lives to lose before the game is over.
Main Menu:
Level Menu:
Gameplay:
Programming Languages Used:
Software Used:
In 2012, I ordered a Raspberry Pi 1 Model B for $35.
Projects I completed:
In 2018, I ordered a Raspberry Pi 3+ Model B for $35.
Goal: Implement recursive Quicksort algorithm in C++. Use call-by-reference with pointer arguments.
The basic Quicksort algorithm for a single-scripted array of values is as follows:
For more information visit GeekforGeeks.
Goal: Create base classes and derive new classes using inheritance. Utilize multiple classes in the same program.
Problem: Disneyland has begun a service that allows guests at the park to pre-order drinks and pick them up at a designated time so as to avoid long concession lines. Guests that spend more than $150 (cumulatively) become preferred customers and are awarded discounts on future orders. A program is needed to track the amount spent by each customer and promote them to preferred customer when they have accumulated $150 in purchases.
Goal: Program a class for a union-find data structure that uses the smart union by size algorithm and path compression on find operations.
Goal: Write a recursive MIPS assembler program to compute factorial(n).