Posts from 'december-adventure-2025' series - 3
December Adventure Day 27
The last few days have each featured a very productive half hour. I'm letting the ebook bot sit as-is for now. It's working just fine and while I was working on its reimplementation in Rust, I remembered another Rust rewrite I wanted to get back to.
I'm in a song-listening club with some friends. The little bit of code that runs it is a handful of Python scripts and systemd timers. For as small as it is, I overbaked it a bit. There's a RabbitMQ server. This doesn't need a RabbitMQ server. And I often wish there were one service instead of five.
So that's what I've been rewriting and setting up. Since Christmas Eve I've ported the code that generates the statistics page and the bit that posts a pair of songs on Saturdays for a "flashback" discussion. I had to think harder about async and moves and ownership and errors.
I had to find a job scheduling library that would let me nicely mix tasks that should run on an interval (every 5 minutes) and on a schedule (every Saturday at 9am). I found turnkeeper which serves that nicely. I nearly gave up on it when I was running into a "future cannot be sent between threads safely" error... But it turned out that organizing my code better resolved the issue.
A satisfying resolution, even if fundamentally I'm not exactly sure where a future was trying to go between threads.
December Adventure Day 31
Last year's December Adventure I had one project: a set of scripts to run GoToSocial bot for a song-listening club I'm in with a dozen people. That version of the club (for there have been a few) is coming up on it's one-year anniversary, and I'm proud of it. All its flaws and peculiarities remind me that of how it was handcrafted for a finite time for some friends. We'll lose steam at some point, and it will be an archive of something we shared. I like that.
This year's adventure ended with me working on porting some of that code to Rust. Because the code is not something I work on a lot, I find (for me) that Rust makes code easy to come back to. After weeks or months away from Rust code that I wrote, it's easier for me to see what I was up to and why. I still get tripped up by some interactions between async code and ownership, but the confidence I gain from a happy compiler is worth the stumbling.
But the jewel of this year, the completed project, was the creation of another GoToSocial bot, @tomes@phantasmal.work. The scripts that run it take an epub file as input, split it into 5,000–9,000 character posts, and publishes them one by one each day until the end. I was inspired by DailyLit, a service I used years ago to read a number of books by email. I've been having trouble putting aside time for reading, so I decided to bring reading to somewhere I was: the Fediverse.
Currently @tomes is posting its way through O, Pioneers! by Willa Cather, a book I chose because it was a relatively short novel I hadn't read yet. And what a pleasant choice it turned out to be. If I never load up another book for @tomes, this will still feel like a rousing success.
As I posted, I re-learned what I learned last year:
- that 20 minutes a day can be surprisingly productive,
- that I am happiest in writing code when it's just for me or for a small group of people I know personally.
I hope I will remember these lessons longer into 2026 than I did in 2025.
May we all have happy new years.
❤ a ghost