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.
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.
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.
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…
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.
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!
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.
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…
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.
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.
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.
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!
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.
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.
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.
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…
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.
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.
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.
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.
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.
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…
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.…
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.
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.
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…
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.
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…
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.
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.
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.
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.
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.
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…
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 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.
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.