Welcome to my timeline (or my portfolio). This begins during my second semester of my first year in college, which is when I started studying computer science. This includes any projects, clubs, internships, jobs, or any other related topics to my study.
This project focused on developing the user threads functionality for the pintos kernel. The main focus was to implement the pthread_create, pthread_join, and pthread_exit syscalls while retaining proper functionality of the process control syscalls. Additionally, I implemented a thread priority scheduler and a library for user synchronization primitives.
In this project, I implemented the sbrk syscall in the pintos kernel. With this syscall, I also built my own versions of malloc, realloc, and free for user programs to use.
This was my first project project built in rust - a http server that processes requests and serves them. This was a great introduction to rust, which was challenging to pick up at first.
This project focused on developing the user program functionality for the pintos kernel. The main focus was to implement the exit, exec, and wait process control syscalls. Additionally, I implemented file operation syscalls and floating point operations.
I created a shell program that can run both directory commands and executables with piping and file redirection support. This was a fun project to dive deeper into the linux syscalls that manage processes.
I developed a simulator to demonstrate a distance-vector routing protocol, implementing core logic for forwarding, sending and handling advertisements, managing timeouts, and handling route expiration. The simulator also includes optional features like split horizon, poison reverse, and route poisoning for expired routes.
I programmed a script to run traceroute. It handles errors included invalid packets, packet loss, missing packets, duplicate packets, and highly delayed packets for both the probes and responses.
After learning more about microservices at my internship, I wanted the opportunity to build and deploy them from scratch. This application provides information about services like .NET and Docker and the console commands used with them. It's decomposed into two microservices - platforms and commands. The application had minimal business logic, but the focus was to learn more about docker, kubernetes, and the other tools used to configure and deploy microservices.
Engineered a payment microservice to process 50,000+ monthly invoices with multiple payment providers (e.g., Stripe, Wells Fargo, etc.). The micro service was equipped with a modular, customizable, and highly flexible web interface to configure payment providers in place of independent SDKs, bringing development time from months to days.
Taking inspiration from Minecraft world generation, this project procedurally generates an infinite world with complex terrains, biomes, and natural, walkable cities. The goal is to help urban planners easily visualize new city designs with changeable parameters. Additionally, there is an interactive component to it where the user can move around the world using the WASD keys and space bar. Find more here.
This project used a mass-spring system to simulate cloth. Verlet integration was implemented to calculate the new mass positions from one timestep to the next, and the system was extended to handle collisions with spheres and planes as well as self-collisions to fix clipping. Different types of vertex and fragment shaders were also integrated to get a variety of different visuals on the cloth.
This project covered the pipeline of path tracing for a scene and how different techniques can provide higher quality or more efficient renderings. This included generating rays, ray intersection testing, BVH acceleration, global illumination, russian roulette termination, and adaptive sampling.
This project focused on geometric modeling, specifically curves and meshes. To construct the meshes, bezier curves and surfaces were implemented with the de Casteljau algorithm. The main component of the project was the upsampling of the meshes using loop subdivision. The loop subdivision algorithm was implemented with edge flip and edge split subroutines.
This project focused on the key components of the rasterization pipeline. First simple triangle drawing was implemented, and eventually supersampling to antialias them. Another integral part of this project was texture mapping. Using bayercentric coordinates and mipmaps, texture mappings were rendered with little aliasing.
This marks when I became an a academic student employee for the class CS 61B - Data Structures. My main responsibilities include leading small group tutoring sessions, holding office hours, and answering questions on an online forum. I'm super excited to be teaching for my favorite class at UC Berkeley!
This project focused on web vulnerabilities where a insecure website was used as a template for web attacks. These web attacks included XSS, SQL injections, and more. The attacks caused malicious behavior such as logging in as other users, making users do unwanted actions, and leaking data.
This school project was an open ended design challenge that had to follow strict functionality, efficiency, and security restrictions. I developed a file sharing system that allowed users to log in from multiple devices, edit files, and share those files while keeping them completely secure against adversaries using cryptographic procedures. The design of this project was particularly challenging, but seeing the final product and its performance was very rewarding.
Exploiting Memory Safety Vulnerabilities (EMSV) was my first project for CS 161 - Computer Security. I was tasked to examine vulnerable C code and exploit it to run shellcode based on a x86 architecture. The vulnerabilities included buffer overflows, format string, integer memory safety, and off-by-one vulnerabilities. Mitigations like stack canaries, non-executable pages, and ASLR were sometimes active, so I had to engineer attacks to get around them.
This is my first project with TiLab, and it is my largest one yet in my career. Working with another researcher, we are developing an editing tool for DNA nanostructures in a VR environment. This project is a nice switch from school projects because instead of coding difficult algorithms, the algorithms involved are simple yet the vastness of the project makes it difficult to organize. I find figuring out how to manage complexity for the ease of programming really intriguing.
This project focused on the optimization and speed of programs. The entire project was based upon matrix convolutions and making the algorithm as fast as possible. This project emphasized many ideas of parallelism using the OpenMP and OpenMPI frameworks.
Spam & Ham was a binary logistic regression model that classified spam emails vs ham emails (non-spam emails) based on the heading and body texts. The data exploration and feature engineering was the most difficult and brought the most insight on how to optimize and analyze data for the best machine learning algorithm.
This project was a linear regression model to predict the property value of homes in Cook County, IL. The process involved intense data exploration and feature engineering but also touched on the ethics of using models and how they may develop biases.
CS61CPU was one of the largest school projects I've done. I emulated a RISC-V processor in Logisim, which gave me a deep understanding of the data pipeline and control of a computer processor. It also involved the implementation of pipelined registers. I really enjoyed this project, and understanding the hardware of a computer has given me more engineering insights than I would've imagined.
This school project was my first project in an assembly language. The final product was a program that can compute the classify algorithm for machine learning applications. It was definitely challenging, but when taking the extra steps to plan more effectively and follow convention, the code effectively wrote itself.
I built this website on and off for about a month, which brought me back into web development after about a year away from it. It was a great hands-on experience, and I learned a lot starting from scratch. I plan to continue building on it indefinitely with timeline updates and new features.
snek was my first project in C and was a recreation the game snake. It focussed on memory management, pointers, file manipulation, arrays, and strings. These were all some-what new and different concepts compared to the code I've seen in other languages, which made it a very educating experience.
Growing up playing tennis, I was thrilled to begin my first internship at SwingVision. It was a great experience working for a ML company. My main responsibility was labeling videos to acquire data for the machine learning algorithms using CVAT. Working at the data collection level gave me insight into how data is collected, how it can be miscollected, and what biases can lie within in it. I believe this was quite eye-opening because knowing that these situations are possible in data collection aids in data analysis and understanding.
Package Runner 20XX is one of my favorite projects I've ever done. Taking over two months to collaborate on, it was extremely satisfying and rewarding to complete. I coded alongside two other programmers and three artists. Check out its description and play here!
Build Your Own World (BYOW) was my final project for my data structures class (CS 61B). Unlike other school projects, the given project spec and skeleton code was minimal, allowing complete freedom for design. The goal of this project was to generate interactive, pseudorandom game worlds given an input seed. This project was challenging given the lack of guidance, but that allowed me to spark my curiosity and design abilities to construct a platform that minimized code complexity. I believe I refined my skills as a programmer the most with this project.
WordNet was a really cool project to work on. It revolved around semantic relationships and word usage overtime in the English language. First, I developed a data structure to hold word usage over time, which transferred data to a frontend replicating Google's Ngram Viewer. The next part of the project revolved around semantic relationships, which can visualized with a directed acyclic graph as seen in the image. The code used a graph data structure to supply a user with any information regarding semantic relationships in the English language. Both parts parsed text files to retrieve the data to supply the user.
Pitch Black was the result of GDD's 1 week long game jam. I coded alongside another programmer and an artist to create 2D maze game. The scene is set in an abandoned mansion where a young teenager lost his baseball inside. You play as the unfortunate teenager looking for the missing ball. All you have is a baseball bat to defend yourself from the ghost that haunts the mansion.
In Deques, I implemented two versions of the double ended queue data structure with linked lists and arrays. Both had circular topology, which I thought made that code very enjoyable. Altogether, this project was a great continuation of learning java as well as the fundamentals of object oriented programming.
2048 was my first java project in CS 61B. It was a quick project that reintroduced me to the java syntax while focussing on ideas of abstraction though multiple helper methods. In the end, I programmed the logic for game.
I first got interested with CSM when I took one of their tutoring sessions for CS61A. I then ignited a passion for teaching. I joined CSM as a junior mentor the next semester, teaching the class I just took. I'm now a senior mentor for another class, which involves guiding junior mentors for their tutoring sessions.
I was an intern for the EECS department at UCB for the summer of 2022 when I was taking classes. I taught and gave a few lectures to a 30-student lab section consisting mostly of incoming freshmen in CS 61A.
Scheme was a project that I feel I learned a lot from. I coded a scheme interpreter in python. It really cemented my understanding of how computer programs are interpreted and evaluated.
Ants was my first object oriented porgramming project and was one of my favorites. It was a 2D tower defense game that drew inspiration from Plants vs. Zombies where specialized ants would attack incoming bees.
CS61A Autocorrect Typing Software (Cats) was a neat and challenging project that further built my early programming fundamentals. It focused on iterables and recursion.
Hog was my very first coding project. It focused on conditionals, iteration, and higher order functions. The premise was a complex dice game with fun rules played between two players. This was definitely a beginner level project, but it was a great instructional experience.