Projects
Welcome to my projects page!
Please feel free to take a look around and interact with the project demos. Images can be expanded by clicking/tapping on them.
Please be aware that some of the demos may take more than a few seconds to load because the container they are running in may have been unloaded by the cloud providers to save resources.
Personal Projects
2D Robot Simulator (Emscripten) (C++, Ruby, JavaScript, HTML, CSS)
- Created a web-based simulator that allows users to compile and run Arduino programs with little to no changes needed on a virtual 2D robot that can move around and sense its environment through sensors
- Designed API to allow frontend to send user’s Arduino C++ program to the backend to be compiled into a WebAssembly binary to provide instructions for the robot to follow
- Performed continuous integration using CircleCI to ensure successful builds and to deploy to GitHub Pages
- Utilized GitHub Pages and Heroku to host frontend and backend respectively for users to experience the robot simulator website
- Tech Stack: Piksel (2D graphics library), Box2D (physics engine), Ace (embeddable code editor), Emscripten (C++ to WebAssembly compiler), Sinatra (web application library), and Docker (For containerized cloud compiler running on Heroku PaaS)
- Project Link and Web Demo
LinCity-NG Conversion to Web (Emscripten) (C++)
- Converted an open-source city-simulation desktop game called LinCity-NG to run in the web browser using Emscripten (C++ to WebAssembly compiler)
- Utilized Emscripten documentation and internet research to solve compilation errors by adding compilation flags to the compiler invocation to successfully compile the game
- Modified game source code to perform texture caching to improve rendering performance up to 10 times
- Compiled game automatically using GitHub Actions and deployed to Netlify for users to enjoy the city-simulation game
- Project Link and Web Demo
Sunshine Social Media Platform (React) (JavaScript, HTML, CSS)
- Designed and built a social media platform for users to post messages with dependable results around the world
- Created frontend with React and Tailwind CSS, hosted with Cloudflare Pages for reliable delivery and posting
- Implemented backend in JavaScript which runs on Cloudflare Workers, achieving high performance and scalability
- Developed API to enable two-way transfer of posts between frontend and backend
- Stored posts in a Cloudflare Workers Key-Value data store for high availability of posts globally
- Site Link
Wake on LAN Utility (Qt) (C++)
- Designed and developed a Wake on LAN utility to start up or wake up computers over the Local Area Network
- Implemented profile saving feature for user convenience
- Utilized the Qt framework for cross-platform compatibility
- Developed a continuous deployment pipeline using GitHub Actions for releasing up-to-date versions of the software
- Performed automated regression testing using Appium to ensure software quality
Open Source Contribution
Linux Kernel Sony Laptop Platform Driver Bug Fix (C)
- Discovered a null pointer dereference bug when the sony-laptop kernel module is unloaded which led to a kernel oops error
- Used builtin kernel debugger (kdb) to locate where the bug was in the sony-laptop kernel module code
- Fixed bug by checking for null pointer before it is dereferenced and recompiled module to test that bug was fixed
- Submitted patch to Linux Kernel Mailing List where it was reviewed and accepted by a sony-laptop kernel module author and a x86 platform driver maintainer
- Commit Link
Class Projects
CS186 - Introduction to Database Systems
RookieDB (Java)
- Implemented relational database system using B+ Trees to organize data on disk
- Used a simplified version of the Selinger optimizer to implement joining of tables and optimizing queries
- Handled concurrency through Multigranularity Locking
- Performed transaction recovery using ARIES
CS184 - Computer Graphics and Imaging
Triangle Rasterization (C++)
- Implemented the software rasterizer of a render pipeline where triangles defined by their vertices are taken as input and filled pixels forming triangles are outputted to the screen
- Implemented antialiasing and texture mapping
- Project Report Link
MeshEdit Project (C++)
- Implemented Bézier Curves and Surfaces using de Casteljau’s algorithm
- Allowed splitting and flipping of edges in meshes using the Half Edge data structure
- Used Loop Subdivision to upsample meshes
- Project Report Link
Cloth Simulation (C++)
- Simulated a cloth by connecting point masses together with springs
- Used Verlet Integration to simulate the movement of the cloth
- Wrote shader programs that gave the cloth some material appearance
- Project Report Link
CPU Ray Tracing (C++)
- Implemented a CPU ray tracer that simulated the bouncing of light rays around the scene to output realistic images with soft shadows and global color illumination
- Used a Bounding Volume Hierarchy data structure with the Surface Area Heuristic to speed up ray tracing of scenes
- Project Report Link
CPU Ray Tracing with Materials and Depth of Field (C++)
- Improved upon the previous ray tracing project through the addition of microfacet materials to give metallic surfaces to scene objects
- Implemented depth of field effect by simulating a camera lens
- Project Report Link
GPU Ray Tracing Using Shaders (Open-Ended Individual Final Project) (C++, GLSL)
- Implemented GPU ray tracer inside a GLSL shader program
- Achieved real-time ray tracing of simple scenes with realistic shadows and lighting
- Project Report Link
CS169A - Introduction to Software Engineering
ActionMap (Group of Two Final Project) (Ruby on Rails) (Ruby, JavaScript)
- Utilized Test-Driven Development to add user-facing features to an existing codebase for a Ruby on Rails based website
- Added features included making the existing map interactive in the frontend and creating US representative profiles using the Google Civic API to retrieve data about US representatives which are stored using a Postgres database
- Tested interactive map with Cucumber, Capybara, and Selenium WebDriver to ensure map was functional for users to use
- Performed continuous integration using TravisCI and deployed website to Heroku
- Website Link
CS168 - Introduction to the Internet: Architecture and Protocols
Network Routing (Python)
- Implemented a simplified version of the Routing Information Protocol in a network simulator
Network Transport (Python)
- Programmed a simplified version of TCP without congestion control in a network simulator
CS164 - Programming Languages and Compilers
ChocoPy Compiler (Group of Four) (Java)
- Implemented a compiler for a statically typed dialect of Python called ChocoPy
- Compiler parses and syntax checks ChocoPy programs, performs type checking, and outputs RISC-V assembly code
- Work was assigned evenly and done remotely among all teammates using a project management tool called Trello
CS162 - Operating Systems and Systems Programming
Pintos Kernel (Group of Four) (C)
- Designed and implemented running user programs, priority scheduling of threads, file caching, extendable files, and subdirectories support for the Pintos Kernel
- First half of work was done in-person and second half was done remotely
CS161 - Computer Security
Encrypted File Sharing Backend (Group of Two) (Go)
- Designed and implemented a secure file sharing backend in Go for a file storage website called CryptoShare, enabling users to store and share files securely using encryption in the cloud
- Modified frontend of website for the users to utilize the file share, file share revocation, file rename, and file deletion features that were added to the backend
- Created unit, integration, and security tests to test functionality and security of backend implementation
- Attained top 10 rank out of ~350 teams for our project backend implementation in the class
- Website Link
ESPM155AC - Sociology and Political Ecology of Agro-Food Systems
Restaurant Worker Survey Website (Group of Six) (Python)
- Worked on the frontend and backend of Flask based website that collected survey results from restaurant workers in Berkeley to automatically generate graphs of data as well as a map of restaurant locations surveyed
- Created API to let custom survey app submit data to the backend
- Hosted website originally using the Nginx web server on a Linux virtual machine running on Microsoft Azure and secured website traffic using an SSL certificate from Let’s Encrypt obtained using CertBot
- Switched website host to Heroku after Microsoft Azure student subscription expired
- Website Link
CS61C - Great Ideas in Computer Architecture (Machine Structures)
Virtual RISC-V CPU (Group of Two) (RISC-V Assembly, C, Python)
- Designed and implemented a two stage pipelined RISC-V CPU inside a digital logic simulation software called Logisim Evolution
- CPU used a ROM to store control signals for each supported RISC-V instruction
- Wrote a Python program that generated a ROM file from a CSV file containing control signals which reduced development time
- Created unit, integration, and edge case tests in RISC-V Assembly and C to ensure correctness of program execution
- Compiled most integration tests from C to RISC-V Assembly using GCC
CS61B - Data Structures
Bear Maps (Java)
- Implemented backend Map Rastering API which provides map tiles to the frontend for the map area that the user is currently viewing
- Computed shortest route and provided turn-by-turn navigation directions between starting and destination points using the A-Star algorithm
- Used a Trie data structure to autocomplete location names given a prefix
- Web Demo
Build Your Own World (Group of Two Final Project) (Java)
- Created game prototype where a player collects gold while being chased by dragons in a randomly generated map of hallways and rooms
- Generated map using Prim’s algorithm to build the Minimum Spanning Tree (MST) where each room is a graph node and the edges between each node are the hallways
- Used generated MST to connect each room with hallways so that each room is reachable from any other room
- Web Demo
CS61A - Structure and Interpretations of Computer Programs
Ants (Group of Two) (Python)
- Programmed backend game logic for a game called Ants Vs. SomeBees
- Structured code using Object-Oriented Programming by creating a class for each type of ant in the game
- Subclassed ant types from ant superclasses using inheritance to avoid code duplication when implementing more specific ant behaviors through method overriding
- Web Demo