@lyse@lyse.isobeef.org In what way was KDE 3’s menu organized? KDE 1 is the only KDE version I ever used. 😅 We’re talking about this one, right?
Isn’t Notepad++ and Python cheating!? :-D
Well, Python was certainly already a thing back then, but Notepad++ is from 2003, right. I think I used https://www.wintotal.de/download/proton/ at the time? Maybe? I don’t know. 😅
@movq@www.uninformativ.de Regarding https://movq.de/blog/postings/2026-06-16/0/POSTING-en.html:
In my opinion, the KDE 3.5 menu was organized way better than the Windows Start menu. Granted, a typical KDE installation had much more applications to offer, too. So, there was more need to get it right. And it probably was also later in time.
Isn’t Notepad++ and Python cheating!? :-D
Crazy story on the clock’s seconds. I never heard of that before. Neat.
Yeah, UI these days is horrible. (That’s why my own TUIs suck, too!)
@lyse@lyse.isobeef.org That, uh … yeah, that would work as well. 😅🤦♀️
@movq@www.uninformativ.de @bender@twtxt.net Thank you! It’s some kind of a thistle I reckon. My mate is a bee hunter, I’ll link the next one that comes up.
@movq@www.uninformativ.de Phew! ;-)
@movq@www.uninformativ.de Yiha! Alternatively, you could embed the
@movq@www.uninformativ.de Gotta make the economy go “around” and keep public services in play 😅 Good luck! 🤞
@movq@www.uninformativ.de fully agree! And 10, and 11, and 18. By far my favourites, @lyse@lyse.isobeef.org.
@lyse@lyse.isobeef.org Oh, 02.jpg is great. Camera just a little lower next time to put more emphasize on the … whatever that is in the foreground. 😅
@movq@www.uninformativ.de I’m completely with you. I just do rivo’s approach with some of my own stuff that nobody ever sees. But the vast majority gets a real version. Probably not a changelog, but a version. And it’s very small stuff.
@lyse@lyse.isobeef.org Interesting approach. 🤔
The master branch should never be in a broken state (apart from bugs I don’t know about). Any intermediate state during the development of a larger feature will happen in a different branch.
I mean, yeah, but … I don’t know, I like having “traditional releases” as a second safety net when I write programs. I like to let things mature for a while and then I cut a new release. So it’s, like, “we have a bunch of new features and fixes here, and to the best of my knowledge this works fine now”. But maybe I’m just paranoid. 🤔
@movq@www.uninformativ.de Yes. The author tries hard not to break existing code, but apparently he did this time. In his defense, it’s not an official release, I just updated to master. Which is exactly what I always did in the past as there are no real versions (I even think that in one ticket he wrote years ago that master is always stable). That has finally changed a year ago, though: https://github.com/rivo/tview/releases/tag/v0.42.0
@movq@www.uninformativ.de Brilliant! Oh, I’m super happy to get it all wrong together with you. :-)
[Release notes] are meant for human beings, it’s a human-to-human interaction.
This is one of the most important messages. Absolute key, but misunderstood so often.
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:
@lyse@lyse.isobeef.org Is it this one? https://github.com/rivo/tview It’s almost 10 years old but hasn’t seen a 1.0.0 release yet? 🤔
@movq@www.uninformativ.de Exactly!
@lyse@lyse.isobeef.org Oh god, yeah. In other words: Devs need to think about who their target audience is. 😐
@movq@www.uninformativ.de I just ran across another thing. At least I personally couldn’t care less about CI infrastructure changes. Whether they’re using github action a or b or c or version v or w, it is not of my interest. At all. (It might be useful to estimate the supply chain attack risk, though.) If the maintainers want to include them in the changelog – and there are probably people to whom this information is crucial – it’s probably best to document CI infrastructure changes in their own section.
@movq@www.uninformativ.de You may want to include another antipattern to avoid in your article:
- bump $same_dependency from 1.0.0 to 1.0.1
- bump $same_dependency from 1.0.1 to 1.0.2
- bump $same_dependency from 1.0.2 to 1.1.0
- bump $same_dependency from 1.1.0 to 1.2.0
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:
@movq@www.uninformativ.de Thank you very much! So, the concept is very similar. The root widget gets the input and can pass it to whatever child has the focus and so on.
My two main issues are the API design, that the input handler sometimes get an additional callback to notify the application about which element is focused, but sometimes not. And that focus switching sometimes just does not work as expected. Anyway.
As for rendering the selected button, I was also thinking about indicating it with some kind of border around it, square brackets seem to be a wonderful choice. :-)
@itsericwoodward@itsericwoodward.com Why hear? I’ll just put it up at https://twtxt.app now shall I? It’s good enough IMO that it’s already working quite well. The challenging parts now is to figure out a good set of default publishing connectors to support? 🤔
@itsericwoodward@itsericwoodward.com Yes really 🤣
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. 😅)
Every now and then, I think that I have carefully proof-read my message enough times and hit the “Add message” button in 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:
- Recall the
sqlitebrowser ~/.local/share/twtxt/tt2.sqlitefrom my shell history.
- Switch to the “Browse data” tab.
- Go to the
messagestable and wait a second or two until it’s loaded.
- Sort by the
created_atcolumn twice, so that I get descending order.
- Select the first message, which is typically the one in question.
- Find the “Remove currently selected row” button in the tool bar.
- Commit the changes.
- Close sqlitebrowser.
So, I finally implemented the removal of messages from the cache in tt. I can now hit d and confirm the removal. Bam! Should have done that ages ago!
Next up is the search, I think.
@movq@www.uninformativ.de Right, at work, nobody gives a fuck. At all. There are so many universes between my definition of quality and everybody else’s.
Let’s stop here and enjoy the weekend or vacation. :-)
@movq@www.uninformativ.de Just working on swag 😅 And….. Building an Offline-first Yarn/twtxt client that has no server requirements (_other than you need to publish your feed somewhere…)
@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.
@movq@www.uninformativ.de Hahaha, great timing! :-D I love your article and agree with almost all your points.
On the AI changelog part, though, I’d rather recommend to just not have a changelog at all.
Another important thing for me is the deprecation notice section. What do I need to look out for in the future? Should I start to migrate to another API soon? Even right now? Or does it have time?
While going through these terrible GitHub release pages, I also found these “New Project Contributors” sections (yeah, for that, they found the time to make a section) annoying. Don’t get me wrong, sure, credit where credit is due. But come on. Soooooo much space for an inefficiently formatted (and also unsorted) list. At least it was easy enough to skip over it.
And then, there are also these changelogs or rather notice documents in general that are infested with multicolored emojis all over the place. My brain’s spam filter kicks in and shoves everything to /dev/null immediately. It’s especially a thing at work.
In my previous work project, we also used the Keep A Changelog Format. That was great. You wouldn’t believe how often I resorted back to that document. At least twice a week, often several times a day. I was very glad that we put in this effort. Of course, writing the changelog took its time, but it was worth every minute and more. Reading a many months old item, it was immediately clear. I was our best customer in that regard.
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.
@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. 😅
@movq@www.uninformativ.de Next town, they use Fernwärme from the waste incineration plant to heat the hospital and probably also parts of the neighborhood. I don’t know how good it works, but in the cold months there’s always steam coming out of the manholes along the road through the woods. I very rarely am in this area, but whenever I am, the steam on the side of the road always amazes me.
@bender@twtxt.net Yeah, you absolutely must experience them yourself in person. :-)
@apptester@twtxt.net Cool! 😎 My Offline-first Go/WASM + HTMX powered Yarn / Twtxt client is working 👌
Hello World! testing an offline-first PWA Yarn.social / Twtxt client :)
@marcorocco@roccodrom.de such a feast! I had lentils soup, and a couples of eggs with onions in a scramble. Not bad, but not great. Your sounds very appealing!
@lyse@lyse.isobeef.org having seeing, and played with fireflies as a child I envy you. We have none around here. Children have no idea what a firefly is. I mean, they do, but vague, and based on videos and telly.
@thecanine@twtxt.net Nice! 🤯
@lyse@lyse.isobeef.org Fernwärme it is. %)
@bender@twtxt.net Those damn foreigners shall not enjoy our German music, how dare they! Something like that.
Even lower resolution sitting canine, made trying to find out, if one under 20x20 is possible, came to be 18x15.

@movq@www.uninformativ.de Hmm, indeed, this sounds a bit weird. Is it Fernwärme?
@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?)
@prologic@twtxt.net yup, same here.
@movq@www.uninformativ.de What the heck! Construction work? Eventually, one has to resort to the good old bucket shower. Maybe raise the comfort level with a kettle.
It’s raining all day long over here. You could just stand outside for a while.
I hope it’s back sooner than later!
@prologic@twtxt.net Too bad.
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
@movq@www.uninformativ.de So Anubis does a whole lot more than I really wanted and it’s configuration is a lot more complicated. In my setup I basicaly just do this:
pow @needs_pow {
difficulty 18
ttl 168h
secret_env POW_SECRET
}
In one of my site blocks. And the implementation itself is pretty simple too.
@lyse@lyse.isobeef.org That video appears to be unavailable to me :/
Video unavailable
This video is not available
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 Ninjababypowpowpow, NINJA BABY POW POW POW! https://www.youtube.com/watch?v=1dK8NeTWN7w The lyrics are also fitting quite well I have to say. :-) https://www.die-aerzte-archiv.de/bela-b/songtexte/song/ninjababypowpow.html
@movq@www.uninformativ.de Uh, uh, uh, yeah, nice! Perfect time to spend the holidays in Green- or Iceland. :-)
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? 😅
@movq@www.uninformativ.de Work to rule. And yeah, absolutely horrible time to look for something else. :-(
@movq@www.uninformativ.de Oh yeah, way better! :-) I didn’t spot the bug, though.
I think I could work with the feature set. I typically don’t need a lot. Until I do. :-D The message tree in tt is an example of that. But tt is also special that it needs something like this in the first place. It’s unusual.
@kiwu@twtxt.net dog tired. Like, both, physically (and my neck and lower back hurts), and mentally. I am whole drained.
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! 😅
@bender@twtxt.net @movq@www.uninformativ.de Ta! It’s the chemtrails that they cannot stomach. :-D
@movq@www.uninformativ.de Be careful, sounds like the latter to me. Get a good rest, though! And maybe slow down a tad once you’re back. But now, enjoy your private hacking. :-)
@movq@www.uninformativ.de That is really cool! Maybe it would look nicer if the selected entry highlighted the whole row, not just the individual cells in that row without the column spacers. :-? But maybe I’m wrong. Everyone has their own taste.
And no, it’s not pointless at all. I find this really interesting. The videos and photos are perfect for me. Even if I had the source code, I would not use that toolkit, as I’m not a fan of movable windows in TUIs. I want all my own programs to be fullscreen all the time. 8-) Having said that, it’s still an absolutely brilliant source of inspriation that will come in handy one day. So, keep posting. :-)
@bender@twtxt.net Yeah, no, not gonna happen. 😅
@movq@www.uninformativ.de release the codeeeeeeeeee! Dewww iiiittttt!! :-P
@lyse@lyse.isobeef.org Those poor unicorns. Why do they have to puke all the time? 😢🦄
@lyse@lyse.isobeef.org love the unicorn vomit! All of them, but vomit 1 is my favourite. :-)
@arne@uplegger.eu Heh, nice. 🥳
Herzlichen Glückwunsch, @arne@uplegger.eu!
@itsericwoodward@itsericwoodward.com Turns out, this is a bug in my config to cache synchronization. Nickname changes in the configuration file are just not synced to the cache at startup if the feed URL already exists in the cache. I must have fixed this typo in my config ages ago, because I don’t even recall having that spelling mistake to begin with. Yet, the cache was happily showing the erroneous nickname. Composing a reply automatically adds the mentions from the conversation participants. Everything originates from the cache, so, I successfully poissoned my replies.
@itsericwoodward@itsericwoodward.com Dang it, my apologies for butchering your nick, mate! :-( Unbelievable, that I did not notice this in all those months. But it’s great to trade mention errors. :-)
Yup I see it!
2026-06-07T13:52:37-04:00 (#ggtk3vq) @<movq https://www.uninformativ.de/twtxt.txt,http://www.uninformativ.de/twtxt.txt> That's a great effect! 👍
@itsericwoodward@itsericwoodward.com on this one, for example.
@itsericwoordward@itsericwoodward.com I just want to let you know that your mention completion seems to be broken. :-) The URL is duplicated with a comma in between. Actually, the protocols differ. I suspect that you extract all url metadata fields from the feed, not only the canonical one used for hashing (the first one) and join them. I’m not completely sure, I would need to read up on the specs (it’s already past bed o’clock, though), but I guess that there is no explicit rule for picking the mention URL. Without having thought about it too much, I reckon the safest bet is to stick to the hashing URL when in doubt and the URL that was used to subscribe to the feed is not available for whatever reason. The URL from the subscription list is probably even better.
@movq@www.uninformativ.de Exactly! :-D
I just came across these two covers which stood out to me:
- https://www.youtube.com/watch?v=tVvhHydubR0 played a bit faster, and faster is almost always better
- https://www.youtube.com/watch?v=rpwGUx0Sz_4 a choire’s polyphony usually makes things automatically better
@lyse@lyse.isobeef.org Shadow on the wall!!1! 📣😅
@movq@www.uninformativ.de Classic song! :-)
The targets are well spread across the forest, it’s impossible that they end up hitting others on accident. The only dangerous station is the one with the white swan. Since they shoot from the other side of the tad pole pond, they might actually hit people on the forest path (where I took the photo) when they miss the target and provided the shot is powerful enough. We were on our way before the archers started their loop trial.
@movq@www.uninformativ.de Great, now I’ve got the Shadow On The Wall earworm for some reason. :-D
@movq@www.uninformativ.de Oh, whoops, hahaha! :-D Yeah, I also noticed Markus’ Unicode work yesterday. Really cool.
@movq@www.uninformativ.de Very nice 👍
@movq@www.uninformativ.de Kann mir gleich sein. Ich habe das Album nun daheim. Das kann mir nun keiner mehr nehmen!
@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 Oh don’t get my wrong, I totally empathize, but yeah 👍
@itsericwoodward@itsericwoodward.com Yes, but is how we want to be behaving. We don’t like something so we go out of our way to be malicious and poison things? I get it though, the hypocrisy is very real here, with burning trees, eating up water supplies, and the massive amounts of energy going into this, but still, this is petulant behaviour and I don’t think it services any useful purpose other than rage and anger.
@bender@twtxt.net @prologic@twtxt.net Hahaha, okay, I’ll leave them then. :-D
@movq@www.uninformativ.de That’s my experience, too.
@movq@www.uninformativ.de Great to be asked for feedback! I just noticed that the first wcwidth version was derived from Markus Kuhn’s C code. I came across him in my ISO 8601 and RFC 3339 endeavors the other day. https://www.cl.cam.ac.uk/~mgk25/iso-time.html What a surprise. :-)
@movq@www.uninformativ.de I see the Make rewrite popping up on the horizon. :-)
@itsericwoodward@itsericwoodward.com I’m not sure this is very productive to be honest 🧐
@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. 😅
@lyse@lyse.isobeef.org Those are stunning 😎 I’d leave the windows dirty too — clearly the birds approve of the current state of affairs 🤣
@itsericwoodward@itsericwoodward.com That DORA quote is 🤯 — and it perfectly explains why AI coding tools terrify me in certain contexts. Dropping Copilot into a codebase full of technical debt isn’t gonna fix the debt, it’s just gonna write more of it faster 🤣 Fred Brooks would be nodding his head right now 🙏
@movq@www.uninformativ.de Honestly I think you build the team before you need the PRs 🤔 Start with relationships — people who’ve been using your software, filing good bug reports, asking smart questions. Those are your future maintainers. The PR comes later as a formality, not a tryout 😅
@lyse@lyse.isobeef.org those are sharp, and sooo nice! Are you sure the windows need cleaning?
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.)
@movq@www.uninformativ.de Not bad. How many e-mails or other forms of feedback did you get?
@movq@www.uninformativ.de Ah, I see. Oh, so not even make, just a shell script. :-)
@arne@uplegger.eu Hat nicht so lange gehalten. 🤪
@movq@www.uninformativ.de One at a time, until you build up trust, coherence to make them a maintainer 😅