Projects
Snake
A Snake clone for terminal emulators using Rust. I used crossterm for cross-platform terminal emulator support, and developed a very basic engine/game-loop that supports targeting a specific framerate, registering and loading scenes, processing input, and buffering draw calls.
Check it out View on GitHubCSS Parser
My dream is to write programming languages professionally. I also dream of being able to write Rust and not fight with the borrow checker. That's why I tried my hand at writing a toy CSS parser in Rust. It follows the CSS 3 spec, though is far from complete. This was my first time writing a parser that followed an established spec - although initially terse, the spec helped a ton with my implementation.
Read more View on GitHubPascal Compiler
My first venture into learning how to write a compiler, I followed along with Writing Compilers and Interpreters: A Software Engineering Approach. I learned a lot from this book and project, including different techniques to parsing a grammar, how compilers are typically structured, and how to provide helpful error messages that point out the exact issue in the source code. This was also the project I used to learn TypeScript.
Read more View on GitHubConway's Game of Life
My attempt at implementing Conway's Game of Life. Written in TypeScript using the WebGL API. I initially implemented this using the standard DOM API, which proved to be slow. In an effort to get better performance and to learn how to write shaders, I ported it to use WebGL. I think more time went into learning how to play the Game of Life than actually implementing it.
Check it out View on GitHubTrampoline TS
A small package I wrote because I needed to emulate tail-call optimizations and none of the existing packages were type safe. The package sports 100% code coverage (including tests for the more complicated types), and uses semantic-release to automate the build process.
Read more View on GitHubBaby Announcement
A baby announcement disguised as a fun quiz game. Users can create and join quiz sessions where they'll be asked the same question on their phones, waiting for everyone to answer before moving on. Once the last question is answered by all players, the baby announcement is displayed and a ham horn is played. The web app also uses the front facing camera to record everyone's reaction to the news, which can then be downloaded. I used TypeScript for the client and the server.
Read more View on GitHubMy Dotfiles
My attempt at synchronizing settings between my desktop running Arch Linux and my MacBook Pro. I use a bootstrap script that I wrote to detect the current OS, detect the current package manager, install a package manager if one was missing, install any missing dependencies, and symlink my dotfiles from the repo to their appropriate locations using GNU Stow.
Read more View on GitHubPersonal Site
My attempt at creating my own, custom portfolio site from scratch. It was originally written in PHP when I was college, but was completely rewritten in 2013 to get a better feel for Node.js. I've since rewritten it again in 2020 to be simpler, use a proper build process, and use TypeScript.
Read more View on GitHubNo BuzzFeed
A small Chrome extension I wrote at the request of a friend. The extension scrapes Facebook for any BuzzFeed posts and removes them from the DOM. My goal was to make it as small as possible and have no external dependencies, while still being configurable and a fully installable Chrome Extension. I managed to make it in 51 LOC.
Read more View on GitHubScrum Poker
A small web app I made that helped with estimating points for tasks at the beginning of sprints. My goal was to rely on JavaScript as little as possible and try to achieve as much as possible with CSS3. The only things that require JavaScript are loading of different point units, and applying a few classes. The site can be seen here.
Check it out View on GitHub