*Pintos Operating System (C)
This project is from the CS162 Operating Systems class. Implmenting this OS included creating process control and file operation syscalls, multithreading and multiprocessing functionality, appropriate synchronization, various schedulers for threading, and a file system that supports extensible files and uses a buffer cache for efficiency. Aside from these specific technical aspects, one major skill attained from this project is the ability to debug quickly and efficiently on a large-scale project through GDB. Another crucial aspect to this project was coming up with proper designs that are both efficient and won't cause synchronization issues, especially when it comes to layering more advanced features onto a previous iteration.
*End-to-End Encrypted File Sharing System (Go)
This project is from the CS161 Computer Security class. Given a set of security requirements include username/password storage, user sessions, cryptography and keys, files, sharing and revoking, and efficiency, I designed a secure file system that would be safe against a datastore and revoked user adversary. This involved implementing the client API that enables a user to create, share, and revoke access to a file. To achieve this, I went through several iterations of a design that invovled multiple layers of indirection (to prevent a revoked user adversary) that splits up a file into file blocks (for efficiency) and regenerates randomized filenames on the event of a revoked user. The cryptographic tools used to implement this include public key encryption, digital signatures, HMACs, password-based key derivation, and a random byte generator.
MDB iOS Training Program (Swift, Typescript)
As part of the Mobile Developers of Berkeley organization, I took part in an intensive semester-long iOS development training program to gain insight on the intricacies of app development, particularly in Swift. Starting with ideation processes and figuring out what ideas have the potential to succeed, moving onto the technical aspects of building an iOS app from the ground up, and ending with a final presentation and pitch, I was able to build 5 different iOS apps, each tackling a different part of iOS development. The technical aspects of these apps include coding with UIKit, working with Firebase, using Google's Places SDK for iOS, and pulling real time data using the OpenWeather API.
Furthermore, I took part in MDB's contract program where I worked alongside other students to develop the Joy app, a mental awareness app aimed to assist users in their day to day mindset and provide meditation routines/practices to improve their mental health. More specifically, I worked on the subscription feature that gives the user a free trial prior to paying for a monthly subscription to extended meditation tutorials.
*Pac-Man Project (Python)
This project is from the CS188 Intro to AI class. As we learned more about the statistical and decision-theoretic modeling under intelligent computer systems, we slowly built up a Pac-Man AI to navigate a new map and maximize the points gained. We started with basic search algorithms such as breadth-first and A*, then moved towards logical inference techniques to figure out mapping, and finally implemented neural network models and reinforcement learning to help pac-man learn rational policies. This array of foundational AI concepts enabled our pac-man to learn about the map given only its initial immediate surroundings and take into account the amount of food pellets, power pellets, and ghosts in order to successfully pass through the level at minimum cost.
*NUMC (C/Python)
This project is from the CS61C Machine Structures class. It is designed to challenge both my C skills and ability to improve the performance of matrix operations. With a Python-C interface, I replicated the NumPy functions of matrix addition, multiplication, subtraction, power, absolute value, and negation. Using optimization methods of SIMD, OpenMP, loop unrollling, cache manipulation, matrix transposition, and carefully chosen mathematical techniques, I achieved 120x speedup for matrix multiplication, 1700x speedup matrix exponentiation, and 5x speedup for other basic matrix operations compared to the naively implemented solutions.
Pest Control Counter (OpenCV/Python)
This web app was created to replace the laborious task of manually counting hundreds of tiny insects in the Oxford Greenhouse at UC Berkeley. Because the flytraps used had dark and notable grids, we decided the best strategy was to use blob detection and line detection to segment the trap into cropped sections and apply the algorithm individually. The program then outputs a list of cropped out images that the algorithm detected as bugs. In the future, we hope to add the functionality of allowing the user to verify whether each cropped image was indeed a bug or not so that we can train our model to improve overtime, adding a machine learning aspect and extra layer of accuracy onto our model.
This mini-project uses the Spotipy framework to predict which songs given in the annual Spotify Wrapped's "Missed Hits" playlist the user will actually enjoy. Using cosine similarity as a method of assigning value, I chose a threshold value and extracted the data features (valence, danceability, loudness, tempo, etc) from each song object and applied math formulas to determine how this song would performed compared to the threshold value.
Quarantine Website (HTML/CSS/Javascript)
A simple website that includes ideas on what to do when you're bored in quarantine. It includes simple animations created with css in addition to a dark mode feature implemented with javascript. I was able to research ideas on getting the dark mode feature to persist throughout the different pages as they each included a different script and this was achieved by using the window.localStorage element.
This project allowed me to get creative with how I try to implement different features as there are a multitude of solutions on the internet available while researching. I was amazed by the many unique solutions people offered and learned a lot by simply trying to solve one problem.
*Gitlet (Java)
This project is from the CS61B Data Structures class. I implemented a version-control system that mimics some of the basic features of the popular system Git. The main functionalities implemented are: saving the contents of entire directories of files (commit), restoring a version of one or more files or entire commits (checkout), viewing the history of your backups (log), maintaining related sequences of commits (branch), and merging changes made in one branch into another.
This was the the first project I implemented that required us to create our own skeleton and structure of our code. I enjoyed this project very much as it was challening and allowed me to fully understand the complex actions of Git. I was also able to integrate ideas of serialization, functional programming, and efficient runtime with certain data structures together in Gitlet.
*Lines of Action (Java)
This project is from the CS61B Data Structures class. Using the board game Lines of Action created by Claude Soucie, I implemented its rules, winning conditions, and legal moves. I also created an AI to play the game against the staff AI by strategizing which moves were most optimal in early, middle, and endgame to satisfy the win conditions. In order to choose moves without having extreme runtimes, I made use of alpha-beta pruning with a carefully constructed heuristic function in order to efficiently play the game. This also required me to choose specific data structures and construct algorithms that did not prolong the calculations of each move and state of the board.
This project is from the CS61A Structure and Interpretation of Computer Programs class. I created a program that measures typing speed with autocorrect, which is a feature that attempts to correct the spelling of a word after a user types it. Similar to other type racer programs, this will return the percentage of words typed correctly, words per minute, and a report progress that shows the time used per word. This project also allows for multiplayer functionality which will output more information comparing how well each player did, such as the fastest words typed.
My favorite parts project allowed me to explore the algorithm needed to implement the autocorrect function. It required a swapping method that returns the minimum number of characters needed to changed from the start start string to the goal string. Additionally, autocrrect required the fixing method that minimizes the number of edits needed to transform the start word to the goal word.
*Due to academic honesty policies, this project is not publicly available on my github but I am more than happy to share my code for job applications/career purposes.