Updated draft: http://movq.de/blog/drafts/changelog/POSTING-en.html
I’ll probably publish this later today. Or maybe not at all. It’s one of those topics that might cause outrage because I’m getting it all wrong. 🤪
Haha, GitHub. I “unlocked” the “achievement” called “Quickdraw”:

It’s for closing an issue very soon after it was opened.
Only problem: I was the one who opened it and it was a mistake, so I quickly closed it again. 🤦♀️ https://github.com/bundlewrap/bundlewrap/issues/892
@lyse@lyse.isobeef.org Oh god, yeah. In other words: Devs need to think about who their target audience is. 😐
tt. But then, in the message tree, I spot another missed typo. My process is then to go to my twtxt.txt and fix it by hand. However, I still have to clean up tt's cache. This is rather tidious:
With multicolored TUIs, I find it usually hard to immediately tell which button is selected if there are just two.
Indeed, I wouldn’t be able to tell in that example, either. movwin works around that by (mostly) assuming that there is no support for colors at all, so there should always be a way to tell which widget has focus, even without colors. That’s why it puts brackets around a button’s label when focused:
The fewer colors you use, the better, I guess. 🤔
tt. But then, in the message tree, I spot another missed typo. My process is then to go to my twtxt.txt and fix it by hand. However, I still have to clean up tt's cache. This is rather tidious:
Now I’m curious how movwin deals with that. ;-)
Focus handling? I hardly remember, lol. 😅 Did that 6 months ago and haven’t touched it since. Let’s see.
The core main loop gets keyboard/mouse events from curses. At this level, the main loop only knows about exactly one widget, so it passes the event to that widget (whatever that is, doesn’t matter – they all inherit from the Widget base class, it could be a Window, a WindowManager, or an Edit box directly).
The outermost widget is usually a WindowManager. It implements a few hotkeys of its own, like switching to another window. If none of those hotkeys match, it passes the event to the currently focused window.
Same story here: Window implements some hotkeys (like opening the menu bar). If none of those match, then … the magic happens.
Each Window acts as a focus manager. It can descend into its child widget hierarchy and collect all child widgets in a depth-first search. They are collected into a flat list. Each Window then has an attribute _focus_position, which is an index into that list. Pressing Tab or Shift+Tab increases or decreases that index and that allows you to select the next/previous focusable widget in the current window.
Eventually, Window passes the input event to the currently focused widget.
Usually on initialization, the application can ask a Window object to focus a certain widget. The file selection dialog does that, for example, because the “natural” focus order would be to focus the Edit box at the top of the window first – but that’s not what the user wants, the Table showing the list of files should be focused.
If no widget ever feels responsible for handling a certain input event, then there’s a global unhandled_input callback that the application can provide (same as in urwid).
I think that’s it.
Hm, that’s more complicated than I remembered, but apparently it works fine, because I completely forgot about this. 😅 All I did in the last few months was make new classes that inherit from Widget, like the new Table class or Edit or HexEdit or whatever, and if they want to get input events, then they must implement the methods input_key() or input_mouse().
Does this answer your question? 😅 (I admit that I didn’t exactly understand your scenario, so I just went ahead and rambled about my implementation. 😅)
@prologic@twtxt.net Hmmmmmmmm … 🤔
@lyse@lyse.isobeef.org Thanks!
On the AI changelog part, though, I’d rather recommend to just not have a changelog at all.
I’m afraid that ship has sailed. You can rest assured that someone who uses AI/LLMs for their code (which is almost everybody at this point) will most certainly also use it for changelogs.
I actually considered not mentioning AI output at all, because this just opens a huge can of worms … 😞
While going through these terrible GitHub release pages, I also found these “New Project Contributors” sections
Yeah, they play on a nerd’s pride.
Now, it’s just the same auto shitshow with MR titles in a rolling date-versioned release scheme. It’s just our team who has to deal with that, though. I think I’m the only one who is not a fan of it.
I’ve found that this whole situation is much worse at work than it is in the Free Software world. At work, it’s literally work and hardly anybody actually cares. We still don’t have all people convinced that writing good commit messages or using good branch names is worth the time. It’s … oh god, no, I’m going to stop here, this is bad for my mental health. 😅
Suffice it to say, all release notes at work are now AI-generated. Nobody gives a fuck.
@lyse@lyse.isobeef.org Now that you mention it, there is some steam from manholes in the winter. 🤔 This is all energy that gets lost … I don’t know how much of it, but it’s lost. 🤷♀️
@lyse@lyse.isobeef.org This is the draft so far, let me know what you think: https://movq.de/blog/drafts/changelog/POSTING-en.html
@lyse@lyse.isobeef.org … I am literally writing a blog post about changelogs at this very moment … 😂 I am certainly adding the “‘add X’ and then later ‘remove X’” to my list of DON’Ts. 😅
@thecanine@twtxt.net Nice! 🤯
@lyse@lyse.isobeef.org Fernwärme it is. %)
@lyse@lyse.isobeef.org I don’t know what it is. It’s this damn central heating here (distributed over the entire village), where, if something breaks at their end, hundreds of households are affected. 🙄
(I don’t get why anyone would build a central heating system in the first place. Isn’t this super inefficient?)
People think that “more words means more effort” – that used to be true, and it’s the opposite now.
Anyone can make 200 words. The real flex is turning those 200 words into 6.
Regarding software, I wonder when/if programmers will get this memo.
No hot water today. Again.
caddy-pow. So now going forward, you'll have to (sorry) have a HS-enabled browser to hit git.mills.io which will hopefully make most (if not all) bots just go the fuck away 🤦♂️ #Hostile #Web
@prologic@twtxt.net Huh, somehow I was assuming that Anubis was already lightweight (never took a closer look, though). What’s the issue with it? 😅
(And of course there’s a bug because I’m an idiot. 🤪)
There you go, it really does look better: https://movq.de/v/69d82e39f4/vid-1781183062.mp4
Heads up (literally): There’s going to be a solar eclipse in August: https://en.wikipedia.org/wiki/Solar_eclipse_of_August_12,_2026 Mostly partial, unless you happen to live in Greenland/Iceland/Spain.
And maybe slow down a tad once you’re back.
Not sure if that’s possible in this company. 🤔 (This is the worst time to look for a new job, though. Alles im Umbruch.)
@lyse@lyse.isobeef.org Yeah, it probably would look better. I might fix that. It’s just laziness, the implementation was easier this way. 😅
Glad you find it interesting! And honestly, I agree, nobody but me would use this anyway. There are more mature and featureful toolkits out there.
@lyse@lyse.isobeef.org Aaaaahhhhhhhh! That explains it! 😅
As I said, I’m on vacation, and for about a week now, I did basically nothing but sleep. Day or night.
I can’t tell if this actually is a vacation or just therapy for burnout. 🤔
@bender@twtxt.net Yeah, no, not gonna happen. 😅
@lyse@lyse.isobeef.org Those poor unicorns. Why do they have to puke all the time? 😢🦄
(I know it’s kind of pointless to post all this stuff if the source code isn’t available, but meh, whatever. 🤪)
First draft of a file selection popup / widget:
https://movq.de/v/0955149868/vid-1781094010.mp4
Also makes use of the new Table widget.
@arne@uplegger.eu Heh, nice. 🥳
Actually, I’m stupid: I’m using the normal rsync on OpenBSD as well.
And regarding OpenRsync’s general usability:
https://marc.info/?l=openbsd-misc&m=178090751524547&w=2
Right now openrsync is limited in functionality and is primarily present
for rpki-client. The limited functionality makes it unusable for generic
use and so any diff or change like the above will not be considered since it
is simply not ready.First problem to solve is to remove the mmap usage in openrsync. After
that modern protocol versions need to be added. Once that is in place one
can start a discussion about using openrsync as a default on OpenBSD.
Love this remix:
@lyse@lyse.isobeef.org Shadow on the wall!!1! 📣😅
It was an easy patch, so menus have drop shadows now:

Not that big a difference in the dark theme, though.
@lyse@lyse.isobeef.org Not a fan of Mittelaltermärkte, but that sounds like an interesting idea. I wonder if they end up shooting each other on accident. 😅
@lyse@lyse.isobeef.org Oh, no, he was the one providing the feedback. 😅
mgk appears to be everywhere. His Unicode box drawing demo has been part of my unicode-test script for a long time: https://movq.de/git/bin-pub/file/unicode-test.html#l23
@itsericwoodward@itsericwoodward.com Yeah. That DORA quote is probably spot on. It’s exactly what I’m seeing here.
@prologic@twtxt.net Hm, yeah, probably. I don’t think that’s how many FLOSS projects are/were run, though, so they’ll have to find new ways to build those relationships. 😅 I mean, isn’t it usually a new person sending patches to a project, over and over, and at some point they’ve shown enough skill so they’re “promoted” to a full maintainer position? 🤔
favicon.ico and only around 7.5k hits on the image thumbnails. So I guess that, in reality, it might have gotten around 7k hits. The rest … is probably bots.)
@lyse@lyse.isobeef.org Two emails. 😅 One person asking for the source code, and the author of wcwidth (the library I’m using) contacted me to provide some input. 👌
@lyse@lyse.isobeef.org Switching to Make might be a good idea, though, because the whole thing is purely sequential at the moment … It takes close to 20 seconds (including the w3c verification which runs the Java checker). It’s not unusable, but it could be better. 😅
@arne@uplegger.eu Hat nicht so lange gehalten. 🤪 
(This settled at about 25k hits on the HTML page now. But only about 11k hits in total on favicon.ico and only around 7.5k hits on the image thumbnails. So I guess that, in reality, it might have gotten around 7k hits. The rest … is probably bots.)
@prologic@twtxt.net As have I. 🤔 I mean, since I left GitHub, I got basically 0 pull requests anyway.
Even during my time using GitHub, I noticed that “drive-by PRs” are rarely a good idea. People don’t really know/understand the code or the design principles/goals, so I often turned down PRs. Or I accepted them and was grumpy afterwards. 😅
What does work is having a team of maintainers/devs. The only question is: How do you build such a team if you don’t accept PRs? That’s going to be the interesting part.
Now that is an interesting move:
https://ladybird.org/posts/changing-how-we-develop-ladybird/
Maybe this is how all Free Software will look like in the future. It might not be the worst idea … ? 🤔
@lyse@lyse.isobeef.org Ah, I almost thought so (that you wrote it by hand), but then I looked at the source code and saw the TOC and I was like: “Naah, probably not. I would be way too lazy to do that manually.” 😅 And indeed … ha.
Oh god, yeah, that’s a lot of <span>. 🤔 Can’t really avoid that, I guess, especially if you want to do syntax highlighting of code blocks.
You wrote your own site generator, didn’t you?
In parts. I write everything in Markdown (it’s online, even: https://movq.de/blog/postings/2026-05-29/0/POSTING-en.md), plus a few Vim shortcuts (to generate thumbnails, for example), and then python-markdown renders it: https://pypi.org/project/Markdown/ This process is wrapped in a shell script, like “re-render every page if the .md file is newer than the .html file” and that’s mostly it. And the Atom feed generator is completely custom. 🤔
@bender@twtxt.net lol, no, please don’t send me a quackton of ducks. 😅 We use BIRD a lot at work, hence this bears some significance for me/us. 😅
You know what this is?

A BIRD bird! 😅
I got it as a gift from a very friendly coworker and she, in turn, got it from Maria Matějka. 😃
@bender@twtxt.net Ugh, I don’t know. I’m having a long vacation now and I try not to think about this topic anymore. 🤣
Response by the author of rsync: https://medium.com/@tridge60/rsync-and-outrage-d9849599e5a0
Okay. I have lost the “battle” against “AI” at work and I will no longer try to “fight” any of it.
It is simply what people want. They want to use it. And that’s the end of it.
And why do they want it? Because it makes their job easier. And why is that? In very large parts, it’s because we have accumulated a metric fuckton of technical debt due to decades long mismanagement. We were (and are) operating in “emergency mode” all the time. There simply was no time to clean things up or to rethink designs. We always have to go with the cheapest and quickest solution. We are never ahead of things: Earlier this year, I started an initiative and wanted to tackle some issue that I could see coming. I was shut down because this wasn’t “urgent”. Very soon after, this exact thing became that exact problem – but now, there was no time anymore to do it properly because NOW it’s urgent, so, once again, we had to go with a quick and dirty solution.
It’s always like that and I had brought it up again and again. And now we have a huge spaghetti mess that hardly anyone understands anymore.
Nobody – except AI. It can still make some sense of this and, obviously, this is useful to people.
So, any argument I make against AI is completely pointless to begin with. I’m such a fool for not having seen this earlier.
The last argument I made today was: “Look, we already have so much technical debt and spaghetti systems, we really, really must clean this up. If we throw AI on top of this now, it’ll only get so much worse.” And once more, I was shut down. My intentions were “admirable”, but “there’s no time for that”.
Okay. Good luck with that. They’ll keep doing it this way. At some point, it’ll either explode entirely and some poor soul has to clean it up, or it’ll explode and they’ll have no other choice but to throw everything away and start from scratch – assuming they can still afford that.
In other words, none of this about AI, really, nor caused by it. Our department’s massive spike in AI usage is just a symptom of the underlying management issues. And since those aren’t being addressed, nothing will change and this whole mess will only get worse.
(I blame all this on management, because, well, that’s who’s to blame. I do not have a solution for it, though – and assigning blame without constructive criticism always sucks big time. I don’t like doing this. If you had put me into that particular management position, I wouldn’t have been able to solve any of this. The thing is, though, I’m not an expert on management and it isn’t my job – I’m just the “princess” who solves your technical issues.)
<updated> of the feed, too. But for some reason, some articles were suddenly marked as new.
@lyse@lyse.isobeef.org By the way, which site generator are you using? I kind of miss having code blocks with syntax highlighting and that generic yellow highlighting thing is pretty cool, too.
@lyse@lyse.isobeef.org lol, “garbo” 😅 Took me a moment. 🤣

