Projects

I’ve quite a few open source repositories on GitHub and more that I contribute to, but I have a handful that I really enjoy or that I consider decent projects.

If you are interested in my identified skills or employment and volunteer history, see my resume.

Sonic Pi

Since late 2021, I’ve been a part of the core development team for Sonic Pi, a code-based music creation and performance tool with a focus on educational use in the classroom. I’ve worked on Linux-specific issues as well as general improvements surrounding the integration of Elixir for the internal Tau server, needs of downstream packagers, and the build system.

vim-sonic-pi

I forked the original sonicpi.vim project and brought it up to date with current versions of Sonic Pi, completed the work on automatically generating highlighting and auto completion information from Sonic Pi’s runtime files, added live log popout, added built-in server starting and management, and added built-in recording options. The plugin, along with the sonic-pi-tool helper, is featureful enough to make (Neo)Vim a full environment for a lot of uses of Sonic Pi, including live coding.

FoosterOS/2 Warp

I created a NixOS-based configuration for my own systems, which includes custom packages and configuration modules in addition to GitHub Actions for automated testing and dependency updates. The packages can be imported standalone or as an overlay to nixpkgs and is implemented as a Nix Flake (though it uses flake-compat to allow usage with the older Nix commands).

.:mode:.

I created a 2D game engine based on SDL2, sol, and Lua in C++. While it was originally designed as part of my CPSC 4160 class at Clemson University, it has grown considerably since then and more or less all of it has been rewritten without the scaffolding provided in class. It is a completely dynamic engine that can change just about anything at runtime – including Lua behaviors of sprites. It has a built-in code editor for injecting and modifying sprite behavior inside of the game while it is running.

fooster-web

I created a small, process-pooled web server in Python designed around conforming to the HTTP/1.1 standard, building RESTful interfaces, and automatic read/write resource locking. I additionally created several addons for hosting files, performing authentication, decoding submitted HTTP forms, request decoding and response encoding with JSON, and page templating. On top of this base, I created several web applications which can be selected via the navigation bar at the top of this page. I basically created a complete web stack and web applications using little more than the standard Python library and a lot of my own code (don’t ask me why).

mkusb

I made a shell script to create ISO multiboot USB flash drives that support both legacy and EFI boot (which also has a sister project mkwin that creates bootable Windows media). It actually stores the operating system ISOs on the drive and uses Grub and initramfs magic to boot from them. It additionally supports booting rEFInd and FreeDOS from the same multiboot drive.

lights

I created the hardware and software (based on a Raspberry Pi with software written in Rust) for a network-controlled RGB light strip. It supports setting custom time-based patterns in addition to predefined patterns and single colors and has a web page interface (with live-updating over WebSockets), several API interfaces, and an OSC interface for use from audio software, such as Sonic Pi.

Though on pause for the moment, I began developing an object-oriented programming learning game centered around learning and using Python to manipulate the game itself. I put in a lot of research time in computational learning as well as trials for determining optimal strategies to develop computational thinking skills in those who have had little to no previous programming experience. Only super-basic code is there right now, but it does show my interest in education through gamification.

NXT-Music

This is an old project from my days programming NXT bricks for FTC robotics team 772. I created a music interpreter and compiler to convert a typed-up sheet music format into something a helper library on the NXT brick can play asynchronous to other running code. It includes a standalone application that lets you select files to play and includes a lyric engine in addition to the note engine. Also included are several transcribed music files that I made while on the team. The helper library is written in RobotC and the music interpreter and compiler is written in standard C.