Prologue
Hi there! I regretfully haven't made much use of my blog this year, but I figured I'd make a post putting a spotlight on some of the projects that I haven't had time to write about. I've done a lot of private work, so these are just the ones that I've open sourced.
March: sylvie.lol
My first real project of the year was the website you are reading this on! It's all written in Python and raw HTML/CSS, using Flask and SQLite for the backend. The site even works without JavaScript! (the time zone display optionally uses it to live update, but it is filled in server-side if not). The blog posts are written in Markdown, which lets me use bold text, italics, etc. Later this year, I also made the profile picture and name on the about page update with my Discord profile, just to keep things consistent.
It was so good in fact, someone stole it! Ripped the entire site using HTTrack and filled in their own information without asking me. To give them credit, they were very compliant once I talked to them about it. Imitation is the sincerest form of flattery, I guess!
August
blahaj.mom
blahaj.mom was a URL shortener written in Rust and Rocket. I wanted to deploy an actual, publicly available service, and I also wanted more Rust experience under my belt. I spent a majority of development time figuring out how Rust works (Option
s? Result
s? Borrowing? Words spoken by the mad!), but I also had help from some wonderful people in the SSI Discord who squashed bugs and cleaned up some code. The domain expired in late November and I decided to leave the project there, but the code is public on GitHub in case anybody wants to use it for their own service. (not that I would recommend it, it was my first Rust project ever so...)
Server-Side Waystones
I've run several Minecraft servers with my friends for a few years now, and one of the recurring additions in the modpacks I'd make were Waystones. Normally, we would use Wraith Waystones, but this particular time we had decided to make a modpack that was compatible with Geyser. However, since most modded content requires the mod to be on both the server and the client, and since Bedrock modding isn't really a thing, we couldn't use any of the Waystone mods available at the time. I decided to write a server-side port myself using Polymer, with the primary objective of being Bedrock and vanilla friendly. It turned out to gain a bit more traction than I thought it would, so I've kept supporting it on Modrinth even after the server has ended.
November: Lest
This project is still in the works, but I want to touch on it since I have spent a ton of time on it. The primary goal is to create a Raspberry Pi based device somewhere in-between a smart watch and a Pip-Boy, and keep it easy enough to reproduce and modify.
First version
The first iteration used a Raspberry Pi 3B 1GB, with a 3.5" LCD touchscreen I found on Aliexpress. The operating system was just the default Raspberry Pi Desktop with the DE hackily replaced with a Python app written in Dear PyGui. (it worked by using Console Autologin and a .bashrc
to start Xorg manually, which would then source .xsession
and finally run the program) This was incredibly annoying to setup, only worked half the time, and was incredibly slow. It looked cute though!
An SDL rewrite and a hardware upgrade will fix it, right?
I decided to restart the project with better hardware and software. I replaced the 3B 1GB with a 4B 4GB, as it's what I could get my hands on and should've been more than enough for what I wanted to do. I also made my own OS image using pi-gen to simplify setup and squeeze a bit more speed out of it. However, this version didn't get too far, maybe a week or two, before I realized that I was still having performance issues. I saw a bit of improvement in switching from Dear PyGui to PySDL2, but it was still running at most 7 frames per second. I eventually found out that the screen itself was the problem. It updated incredibly slowly (you would see the individual lines being written to the screen when switching apps), was quite low resolution (480x320), and took up about half of the GPIO pins (which I wanted to use for buttons and LEDs). I assume that the screen drivers didn't support hardware accelerated graphics or something? Hooked up to a monitor it would run perfectly smooth, so that seems like the only explanation.
Third times the charm!
The third iteration is still a work in progress. (the above image is a mockup made in Aseprite and will change a LOT before you see it next!) I bit the bullet and switched from Python to Rust for performance reasons, but I'm still using SDL for the UI as of now. I'm also swapping out the 3.5" Resistive touch LCD for a 5" Capacitive touch one that doesn't need it's own drivers, so I should see a massive improvement in responsiveness overall. I want to add more physical elements (ex. physical LEDs, buttons, dials, a speaker, etc.) as the project goes on, but for now I'm still working on the interface.
Conclusion
While I didn't accomplish as much as I wanted this year, I'm still really happy with what I did end up releasing! I have a ton in store for next year that I will hopefully write more about here down the line. (An indie game, hopefully a full release of Lest, etc!) Thanks for reading, I hope to see you again soon!