Skip to content

Housekeeping 2023

After being stuck with the same task for almost 3 years, I've been piling up some chores. It's time to get them done.


Task started

Ironically, the first thing on my chores list was to follow-up on Umai's release. As it happens, immediately after releasing I got a bunch of bug reports. Most of them were easy enough to fix, but there's been a couple with more nuance and it's taken me about a month to get it done.

First, I made sure to have meaningful page titles. I've actually been pointed towards the Design Issues page many times, and it's always quite interesting. So I think I may read all of them at some point. Somewhat related to this, I've been thinking about how I've been declaring urls in my apps, and I opened a post in the forum to discuss it with the community: Should Solid Apps have pretty urls?

Something else was that Umai didn't work with non-roman characters 😱️. Which is ironic, given that the app's name and logo is Japanese (but you couldn't create recipes using Japanese characters 🙈️). I was using a helper to convert recipe names into url slugs, but it was too aggressive in removing characters. What I'm very surprised about is that looking at existing helpers in popular frameworks, they have the same problem. The solution was easy enough, but the real problem was that I wasn't aware of this. I wonder how many other things I'm missing :/. It really is true that we programmers believe a lot of falsehoods.

Not everything were bugs though, I also got some feature requests. And the most endearing was printing recipes to PDF. I didn't mention it in the journal, but this is actually one feature I already worked on :D. Unfortunately, it didn't make it to the first release because it fell to the scope hammer. But now that someone asked for it, I couldn't resist myself. But I was this close 🤏 to fall into a rabbit hole :/.

Initially, I thought there were some issues between browsers so I tried to print the PDF using a javascript library, rather than using CSS. But after spending some time, I realized that it wouldn't work with non-roman characters. And this time I knew better. This year I pledged to favour simplicity over complexity, and stop overengineering. So I went back to using CSS, and I was going to solve it by adding a warning saying that if it doesn't work in your browser, you should try with a different one. However, when I went back to work on CSS I realized it was a problem with my CSS, not with the browser! So that means in the end, it's working quite well across most browsers.

Finally, this hasn't been reported, but I noticed that the bundle weight was growing a lot. And using a tool called vite-bundle-visualizer, I realized that some dependencies weren't tree-shaking properly. And I also learned that my own libraries weren't tree-shakeable 😱️. Turns out you have to declare sideEffects: false in your package.json, otherwise they are considered to be potentially modifying the global state. I'm certainly going to set that config in all my libraries now, and I'm also surprised that it took me this long to realize 🤷‍♂️️.

Anyhow, with a bunch of improvements I've released a new version of the app and I think I'll be done with it for a while.

The last couple of weeks I've been doing some much needed maintenance in my infrastructure. That's what today's update is all about.

First of all, I finally upgraded my laptop to Ubuntu 22.04 (I was still running 18.04 😅️). If it were my choice, I don't think I'd ever update anything because it's always traumatic. More often than not, I don't care about new features. And I usually lose features I wanted (this time, it's been the Workspace Matrix). I've thought about using Debian or some other "stable" OS, but I already have issues with Ubuntu and it's the most mainstream of the linux distros. So I'm not convinced it wouldn't be worse with others, and I won't be bothered to try.

Something that's giving me problems recently is my NVIDIA graphics card. Which doesn't come as a surprise. Fortunately, I'm not much of a gamer nowadays. But I have a gamer's laptop, because it was the most similar to my previous laptop. I already dread the day I'll have to change it again :/. It's funny because people may think I'm into this stuff, given that I'm so passionate about programming. But when it comes to hardware and infrastructure, I really don't care. I think Docker is the best thing that's happened to that space in the last 10 years.

Anyways, something else that's broken is my SpiderOAK account. In their defense, it wasn't the software itself that was broken. But they have a Zero Knowledge policy, which means it doesn't have any password recovery features. I've used different password strategies over the years (currently using LessPass), but I installed SpiderOak about 5 years ago and I haven't been able to find the password anywhere. So I've been locked out of my account :/. Fortunately, I backed up all my data before formatting, so I didn't lose anything. But it's a bummer. And it makes me lose hope in that type of trustless security in practice, as much as I like the idea in theory. I started using it with the intention to eventually stop using Dropbox. Ironically, I'm still using Dropbox today. But I hope to give it another try soon, probably with NextCloud.

Finally, I haven't realized this now, but a while ago VSCode stopped working with one of my core extensions. In particular, it's one that allows you to customize the UI of VSCode with CSS. And I mostly use it to hide stuff. And that still hasn't been fixed, so until it is I'm stuck with VSCodium 17.3.1. But I don't care that much anyways, because I don't think I've used a new feature in VSCode for years. But it could potentially be an issue down the road.

If you're curious about my set up, I have this repository with my settings:

And that was it for my laptop. But I've also been working on my server set up.

At the moment, all of my sites are hosted on an Ubuntu 18.04 droplet in DigitalOcean. So it's also due for an upgrade. Over the years, I've been trying to work out an architecture that allows me to deploy sites as "serverless" as possible, without actually relying on serverless technologies. I actually like the idea of serverless a lot, but I don't like how it can scale to infinity and potentially drain your bank account. But I think I'm getting very close to something perfect for my needs. What I came up with is basically a Docker-driven architecture, with something I'm calling "headless" deploys, and served with nginx-agora.

I've also used the opportunity to try Hetzner, and so far it's looking good. I'm also improving my security set up by using a bastion server for ssh, rather than logging in directly to the host serving the websites. But unfortunately, I can't do the switch yet, because some of my sites like, my Solid POD, or my Mastodon instance aren't using that architecture yet.

I have thought about other alternatives, like MRSK or Yunohost. And the idea of easy indie apps is very enticing. But for some reason, I don't believe that it'll be as easy as they make it to be. To me, they sound like more layers of abstraction, and I'd rather do it with Docker which I'm already familiar with and is widely supported.

All this complexity is something I'd like to remove from my life. But I only have to dedicate some time every few years, so I think it's bearable for now. And the sites are still running fine, so I'm leaving it there for now and I'll migrate them some time in the nearish future.

Before you depart, I should also mention that I started using HEY World to post these updates. So if you prefer to get them in your email rather than through RSS, be sure to check it out:

The last thing I wanted to do before calling it for this task was to review my entire backlog of tasks (which, as you can imagine, is enormous 😅️).

I've been thinking a better way to work on what really matters, rather than getting stuck on neverending tasks. My current system is a bit crude, and I'm a big fan of Eisenhower's Matrix. So it would be nice to introduce something like that to my workflow. But at this point I don't think automating it would be worth it. For now, I'll leave it as is. Maybe when I revamp Solid Focus will be a great time to add some new features related to that. If I manage to honor this year's focus on simplicity, it should be fine.

In any case, after grooming the entire backlog the only thing I decided to do within the scope of this task was brushing up on I still have a lot more to do; like migrating to a headless architecture and such. But I worked on a couple of improvements I've had in mind for a while. One you may be interested in is that I added a new /talks page to the site, where I list all the talks I've given.

And with that, that's it for the task! I'll go ahead and close it, and you should see my next "real task" soon.

Task completed