Software engineer fascinated by computer hardware and the systems built upon it.

UC Davis graduate passionate about graphics pipelines, simulators, and CS education tools. Experience leading development on RISC-V simulator deployed as a teaching aid and independent projects surrounding graphics pipelines and physics visualizations.

Also a creative working on thinky puzzle games and nostalgic websites. Trying to claw back a small piece of that old internet individuality.

VRV: Virtual RISC-V
[[engineer]] 2023 -- present

VRV: Virtual RISC-V

RISC-V System Emulator for Education

RISC-V system emulator, primarily meant for teaching assembly programming and computer organization concepts.

VRV implements the instruction set RV32IMF_Zicsr (32-bit base integer + integer multiplication/division support, single-precision floating point support, and control and status registers support) and offers two privilege levels: machine and user modes.

  • Simulation backend assembles, links, and executes RISC-V assembly programs.
  • Configurable M-mode system file defines kernel functionality, e.g. trap handlers.
  • Execution supports both simplified std input and an MMIO TTY device interface.
  • Project maintains a CLI frontend and a QT GUI frontend with extensive debugging capabilities. Actively working on a javascript+WASM frontend to run on the web.
  • Used in UC Davis course, reported as effective teaching aid by 80% of students.

vrv
ACPC
[[engineer]] 2023 -- present

ACPC

Aggie Competitive Programming Contest

Annual programming contest hosted at UC Davis with a focus on introducing both undergrads and highschool students to the creative thinking and problem solving skills that competitive programming promotes.

I was lead problem setter for the 2023 and 2024 contests and a problem writer/tester for the upcoming 2025 contest. As lead problem setter, I was responsible for statement editting, testing/verification, and maintaining format consistency. I also led onboarding efforts to instruct and advise other members of the contest organization team in terms of problem writing and configuring the judge.

acpc
What is the RPG?
[[designer]] 2024

What is the RPG?

ARG Promotional Website for

The Remake of the End of the Greatest RPG of All Time

Written from the perpsective of an in-universe conspiracy theorist, this website has a retro geocities style and contains many secrets that inform the world surrounding the game as well as this character.

whatistherpg
Computer Architecture Simulator
[[engineer]] 2024

Computer Architecture Simulator

Research Software Engineer and Contributor

Cycle-level event-driven simulator designed for computer architecture research. Used globally by university labs and industry computer hardware designers.

Over the Summer of 2024, was a hired as a research software engineer in the UC Davis DArchR lab that maintains and develops gem5. During that time, I made the following contributions:

  • Resolved longstanding issues affecting KVM workloads by developing a Linux Kernel driver guest-to-host bridge. Allows unprivileged programs on simulated OS guests to communicate with the gem5 simulator via MMIO accesses.
  • Developed a new simulation object framework for accelerator development. Automates the scheduling of internal events, allowing users to focus on design.
  • Aided in the development, editing, and testing of educational materials for the 2024 gem5 Bootcamp. Built key features of the bootcamp’s website.

gem5
Ekiben Tour
[[designer]] 2024

Ekiben Tour

Interactive Tour of Japanese Train Bento

This site allows users to go on a quick eploration of the regionally-distinct ekiben, bento found at Japanese train stations intended to be eaten while riding the train. You can select a variety of cities and investigate the ingredients and history of a selected ekiben specific to that region.

One interesting engineering problem was how to allow selection and highlighting of specific areas of the images. This was done by manually rotoscoping these sections in photoshop while also generating a mask of that specific area. While the rotoscoped image is used for the highlighitng, the masks are composited these into a single image while, ensuring each area has a distinct shade of red representing the area's ID. There are actually two rendered canvases on the site, one of which is invisible and displays this ID mask. I can then use the user's mouse position to query this mask and highlight the associated area of the image.

ekiben
CUDA Raytracer
[[engineer]] 2023

CUDA Raytracer

A simple ray-tracing engine designed to test the performance improvement of CUDA for this particular workload. The scene consists of a variable number of randomly placed reflective spheres. The engine performs scattering and accumulation to create a high quality image in real-time by improving fidelity across frames.

CUDA parallelization is done at the level of areas of pixels in the rendered frame. We test the assumption that each pixel within these small areas will processs a similar number of ray bounces and access similar memory from the scene. These factors will promote speedup. This approach is tested against a serial implementation for increasingly many spheres to show improvements from CUDA as the scene grows more complex.

cuda-raytracer
Memory Leak
[[gamedev]] 2023

Memory Leak

A Game About Making Lies from Truth

This game puts you in the seat of a 1984-style beauracrat who is having their thoughts constantly analyzed by their government to ensure complacency. However, you are given the ability to continue thinking freely, as long as you can rearrange your thoughts back into obediency before they are checked. Use this freedom to sabotage infrastructure and remain innocuous.

Made over 48 hours in Unity for a UC Davis game jam.

memory-leak
Computer Vision Projects
[[engineer]] 2023

Computer Vision Projects

A collection of small computer vision projects.

Image stitching presents a procedure to stitch together images to form a cohesive panoramic photo, compensating for differences in camera angle and position. Harris corner detection is used to find a set of useful descriptors in the images and then find good pairs of descriptors that may act as anchor points to match up the images. Finally, RANSAC is used to randomly sample a set of pairs and attempts a homographic projection built upon those points. This leads to an almost exact reprojection of the contents of one image into the space of the other.

Filters and edge detection contains a variety of experiments with different kernel filters such as Gaussian blur, Sobel edge detection, and bilateral filter. This culminates in an algorithm using the Hough transform to create a set of lines that can characterize the most significant edges of the image.

computer-vision
MangoDB
[[engineer]] 2023

MangoDB

Concurrent L-Store Database in Rust

A lineage-based transactional database written in Rust with a python interface. This kind of database stores the changes in records after each transaction, retaining the history of the record within the managed structure of the database. Indirection is limited by maintaining a chain of references from a base record -- the record attached to the query structures -- and the tail record -- the most recent version of the record. Then the chain continues backwards in time all the way back to the base record. Supports multithreaded query scheduling with concurrency control, durable buffer pool, and variable-sized data elements.

Developed by a five-person team, my responsibilites and contributions include:

  • Record location system that encodes both the logical range index and the physical page and offset of the record's content all in one value. This eases the query system by coupling this logical and physical info in a packed value.
  • Durable buffer pool acts as the interface between the file-system and the database server's memory. Caches pages and allows multiple-reader single-writer access to these cached pages. Writes dirty pages back to file-system on eviction.
  • Concurrency control procedure acting primarily on the buffer pool, as this is the main point of contention. Ensures every transaction is able to complete in isolation without being affected by other transactions, all while minimizing redundant buffer frame evictions.

mango-db
alARM
[[engineer]] 2022

alARM

CPU Simulation and Assembler

alARM is a simple ARM-like ISA used an assignment for the UC Davis computer architecture course.

The assignment specified a digital logic simulation of an alARM CPU to be made in the program Logisim. The design and implementation of this CPU is documented in the whitepaper linked below.

The original assignment required hand-assembling programs into the bytecode so that it could be loaded into Logisim. As a student in the class, I volunteered to write an assembler for the rest of the class to use to speed up this tedious process. The assembler includes a choice of strict or relaxed syntaxes, highly informative error messages, and pseudo-instructions. You can see a full specification of the assembly syntax in the assembler's README.

The assembler was written to gracefully handle the addition of new instructions and pseudo-instructions -- this proved useful when students in future iterations of the class forked and easily updated the assembler for new project specifications.

alarm-cpu
rvcodec.js
[[engineer]] 2022 -- 2023

rvcodec.js

RISC-V Instruction Enoder/Decoder

A webapp that helps students visualize how RISC-V instructions are encoded and decoded. Can either encode or decode the input and presents a visualization of the fields of the assembly instruction and how they map to the bits in the encoded instruction word.

Aa a contributor to this project, I made the following contributions:

  • Expanded the core encoder/decoder from just the base RV32I to support all ratified extensions in RV32/64/128GC.
  • Fixed bugs and normalized conventions in the core to make it more consistent and maintainable.
  • Implemented the autocomplete/lookup feature in the input field using a custom prefix trie and a system to map instructions to their operand format.

rvcodec
Cloth Simulation
[[engineer]] 2022

Cloth Simulation

Responsive 3D Verlet Mesh

A cloth simulation built with OpenGL and SFML for the UI. Supports a variety of options to customize the aesthetics of the mesh and the quality of the simulation.

Supports mouse interaction with the mesh via direct manipulation of mesh nodes via dragging, pinning, or deletion.

Simulation is implemented with Verlet integration to propogate the forces while preventing erroneous increases in system energy and the mesh is constructed with constraints on edge that are iteratively resolved to stabilize the results. The rendered mesh is itself interpolated at a higher resolution than the simulation mesh, efficiently improving the apperance of the simulation.

cloth-sim
MASM Mandelbrot
[[engineer]] 2022

MASM Mandelbrot

AVX-Powered Mandelbrot Explorer

An interactive Mandelbrot fractal explorer with frame contents entirely generated from hand-written MASM assembly code using AVX SIMD instructions for performance. Uses SFML as a window manager and input controller, but all commands are sent to the assembly rendering library which generates the pixel data to be rendered.

Supports zooming, panning, adjusting fractal precision, and multiple coloring modes.

masm-mandelbrot
Bad Optics
[[designer]] 2018 -- 2020

Bad Optics

Multimedia Art Collective

Look familiar? This website was made for an art collective I created with a few of my friends. I really enjoyed the design -- and I spent a lot of time on it back then -- so I decided to reuse it for this personal website.

The goal was to have one website from which we could all share our creations, which could implicitly diffuse one member's marketing to the others. The design of the website was supposed to reflect a minimal, dark, and modern aesthetic with a technical bend to it. I wanted a website that felt hand-made and detail oriented, so a bulk of the time was spent on making all of the interactions smooth and substantial. Besides some jquery for easy element lookups and filtering, there are no libraries or frameworks used; just good old-fashioned vanilla javascript.

The collective was multimedia, so I contributed a game and had planned to develop more along with the website. There is also an art gallery with pieces made by another member but was thoughtfully arranged on the website with the browser as a viewing medium in mind. There were even plans to make a 3D gallery, which is where the WebGL deferred renderer comes in, but those plans fell through.

bad-optics
WebGL Deferred Renderer
[[engineer]] 2019

WebGL Deferred Renderer

Intended as a renderer for a 3D puzzle game engine, this renderer supports advanced exponential variance shadow-mapping (EVSM) for dynamic lightsources, screen-space anti-aliasing (FXAA), screen-space ambient occlusion (SSAO), physically-based rendered lighting (PBR), and Source-inpsired room-isolated rendering logic with a graph of room connections to support efficient culling of both rendered meshes and light interactions.

The goal was to make a 3D engine with some high-quality rendering features that can be tuned to support a wide variety of devices. Since this is running on the web, it needed to remain efficient and performant even at its base level, while also remaining flexible enoguh to support low-end hardware, such as computers with only integrated graphics, if necessary.

webgl-deferred
Portal-ban
[[gamedev]] 2019

Portal-ban

Sokoban-style Portal Puzzle Game

A sokoban-style block-pushing puzzle game with mechanics inspired by Portal. Made using Stephen Lavelle's puzzlescript engine. Contains 5 levels that each explore different consequences of the portal mechanic in from this top-down perspective.

portal-ban
Wire Module Prototype
[[gamedev]] 2019

Wire Module Prototype

Problem-Solving Logic-Puzzle Game

A problem-solving game inspired by Zachtronics and digital logic. Abanoned as a prototype due to my own inability to explain the mechanics, I left it as "purposefully" inpenetrable in order to inspire the rare few to discover its functionality (inspired by games like Gestalt-OS).

Each tile can contain a logic module and can be linked with wires between the modules. Each tile can also be customized to interact with different signals or to react in different ways (toggling, rotating, etc) when a signal is emitted. Signals can be emitted by having power sent to themvia the wires, and recievers can react to the emission of a signal by transmitting power themselves. The goal is to emit a certain combination of signals in series in a reproducible manner.

Made with the cross-platform haxe language and the haxegon game framework which was primarily used for the rendering API. The bulk of the game's architecture and logic was handmade. The game simulation is highly performant and could run tens of hundreds of thousands of iterations per second from a dense and complicated circuit (though neither that complexity nor that speed is at all necessary for the game).

wire-module
I'm Going to Break Your Heart
[[designer]] 2019

I'm Going to Break Your Heart

Official Website for Documentary Film

Promotional website for a documentary film about the music and relationship -- along with the struggles surrounding both -- of a married couple collaborating as a singer-songwriter duo. Made from scratch with some design brainstorming with the film publisher.

igtbyh