‣ An iOS app that helps users manage their personal finances by visualizing how much, when, where, and why money was spent.
‣ The amount spent per week is displayed on an animated bar graph, and the total amount spent per budget is portrayed with a reactive pie chart.
‣ Transactions place markers on an interactive map, allowing a user to view where they spend money. Tapping on a history item will animate the map and display the location of the specified transaction.
‣ Color-coded transactions and timestamps are accessible at all times and may be deleted or renamed with a single swipe.
‣ Programmed with Swift 3 on XCode, using the Model View Controller (MVC) pattern to organize and streamline application processes
‣ Designed dynamic buttons and textfields by implementing regular expressions that disable potentially invalid input
‣ Developed code that controls a dynamic, scaleable bar graph which represents the total amount spent over a customizable time interval, and integrated the Google Maps SDK to plot location markers
‣ Utilized the dictionary data structure which maps dates to the amount spent, providing constant lookup efficiency when fetching graph data
‣ Campus Cow is a location-based, multiplayer, Android application, inspired by the flash game Find the Invisible Cow.
‣ Each player can choose to be a cowboy or a cow. There can only be one cow. The first cowboy to find the cow wins the game.
‣ To win, a cowboy must be within 50m of the cow. The color of each player's geomarker tells the player how close they are to the cow.
‣ Red, orange, and yellow correspond to a cowboy being within 200m, 400m, and 600m of the cow's current location. A blue marker means that the cowboy is farther than 600m from the cow.
‣ Designed a client with Java that sends each device's current location to the server while simultaneously parsing JSON Objects that hold the locations/ID of each player, storing the data into HashMaps
‣ Created a server with Python and Flask that updates and stores all player data in custom dictionaries and returns a JSON Array to the client
‣ Integrated the Google Maps SDK with the application to give the user visual feedback regarding how far they are from the cow
‣ Constructed an algorithm that calculates the distance between each player and the cow and notifies all devices when a cowboy wins
‣ LIMBY is an iOS application that monitors the health of birds by graphing and analyzing live bird weights.
‣ LIMBY receives bird weight data over Wi-Fi from a smart-perch that periodically measures bird weights.
‣ A user can view live bird weight data and its pre-computed average by the minute, day, week, month, and year.
‣ The login screen allows a user to view all associated smart-perches on multiple devices.
‣ Implemented a pre-processing algorithm that reduces noisy data by filtering out points that do not represent actual bird weights
‣ Worked with the Particle API to query live data from its servers and allow users to view all devices under their Particle account from any device
‣ Designed an algorithm that pre-computes the average of the data points over a specified range that only includes real bird weight data
‣ Designed unit tests before developing each feature, ensuring that each iteration contains robust, accurate, and error-free code
‣ Brain lesions are any abnormal brain tissues that appear as bright spots on the brain in MRI scans.
‣ I created a conditional adversarial network model that identifies, analyzes, and isolates brain lesions from MRI scans.
‣ The goal of this model is to increase doctors' diagnosis accuracies relating to identifying unhealthy brain tissues.
‣ This increases the likelihood of successfully identifying and treating brain abnormalities while preventing unnecessary brain surgeries.
‣ Modified the pix2pix tensorflow model designed for mapping generic input images to output images
‣ Split the data set with k-fold validation so that all combinations of different training and testing image sets are considered
‣ Trained and tested the model in order to output a SSIM (structural similarity image metric) value for each model's guess
‣ Tuned hyperparameters such as the epoch count of the model in order to find the optimal value that avoids underfitting and overfitting
‣ Markitplace was created to replace Facebook groups (Free & For Sale), which lack useful filters, fail to accomodate for a student's schedule, and provide no information regarding where and when each seller will be available.
‣ Users looking to buy items can utilize a map and view current listings, simultaneously applying 3 layers of filtering to narrow down their search.
‣ Filters include: Category (Furniture, Technology), Price Range (Under $10, $10-$25), and Key Words (Used, Desk).
‣ Users looking to sell items are able to tailor to their class schedule and provide various locations and times to display their marker on the map.
‣ Developed a filtering algorithm that takes into account 3 categories, resulting in only displaying markers that fit the constraints chosen by the user
‣ Constructed a personalized user interface that displays a user's name and picture in the status bar while linking their profile in each marker they place on the map
‣ Reduced load time by taking advantage of already loaded elements by saving the current state of the page while providing the layout of another
‣ The purpose of DataQuake is to display pertinent information regarding all recent earthquakes within the past day, week, and month.
‣ A map is dynamically populated with red circles that indicate the location and magnitude of an earthquake.
‣ The search bar allows users to search for a location or a magnitude range, which updates the map with the filtered results
‣ All data is updated in real time, and all information gathered is provided by the United States Geology Survey (USGS).
‣ Sifts through heaps of information by gathering data automatically via an API call to the USGS database
‣ Visualizes the data by integrating Google Maps with a dynamically drawn circle for every earthquake that happens around the globe
‣ Utilized jQuery calls to modify HTML structures and classes when the user clicks on buttons in order to create an integrated user interface
‣ LA Skyscrapers is a dynamic, interactive, and visual representation of the 35 tallest buildings in Los Angeles.
‣ A navigation system allows the viewer to fly around in 3D space. Further interactive features include resetting the year counter, showing or hiding the controls, and rotating the view.
‣ Each color-coded bar grows at a speed depending on its actual construction time. A year label counts from 1926 to 2017.
‣ All data, including each building's relative height, start and end years of construction, and name, can be found here.
‣ Generated a growing rectangular prism by updating the top four vertices during every frame until the correct relative height is reached
‣ Designed a navigation system that moves the camera relative to the 3D graph. Movement includes translating left, right, up, down, forwards, backwards, and rotating the heading
‣ Constructed dynamic elements including the year counter, controls, and bars, which change depending on the current year
‣ Developed functionality for resetting the year counter (r) and hiding the controls (h)
‣ This website was created to display both my professional skills and personal interests. There are three main pages listed in the navigation bar.
‣ The Home page consists of important professional links such as my Resume, Github, and LinkedIn.
‣ The About page details my programming skills, academic and extra-curricular organizations, and personal hobbies and interests.
‣ The Projects page showcases my coding endeavors. Each project has a Description tab that summarizes the project, a Design tab that documents the architectural aspects of my work, and a link to the source code.
‣ Developed a scrolling function that animates the text based on the location of the window and highlights the current section in a table of contents
‣ Created alternative code for varying screen sizes that dynamically alters the layout of the screen, ensuring that the website is both tablet and mobile friendly
‣ Implemented parallax lib, typing animations, hover zoom capabilities, and button animations to enhance the navigation experience
‣ The object of the game is to find all hidden Oil Barrel objects and proceed to the next level without getting caught by the AI, also known as the Protesters.
‣ The Regular Protesters (in dark blue) only follow the player when you, the Frackman (holding a pickaxe), are in their line of sight.
‣ The Hardcore Protesters (in overalls) calculate your current location during every tick of the game and derive the shortest possible path towards you.
‣ Everytime a Protester comes close to your location, you will lose health. Once your health drops to 0%, you lose the game.
‣ Implemented the game using C++, exhibiting concepts such as polymorphism, inheritance, and encapsulation
‣ Designed a method for the AI to follow the location of the player on the grid with a recursive, queue-based algorithm that performs a breadth-first search
‣ Devised a hierarchy of game objects to distinguish the different objects and store them in a single array under a universal superclass to prevent code duplication
‣ Developed an algorithm to raise the difficulty of each level by periodically increasing the number of Oil Barrels, Protesters, and Boulders on the grid
‣ The object of the game is to beat the dealer (AI) by getting a count as close to 21 as possible, without going over 21.
‣ Face cards are worth 10, and the numbered cards are worth their pip value. The ace is worth 1 or 11, depending on which is more advantageous.
‣ The player can stand by not asking for another card, or hit by asking for another card dealt from the deck.
‣ Once the player stands, the winner of the round is determined by who has the highest count under 21. If only the player busts (count over 21), then the dealer wins, and vice versa. Otherwise, it's a draw.
‣ Programmed a virtual card game with Java by implementing an aesthetic interface and interactive graphics
‣ Constructed a decision tree that guides the AI and teaches it how to make smart decisions based on intuitive game logic
‣ Developed code that takes into account the varying values of the Ace card, assigning the card a value when it is advantageous for the player or the AI
‣ Implemented counters for undealt cards, total games won, and total games played. Once a card is dealt, the same card will not appear unless the player chooses to reset the deck by pressing the Restart button