The mentioned go.{mod,sum} change is already part of tview 0.42.0. After implementing Set/GetDisabled(…) and PasteHandler(), tt starts up fine and seems to work without issues.
Put the shopvac on the alert as a wet vacuum cleaner and released it into its regular life, now that it's bone dry again. Maybe five liters of rain. Tops.
@movq Yeah. The thunderstorm was supposed to hit us, sneak north and south around us, directly pay us a vistit again, miss us to the north, directly hit us, and now it's back to a northern diversion. The thunder heavily roars in the distance at the moment. It's down to just 10 liters. A mate just got a wet laundry, though, and had to mob up a – luckily – just tiny flood.
As I type, the first drops begin to fall.
@movq Oh dear! :-(
Now, it's cooler outside than inside. Time to open the windows and start the wind machines.
@movq Lucky you! My damn work laptop heated up this room to 29°C. The hottest so far.
@movq It was nice at around 5 o'clock on the balcony with just 22°C and the tiniest breeze. But I got eaten alive. Fucking mozzies.
@thecanine Oh, I'm absolutely bad with videogames. Never heard of that one.
@bender Please, mate, keep the heat to yourself! I don't wanna trade that. ;-)
The firefly season is ending. I only saw 200 of them or so. There was one female directly on the forest road. If only I brought my camera and tripod, that would have worked out I reckon. I had my torch with me and this looked really cool.
Dusk took forever today. It was really long light out there. Full moon is tomorrow.
On the way back, there was suddenly a load clatter and crashing sound 100 meters away from me. I didn't see anything, but a tree fell over in the forest out of the blue. Fuck me dead, that was scary as hell. Luckily, I was already on the main road, only meadows around me. It's the second time I witnessed a tree accidentally coming down. The first one was during the most expensive hail storm in our area so far in 2011 behind me when setting up a summer camp. The weather changed in less than 15 minutes.
Maybe not such a good idea to go out so late alone. :-? Any rustling in the forest immediately reminded me of the boar the other day. Luckily, always false alarm. Still a bit terrified from that event.
@movq Oh my! :-O We reached 38°C. It's now down one degree.
I just got up from my two, three hours siesta. And I tell you, that was bloody amazing. Layed in bed in undies, no blanket, just some power metal in my headphones and I was sleeping like a baby. Normally, I NEED a blanket, no matter what. But this summer, it's already the second time that I actually manage to drop off without one.
@movq Oooph! Web development is tidious.
I also include width and height from now on in my galleries.
@movq I see. I just use CDATA (and still have the XHTML trailing slash for <img … />). But of course, it also has its drawbacks: https://waspdev.com/articles/2026-05-11/avoid-using-cdata-in-rss I might just move away from it.
Everything is a web service these days. :-/
@movq Good idea, I should probably do the same for my photo galleries.
@movq Yes, that's what I was thinking, too. For a moment, I wanted to suggest to use <ol> instead of <ul> to fix that. However, that's only gonna work for the first level, but subsections then miss their parent level.
And it turns out that I was wrong. At least sort of. There are some CSS tricks to fix it: https://stackoverflow.com/a/26243681 Of course, with text or retro browsers, this is not gonna fly.
I also came across this interesting article. I just skimmed it and it's about real tables of contents with page numbers, so not what you have in mind, but cool nevertheless: https://css-tricks.com/a-perfect-table-of-contents-with-html-css/
@movq I reckon section numbers are not really needed for articles. But if you number them, the anchors should probably not contain the section number, just the title. Especially for articles that may receive updates.
It's probably another story for specifications. They're kinda fixed and thus I found it useful in the past to include the section numbers in the anchors, so they show up in URLs when linking to specific sections. W3C RFCs only include the numbering in the anchors. This makes URLs fairly short, but it would be also nice to directly see what kind of section that URL actually links to.
@thecanine I don't know if the Dinosaurs TV series is a meme, but this cute thing surely reminds me of that.
@movq Right. A Go programmer eventually knows that its nanoseconds precision. Keyword arguments like in Python are just sooo superior to unnamed positional arguments. I wish that Go had them, too.
@movq It's working fine. I can still read your messages. :-)
We went to the source of the river Fils this evening. I couldn't believe it, but as I was promised, there were just 20°C. That was super nice. Almost chilly. We only met two others with their three dogs right at the beginning and had everything to our own. We enjoyed the firefly and bat show on a bench. Now back in town and the temps are cooking at 27°C. Fuck me!
It was already fairly dark for my camera, so all the photos are even more blurry than usual. Sorry!
https://lyse.isobeef.org/filsursprung-2026-06-25/
06 shows the bench in the background. The source is next to the building under the trees. 07 shows it in its full glory. 08 is the view before the glowing show began.
@movq I admit, it's something different in the pitch dark. Noises are a hell lot more eery. I do wince every now and then, too. :-)
But I'm very glad that I only have to really worry about ticks and boars in our forests. They're petting zoos compared to everywhere else. Let's see when the bears and wolves return. It'll be another story then.
I now decided to include the alternatives: https://lyse.isobeef.org/code-readability/#alternative-timestamp-formattings
@movq But foxes always run away and don't attack. They're afraid of us humans – unless they have rabies.
A deer, multiple frogs, several thousand fireflies and something else. It was already very dark when I was silently drifting along on a nice soft mossy path, enjoying the firefly show left and right and in front of me. I then heard some rustling about 30 meters in the distance in the shrubs. I thought that I must have scared up a deer. But it kept on rustling without any worries. And I closed in without seeing anything.
Only when I heard the quick oink from just 10 meters away, I froze. Shit, no deer, but a boar! Suddenly, I was the one who was scared. It probably hadn't noticed me before. But did it notice me now? Was that grunt a warning or just completely unrelated? The rustling appeared to slowly come closer. What if there were also piglets around? I couldn't figure out how many boars there were. Maybe just one, possibly more. A wild boar easily rips a hunting dog apart, so I didn't want to take any chances and decided I will not wait for them to eventually pass me behind the brush in just a hand full of meters, so I can keep on going. While I was just turning around, I heard another oink and was frighened to death. I ran 20 meters, before calming down a little bit. I listened for half a second and nobody was following me. Phew. I then walked back the path.
What an adventure, I tell you. That was my second (or maybe third?) wild boar encounter in the woods ever. A hell lot more scary at night than during daylight when you can actually see something.
@prologic That's how I read that, too. :-D Unfortunately, all listed articles stop at only 30% maximum. Scam!!
I had a real blast in the woods again. There were a bit more fireflies on the meadows, but still no comparison to all the shows in the forest with several thousands.
The fucking mozzies got me, too.
@bender As I was not able to capture any recent ones, from the archives: https://lyse.isobeef.org/amsel-2024-05-29/
@bender Right, can't think of anything more pleasing than that! If only I were a landscape gardener, I could enjoy that all day long. :-D
@movq Vorsicht, freilaufende Gewitter!
So ähnlich war's zuvor auch. Weit ringsum absolut nix. Es regnet und donnert schon eine viertel Stunde, bis der Wetterbericht und das Regenradar dann auch umschalten und von dem laufenden Unwetter Kenntnis haben.
@movq An apostroph and three quotes, yes. :-)
@movq We're already at 29°C now. Five more to go. It's terrible!
How truly wonderful! <3 I went out tonight and the first thing I noticed was the temperature drop. It felt actually quite pleasing. What a welcome surprise, I didn't expect that at all. It was warmer in the forst than between the fields. The tiniest breeze helped to cool off the surroundings I think. Right now, the temperature shows 23°C. It's supposed to reach 18°C at 5 in the morning before it rapidly shoots through the sky again.
When I left the house I even saw the very end of a nice sunset. A bat was around, too. The several thousand fireflies delivered a fantastic show. It's such a pity that I cannot show this to you. :-(
There were many frogs or toads around. Luckily, the light tan gravel road made for a good constrast to the darker hopping amphibians. So, I spotted them just in time. No animals were harmed.
The moon was out and lit up the scenery. I was perfectly chasing my own shadow for several hundred meters on a forest road. I had the moon right in my back. That moon light shadow felt magical. <3
It must have set a new record on picking up spider webs along the way. The threads around arms and legs always feel quite yucky. People were blasting music somewhere in town. You could here that noise in the entire forest. I found that rather annoying. All street lamps are operational again, so I got already blinded right at the entrance to the town. But other than that, this was a very nice evening stroll. Totally recommended. Already looking forward to tomorrow. :-)
@movq Yeah, that would also be fine with me. I certainly do like the "arbitrary" in your comment.
While writing the article, I also thought about something like that:
date := time.Date(2026, 6, 19,
17, 0, 0, 0, time.UTC)
Or possibly:
date := time.Date(
2026, 6, 19,
17, 0, 0, 0, time.UTC,
)
But it's four lines for a damn timestamp. I also contemplated whether a comment acting as a separator is all that's needed:
date := time.Date(2026, 6, 19, /**/ 17, 0, 0, 0, time.UTC)
I might like that the most. Not entirely sure yet. It kinda feels like a hack, but still a little elegant. Add your comment on top and we're golden. Maybe?
I deliberately excluded them as this only distracted from the points I wanted to make. And I also realized that this example was just not ideal at all. Perhaps I should add them nevertheless?
If I ever invented a programming language, a much more human readable timestamp representation of some sort, RFC 3339 or very close to that would be part of that language. Something along the lines of /pattern/ for regexes in certain languages.
@movq Haha, thanks! :-D Some deliberately crude GIMP work.
@movq What kind of Unicode do you use? All the new emojis?
@bender @movq Ta! I don't know about regional differences. But at the moment, they first start slowly appearing at around 21:45 to 22:00. And then it gets more and more. You've got about an hour until it's over.
People often say that they are in and over the meadows close to the edges of the forest. But at least over here, there are literally magnitudes more in the forest. So far, I've maybe seen thirty, fourty (30-40) fireflies outside at the meadows, but one or two thousand (1000-2000) inside. Exactly like last year.
They like a little bit openish spots in the forest. Not like a clearing, but if you can see ~10 meters from the path into the woodland, chances are that fireflies will pop up. But if it's really thick brush, the odds are very slim. The hotspots also slowly wander around over time. So, I just keep on walking after a few minutes of stopping to enjoy the show.
@movq Congrats, I guess. ;-) I'm not gonna dive into the comments either. :-D
@movq Same, I only (vaguely) remember the more interesting bits. Most of the subjects weren't my cup of tea. ;-)
@movq That's what I believe as well. But again, it shows a similar thing when a video cannot be downloaded. Anyway.
@movq Sometimes, views on quality code are 180° apart.
Here we are, it took me a bit longer: https://lyse.isobeef.org/code-readability/
I found my tripod and headed into the woods. There was a ton of glow. \o/ The fireflies were everywhere, super cool. It looked so amazing, especially with all the flying boys. There was one amazing spot in particular, I had 80-100 individuals in my view at once. Absolutely breathtaking. Unfortunately, the mozzies were also delighted about my visit.
I tried my best, but it's impossible to capture anything on film with my equipment. The fireflies are just way too dim. In the end, I managed to get some very bright girls in the bush. That's the best I could do, but still really bad. Sorry @bender. :-(
https://lyse.isobeef.org/gluehwuermchen-2026-06-19/
And no idea what the heck is going on with the CSS there. Anyway. Garbage to trash, seems fitting. ;-)
@movq Yeah, the damn message to urge me into updating for no reason. It still works fine, why update then!? Leave me alone. If downloading fails, there's already a hint that updating might fix it. The introduction of this banner in https://github.com/yt-dlp/yt-dlp/pull/13937 doesn't give any reason for that change either.
Didn't find my tripod. :-( But I will track it down tomorrow. We saw easily one, two thousand fireflies. They were everywhere. Really awesome!
@bender 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 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. :-/
@bender 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 That was before my time, I joined the party late. :-)
@movq 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.
@movq 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 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.
Let's see which other browser-based clients I broke with that message…
@movq @bender 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 Yiha! Alternatively, you could embed the
After the last two days were dry and a tad warmer, I left the house a few minutes later to check again. It was similar to last time. One deer on the pasture that didn't run off, it was roughly 15-20 meters away, a bit further than the day before yesterday. Probably even the same individual. Many moths, zero fireflies and another two deer on the mown meadow when I left the forest. Those were closer to 50 and 100 meters away and evenutally escaped into the woods. The same street lamps were off, too.
The lovely smell of cut grass was in the air. Venus and Jupiter reflected brightly in the West. What a stroll, I call that a great success. :-)
@movq 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.
@movq 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 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.
Fuck me! I tried to upgrade tview and the first thing I notice is a shitload of added dependency versions:
go.mod | 18 ++++-----
go.sum | 97 ++++++++++++++++++++++++++++++++++++++-----------
My code does not compile anymore as the view.FormItem interface was extended. Get/SetDisabled(…) are quickly implemented, no worries.
But the tview.Primitive (what makes a widget) interface has now a bunch of PRIVATE methods. For focus handling. Would you believe that!? Thanks, I cannot satisfy this interface in my very custom widgets anymore. Okay then, I just embed *tview.Box. tt now successfully compiles, but does not react anymore on key presses and the message tree is not focused either.
I'm not in the mood to debug this shit. :-( Lunch time.
@movq 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 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
@movq 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. :-)
Another thing: With multicolored TUIs, I find it usually hard to immediately tell which button is selected if there are just two. I'm asking people for any relevant information. :-)
Getting the vim key bindings to work for focus switching in this modal dialog took me forever. Only cursors and (Shift+)Tab are supported out of the box. I absolutely understand that, it's fine. I installed an input handler on the dialog, but the focus always stayed the same.
After two wasted hours, I was in despair to copy the tview.Modal into my own code base. Of course, I had to fix all the private tview field accesses first. But even installing the input handler directly on the buttons themselves did not work. Even though, the handler was definitely executed, the focus did not shift. Forcing redraws as a last resort also did not work.
Looking through all the messy chained input handling, I eventually stumbled across another place in the tview.Form, which is internally used by tview.Modal. This messed around with app focus receptions and input handlers. This gave me the idea to make the tview.Application refocus my modal dialog after I told the modal dialog which button to select. And would you look at that, this did the trick! I haven't completely figured out what is going on exactly, but I could get rid of my Modal clone again.
I always go through hell with focus handling in tview. Each and every time. It just does not feel natural to me. Complete brainfuck to wrap my head around. The Urwid API felt sooo much more refined, it never was an issue. It just works. In fact, I cannot think of any other TUI library that has remotely the same pain level when it comes to focusing widgets as tview.
Now I'm curious how movwin deals with that. ;-)
@movq 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 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.
@movq 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 Yeah, you absolutely must experience them yourself in person. :-)
@bender Those damn foreigners shall not enjoy our German music, how dare they! Something like that.
@movq Hmm, indeed, this sounds a bit weird. Is it Fernwärme?
@movq 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 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 Uh, uh, uh, yeah, nice! Perfect time to spend the holidays in Green- or Iceland. :-)
@movq Work to rule. And yeah, absolutely horrible time to look for something else. :-(
@movq 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.
@movq 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 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. :-)
@itsericwoodward 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 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. :-)
@itsericwoordward 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 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
@movq 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 Great, now I've got the Shadow On The Wall earworm for some reason. :-D
@movq Oh, whoops, hahaha! :-D Yeah, I also noticed Markus' Unicode work yesterday. Really cool.
@movq 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 I see the Make rewrite popping up on the horizon. :-)
@movq Not bad. How many e-mails or other forms of feedback did you get?
@movq Ah, I see. Oh, so not even make, just a shell script. :-)
@movq Yes.
Maybe management should replace itself with AI…
Years ago, I used Kate, no, not somebody's wife, but the KDE Advanced Text Editor, to export source code files and fragments into HTML with syntax highlighting. I think that's where I got the initial <b> idea from. There were also bucketloads of <span style='color:<a href="?search=644a9b" class="tag">#644a9b</a>;'> all over the place, even inside <b>. No CSS classes defined upfront, all colors inlined. The final rendering in the browser looked great, but the source code ugly as hell in my opinion. However, I'm thankful for hinting me at <b>. I think this kicked off everything. :-)
@movq It's the "Lyse types the entire HTML by hand" generator. Yes, no kidding. I write articles so rarely, that I can do that once in a while. It's fun to some degree, but also not.
After some time, I finally recorded some Vim macros to insert <b>…</b>, <var>…</var>, <span class=s>…</span> etc. around the tokens. This helped a little bit. But I was still questioning my mental state doing it like that. I also had to fix a bunch of the end tags by hand, because the word movement wasn't enough or the end movement went too far. Quite the annoying process for sure.
But I think the HTML looks a wee bit nicer and is maybe even semantically a little bit better than having only <span>s everywhere. I find the <span class="whatever"> just soo awfully long. Of course, I never look at the code again, but knowing, that e.g. there is a <b> and it saves so many bytes in comparison, makes me happy. It is a more elegant solution in my opinion. Not by much, but better nonetheless. It's a matter of simplicity. Admittedly, even I can't avoid the <span>s alltogether. Oh well. On the other hand, I'm sure that this does not make any difference whatsoever. I bet, nobody and nothing, like a screenreader, analyzes the HTML for that, where this would be truly useful.
Oh! Maybe text browsers, though. It just occurred to me while composing this reply. :-) Haha, I lost my bet quickly. w3m picks up at least the <b> for keywords and builtin types, <u> for filenames and <i> for comments. Yey. No different styles for <var> and <mark>, unfortunately. elinks only renders the bold. It's cool that I had the right intuition right from the beginning, despite being unable to pinpoint it. :-)
All the <span> hell with common syntax highlighters is a downer for me that keeps me from looking more into them. If I wrote more articles, I might rig something up with Pygments. At least that's somehow positively connotated in my brain. Not sure if it actually deserves it, but I dealt with that in some loose form (can't even remember) years and years ago. Apparently, it wasn't too terrible.
To prepare the table of contents, I used grep and sed with some manual intervention in the end. The entire process can be improved. Absolutely.
You wrote your own site generator, didn't you?
I woke up well ahead of my alarm. But fear not, I'm tired, too. :-)
@itsericwoordward Haven't noticed anything either. These request numbers are well below some other software. :-)
@movq Interesting read! The current state is already a very great achievement. I felt honored being able to already have followed your development along here on twtxt. :-)
That's a cool clock, I should remind myself of my working time, too.
@movq Hahaha, a ride indeed. Exactly, this affected each and every Atom feed and only Atom feeds. All RSS feeds worked like nothing ever happened. This std::string to time_t to std::string to time_t dance only happens for Atom feeds. RSS feeds, on the other hand, go right from std::string to time_t and be done. That's precisely what the second option is aiming to propose for Atom feeds, too.
I will clarify that tomorrow in the article.
It's very interesting what kind of quirks accumulate in software over the years. Especially quirks, the basically noone knows of anymore. Until something explodes and gets rediscovered. Luckily, that doesn't happen all that often.
@bender No way, impossible! Which pattern could you have possibly spot? :-D
@bender Doesn't happen often. And when it does, it's a matter of just a few minutes.
@movq Oh yes, very cruel. Absolutely. But also beautiful sometimes.
@movq Wow, quite the background noise! I like the birds, though. :-)
I wasted my entire weekend on the writeup. If you have way too much time to spare and also are interested in a bug analysis of a software that you don't even use, I have you covered: https://lyse.isobeef.org/newsboat-time-parsing-bug-analysis/
@movq I came across that in some of these threads, too. I should probably give OpenRsync a shot.
@movq It already broke successfully: https://mastodon.gamedev.place/@JeremiahFieldhaven/116654345332213390
@bender You mean to make it all blank? ;-)
This is also why @bender's Notes feed was unaffected. It's an RSS feed.
Aha, yesterday's newly added support for LC_TIME to render localized timestamps also broke the feed parsing with my LANG=de_DE.UTF-8 and LC_CTYPE=de_DE.UTF-8 environment. :-)
Atom feeds make use of RFC 3339 timestamps. They are first converted into RFC 882 timestamp representation, which is the one that RSS feeds use. However, this conversion now results in localized RFC 882 timestamps, which cannot be parsed into Unix timestamp numbers via curl_getdate(…). I bet that it doesn't know about the localization at all and expects English month and weekday names. Looking at its docs, I reckon that function was selected because of its myriad of supported timestamp formats: https://curl.se/libcurl/c/curl_getdate.html RFC 3339 is not included, though, hence the transformation up front.
The intermediate Item objects in the parser domain use std::string for the timestamp representation. This isn't all that silly, because Newsboat supports all sorts of different feed formats with different timestamp formats. These RFC 883 timestamps are centrally parsed into time_t.
Speaking of time: It's time to go to bed after this late bug hunting fun. :-)
@movq I really like your style of writing, btw. It's much calmer and less aggressive then mine. :-) When I turned my bullet points into paragraphs, I got a bit mad in the process.
Sure, feel free to include anything you want. Regarding citing, this is where twtxt falls short in my opinion. Especially with feed rotation, classic links die quickly. Message hashes only help so much. Nobody outside the twtxt universe knows how to deal with them. So, not perfect for inclusion on a web page. Linking to a thread or message on some yarnd instance might be the more user-friendly option. But the disadvantage is that it's "just" a mirror, not the primary or original source. In all reality, this could be considered splitting hairs, though.
I should have probably written a proper article. That would have given me time to review the result more carefully, too. ;-) Perhaps that's something for the future. But honestly, I'm not sure if I really want to waste my time and energy on that subject. So many other fun or useless things come to mind right away that I could do instead. 8-)
So, yeah, do whatever feels best to you. I don't mind being cited or linked, but I also don't mind not to be cited or not to be linked to. :-D Not a helpful answer, I know. Sorry. ;-) But anyway, thanks for asking, mate! <3 I do appreciate it.
To finish my thought, linking to my frontpage is probably also useless, since I deliberatly do not have a table of contents there. In fact, my entire frontpage is rather silly.
@movq Oh, I understand exactly what you mean. :-) I fully agree with you. And it also completely puzzles me why only so few people share our view.
On further examination, all the articles have the same timestamps. Whenever the feed was fetched. :-O
@movq Thanks. I noticed the <updated> of the feed, too. But for some reason, some articles were suddenly marked as new.
On some YouTube feed <entry>s, I noticed updated <updated> fields showing today's timestamps. But unless there is no <published>, the <updated> is not even considered. I verified that in the source code. Yet, all the affected articles in Newsboat show today's timestamp, not the years old publication timestamp. I generate the YouTube feeds from the original feeds myself once a day, so I doubt that this is cause by some YouTube shenanigans.
Very weird, it doesn't make any sense at all. What is going on here? O_o It doesn't appear that I have duplicates in the database either.
Of course, @movq! Most of my points are also included in your list.
First of all, programming is what I really do enjoy the most. So, it doesn't make any sense at all to not do this anymore. "But you could use your now free time to do something much cooler and more valuable!", others might reply. Fuck no, I don't want to waste my time with other shit that doesn't fulfill me, why on earth would I want to do that?
All this hallucination reduces quality badly. In my experience, it's also happening much more rapidly than I expected. Even though developers are still supposed to own and understand whatever has been generated under their name and even be responsible for that, the sad reality is that teammates often blindly trust the AI output. "But I asked the AI and it told me that $this was impossible", "I've no idea either, but the AI just generated it" are responses I get more often. What really makes my angry is when I point out a flaw and suggest an alternative and this is the reaction. It happened several times that just trying it out and seeing it clearly work to proof my point only took me half a minute, but people still did something handwavy else instead.
The learning effect is drastically reduced. The more time I spend on a topic, the better the odds that whatever I learned actually makes it over into long-term memory. It's like if a collegue just says "do it like that" or "this solves your problem", but neither explains the why or how. Somehow, people are still convinced that it's a completely different story when you replace the human counterpart with a computer program in this equation.
Skills are unlearned. It's like with automation in general, just much worse. You end up in a state where you've no clue how anything works under the hood or how to actually find out important information that are needed to solve your problem. You're screwed when a process breaks out of the blue. Even though it can become also rather terrible, with classical automation you're typically still be able to decipher how exactly the thing was supposed to do something.
The energy consumption is sooo high, I absolutely do not want to be a part in burning down our planet. I'm sure I find (and probably have long found without knowing) other ways to contribute to worsen our climate crisis.
The scraper part is already covered in detail in your list. :-)
I'm convinced that license and copyright violations are only played down or even refused entirely because companies want to make big money quickly. With the work of others of course. Their double standards are obvious, they still try to actively keep their own stuff secret and out of any training sets. At most for internal use only. Virtually noone in charge is interested in good long-term solutions. Short-term for the win, when disaster eventually strikes, the causers are long gone, the responsibilities in other hands.
Vendor lock-in is something that lots of folks are only realizing very slowly. It's completely crazy to me. This drug dealer routine should be well-known by now. It's fucking everywhere. Yet, people are always surprised when they found themselves caught in it.
Adding new AI stuff only increases complexity. But complexity is the enemy that everybody should fear and reduce as much as possible. Of course, this is not limited to AI at all. And everywhere I look around, people in charge looooove to make things way more complicated than they ever need to be. Yet, simplicity is the real art and much harder to achieve.
I don't understand why we have to go back full force to the ambiguity of natural languages. This alone should be more than enough to realize what a stupid idea all that is. Linked to that is that the "instruction set" is interpreted differently with newer model versions. I mean, is has to be. Why else would somebody want to upgrade in the first place than to get more Powerful™ Features™?
Some people argue that with AI the democratization is empowered. However, in my view, the exact opposite is the case. Models are getting so large that you can basically not run them locally or even train them. So, you have to rely on whatever the vendor offers you and runs for you. In the end, this only gives the owners more power, the multi billionaires. Not exactly what I understand by democratization.
Finally, technology assessments are missing completely. Or they are faked such that mostly only the (questionable) benefits are listed. But all the negative impact is just ignored.
Let's keep some popcorn around for when this all explodes. :-)
@movq Yes, this is the tricky bit for sure.
Of course, they say that totally convinced. Until it eventually explodes in their faces and let others clean up after themselves.
@itsericwoordward @bender @prologic Hahaha, it's working fine in mine. But I cannot use spaces in the nickname. :-)
@movq If you really like to, you can try to negotiate with your employer that you can leave earlier. At least some mates were successful in that. I mean, it's also in the company's interest to not have to pay someone who has already mentally resigned long ago.
And on the bright side, you don't even have to hand over anything. Your boss doesn't have to look for a successor, so they can just let you go even sooner. This AI shit will simply continue whatever you did, no problem!!
It's so crazy. I should probably also look for something else. :-(
@Little-Eric-{{first_name}} Hahaha, will do! :-D
@itsericwoordward @bender Dang it, I missed it, too.
@itsericwoordward Confess, you just registered as {{first_name}}!
Nobody checks their e-mail templates. And even if they do, they only look at the HTML part. The plain text part is useless more often than not. Granted, this is the subject.
@movq Cool! Let's look for 57 61 6C 64 6F.
@movq Congratulations! I also was a LAMP dude back in the days. That's all we had as kids without money. :-)
@movq I just changed the bindsym directly in my i3 config. But I'm looking forward to learn a few new tricks. :-)
@bender This shit is back. But with SSHFS instead of SMB now. SMB is still fucked for no reason. Let's see, when it explodes.
@kiwu Wuuiii, what to do with all this free time suddenly!? Wait, what? Free time? Nah, nevermind. Now, the time begins where it gets even worse once you start a fulltime job. Congratulations, mate! :-D
@movq Don't worry, the agents will forget everything for them. Ehh…
@arne In der Tat ein Klassiker. Mjam, mjam!
Welcome @tftp, I just found you in my access log. :-)
@movq Oh, that's cool! Un- and redo are absolutely valuable features.
@movq 100% agree. We're driving straight into a wall at full throttle. Doing it with a clear warning.
@movq Apropos shit: I did not know about the history of Scheißtag. https://en.wikipedia.org/wiki/Schei%C3%9Ftag
Oh no, speedy recovery, @movq! I was down for one day on Saturday. Vomiting through the nose. Not entirely sure what that was, but I reckon something in the food poisoning or sunstroke realm.
@movq Oh my goodness, hahaha!
To be fair, it depends on your threat model. And I believe it's very safe to bet that most probably don't have one. Nor even remotely know what that is. So, it's plenty good enough for them.
With that new to me detail on top, there's even less incentive to look at this Matrix hype more closely.
@movq Und da konnte ich nicht widerstehen und hab die Folge doch sogleich angehört. Herrlich, sehr kurzweilig, spannend und lehrreich. In der Tat ganz schön viele Arschgesichter, hihihi. ;-)
@movq Oh, cool! Holgi hab ich schon jahrelang nimmer gehört (allgemein Podcasts), das sollte ich schleunigst wieder ändern. Diese Folge scheint mir als Wiedereinstieg nach dem arbeitsreichen Wochenende bestens geeignet. Insbesondere die „Holgi ruft an“-Reihe hab ich in sehr guter Erinnerung.
@bender @movq Haha, nice. Yeah, I also only know older Giselas. Not sure why that name fell out of fashion this dramatically, though. Be that as it may, this hot greenfinch girl will help to repopularize it again!
@prologic Yeah, almost everybody sells their soul to some form of devil. So did I. :-D
@bender Thank you. I just got very lucky, though. Anyway, let me introduce you to Gisela. :-)
@movq @bender Yeah, super sweet. :-) I was lucky to capture this beautie again today: https://lyse.isobeef.org/gruenfink-2026-05-06/
@movq Right, they messed up the signing key rotation: https://blog.denic.de/technische-storung-bei-de-domains-behoben/
@movq I see, thank you. Maybe I remember next time. :-)
@prologic Aww, this is beautiful! Too many people for me, but they're cetainly great to show the scale. Quite some impressive falls. :-)
@movq Oh, nice! I never was brave enough to try to move the OS to a different machine, always reinstalled from scratch. :-S
A mate also had this or a very similar white Samsung netbook. I remember typing on that thing was no fun at all for me, never hit the single right key. :-D
I'm not a fan of netbooks, there's not remotely enough screen space for my taste. I always had 15 inch notebook. Sure, they are way heavier, but I can actually get work with them done. And yes, glared screens are an invention right from the devil himself. Completely stupid.
@movq It's a way much cleaner design. Not so overloaded anymore.
@prologic @bender @movq Hahaha, I didn't expect that name either. :-D And it's actually a cave, too.
@kiwu Dang it! I first thought it was jitters due to your exams. Hang in there!
@prologic Oh yeah, very beautiful! <3 I can hear the roaring of the waterfall and like to be there, too. The first shot makes it look like you're in the middle of a cave. :-)
I completely forgot, I saw my very first badger in the wild the day before yesterday. :-) That was absolutely cool! <3
I heard something comparatively large rustling in the bush right next to me and thought that it must be dear. Naturally, I stopped and tried to see what's in there. The rustling went up the bank and it suddenly came down again towards the road I was on. That's when I first layed eyes on it and identified it as a badger. For a split second I thought that it's going to get after me and was ready to get running. But it just hadn't noticed me yet. When it eventually spotted me, it froze for a few seconds and ran off uphill. My camera took too long to boot, so it was already gone by the time the photo machine was good to go.
@movq Absolutely right. And I cannot say that I'm not guilty of that either.
@yarn_police Looks like the rendering in yarnd is off. The second subject (prisoner error!) was robbed, its link text got stolen.
@movq Thanks, mate! Yeah, that never gets old, there's something magically about it. :-)
@bender How poetic, very well said. :-) It calls for the small man's adventures.
Timeline Sandbox