Benny Aguilera

About Me

I'm an senior undergraduate currently studying Computer Science at UC Berkeley. This semester I'm taking Probability Theory and Random Processes (EECS 126), Operating Systems and Systems Programming (CS 162), and Programming Languages and Compilers (CS 164). I'm currently looking for software engineering positions to start after I graduate this spring.

I've been programming since I was a kid, and today I'm still always working on at least one side project. These days almost everything I write is in Rust or Python, although in the past I've worked extensively with Java, C, and C++ as well. You can see some of the things I've made on my GitHub.

In my free time I like to climb rocks, swim, and play games.

Projects

RISC-V Debugger

An assembler, virtual machine, and interactive debugger for RISC-V assembly. The assembler and virtual machine are written in Rust. The interface is written in React with Typescript using the Next.js framework, which call into the assembler and virtual machine by compiling the Rust code to WebAssembly. This project is a work-in-progress, but a functional demo is available here.

Berlekamp-Welch Error Correction

An implementation of the Berlekamp-Welch error correcting code algorithm that encodes messages as polynomials over a finite field to efficiently make them resistant to an upper bound of corruption errors. The theory of this topic was covered in my Discrete Mathematics and Probability Theory course, but I decided to fully implement it (and an accompanying web interface) as a side project.

Leaf Programming Language

A compiler to bytecode and an accompanying virtual machine for a programming language I designed myself, implemented in Rust. Minimal external libraries were used; nearly everything including parsing and code generation is written from scratch. Lexing is done zero-copy, and an intermediate representation in the form of a control-flow graph is partially implemented.

Mars: Vulkan Library for Rust

A library for writing Vulkan applications in Rust with a few opinionated and experimental takes. It supports custom shaders, vertex buffers, uniform buffers, texturing, and customized render passes, and it exposes all of these through an interface that makes heavy use of traits to ensure that the resulting Vulkan API calls are valid. It does this while still being composable by using associated types to allow different (but still valid) combinations of objects into render passes.

Wally Wayland Compositor

A proof of concept compositor for the Wayland protocol built using the Rust language and Vulkan 3D graphics API. Notably, all of these are relatively young technologies, so was very little literature on using them together. Building this project required me to delve into the source code of several core components of my operating system, and eventually led to me reporting a bug and suggesting a fix in my graphics driver.

As part of this project, I completely reimplemented the Wayland protocol in Rust (here) since I wasn't satisfied with the available options. This memorably involved resorting to reading the reference implementation's C source code to discover a completely undocumented aspect of the protocol that was causing issues in my implementation at the moment.

Neural Network from Scratch

A simple neural network built after reading the first couple chapters of this online book that can recognize handwritten digits with around 90% accuracy. This was my first time applying nontrivial amounts of calculus and linear algebra to a programming project, and it was really cool to see how effective such a small solution could be thanks to the math involved.

Homelab

I maintain several Linux servers (both physical and rented) at home for some services and networking components. For example, I use a self-hosted password manager (Vaultwarden) and I set up a router from scratch on a base Linux install using firewall rules, the Unbound DNS server, and a few other services. My local and remote servers are linked on a virtual private network using wireguard. As I have built up my lab over the years, I've learned lots about Linux administration, virtualization, DNS, networking, firewalls, reverse-proxies, VPNs, backups, and lots more.