Looking Back
- 2023-12-31
- 15:32
Wrapping up 2023, I'm taking a look at the projects I've done or worked on and things that I've learned this year.
LiveJrnl
LiveJrnl was the original iteration of this blog. It started out as a journal written with jrnl.sh. I found this project that would display the journal as a website and was absolutely in love with the idea, with one caveat. The javascript. Those who know me know that I have no love for javascript. I don't even want it in my desktop applications if I can help it. Using that was off the table, so that brings me to LiveJrnl.
The first version of LiveJrnl was written in Python. It was published on my former GitHub account, under my dead-username. For a fleeting moment, it served its purpose. All of my posts, on one page. Easily indexed, easily searched. Have I achieved perfection? It sure felt like it.
Being in the middle of a move, I wanted to be able to write on my tablet or laptop, so I eventually moved towards using Obsidian for writing. I know, I know, its not open source, and its javascript backed... more on that later in another post... From there, LiveJrnl kind of outgrew itself. Before long, I was stitching together journal entries written in Obsidian to append to the jrnl journal. That worked for a while, then I wanted to be able to edit new articles from Obsidian. That led to writing a one-off Python script to chop up the jrnl journal into individual entries, and I would just use jrnl to search my posts offline. After a certain number of posts, the posts page became a bit long and it started to take a while to render the website.
Of course, I was also learning Rust at the time (still am, really), and what better way to learn a language than to re-implement something you've already done before? Enter, livejrnl-rs. I learned a good amount of Rust with that project. It was eye-opening how simple the language can be, even though it is ugly as fuck. I finished that, and still had the same limitations as the Python version. There was no pagination, and the posts page was long. I couldn't figure out how I wanted to export the pages, and eventually landed on using Zola for a static site generator. One quick one-off Python script later, and I had my LiveJrnl posts imported.
With that said, LiveJrnl and livejrnl-rs (and their respective template repos) are both considered abandoned. If you, my dear reader, find a bug, let me know and I will fix it for you if its serious enough.
Bitwarden SSH Agent
Sometime in July I started writing a Rust port of bitwarden-ssh-agent. The link to the Rust version can be found here. At the time of writing, commit ce3b075b9b195ee5ee5a1ec8c9784cf076592e84
is the latest version. It is at 1:1 feature parity with the original, with some personal changes.
As is, the project is functional and complete. There is one unresolvable bug, such as getting stuck in a login loop if BW_SESSION
is invalid. I may revisit this in the future to fix that if I can ever figure it out. At the moment I would rather re-write the thing from scratch, using the Bitwarden API itself.
Unnamed First Person Shooter
Between January and August I would work on-and-off on an unnamed FPS in Godot. The graphics were a bit primitive, and were originally made in both MagicaVoxel and Blockbench. I eventually learned how to model in Blender to make better assets. I have not yet published that, as I don't exactly know how to license the assets in way that prevents certain people (see also: evil commercial interests) from downloading, compiling, and selling the game without any modifications. From my understanding, AGPL doesn't cover media. I also don't have any sort of git history, as bouts of working on it came from intense hyperfocus sessions.
What works:
- Day/night cycle
- Lifts/moving platforms
- Sliding doors
- Door keys
- Quake 3 style movement
- Aiming
- Shooting
- Reloading
- Weapon pickups
- Jump pads
- TrenchBroom map loading
- Menu system
- Dialogue system
- Themed GUI elements
What needs refactoring:
- See all of the above
What's missing:
- Enemies
- Vendors
- Swimming
- Portals
- Mirrors
- A story
- Level design of any kind
- Speed boost pads
- An actual art direction
Do I have plans for this project? Yes and no. My Obsidian notebook has several ideas written down, nothing concrete. I may turn this into an RPG instead. A boomer shooter RPG sounds pretty good, to be honest. It would give the speedrunners and minmaxers something to do.
From this project, I've learned that I'm capable of writing modular code. Most of the components in the game can be reused in other games after a slight refactoring. I'd say that went fairly well and is worth a revisit.
sparkle-git
This is probably my favourite project of the year. sparkle-git
is my soft-fork of rgit where I'm adding features, and will eventually migrate towards a fully self-hosted git solution.
Throughout this project I have learned how:
- git can be manipulated
- git http-backend works
- to document rust code with proper docstrings
- to write my own dockerfiles with multistage build and caching (IN PROGRESS)
- to write man pages
- to work with pandoc
- to work with axum
- to use git format-patch
- to write a PKGBUILD
- to determine if a rust crate is the real deal or a typosquat
- to work with Pipelight
Final Thoughts
All in all, it was a productive year for code. I wonder what 2024 will bring. 💖