Another year, another "year in review" blogpost.
Highlights
Our daughter was born
We signed with native signers in NYC
I wrote 5 blogposts announcing multiple new libraries
I built a home gym
Daughter
My partner and I were blessed with our daughter Lia in October of 2024 and we are oh so grateful. She is healthy, happy, and does a good job keeping both of us awake and on our feet.
This is where we would normally put the cutest picture you can imagine, but we have decided not to make any images public so as to safeguard her privacy until she is old enough to decide what to do with it.
Programming
Nix CI
Nix CI got its first paying customers this year, which means it is used in production at multiple companies already!
This year I made the workers more secure, entirely ephemeral, and more robust.
I got to experiment with some cool new tricks like:
A crash-only architecture for the worker. This way the worker is never a long-running process with all the problems that come with long-running processes.
Automatic clean reboots of the entire worker VM with new state. This makes the workers entirely ephemeral, so it never has any long-lasting-state problems.
A leader-based failure detection mechanism. This lets me know as soon as possible when one of the workers is malfunctioning. It is where the idea from Necrork came from.
Necrork
I pride myself on writing code that works, services that stay online, and correct results. This year I took on the problem of becoming aware of downtime before customers become aware.
This problem is called failure detection and it is a deep rabit hole. Suppose you and your friends are tasked with letting me know when my cat has died. You and your friends must agree on a strategy to let me know as soon as possible. My cat will periodically let you know when it's alive, but none of you can go check if the cat is still alive because it may just be off hunting. Lastly, you or any of your friends can die at any point, and it won't be an excuse for not letting me know when my cat has died.
After struggling to implement a solution, I looked up the rich history of this problem in theoretical distributed systems. I asked ChatGPT to tell me where to start reading, and it turns out that the first paper is a 300 page book that I found myself reading until 03:00 one night.
I am still working on a failure detection algorithm and will hopefully get around to writing a blogpost about it with some nice proofs that it works. In the meantime the prototype is already detecting failures in all of my production services.
Social Dance Today
Social Dance Today saw a great increase in active users, reaching over 5000 monthly active users and more than 2000 parties per week.
I finally added some monetisation. You can now pay for advertisements, or to promote your parties on the site. Both happen completely without any user tracking or other privacy violations.
Because I hate seeing advertisements, I made it realy easy for ad-blockers to block the ads. Ads are also not shown to users who are logged-in.
The opt-env-conf
library for settings parsing
After years of claiming "Settings parsing cannot be any simpler, you just need this template because it's impossible to write a library that wraps it." I finally wrote a library to do settings parsing simpler.
This has allowed me to further make my services more robuust and colourful. For example, here is a part of the --help
page for this site:
Centjes
I've always been interested in getting my finances in order. At some point I got introduced to plaintext accounting and immediately enjoyed being able to put my finances in a git repository.
I kept hopping between tools like ledger and hledger but I was frequently surprised and dissappointed by how easy it was to get things wrong. Recently I was also sorely dissappointed to find out that they do not guaranty accuracy.
Much fiddling and grumbling later, I've finally made a plaintext accounting tool to help me file my taxes.
Centjes is built on top of really-safe-money
and represents the result of turning the dial all the way to error-resistant. It also has beautiful error messages:
I've succesfully automated all of my my VAT declarations for 2024 using centjes and plan to do the same for my tax declaration early 2025.
Languages
Sign language
Both my partner and I have continued to study sign language every day for the entire past year. We are still looking for more people to sign with, so feel free to join in on the journey! This year we finally met some native signers while we were our trip to NYC.
We finished all the lessons in the app we were using, so we will be looking for new ways to continue to learn ASL.
Greek
In 2024 I continued my experiment to see how much you can learn a language if you only use Duolingo. This is year 2 of 7, according to my calculations. I have long lost interest in learning Greek, but Duolingo has kept me going with this stupid streak number. It makes me almost angry that it has managed to do so, so succesfully, but here I am learning Greek every day.
Home Gym
In preparation of our first child, I put together a home gym in our garage, to make sure I don't have to travel to the gym anymore. The gym arrived as hundreds of kilos of equipment that took multiple workouts-worth of effort to put together.
The result was worth it. Now I can go to the gym in ten seconds by walking down the staircase to our garage, instead of twenty minutes.
I've had to find alternative exercises for the ones I cannot do with "only" this equipment. Sometimes I still miss cable machines, but I can more or less do everything I used to do at the gym at my home gym.
Miscellaneous
Conclusion
In 2025 I will focus on raising our daughter while juggling other responsibilities. Fatherhood is a big enough challenge on its own.
Greetings from Zürich!