RSSAmplifier

Blog

Henry Catalini Smith |

Software engineer based in Malmö, Sweden.

henry.catalinismith.seRSS feed ↗131 posts

Latest posts

Why I voted in favour of Codeberg’s AI policy

Codeberg was all over the tech news for a week or two this summer, after members voted to amend the terms of service to prohibit projects that mostly consist of code written by “generative AI”-tools. The debate that followed was surprisingly heated. I’m one of the majority of members who voted in favour of the amendment and I was really happy to see it pass.

Joining Forgejo’s Accessibility Team

If you go and look at TEAMS.md#accessibility in Forgejo’s governance repo today you’ll find my name there in the list. I’m very proud of this!

Next.js can’t handle Windows newlines in meta descriptions

Meta descriptions containing Windows-style \r\n newlines are broken in Next.js. When \r is present in a meta description, Next.js will render two <meta name="description"> tags instead of one, and each with slightly different content.

Returning to Jekyll

Tech choices for personal websites can feel very personal. For much of the 2010s, Jekyll was what I was using. It had come out of GitHub, and GitHub was cool so Jekyll was cool. Then at some point, Eleventy came along. Netlify were spending a lot of money to make “Jamstack” happen, and Jamstack was cool so Eleventy was cool.

Lessons learned from the Forgejo v15 release blocker

A pull request of mine recently needed to be reverted due to a visual bug in order to unblock the release of Forgejo version 15. This was about 10% embarrassing, 10% frustrating, and 80% really really interesting. I learned a whole bunch about Forgejo’s code and release process, as well as my own biases and focus areas to become a better contributor. It would be a good problem to have if more…

Integrating the moon into your terminal

As I write this, a spaceship full of astronauts is flying around the moon for the first time in my life. They don’t even have a working toilet right now either so they’re all gasping for a piss while they do it. It’s all very exciting.

Accessing localhost:3000 in VirtualBox for NVDA testing on macOS

After getting my JAWS setup in place recently, NVDA was next on the agenda. It was easy enough to install, which left me with enough leftover time and energy to make an attempt at loading http://localhost:3000 on it in order to be able to test unmerged changes. It went better than expected!

Inspecting HTML elements that disappear on blur

Web accessibility is mostly about HTML, I reckon. Tons of the bugs you work on end up being about adding or removing some attribute from an element. So the inspect element tool is a really important part of the toolkit. And most of the time you don’t even have to think about it: just ⌘⇧C, click on the element you’re curious about, and you’re in business.

Testing in JAWS on a Mac

A tricky-looking screen reader bug in Forgejo inspired me to spin up a JAWS testing environment on my Mac.

Do you really need those line-clamps and nowraps?

After getting my first Forgejo PR merged today I was struck by the realisation that I finally have a linkable public example of a type of accessibility bugfix that’s been a recurring thing for years across basically every site and app I’ve ever worked on. So I can finally get this off my chest. Everyone’s CSS is full of line-clamps and nowraps that serve little to no practical purpose, and prevent…

Assigned Mail At Birth

A mailwoman in the US was receiving orthopedic treatment for issues relating to the physical demands of her job. There’s a lot of lifting, carrying, and walking involved in delivering mail, which can lead to pain and inflammation. One day, when checking her medical documentation, she noticed the orthopedist had suddenly and incorrectly reregistered her as a transgender person.

Oblong of Dreams

I first discovered Half Man Half Biscuit while living in Bristol and working on the music search UI at MixRadio. You type a lot of test search queries when you’re building a search form. It inevitably becomes swear words, which is how I stumbled on National Shite Day.

Golang LSP in Helix on macOS

Since getting my Forgejo dev environment running I’ve begun poking around the issue backlog and learning my way around the code, looking for the stepping stones to becoming a contributor. One important early milestone was to get the Golang LSP running in Helix.

Restoring an old 80’s boombox

We picked up this gorgeous Philips D8569 boombox from 1982 at a second-hand place recently.

Running a Forgejo dev environment

Been wanting to get started making code contributions to Codeberg for the longest time. Finally got around to setting up a local development environment. Here’s my notes!

The software job market is going to split in two

Found myself in Backagården once again this weekend, building software for the international left. This has been a bit of a happy place for me for some time now. This weekend bought a surprise happiness bonus, when I realised how much fun I was having coding without access to my employer-provided Opus 4.5 subscription.

Our NES needed a new 72 pin connector

Although thoroughly cleaning our new NES the other day was enough to get it booting Super Mario Bros, it wasn’t reliable enough. On a bad day it could take five minutes of fiddling with the position of the cartridge and resetting the console to get the game running.

I got a commit merged into Helix!

After building lazyrename a couple of months ago I got curious about small ways of improving Helix’s built-in file moving functionality. The conclusion I came to was that a fs::create_dir_all() call would make a big difference all on its own, and so I set out to get that added. The pull request finally got merged this week, which I’m really excited about.

Repairing an old NES

Spotting a dirt cheap CRT television in a second hand shop in Trelleborg last weekend set in motion a chain of events that led to a Nintendo and a copy of Super Mario Bros arriving in the mail. Only thing is, none of it bloody worked. I got the old flashing red light when turning it on, and once blowing in the cartridge didn’t sort it I was out of ideas. Fortunately I found a very helpful YouTube…

The new Swedish citizenship requirements

About six years ago I became a Swedish citizen. I’d been in the country around four years at the time. Being married to a Swedish citizen allowed it to happen early enough that Brexit never actually cost me my EU citizenship. Pretty nice! But if the new rules being introduced this year had applied back then I think I’d still be waiting today.

The 2G and 3G network shutdown in Sweden is kind of a fiasco

My Nokia 2660 is being forcibly disconnected next week due to the shutdown of the 2G and 3G mobile networks in Sweden. It does support 4G VoLTE, but there’s some kind of technicality about making emergency calls over 4G that the operator claims it falls short of compliance with.

C# LSP in Helix on macOS

Found myself writing C# in Helix on macOS a bit lately. Weird combination. It took a moment to tweak things so that it all plays nice together.

Minneapolis can happen in Malmö

The violent repression of the population of Minneapolis has been horrifying. It feels unreal, like the news in an apocalyptic movie. And from the Swedish perspective there’s a dangerous tendency towards exceptionalism that makes people underestimate the potential for it to happen here.

PICO-8 language server for Helix

Been working on this one PICO-8 game on and off for like five years now. Having switched to Helix since the last time I touched it, I needed to set up the PICO-8 language server for Helix first. It felt like nobody had glued together this combination of tools before.

Ten Years of Sweden

This year I’ll have been living in Sweden for ten years. That’s a full quarter of my life. So when I found myself on a Stockholm trip this month I took the opportunity to stay in the same hotel as I did the very first night I spent here ten years ago.

“default_agent”: “plan”

Pushed my first AI tool config to my dotfiles repo this week. It was config for OpenCode, and it looks like this.

Efficiency My Arse

Lately every time I read about AI it’s in the context of efficiency. Like someone’s made another new button that lets you do a 10% worse job 10% faster than before. And as there’s money to be made in this new trade-off we’re asked to accept that it’s some kind of moral imperative to press that new button as often as possible regardless of how contextually appropriate that trade-off is. I’m not…

Telia is holding my phone number hostage

In late November I got an email from Comviq warning me that my beloved Nokia 2660 will be blocked from their network in early 2026 due to the shutdown of their 2G and 3G networks. As I’d only had the phone for about five months I decided it was better to move to an operator whose network still supports it rather than replace it. So I immediately started the process of moving my number to Telia.…

Lyme disease cured my caffeine addiction

Had a real bastard of a headache the other day in Hemköp. So bad I had to leave the store and go chill outside, away from the bright fluorescent lights. Almost migraine territory.

What Happens If You Press X In Helix In A Zellij Pane Running In Alacritty

One of the little things that inspired me to learn some Rust was the realisation that suddenly all the tools I’m using every day are built with it. In particular, Alacritty, Zellij and Helix are the bedrock of my workflow and they’re all written in Rust.

lazyrename for Helix and Zellij

Earlier today I finally expelled a happy rant about Helix and Zellij that’s been building up inside of me for weeks. And the instant it was out of me I was itching to get the ball rolling on a tool I’ve been needing in this cosy little ecosystem. In a few stolen moments of coding here and there throughout the day I’ve managed to implement a rudimentary 0.0.0 version of a new tool I’m calling…

Zellij and Helix together might actually be just plain better than Neovim

For starters Helix is a masterpiece. Imagine Neovim with telescope, lspconfig, lspsaga, gitsigns, and which-key all built-in. It’s a finished piece of software as far as I’m concerned. The maintainers could permanently feature freeze it today and I’d be happy. They’re shipping a plugin engine soon and I almost wish they wouldn’t.

Copy relative path to file in Helix

In recent weeks I’ve accidentally migrated from Neovim to Helix. I say “accidentally” because I wasn’t really intending to switch. There was a post on Lobste.rs called “Notes on switching to Helix from vim” that I read about a month ago, which inspired me to give Helix a bit of a try. My expectation had been that it’d be an interesting experiment but instead I found myself choosing to use Helix…

Coders &amp; Organizers 2025

Back down to earth with a bump today after an amazing weekend attending the Coders & Organizers meetup here in Malmö. Difficult to readjust back to everyday life after such an inspiring and productive experience.

Zellij Cheatsheet

Over the last couple of months Zellij has become one of my favourite everyday tools. I’m at a point now where I don’t want to be configuring stuff with millions of custom keybindings. Instead I want something that works already out of the box. Zellij is that.

Give me lava chicken or give me death

Rasmus Fleischer made an interesting appeal earlier today.

The future of open source is democratic, community-led and non-profit

I’m so fucking bored of companies.

My smartphone was making me fat

It’s been about five months now since I stopped carrying a smartphone. Recently my BMI re-entered the “healthy” range for the first time in about five years. I’m pretty convinced the two are connected and here’s why.

Rosa Luxemburg predicted the AI crash and its consequences in 1913

The Accumulation of Capital is a book from 1913 by Rosa Luxemburg which predicts the collapse of the AI bubble. Cool, right?

The Tinder Box is a Morrowind Let’s Play

When I was little my grandad used to read me this book called The Tinder Box. I got hold of a copy a few years back in order to have something with some nostalgic value in the bedtime story rotation. I’ve been reading it quite frequently ever since.

Glory Days Or Bust

The road back to my coding happy place, i.e. a terminal emulator running Vim.

Democracy Kicks Ass

Contrasting the sense of helplessness about Microsoft's agenda for GitHub with the community-led democracy of Codeberg.

Notes from three months without carrying a smartphone

Got a Nokia 2660 for my birthday a few months back. Looks like this.

Nine Nine Six

I keep hearing about these AI startups where people are doing 72 hour weeks . It reminds me of a parody video I saw a few years back so I made this little split-screen edit.

Life after streaming

Been a lot of buzz about getting off Spotify due to the military industrial profiteering. It’s fair enough, but I’d like to encourage people to treat it as an opportunity to upgrade their relationship with music rather than just installing a competing app and trying to carry on as before. I uninstalled that app myself a while ago for other reasons and tried a bunch of the competitors for a while…

Voting on Codeberg’s new privacy policy

Nobody cares about privacy policies. Except when they do.

Is metadata streaming really SEO armageddon?

I don't like some of these silly Rube Goldberg additions to Next.js either but I do think this one at least works as described.

Ubuntu 25.04 on a 2014 Macbook Air

The old MacBook Air I’d been running k8s on had become a bit problematic. The battery’s gone very bad, and newer versions of macOS have begun to run very poorly on it. After macOS Tahoe, Apple’s ending support for these old Intel Macs completely too. Time to make a change!

A GDPR bundled consent success story

A few weeks ago the Swedish government announced a new AI initiative called the Swedish AI Reform. It’s about providing free access to AI tools to Sweden’s non-profit and public sector workers. A decent idea, I thought, and my curiosity led me to click through and scope out the onboarding flow.

The Swan

Every summer in Malmö a family of swans nests on the canal. Watching the parent swans chase boats full of drunk tourists is a bit of a local pastime. Recently went for a pedal boat ride on that same canal and was handed this wonderful bit of accidental poetry by the operators of the pedal boat hire company.