Open-source software (OSS) is important to me. I use a lot of open-source tools in my daily development workflows, as well as using libraries and applications in business applications. I believe the spirit of collaboration and collective development found in the OSS community is foundational to nearly all of the software industry and is ultimately benefits the world at large.

Here, I want to show some open-source projects I have worked on and contributed to, as well as highlight some tools and libraries I use frequently.

Rust3DS

Rust3DS is a project that aims to provide first-class support for the Rust language on the Nintendo 3DS. There is already excellent support for C and C++ in the 3DS homebrew community thanks to the heroic efforts of the devkitPro developers (who, by the way, have also created homebrew toolkits for lots of other game consoles too!).

The other maintainers of Rust3DS and I have worked to make developing 3DS homebrew in Rust as positive an experience as we can. Although the project is still fairly young, we have made a good amount of progress towards that goal:

  • Rust support for the armv6k-nintendo-3ds target has been delivered upstream to the Rust compiler! There is also support for the majority of the standard library. This was our biggest milestone, and involved a number of changes to libc, rustc, and std.
  • cargo-3ds is a CLI tool for initializing new Rust3DS projects, and building and testing executables on the 3DS. The goal is to make it as simple as building with cargo like any other Rust project.
  • ctru-rs is a set of bindings and safe Rust wrappers for devkitPro’s libctru. Although incomplete, a lot of the API is usable today.
  • citro3d-rs is a similar set of bindings and safe wrappers for citro3d. It is much more of a work-in-progress and under active development.
  • test-runner is a helper that runs Citra in a container in order to run test executables in a way that’s suitable for use in CI pipelines. Part of this work involved implementing changes to Citra upstream to leverage the GDB File I/O protocol for test output.

Miscellaneous contributions

These are some small-to-medium-sized features I’ve added to open-source projects. Sometimes the best way to make something better is to do it yourself!

  • Added rendering of ANSI color codes to rust-analyzer compiler error messages in VSCode.
  • Improved how temporary :help buffers behave in vscode-neovim (my daily driver for text editing).
  • Added support for the Rust language to code.golf.

Shout-outs

In no particular order, some tools and libraries that I think are awesome:

  • I use yadm to manage my dotfiles (user configuration of various CLI tools, applications, etc.).
  • bat is an excellent way to view files on the command line.
  • fish (the Friendly Interactive SHell) is my shell of choice when it’s available for the device I’m working on.
  • KeepassXC is a great application for generating and storing passwords, without requiring an internet connection or a cloud service.
  • colima is a handy alternative to Docker Desktop on macOS, and makes running containers from the command line easy.
  • lnav is my absolute favorite tool for reading log files. Color highlighting, filtering, bookmarking, and custom syntax formats! If structured logs aren’t an option, this is the next best thing.
  • brew is the best package manager for macOS I know of, and has an incredibly large repository of packages.
  • Bevy is a code-first, data-driven game engine powered by Rust.
  • kinto makes Windows / Linux keyboards feel like macOS, which is super helpful after years of muscle memory have set in.
  • The family of Rust, Go, and C++ search extensions built by Huhu make searching standard library and third-party package documentation super easy.
  • goplay.tools is a significantly nicer user experience than the default go.dev playground, and is my Go-to for testing out code snippets.
  • Refined GitHub significantly improves the GitHub user experience with a ton of small tweaks, style changes, and keyboard shortcuts. It’s hard to live without.