Skip to content

Housekeeping 2024/25

Once in a while, I batch some chores I've been neglecting. And this liminal moment between years and jobs is the perfect time to do it.

Activity

Task started

Well, hello 2025!

After spending a couple of weeks back home, I'm ready to "go back to work". Whatever that means in my situation! So far, I've been mostly in holiday mode. But the holiday mode I seem to enjoy the most, which is not moving around too much and going out sporadically. Tons of time affluence :D.

One of the main things I've done, of course, is my New Year Resolutions for 2025. I do them every year, and even though I know they are not sacred, they are very helpful to keep me on the right track. This year's themes have been mostly the same as always: improve my health, learn Japanese, etc. But there are two important additions. One of them is obvious, sorting out what to do with my life (career-wise). And the other one is to Try Hard.

I was inspired to do this by reading Aaron Francis' 2024 restrospective. I've always had an aversion to the idea of "working hard", because I equate it with "working a lot of hours". I'd much prefer to work smart in 8 hours/day, 5 days/week. But reading Aaron's writing, I realized there's another way to look at that. Working hard can also mean to take risks, to be ambitious. And I can't say I've done a lot of that (even though I've quit my job twice to try and make a living on my own...). What I've failed to do, in my opinion, is iterate fast enough. The problem is that I enjoy programming too much, and I can spend weeks or even months coding away and feeling productive. But if I want to succeed, I need three changes in mindset: iterate faster (setting more ambitious deadlines), measuring more (doing user research, tracking how a project is doing after launch), and doing marketing (sharing my projects outside my bubble, making landing pages, thinking about SEO and distribution, etc). The last one will probably be the most challenging. We'll see if I manage!

Other than that, I also fixed a bunch of bugs on Umai and Media Kraken, I investigated an issue with CSS 7.1.3, I started using my own recipe in Ramen, and even released a whole new feature for Umai: Cook Mode! This one is important, because eventually that's what I'd like my work to be like. I've spent a lot of time building tools, and tinkering with Solid's idiosyncrasies. But in reality, what I want to do is build apps and experiences. It was nice to see that I was able to implement a whole new feature (that wasn't trivial) in a couple of days! Though I realize that if I'm going to focus on Aerogel, I won't do a lot of that in a while 😅. But that's still my end goal.

Talking about Aeorgel, as I mentioned recently, I still haven't got a response for my NLNet application for funding. But I did get an update, and they told me I'll have to wait until January or early February to know if I've passed the first round (and there are two rounds) :/. I applied in October, so that means if I end up getting the grant it'll happen at least 5 months after my submission 😱. I understand they are busy and whatnot, but honestly, that doesn't look good... I've been unemployed for 3 months, and even though I still have some savings, I'm starting to reconsider if this full-time Solid thing was a good idea. My intention was to have an answer by now, and if I did get the grant, test the waters for a year and see how it goes. But I don't think it's viable to make a living off my Solid projects without some initial help. So, much to my chagrin, I'm going to start exploring other options :(. On that note, if you know about some company or job openings where I could fit, please let me know. Also, it'll be interesting to see how to job hunt in this AI-powered environment. I've long known that the best jobs are not to be found on job boards. And now, that may be more true than ever.

And that's mostly it for today's update! But I'm not done with the task, because I still have one important thing to do: Upgrade my Mastodon server 😱.

You may be surprised to be hearing from me so soon, just a week after my last update... And I am too! But I have done so many things since last week, that I had to write an update. Is this what working full time on my own stuff looks like? 🤩

Realistically, I don't it'll always be like this, because many of the things I've done weren't too big. But yes, I'm definitely more productive working on something for five days a week than one (surpise!). Actually, something I used to do at Moodle was writing weeknotes. Inspired by Doug Belshaw, I would write an interal weeknote summarising what I worked on that week. That resulted in a 125-page PDF when I left 😱.

So yeah, I like the idea of writing weeknotes if my work pace warrants it. But don't worry, if I end up doing that, I'll probably highlight the most interesting bits to make it easier to consume. For example, here's what I worked on this week:

  • Upgraded my Mastodon server: Last time I did this was 6 years ago 🙈. This type of experience is why I like so much the idea of "finished software", and it is remarkable that I've been able to pull it off on a federated environment. I guess that's what happens when software relies on open protocols :D. But yeah, in any case, it was due for an upgrade. And it was a lot easier than I expected. Besides upgrading, I also moved the instance for Digital Ocean to Hetzner, and I hope by the end of the year I can drop the Digital Ocean droplet altogether.

    Some interesting notes about the upgrade is that my biggest issue self-hosting Mastodon seems to be related with storage capacity. You may be surprised to hear that, because how much data can an instance-of-one generate? Well, a lot, it turns out. This happens because Mastodon caches remote assets from other accounts in the server :/. That includes avatars, banners, and even emojis! (I had 1.3GB of custom emojis, for god's sake). However, thanks to the magic of Open Source and self-hosting, I've been able to just remove those with a script. Recent versions have also improved a lot, but there are still some things you can't do out of the box.

    In any case, if you're curious to learn more about how I configured my Mastodon instance, you can check it out in the noeldemartin/mastodon repo.

  • Brushed up on Rireki: Rireki is a little python program I wrote years ago to take care of my backups. It's been working pretty well, so I implemented a new feature to automate cleaning up old backups (which I had been doing by hand).

    I also used this opportunity to give Cursor a try. I'm very late to the party, because this is the first time I've used AI for coding. I'm still not sure whether I like it or not, but I have to say in this context it was very useful because I am quite rusty on Python. However, I am convinced that at some point AI will be an essential tool in my developer's toolkit. And I think the ecosystem is mature enough to start dipping my toes in the water.

  • Brushed up on Freedom Calculator: Freedom Calculator is an app I made a while ago to calculate my economical runway and whatnot (which today is more relevant than ever for me!). This week, I added a new option to indicate how much I earn as well, thus calculating how long until retirement. I don't 100% subscribe to the FIRE philosophy, but I think it's useful to at least be aware of your current trajectory. As you may imagine, my current trajectory is to go broke, given that I have 0 income at the moment 😅.

    This also gave me the opportunity to try yet another new tool, Playwright. I've been a fan of Cypress for a long time, but I've heard many people rave about Playwright. And the nail in the coffin was the State of JavaScript survey results, where Playwright came out in S-tier whilst Cypress fell to B-tier. My first impressions of Playwright are mixed. On the one hand, I prefer Cypress API (I don't have to await every single command) and experience (you can actually see the app running). On the other hand, everything worked flawlesly and I could even implement snapshot tests in CI. I'm also doing this with Cypress, but I didn't manage to make it work without resorting to Docker.

  • Started using LSS in production: LSS is still very experimental, but given that I'm trying to move away from old infrastructure, and I'm still using an ancient POD, I thought I'd give it a try. And so far, it's working great! I moved my Media Kraken collection to Nextcloud, and it's awesome to see that I can use the app whilst interacting with the Turtle documents using the full power of Nextcloud (editing files from disk, versioning history, etc).

    I still don't plan on opening this up for everyone any time soon. But if you're curious to try it yourself, let me know and maybe I will create an account for you :).

  • Started applying to jobs: Yes, I know. It's sad that a week into my full time work as an independent developer I'm already applying to jobs :/. But as I mentioned recently, it doesn't seem like I'm getting the NLNet grant anytime soon (if ever), and I'm burning savings at the moment. So I started exploring the market, and I found a couple of opportunities that are pretty awesome. I don't think I'll be giving too many details about this until I settle on one opportunity, so for now just know that yes, I'm job hunting 😅.

Well, in the last update I mentioned you may be hearing from me once a week. And here we are, two weeks later 😅. I've been tinkering away for these two weeks, even though I got a cold and wasn't as productive, but the reason why I didn't write last week is that I wasn't finished with my main task: Rewriting this whole website from scratch! I've wanted to do it for a while, but I never had the time for it.

One of the reasons why I hadn't updated yet is that my Nova license didn't support new Laravel versions :/. I bought mine 6 years ago, and I've been very happy with it... But honestly, I don't fancy paying 79$ (today, and every year!). Specially given that I don't want any new features. I've rambled about subscriptions before, and even though this didn't look like one... it totally is. So yeah, I decided to ditch Nova in favor of... 🥁 Statamic!

I've known about Statamic for a while, but I didn't start paying it any attention until I took Jack McDade's Radical Design course. It's not like the course has anything to do with it, but I liked his style so much that I decided to dig into his other projects. And I have to say, I love Statamic :D. It's a great CMS, with the full power of Laravel under the hood. And all the APIs and documentation are as good as any official Laravel package. But they do have the Jack McDade signature, which is nice. Like funny comments throughout the documentation, or quirky design easter eggs (hover over that toucan in the homepage!). Also, they have a generous free tier for single-user websites. So it was the perfect choice.

I also moved away from StimulusJS, which I decided to try upon release but I haven't been super enthusiastic about. Instead, I started using AlpineJS. I've been following Caleb's work for years, and he's one of my favourite developers. But I was sad that I wasn't using any of his libraries... until now! Honestly, I haven't used it enough to have a strong opinion, but the few JS sprinkles I've written have been pretty straightforward :).

Finally, something else I wanted to do with my website, was open source it. Which of course, I couldn't quite do with Nova. But I also wanted to move blog posts to a more contribution-friendly format, such as markdown files. And Statamic supports it out of the box! I don't expect anyone to actually contribute, but it's always nice to make things in accessible formats. And hey, it'd be nice if I get some typo fixed every now and then.

If you're curious to dig into any of this, I'm happy to say that this site is now open source! You can head to GitHub and take a look: github.com/noeldemartin/noeldemartin.com.

Besides working on the website, I also did a couple other things. Mostly related to migrating out of the Digital Ocean droplet. And I think it's important that I mention an interaction I had online. When I talked about not upgrading my mastodon server for 6 years, I was rightfully called out for being irresponsible. I wasn't trying to promote this mindset, but I shouldn't have been so nonchalant about it. The real reason why I hadn't updated in so long is that I was afraid :(. I've had bad experiences in the past when system upgrades broke my applications, and I was forced to spend some time either reverting the upgrade, or fixing my apps. But that's no excuse, and I will certainly try to do better from now on.

Something I've already been doing to improve that situation is moving all my projects to Docker, with the architecture I previously referred to as "headless". I've created a tool for this called Kanjuro (if you want to get the reference, you'll have to watch Scabbard Samurai :D). Most of my traumatic experiences happened because of dependency hell and PHP versions, but I haven't had any problems with this containerized approach, so it should be fine. I also started configuring unattended upgrades, and I'll make sure that things stay up to date.

So yeah, maintenance burden sucks, and it's definitely the worst part of self-hosting and working in open source. But it's part of the deal, so I may as well suck it up and get my act together. Thanks Angelo for bringing it up!

Now that we've got that out of the way, I'm happy to say that I only have one service running on that legacy Digital Ocean droplet. My personal Solid POD. And yes, it is running a very outdated NSS 5.2.2 server 🙈. The good news is that this really is something I'm only using myself, and it doesn't interact with other servers or has anyone else's data like Mastodon. Regardless, I want to migrate it as well.

For a long time, I was thinking I would just set up a CSS instance. But I've decided to keep pushing LSS for my own usage. I've been using Media Kraken exclusively with it for a couple of weeks, and the experience has been great :D. I'm already using Umai elsewhere (with the Solid Community POD), so the only one left is Solid Focus. Which is a perfect segway to the next thing I'll work on: getting the Focus revamp out of the door! I still haven't heard from NLNet, so I'm not sure how much I'll work on Aerogel or not. But in any case, I'll do this as part of the other task I already have ongoing.

So that's it for this task! Enough housekeeping, time to start working on some real stuff.

Task completed