Tailwind is Brexit for CSS
This made me laugh (my emphasis):
Sometimes I'll start dunking on people and ripping into their shit technologies. And liberals will be like "that's harsh, what have they actually done to harm people?" and INVARIABLY they end up being fascists or adjacent. The thing is, I can tell FROM the tech. The way tech is architected betrays the ideological zealotry that begat it. Tailwind is essentially Brexit for fucking CSS. "CSS is made by standards beaurocrats, let's destroy it"
Django is boring
There, I said it. And I consider it a major feature1!
I recently did a long overdue upgrade of a larger project from Django 2.1.x (last release in December 2019) all the way to the most recent version 5.2.x and it mostly just worked. I only had to tweak a few small things here and there, along the way2, while upgrading to newer versions.
The Django APIs have more or less stayed the same over the years. Because thoughtful decisions were made before they were introduced. And because the Django developers take pride in not breaking things.
The trickier part was upgrading 3rd party packages, but mostly nothing of significance. Except for a single package that was the reason for not being able to move past 2.1, until I've gotten completely rid of it. Which apparently took me way too many years to finally get around to do.
While a much smaller code base, I also just upgraded the version of Django running this blog from a similarly ancient version without any issues at all.
By the way, we're celebrating Django's 20th birthday in Copenhagen on the 10th of October. Come join us!
Announcing `cursebox-ssh-server`
I have packaged cursebox
– my TUI for the Lyrion Music Server/Squeeezboxes – in a Docker container, which opens up new possibilities.
It's called cursebox-ssh-server
and is basically cursebox
running behind an SSH server. Check the README for further details on how to use it.
Quoting myself from the README:
While this all may seem like an academic exercise in SSH and containerisation, and a bunch of very long commands that nobody ever wants to spell out in order to skip to the next song on their Squeezebox, it actually fits nicely into the setup of a more advanced terminal user. Here's my own use case:
I have LMS running on my home server.
I use
tmux
extensively, and usually have an opentmux
window with an SSH session connected to my home server. In this session, I forward the relevant LMS ports (3483, 9000, 9090) from my home server to the local computer. Opening this session window is bound to a keyboard shortcut intmux
.The forwarded ports allow me to use Squeezelite on my laptop to listen to music from LMS, no matter where I am in the world, as long as I am connected to the internet.
In my configuration for
tmux
, I have also made a keyboard shortcut to run Cursebox in a popup, with the forwarded port from my home server further forwarded to the Cursebox SSH server.Thus, with a few muscle-memorised keypresses, I can launch
cursebox
(running in a remote container) to control the locally running Squeezelite. Or my physical Squeezeboxes whem I'm at home.
Ethan Marcotte on AI
Ethan Marcotte in his blog post about starting to talk about AI as a failed technology:
Andy Bell and Brian Merchant have both documented tech workers’ reactions to “AI” mandates: what it feels like to have parts of your job outsourced to automation, and how it changes what it feels like to show up for work. I’d recommend reading both posts in full; it’s possible you’ll see something of your own feelings mirrored in those testimonials. And those stories track with my own conversations with tech workers, who’ve shared how difficult it is to talk openly about their concerns at work. I’ve heard repeatedly about a kind of stifling social pressure: an implicit, unstated expectation that “AI” has to be seen as good and useful; pointing out limitations or raising questions feels difficult, if not dangerous.
Popups in tmux
I was looking for "floating" windows in tmux
. The concept is there, it's just called popups:
Display a popup running shell-command (or default-command when omitted) on target-client. A popup is a rectangular box drawn over the top of any panes. Panes are not updated while a popup is present.