I'm a 4th year student at Rutgers University and aspiring software developer (or researcher, still haven't decided!). I like operating systems, hypervisors, systems programming, and
high-bandwidth/low-latency computer networks. If you are hiring or need a grad student in these domains, e-mail me!
I also have a good amount of experience in many other languages, infrastructure and full-stack
(email me for my CV for additional information). Other than programming, I enjoy writing stories
stories (kind-of out of date and features not-great stories), and I also "maintain" a
blog that tries to document technical (and sometimes non-technical)
things that I find interesting (note the bubble tea post is egregiously incorrect). I also enjoy reading books and
sometimes aimlessly thinking about the world. My favourite book series is the Stormlight Archive. You should read it too.
Here's a list of (semi-)recent (semi-noteworthy) programming projects that
I've worked on (everything else is available on GitHub/GitLab):
Styx Emulator:
I'm working on getting emulation for Qualcomm Hexagon DSPs supported on the Styx Emulator. This includes the ISA, peripherals, and other stuff like that
to get Hexagon-based firmware up and running. This was fun because Hexagon is a VLIW architecture, and has fun quirks in its packet semantics that requires
staring at the 699-page manual to figure out.
LightVideo:
This is the continuation of my vGPU streaming project, when I realized that low-latency video streaming is harder than it seems.
I wrote a "test platform" video streaming library (geared towards remote desktop) that uses hardware acceleration, variable bitrate,
and forward error correction. It also has an extensive statistics collection system to measure how video streaming performance changes
based on parameter and packet loss mitigation changes.
vGPU Streaming (finished):
My remote desktop software captures the buffer of an NVIDIA
vGPU running in a KVM virtual machine and uses video streaming (using the FFmpeg C API) to provide a remote
desktop. In addition to streaming video, it has a custom TCP protocol using Protocol Buffers
to transfer connection information and mouse/keyboard events between the client and server. The client
is written in C++ (for decoding the video stream) and Rust (the UI and everything else). The server is
written in C (for capturing the VMs and streaming) and Rust (the TCP control server).
vGPU RE:
I think VDI, game streaming, and that sort of thing is pretty cool. I worked on reverse engineering
NVIDIA's vGPU software and NVIDIA drivers to make GPU virtualization work better. This involved various things like
spending hours on doing things with kprobes
, staring at Linux driver code, recompiling Xen a bunch of times, doing lots of things
with hooking functions and LD_PRELOAD using tiny C and Rust programs, and staring at assembly.
At some point I got GPU virtualization working on a GTX 650Ti, mainly for the memes.
MQA Player (finished):
I used a shared library for a DAC that was an armv7 machine running embedded Linux and existing code that
called aforementioned library, but expanded on it to make an IPC system to decode MQA on-the-fly from an x86 executable, which involved implementing
my own mutexes and semaphores and learning how to use shared memory.
emotes-rs (finished):
When you chat on Discord and paste the link to an image, Discord will
remove the link and you'll only see the image. I thought it would be
cool if you come
up with memorable URLs that return images that are the size of emojis,
allowing you send custom "emojis" in Discord. The Rust backend I wrote
exposes a GraphQL API
(using the wonderful async-graphql library) to manage users and
uploading emotes, that uses SQLx to communicate to a PostgreSQL
database. It also utilizes libvips to resize images quickly (resizing
GIF emotes can be quite expensive and this library is exceedingly
performant).
I also wrote a version of this application in Python which was
somewhat more featured, but it became impossible to maintain since I
used too many niche libraries that were poorly documented. A frontend
for emotes-rs is also available here.
(This site intentionally written with 10 lines of CSS)