Whatâs your motivation for running this, btw? đ¤
Basically, two things a) feeling generous for folks that either canât afford or find it hard to have a little place to call home (webpage, feed, whatever) and b) a real opportunity to test some of the components that make it possible sshbox, which I know works well as it fronts my Gitea instanceâs Git+SSH service and box, a container runtime I wrote a while ago, recently improved, hardened and polished.
@lyse@lyse.isobeef.org Okay, wait, what is the anti-feature here? The nag screen because itâs âoldâ? The inability to update when run from source? đ¤
@prologic@twtxt.net I think I said this before: This looks like a really cool thing! I just wish I had a use case for it, then Iâd be all over you. đ But since I run so many servers of my own already âŚ
Whatâs your motivation for running this, btw? đ¤
@prologic@twtxt.net woot!
@lyse@lyse.isobeef.org Yeah, I have a couple of teachers in my family and they all tell similar stories. đ
I have almost no recollection of my time at the âGymnasiumâ anymore. Iâm either traumatized by it or I wasnât very interested in what happened there. đ But I have some vague memories of doing âcomputer stuffâ at school. There certainly were computers and they certainly ran DOS games like Duke Nukem, that I do know. đ Just checked my records, and no, this wasnât an official class. At best, it was one of those AGs. đ¤
@bender@twtxt.net I wish I could do that. Unfortunately, my camera is not good enough. Not even close. Itâs just all black. :â-( #000. Or maybe #060508 if youâre really lucky.
But I will take my tripod tonight and see what I can do.
@movq@www.uninformativ.de Hahaha. It could have been worse, though. Iâve heard stories from others that were many levels crazier than what I experienced. And Iâm glad that I was very, very lucky with almost all of my teachers throughout all of school. One of my maths teacher, who was also my computer science teacher then, is the reason I do what I do for a living. Itâs all his fault! ;-)
Ja, possibly a BaWĂź thing. The ministry of education and cultural affairs changes the rules, curriculums and details every one or two years, anyway.
Said teacher had to fight real hard that he was allowed to teach CS in class 12 and 13. As a real subject, that is, not just an extracurricular activity (âAGâ). At first, the ministry refused, because weâre just am âallgemeinbildendes Gmyiâ, not an âinformationstechnisches Gymiâ. Itâs insane, youâve got super motivated (and technically as well as humanly excellent) teachers and then forbid them to offer a class. What the hell!? (Fun fact on top, he had a doctor in CS and was also teaching at the university of applied sciences.)
Eventually, they granted permission to only have a two hours a week class (âzweistĂźndig, wie Nebenfachâ). One or two years later â too late for me, unfortunately â they allowed four hours a week (âvierstĂźndig, wie Hauptfachâ). But each pupil had to sign upfont that they will not take CS class in the Abi. That was still exclusive to ITGs only. Completely ridiculous.
I reckon, you can talk to any random teacher and they will endlessly tell you about very dubious decicions from the ministry. :-/
@lyse@lyse.isobeef.org Awww, that sounds like a typical experience at school. đ They meant well but somehow it was still shitty âŚ
Iâve never heard about that Wahlteil/Pflichtteil stuff (or forgot about it). Must be a BaWĂź thing. đ¤
@lyse@lyse.isobeef.org It was before my time as well. 3.0 was my first. đ
@lyse@lyse.isobeef.org take a small video, pretty please! I would love the see them shining in the fields! On the pics, 1 is mine, all mine! đĽ°
@movq@www.uninformativ.de ahem that dreaded time has come! In the US they are due on 15 April, and wife, the tax doer, waits until the last day to complete them. âIf we are going to pay, we may as well delayâ, thatâs her motto. đ
@bender@twtxt.net Hell yeah, weâve seen the first fireflies of the season! \o/ \o/ \o/ How cool! Maybe 50-70 in total. Gotta check every evening now. :-)
The sunset wasnât too bad when I left the house to pick up my mate: https://lyse.isobeef.org/abendhimmel-2026-06-17/
Itâs Venus over the moon. And Jupiter is further diagonally down between the clouds.
@movq@www.uninformativ.de That was before my time, I joined the party late. :-)
@movq@www.uninformativ.de Let us know how it went. :-)
@movq@www.uninformativ.de Thatâs right, way harder than centrally managed. They even didnât reach concensus over the main folder: âAlle Programme, âAlle Programme (x86)â, âAll Programsâ, âAll Programmesâ, etc. Anyway.
For class 11 (or maybe already in 10, I donât remember exactly) we could choose either between traditional maths class with a graphical calculator or âMathe mit CASâ. There were two teachers in my entire school who were able to teach the latter. It was also fairly new at the time I believe. Certainly unheard of for a âallgemeinbildendes Gymnasiumâ, maybe the technical ones were already offering it for some time, not sure. It was clear to me that I would take the maths with CAS class.
Each kid had to buy their own Cassiopeia A-Something. I donât know how much that thing was (definitely more expensive than a graphical calculator) and whether the school subsidized that in any form. But it was slow and underpowered as hell. We rarely used it in class nor for homework (most if not all had already a desktop at home). Typically, when we worked with the CAS, we sat down on the desktop computers. Our class took place in one of the two computer rooms. The desktops were placed on the three sides (left, right, back, facing the walls or windows) and the regular school desks were in the middle. Since there were more pupils than desktops, we always shared. Nowadays, we call it pair programming. ;-)
For the exams we had the âmandatory partâ (Pflichtteil) without any tools. Once we finished that and handed the papers to our teacher, we were then allowed to boot up our Cassiopeias and work with them for the second part. Before the exam started, everyone had to show the teacher that they reset their small computer to factory settings. This second part was called âWahlteilâ. But you had to do it in order to pass. So, I never understood the choice of this term. Maybe itâs because the first part is the exact same for everyone (graphical calculator and CAS class), but the second part was definitely different for the two classes. Each suited to their tools.
After one or two exams, it became clear that the Cassiopeia was far from ideal. So, we took the second part at the desktop computers from then on. Our teacher unplugged the network cables himself to avoid cheating. Each computer had an âHDD Sheriffâ running that reset the disk at startup. There was also an issue that the personal user accounts were affected by that. Sometimes all your data were lost. If you were lucky, they were still there. So, we saved our Maple project to local disk (if the computer didnât crash in between, that was no problem) and at least eventually before leaving the classroom, we then also saved it on the server. For that, the teacher quickly plugged in the cable, we saved, and then the cable was unplugged again immediately. Oh, and everybody used their USB sticks, too.
All in all, this Cassiopeia A-* was quite a useless purchase. :-D Iâm not sure if I still have it. At least I thought several times about giving it to the flea market. Donât know if I did or not.
@lyse@lyse.isobeef.org The what? What happened? Do I want to know? đ
@lyse@lyse.isobeef.org I might check it out â once the vacation is over. đ
@lyse@lyse.isobeef.org đđ
But itâs Windows, it doesnât have a place in my heart.
The older I get, the more Iâm glorifying anything pre XP. đ But thatâs only because everything today is so horrible.
Well, not anything pre XP. 3.0 or newer would be nice, because Windows 2.x was still pretty bare bones:
(OS/2 was great, though, except for the lack of a good file manager.)
@lyse@lyse.isobeef.org Ah, you mean the categorization. Yeah, that would never work in Windows, at least not without having a centralized package manager (so thereâs one authoritative source of which program belongs into which category).
Oh wow, those Cassiopeias look pretty cool. Did you have one of those or one for each kid?
@movq@www.uninformativ.de Yes, yes, yes and yes.
The start screen looks exactly like a website not a desktop application.
I mean, I find Motif also fairly ugly. Granted, itâs a hell lot more discoverable than anything today. The old Windows UIs probably had the best balances. But itâs Windows, it doesnât have a place in my heart. So, I stick with good old KDE. ;-) Thatâs my nostalgia kicking in.
@movq@www.uninformativ.de Yes, this screenshot. However, not the Dutch but rather the German version, no wonder it looks so crazy!!1!11
Itâs been a hot minute or two since I last used KDE, so I donât remember exactly. I just vaguely recall that I found myself thinking multiple times that the KDE application categories were better matching or there were more or something like that. Most of my classmates were on Windows and had one giant long list of all sort of stuff in there. You even had to scroll in the menu. Sure, they installed all kind of garbage, which didnât exactly help. Where in KDE, they were actually grouped by Office, Internet, Graphics, Multimedia, Games, etc. In Windows, applications usually hid themselves in a sub folder named after the software vendor. At least in the later (?) days.
I only used Win 95, 98 and XP at home. For maths class with computer algebra system (Maple), we had a Cassiopeia with Win CE: https://en.wikipedia.org/wiki/Casio_Cassiopeia At school, there was probably also Win 2000, but I donât know anymore for sure.
@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. đ
@maurice-renck.de@maurice-renck.de Nice write-up. One of the things I was always impressed with is that the GPS system has to account for time dilation due to the effects of relativity (38 microseconds worth, per Wikipedia).
All that for a burger!
@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? đ¤
@prologic@twtxt.net I look forward to hearing more about it.
@itsericwoodward@itsericwoodward.com Yes really đ¤Ł
@prologic@twtxt.net Awesome work!
Iâve been thinking about learning Go for a while, maybe this will be the thing that finally gets me to do it.
@prologic@twtxt.net ORLY? đ¤Š
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.

