Projects

Ratatui (collaborative - contributor, ongoing) Link to heading

Demo video for Ratatui

Forked from the popular tui-rs library, Ratatui provides a framework allowing for the convenient creation of minimalistic terminal user interfaces (TUIs). It has support for immediate and retained-mode rendering.

I started working on Ratatui because of my work on Rush. When working on some of Rush’s functionalities that required “terminal raw mode” I was struck with a predicament whereby I would need to reimplement the window resizing logic that terminal emulators usually provide. After a bit of research, combing through obscure forums and SEO spam articles, plus some conversations with knowledgeable members of the Rust community, it seemed that window resizing support was a task so monumental that it would be a waste of my time. Coming to this conclusion, I decided to seek out a library that had done some of the heavy lifting for me, and I eventually settled on Ratatui.

Unfortunately, though Ratatui effectively solved the resizing problem, it lacked a few of the functionalities that I required, such as ANSI escape sequence parsing, cursor tracking, and other features common to terminal emulators & multiplexers. This led me to start working on the library, and it eventually became my main project.

Though I had plenty of experience with leading a team from working on Rush, I had little experience on the contributor side, and the Ratatui team helped me learn the workflows and responsibilities of a contributor to an existing library. In particular, I’d like to shout out Josh McKinney, a maintainer of the project who took on something akin to the role of a mentor.

Rush (collaborative - owner, ongoing) Link to heading

Built from the ground up as a shell focused around intuitive user interaction and robust internal design, as well as modularity, Rush is a Unix shell which provides features that both experienced and beginner CLI users will appreciate.

Rush arose from my grievances with both Bash and PowerShell. I actually initially considered becoming a contributor to Fish, but due to the fact that Fish was written in C++, and that it wasn’t quite what I wanted to use as my “daily driver,” I decided to start my own project.

I was surprised when it quickly gained steam and I took on close to ten team members. I had never worked on a truly-collaborative project before, and I enjoyed taking the role of project lead and helping the contributors, some of whom were quite new to Rust, turn their feature ideas into actual functionality.

Though the Rush project is currently on hiatus, pending the development of Kenji’s innovative tui-term extension for Ratatui, I still plan to revisit it and build it out to be the shell that I’ve always wanted, and it encourages me that other share my vision. I am consulting with Kenji to help him improve the design of the extension, but am not contributing to it directly at the moment.

SMIS (solo, completed) Link to heading

SMIS, short for Simple Monolength Instruction Set, is a mock instruction set architecture designed to make teaching and learning assembly fundamentals as painless as possible. The instruction set comes with an assembler, disassembler, and emulator, along with documentation, to give a student all the tools they need to start their low-level programming journey.

I wrote the SMIS toolset during my Computer Architecture class, as I found computer architecture and instruction set design to be fascinating. I used the first iteration of the project to greatly expand my knowledge and skills with C, and later on I rewrote the entire project in Rust as my initial venture into the language.

BetterAnvils (solo, completed) Link to heading

BetterAnvils is a Minecraft plugin (similar to a mod) which brings the anvil into the modern age of Minecraft by reimplementing its rather fickle vanilla functionalities and supplying comprehensive configuration options that are not available in the base game.

Before I learned how to program, I remember commissioning a plugin that had some of these functionalities, and I recall paying around $40 for it, which hurt my wallet - considering my lack of employment at 17 in the middle of the pandemic. Of course, I never received any updates or ongoing support for it, and it eventually stopped working.

Coming back to Minecraft years later with much better knowledge of programming & technology, I learned how to write a Spigot plugin over the course of a few hours and put together a plugin which performed exactly the tasks I needed it to. I also was able to remove another plugin called NotTooExpensive, as BetterAnvils provided a superset of the same functionality. This may sound insignificant, but on Minecraft servers, every plugin counts toward your memory budget.

I was surprised that, even past the initial wave of webscrapers downloading the plugin, multiple people tried it out and liked it. I had never truly “published” a project prior to this, but I still did not expect that people would actually find and use my code.

Notably, this project further confirmed to me that I could learn anything I set my mind to. I had begun learning Spigot on a whim and had barely worked in Java for quite a while, but I still somehow managed to gain a solid understanding of the plugin development ecosystem and its workflows.