Lyric Guessr
                         
                        
                            Lyric Guesser was a game of guessing which word appears in more hit songs.
                            Users could submit guesses for pairs of words submitted by other users or create their own submissions.
                            
                            The front-end was created with React and the back-end with Express and MongoDB.
                            The lyrics were sourced from Billboard's charting singles using Python and the Genius API.
                        
                     
                    
                        Great British Accent Challenge
                         
                        
                            Great British Accent Challenge was a project inspired by GeoGuessr. Users listen to a short audio clip of a speaker
                            and attempt to guess where the speaker is from. After guessing, the results displayed how many users correctly
                            selected the speaker's location.
                            The site was created using Python and Django and the Google Maps API with JavaScript. There were around 100 audio clips stored
                            using AWS S3. The site was deployed using AWS Elastic Beanstalk.
                        
                     
                    
                        Audio Visualizer - Chrome Extension
                        
                        
                            My audio visualizer Chrome extension creates a 3D visualizer for the audio from a tab. When the chrome extension icon is clicked,
                            the tab's audio stream is sent to the visualizer, using tab capture.
                            I decided to use the visualizer part of the project to learn Three.js. The audio stream is analyzed by the Web Audio API,
                            and the data is used to animate objects in Three.js.
                        
                     
                    
                        Formula 1 Elo Engine
                         
                        
                            My Formula 1 Elo engine was a way to rank Formula 1 drivers by comparing head-to-head matchups. The engine assigned weights to qualifying
                            position, finishing position, fastest lap, and number of positions gained or lost during a race.
                            I used Python and Matplotlib to create an animated graph that shows the Elo rankings of every driver over time.
                        
                     
                    
                        Trump Content Warning - Chrome Extension
                         
                        
                            To continue learning about making Chrome extensions, and to help me avoid reading too much news focused on Donald Trump,
                            I decided to make an extension that previews links and displays a popup to warn you if Trump's name is mentioned.
                            When the cursor hovers over a link an ajax call to the page is made, and the number of Trump mentions is displayed in the popup
                            next to the link. The photos inside the popup correspond to the number of mentions.
                        
                     
                    
                        City Connections
                         
                        
                            This project organized city populations as trees by connecting smaller towns and cities to their next nearest larger city.
                            The visualization shows what cities are the most dominant in a region.
                            The data was sourced from U.S. Census data and visualized using JavaScript and PolyMaps.
                        
                     
                    
                        NBA Predictor
                         
                        
                            NBA Predictor receives an NBA player's name and an opponent team and makes a prediction for the player's
                            points, assists, and rebounds. It also includes sliders to adjust the weight given to different variables
                            used to make an estimate. Player and defense stats are collected using ajax calls to ESPN and TeamRankings.com.
                        
                     
                    
                        Professional Athlete Map
                         
                        
                            I collected the birthplaces of professsionial athletes from the NFL, MLB, NBA, and NHL using ESPN's API and Wikipedia. Each birthplace was
                            geocoded using GeoPy and then saved in csv files. With the ArcGIS API for JavaScript, I created a heat map of where professional athletes
                            were born. When zoomed in close, the map changes to a simple point map so that points can be clicked to find out which athlete they represent.
                        
                     
                    
                        Coding Game
                         
                        
                            The coding game is a simple puzzle game in which you solve a puzzle by scripting the movements of a robot.
                            The script written to move the robot is similar to Python with some modifications.
                            The goal of the game is to move the robot to the finish square after acquiring the correct sum.
                            When the robot passes over a red square, the red square's value is added to the robot's value.
                            There are three levels to solve in any order.
                        
                     
                    
                        US Church Map
                         
                        
                            I used Python to gather addresses and denominations of churches in the United States and then geocoded them using GeoPy.
                            This data was turned into csv files for each Christian denomination. With the ArcGIS API for JavaScript, I turned this data
                            into a heat map. Layers can be toggled on and off to view each denomination seperately.
                        
                     
                    
                        US Cities Population Map
                         
                        
                            To continue using the ArcGIS API for JavaScript, I mapped the most populous cities in the United States since 1790.
                            I used data from the Census Bureau and then cleaned it up using Python.
                            The map displays each city's share of the total national population as well as its rank. I also added info popups
                            that appear when the base of the graphic is clicked.
                        
                     
                    
                        3D Ray Marching
                        
                        
                            I used ray marching and signed distance functions to draw a scene onto an HTML canvas using JavaScript.
                            The scene is lit using diffuse lighting and includes shadows. I implemented signed distance
                            functions for a sphere, a box, and a plane. The lightsource rotates slowly around the scene,
                            but with three objects, the scene runs very slowly.
                        
                     
                    
                        2D Ray Marching Visualization
                         
                        
                            Before rendering a full 3D scene using ray marching, I created a 2D visualization of sphere tracing.
                            The canvas displays the circles that represent the ray marching steps leaving the "camera."
                            The camera can be moved around the scene, and clicking adds a random shape.
                        
                     
                    
                        Crossword Maker
                        
                        
                            This project allows you to create a crossword grid and then attempts to fill it using words taken from Dictionary.com and
                            Wikipedia article titles. Custom words can be typed into the crossword before the rest of the crossword is filled.
                            Unfortunately, pulling from such a large pool of possible words creates many crosswords with obscure words and acronyms.
                            Words were collected using Python and Selenium, and the crossword is created and filled using Java.
                        
                     
                    
                        Mapping Google Trends
                        
                        
                            Google Trends limits the number of comparisons to 5 search terms. I wanted to make a visualization of sports teams based on
                            Google search popularity, so I used Python and the Pytrends API to compare all teams in a league to each other.
                            I used this project to create maps of NFL, NBA, NHL, MLB, and MLS teams in the United States.
                        
                     
                    
                        Binary Tree Signatures
                         
                        
                            This project creates a visualization of binary trees. Every binary tree has a unique signature created by a pre-order traversal.
                            Each node is represented by two decimals. The first digit represents a left child and the second represents the right child. For
                            example, 01 represents a node with a right child, but no left child.
                            Trees can be constructed by clicking on the nodes or by entering a valid binary tree signature in either
                            decimal or binary representation.
                        
                     
                    
                        Harry Potter Sentiment Analysis
                         
                        
                            I used Python and VADER to analyze the sentiment of each of the Harry Potter books. I collected the average sentiment for
                            each chapter and plotted the results using Matplotlib. I labeled the highest and lowest sentiment chapters of each book.
                        
                     
                    
                        Subreddit Sentiment Analysis
                        
                        
                            I wanted to compare the sentiment of different subreddits and see what kind of comments attracted upvotes. I looked at
                            subreddits focused on the same subject, such as r/Seattle and r/SeattleWA as well as r/Canada
                            and r/OnGuardForThee. For more of a contrast, I also compared r/Politics to r/Sports.
                            I used the Reddit API to collect comments from top posts on a subreddit and used VADER to analyze the sentiment of each comment.
                            Using Matplotlib, I made histograms for different subreddits based on the frequency of comments with similar sentiments and
                            colored each segment based on the average number of upvotes for a comment within that segment. The dark green segments are the least
                            upvoted, and the yellow segments are the most upvoted.
                        
                     
                    
                        College Football GIS
                        
                        
                            I wanted to learn how to make maps using ArcGIS, so I used the ArcGIS API for JavaScript to
                            map the college football champions since 1869. I used the data from the College Football Data Warehouse's list
                            of recognized winners.
                            Each school's bar grows based on its weight, and its color fades to red based on the number of years since
                            its last win. The green dot represents the weighted center for national champions. I assigned each year a
                            weight of one and evenly divided it between the year's winners.
                        
                     
                    
                        Solitaire AI
                         
                        
                            This project was created after learning that a skilled solitaire player wins around 43% of games. I attempted to see what percentage
                            of games of solitaire a simple AI could win. The AI I created is capable of winning games, but not as many as a skilled human!