My Projects
ARQ (ASCII Roguelike Quester) and ARQ-Rust
Back in 2013, I started on one of my first personal programming projects. ARQ (ASCII Roguelike Quester)
I had played a bit of Nethack and some other text-based games and wanted to dive into the technical challenges of creating something similar, while learning some C++ along the way.
I've learned quite a lot while working on this, particularly:
- Procedural map generation (with some help from an old colleague: Christopher J Harvey-Smith)
- curses/ncurses for developing text-based user interfaces
As this was a learner project it got a little messy as time went on, and I started to get frustrated at working in C++.
In 2021, I learned about the Rust language for the first time. After reading about it, I could see it addressed some of my main frustrations around developing in C++, so I was excited to give it a go by porting/re-implementing ARQ.
This is how ARQ-Rust got started
Why I prefer Rust to C++:
- The borrow checker - ownership/borrowing avoids the chance of accidental runtime pointer errors, and removes to need to worry about memory management too much
- Cargo - Rust's built-in package manager provides a complete dependency management / build system out-of-the-box instead of needing to roll your own dependencies/Makefiles/CMake setup
- Explicit mutable/immutable referencing - which helps you to be clear around your intentions and avoid side effects when designing structs/traits. This also prevents you from concurrently modifying data and forces you to think about where to pass references or where to clone data (data boundaries).
- Built-in unit test support
Moving over to Rust went really well, and I was able to redesign quite a lot of things from the ground up, and make some improvements on the original:
- Display state management - Handing over control of the game state (Level), UI, and IO loop via View/Command patterns is much more explicit through mutable borrows
- An improved start/settings menu with custom widgets - I was able to make use of ratatui widgets for this and other screens
- Music support - Music is done via rodio to handle to audio streams and an async tokio task to handle playing music in the background
This is still under development currently, here are some developmental screenshots to give an idea of the project:
purses - GitHub
purses (A portmanteau of PulseAudio and curses) is a text-based UI audio visualiser meant for Linux command-line usage
It hooks up to the PulseAudio sound server that is popular on Linux systems
More specifically it's written in C and uses my own implementation of the Cooley-Tukey FFT algorithm
This seemed line a fun way to learn about Digital Signal processing, and seemed like the perfect opportunity to write something in C
This Site - darrenjoseph.uk (Github)
This site is technically also one of my personal projects!
I've always admired simplistic websites such as those on Neocities
I wanted to create my own little site that could:
- Use my frontend development experience to create a Minimalist HTML/CSS/JS site while utilising modern browser features/support
- Evoke a retro 90s/early 2000s vibe
- Use my SysAdmin/DevOps experience to manage/maintain my owner server/site setup. (This site is hosted by Krystal if you're curious)
- Use my experience with image editing (Photoshop/GIMP) to create any needed icons, badges, and banners
- Give me somewhere to play with web technologies/ideas.