@movq@www.uninformativ.de Oh, I see. Unfortunately, there seems to be no box drawing character for a corner with a diagonal line. Indeed, this is probably the best you can do.
Is the single character enough to hit it comfortably with the mouse, though? Maybe one additional to the left and above could be something to think about. Not sure. Of course this complicates it a bit more. Personally, I like fullscreen windows, so I’m definitely the wrong guy to judge this or even comment on. :-)
@movq@www.uninformativ.de Very nice, it’s coming together!
Just in case you haven’t already noticed it, the right lower corner of the window in front was not updated when it received the focus. 8-) (In tt I also render focused text input fields with a doubly lined border, where unfocused ones have a single one.)
@bender@twtxt.net They’re not completely impossible, but C makes it much easier to run into them. I think the key point is that in those “safe” languages, buffer overflows are caught and immediately crash the program (if not handled otherwise) instead of silently corrupting memory, not being noticed right away and maybe only later crashing at a different location, where it can be very hard to find the actual root cause. This is a big improvement in my book.
Some programmers are indeed horrible. I’m guilty myself. :-)
I like the article.
@movq@www.uninformativ.de Yiha! Even autoscroll, very nice! The naming certainly drew inspiration from Urwid. I like it. Looking forward to eventually checking out its inner workings. :-)
@movq@www.uninformativ.de @prologic@twtxt.net @bender@twtxt.net Given the age, they must mean Kopernikus! https://en.wikipedia.org/wiki/DFS_Kopernikus
@bender@twtxt.net I also went back to my duty today and fixed a problem I created right before vanishing into the holidays. Of course, I discovered more problems while fixing the one thing. Luckily, another public holiday tomorrow. :-)
During my time off, I was a very lazy rat. I planned on doing some woodworking again, but instead I started watching Itchy Boot’s Africa season: https://www.youtube.com/watch?v=pMvfS5mbsiI&list=PL8M9dV_BySaXNvQ_V1q4UU-DirPQlX0ZP
@movq@www.uninformativ.de Cool! :-) I just implemented a workaround for the time being.
@movq@www.uninformativ.de I noticed that your feed’s last modification timestamp was missing in my database. I cannot tell for certain, but I think it did work before. Turns out, your httpd now sends the Last-Modified with UTC instead of GMT. Current example:
Sat, 03 Jan 2026 06:50:20 UTC
I’m not a fan of this timestamp format at all, but according to the HTTP specification, HTTP-date must always use GMT for a timezone, nothing else: https://httpwg.org/specs/rfc9110.html#http.date
@movq@www.uninformativ.de Let’s hope they find the guys who fired that rocket onto the balcony and we actually get a fireworks ban.
@prologic@twtxt.net Very impressive! :-)
@movq@www.uninformativ.de Very nice! We also had some snow this morning, but it’s already melted. And the sun is missing, too. :-D
@movq@www.uninformativ.de Wow, that’s sick! :-)
@movq@www.uninformativ.de I’m pretty sure I know a bunch of people who love to blow up their money. :-(
Holy shit! :-O At least, the walls didn’t shake here. But we also had some very loud explosions, maybe they were far enough away. :-? Of course, the bangs continued last night.
Maybe some politicians need to be personally attacked with this sort of shit first in order to ban it once and forever.
@shinyoukai@neko.laidback.moe @prologic@twtxt.net Yeah, it’s been ages that I came across Trac. :-D
The only good thing about this absolute craziness is that I can restock my rocket sticks. I picked up twelve along the way. Unfortunately, it looks like 99.999% of ammunition is bombs instead of rockets. Some sections of my street look exactly like an arbitrary Pakistanian town that I’ve seen online.
There was surprisingly much snow in the woods. Also, all ponds have frozen over. I didn’t expect that. Not at all. There were even illegal ice skating tracks in the natural reserve. We came across a large puddle and it was at least 10cm solid ice to the ground. Crazy!
fib(35) doesn't regress too badly as I continue to evolve the language.
@prologic@twtxt.net Not bad for a start, ey! Looking forward to see you going down these rabbit holes and opening one can of worms after the other. :‘-D Very, very impressive, hats off to you. :-)
@prologic@twtxt.net Can you just make them optional? :-) But that of course complicates things.
println("Hello World"):
@prologic@twtxt.net That’s impressive. How large are the resulting binaries? You don’t have any optimizations in place yet, do you?
@movq@www.uninformativ.de I hid in the workshop with earmuffs for the absolute worst part.
@javivf@adn.org.es Heck yeah, let’s do this! :-) Welcome to 2026.
@shinyoukai@neko.laidback.moe We finally abandoned our GitLab. I publicly mirrored my code in the Mills Data Center a few days ago: https://git.mills.io/lyse/tt2
@movq@www.uninformativ.de Well, just a very limited subset thereof:
- inline and multiline code blocks using single/double/triple backticks (but no code blocks with just indentation)
- markdown links using using
[text](url)
- markdown media links using

And that’s it. No bold, italics, lists, quotes, headlines, etc.
Just like mentions, plain URLs, markdown links and markdown media URLs are highlighted and available in the URLs View. They’re also colored differently, similarly to code segments.
I definitely should write some documentation and provide screenshots.
It totally sounds like an active warzone around here. So, I just went on a very, very, very quick stroll to check out our sunset from ontop our hill (were all the bangs are way more horrible): https://lyse.isobeef.org/abendhimmel-2025-12-31/
Hurray, I finally fixed another rendering bug in tt that was bugging me for a long time. Previously, when there were empty lines in a markdown multiline code block, the background color of the code block had not been used for the empty lines. So, this then looked as if there were actually several code blocks instead of a single one.
https://lyse.isobeef.org/tmp/tt-bugfix-empty-lines-in-multiline-code-blocks.png
@movq@www.uninformativ.de Because they’re just boxes. :-D
@movq@www.uninformativ.de Yeah, I see. Just crudely checked on my computer, with around 0.013 seconds, Python 2.7 seems a tad faster than Python 3.14’s 0.023 seconds in this little program.
The lazy imports sound not too bad, but I just skimmed over them. There are surprisingly many exceptions, but yeah, no way around them. :-)
@movq@www.uninformativ.de That’s cool! I also like the name of your library. :-) I assume you made the thing load quickly, didn’t you?
I just fixed another bug in tt where the language hint in multiline markdown code blocks had not been stripped before rendering. It just looked like it was part of the actual code, which was ugly. I now throw it away. Actually, it’s already extracted into the data model for possible future syntax highlighting.
Phew, it was just a one-time thing. Ta! :-)
Btw, @shinyoukai@neko.laidback.moe, that’s a super cool logo on your yarnd. I like it a lot!
It just doesn’t look aligned properly: https://lyse.isobeef.org/tmp/misalignment.png Could be a yarnd issue, though, it might not expect a logo this large. Just wildguessing, no idea.
@shinyoukai@neko.laidback.moe Because you might not want to commit all changed files in a single commit. I very often make use of this and create several commits. In fact, I like to git add --patch to interactively select which parts of a file go in the next commit. This happens most likely when refactoring during a feature implementation or bug fix. I couldn’t live without that anymore. :-)
If you have a much more organized way of working where this does not come up, you can just git commit --all to include all changed files in the next commit without git adding them first. But new files still have to be git added manually once.
@shinyoukai@neko.laidback.moe Do we now need ad filters in twtxt clients, too? O_o I hope not! Personally, I cannot stand the “Sent with my crappy $phone/$app” e-mail footers.
But congrats on your client. :-)
os.UserConfigDir() up until a few seconds ago! I always implemented that myself.
@shinyoukai@neko.laidback.moe Yeah, they don’t truly support XDG. In fact, I looked in the Go stdlib source code to notice all the differences and shortcomings.
$HOME is not specified it tries to resolve the user's home directory by user.Current().HomeDir. Maybe that's overkill, I have to check the XDG spec.
Ok, the standard library implementation is wonky at best, at least in regards to XDG, because it really doesn’t implement it properly. https://github.com/golang/go/issues/62382 I stick to my own code then. It doesn’t properly support anything else than Linux or Unixes that use XDG, but personally, I don’t care about them anyway. And the cross-platform situation is a giant mess. Unsurprisingly.
os.UserConfigDir() up until a few seconds ago! I always implemented that myself.
Hmm, mine also resolves a leading tilde in these variables. And if $HOME is not specified it tries to resolve the user’s home directory by user.Current().HomeDir. Maybe that’s overkill, I have to check the XDG spec.
But I’m definitely missing os.UserDataDir(). That’s a bummer.
@shinyoukai@neko.laidback.moe Cool, I didn’t know about os.UserConfigDir() up until a few seconds ago! I always implemented that myself.
@movq@www.uninformativ.de Thanks! I’ll have a look at SnipMate. Currently, I’m (mis)using the abbreviation mechanism to expand a code snippet inplace, e.g.
autocmd FileType go inoreab <buffer> testfunc func Test(t *testing.T) {<CR>}<ESC>k0wwi
or this monstrosity:
autocmd FileType go inoreab <buffer> tabletest for _, tt := range []struct {<CR> name string<CR><CR><BS>}{<CR> {<CR> name: "",<CR><BS>},<CR><BS>} {<CR> t.Run(tt.name, func(t *testing.T) {<CR><CR>})<CR><BS>}<ESC>9ki<TAB>
But this of course has the disadvantage that I still have to remove the last space or tab to trigger the expansion by hand again. It’s a bit annoying, but better than typing it out by hand.
Oh, suddenly Mother Hulda dumped a centimeter of snow tonight! https://lyse.isobeef.org/schnee-2025-12-30/01.jpg
Magpie from the day before yesterday: https://lyse.isobeef.org/elster-2025-12-28/
Question to my fellow Vimers: Which snippet insertion mechanism are you using or can you (not) recommend?
Pro tip: Don’t keep the christmas biscuits close to the bird fat balls. I nearly mixed up the bags. :-D
@movq@www.uninformativ.de Yeah. I had that in my Python implementation and was really missing that.
@movq@www.uninformativ.de I see. Yeah, all the Unicode stuff certainly doesn’t help here, that’s for sure.
Maybe “speedcurses” could be a name. Or just select any Palatinate curse. ;-)
lldb or gdb 😂
@prologic@twtxt.net Oh yeah, I bet it is horrible to troubleshoot.
@prologic@twtxt.net Yeah, the parser part is what I typically enjoy. Haven’t really looked into code generation itself.
I’m currently looking at your µ commits from the last few days. Holy cow! :-)
pwgen --no-capitalize --no-numerals 5 and since that already showed up in DDG search results, I simply appended the last two, which yielded nothing on DDG and Google).
Dang it, there’s a Swede by the username of Quongsi: https://www.flashback.org/u1404408 :-D
println(1, 2) was bring printed as 1 2 in the bytecode VM and 1 nil when natively compiled to machine code on macOS. In the end it turned out the machine code being generated / emitted meant that the list pointers for the rest... of the variadic arguments was being slot into a register that was being clobbered by the mu_retain and mu_release calls and effectively getting freed up on first use by the RC (reference counting) garbage collector 🤦♂️
@prologic@twtxt.net Tada, congratulations! I find that rather interesting, thanks for telling us. :-)
@movq@www.uninformativ.de How about “Quongsi”? I generated the first five letters with pwgen --no-capitalize --no-numerals 5 and since that already showed up in DDG search results, I simply appended the last two, which yielded nothing on DDG and Google).
What kind of project is it? Maybe we can help you find a name or nudge you in the right direction.
The tt URLs View now automatically selects the first URL that I probably are going to open. In decreasing order, the URL types are:
- markdown media URLs (images, videos, etc.)
- markdown or plaintext URLs
- subjects
- mentions
I might differentiate between mentions of subscribed and unsubscribed feeds in the future. The odds of opening a new feed over an already existing one are higher.
@prologic@twtxt.net In my opinion, the integrity isn’t lost. The same input data always result in the same output hash, no matter when you calculate the hashes. It’s true that a corrupt database contents yields to corrupt hashes, but then you have a whole bigger problem than just receiving different hashes. :-D
@zvava@twtxt.net By hashing definition, if you edit your message, it simply becomes a new message. It’s just not the same message anymore. At least from a technical point of view. As a human, personally I disagree, but that’s what I’m stuck with. There’s no reliable way to detect and “correct” for that.
Storing the hash in your database doesn’t prevent you from switching to another hashing implementation later on. As of now, message creation timestamps earlier than some magical point in time use twt hash v1, messages on or after that magical timestamp use twt hash v2. So, a message either has a v1 or a v2 hash, but not both. At least one of them is never meaningful.
Once you “upgrade” your database schema, you can check for stored messages from the future which should have been hashed using v2, but were actually v1-hashed and simply fix them.
If there will ever be another addressing scheme, you could reuse the existing hash column if it supersedes the v1/v2 hashes. Otherwise, a new column might be useful, or perhaps no column at all (looking at location-based addressing or how it was called). The old v1/v2 hashes are still needed for all past conversation trees.
In my opinion, always recalculating the hashes is a big waste of time and energy. But if it serves you well, then go for it.
@shinyoukai@neko.laidback.moe The CSS 404ing highlights the improvability of the content to noise ratio. :-)
@movq@www.uninformativ.de The asshats are everywhere. Luckily, it has been rather quiet so far. But of course, I now jinxed it.
It’s this time of the year again, where people burn money on the streets.
Almost all photos turned out to be blurred today. That made sorting a very quick process. Delete, delete, delete, … https://lyse.isobeef.org/waldspaziergang-2025-12-26/
@movq@www.uninformativ.de @prologic@twtxt.net Holy shit, this is sooo fucking cool! :-) Wow, I absolutely love it. It’s extremely fascinating what these optimizers do.
Woof, woof, @thecanine@twtxt.net! That’s cute.
@movq@www.uninformativ.de I have not, thanks! <3
@prologic@twtxt.net @movq@www.uninformativ.de Oh, I take my 0°C over the 36°C anytime! Even with yesterday’s gray and windy sleet in my face. However, there are definitely more pleasant times to walk in town, I’ll give you that. For example on 0°C sunny today: https://lyse.isobeef.org/waldspaziergang-2025-12-25/
@movq@www.uninformativ.de Hahaha, this is hilarious! :‘-D
@movq@www.uninformativ.de Only the roofs are a little white. It’s also windy here. https://lyse.isobeef.org/weisse-weihnachten-2025-12-24/01.jpg
Indeed, tiny, tiny snowflakes coming down.
@zvava@twtxt.net I might misunderstand what you wrote, but only hashing the message once and storing the hash together with the message in the database seems a way better approch to me. It’s fixed and doesn’t change, so there’s no need to recompute it during runtime over and over and over again. You just have it. And can easily look up other messages by hash.
Happy birthday Katrina! https://www.uninformativ.de/blog/postings/2025-12-23/0/POSTING-en.html :-)
Oh wow, there might be snow tomorrow! Probably not much, though. Let’s see.
@movq@www.uninformativ.de Maybe there’s another meaning I’m not aware of, but this doesn’t look like a shitpost to me. Congrats, I guess. ;-)
I just had a closer look at https://git.mills.io/prologic/mu and it motivated me to do some compiler building myself again. Hopefully, I find some time in the next free days. I’m bad at it, but it’s always great fun.
Oh great, I received an e-mail that my SMTP credentials have been exposed. Once again, just another shitty scanner that generates garbage reports from tests it doesn’t understand. Thank you for nothing!
conf := &Config{
SMTPHost: "smtp.example.com",
SMTPPort: 587,
SMTPUser: "user",
SMTPPass: "hunter2",
SMTPFrom: "from@example.com",
}
@prologic@twtxt.net @movq@www.uninformativ.de A crocodile had bitten the big submarine internet cable that connects Australia to Europe. The investigations revealed that some construction work last week accidentally tore up the protective layer around it. That went unnoticed, unfortunately, so marine life had an easy job today. For just 40 minutes, they were quite fast in repairing the damage if you ask me! These communication cables are fricking large.
Just kidding, I completely made that up. :-D I didn’t notice any outage either. But I didn’t try to connect to Down Under at the time span in question.
@movq@www.uninformativ.de Very nice! I often wish other languages had something similar. Sometimes, I use lambdas, but that also looks ugly and feels a bit like a misuse. Other times, just the normal blocks are enough, but it’s not the same. Especially with the mutability aspects as the article explains. Typically, I just put it in a function or ignore it if it’s just a few lines.
@movq@www.uninformativ.de Ah, cool! :-) Yeah, it’s very wild what is happening under the hood all the time.
Wow, @movq@www.uninformativ.de, so many tables. No idea what I expected (I’m totally clueless on this low-level stuff), but that was quite an interesting surprise to me. https://www.uninformativ.de/blog/postings/2025-12-21/0/POSTING-en.html
@kiwu@twtxt.net Ta, same to you!
@movq@www.uninformativ.de Oh, a table of contents is indeed a great idea!
@movq@www.uninformativ.de Interesting. I never found a big use for these kind of lists in general. But I might give it a shot again.
@movq@www.uninformativ.de Not sure what it had in its beak. It looked a wee bit like a large biscuit. But it must have been rock-hard.
@kiwu@twtxt.net I’m doing great, how’re ya going? Just two more days and then I never have to work anymore. In this year.
I just baked two trays of gingerbread. One definitely good one and another experiment.
This morning was also super pretty: https://lyse.isobeef.org/morgensonne-2025-12-19/
Magpie and sunset: https://lyse.isobeef.org/waldspaziergang-2025-12-18/
@shinyoukai@neko.laidback.moe I think I never watched it. In any case, enjoy reading your books.
@movq@www.uninformativ.de Neither have I. :-D
@shinyoukai@neko.laidback.moe These are all Debian release names: https://www.debian.org/releases/
- Bookworm is current oldstable
- Trixie is current stable
- Forky is current testing
That’s some cool science in @xuu@txt.sour.is’s backyard: https://youtu.be/bzBcs0jv9G4
Right at sunset we went for a quick stroll into the woods. Cannot complain about the colors in the sky: https://lyse.isobeef.org/abendhimmel-2025-12-12/
@shinyoukai@neko.laidback.moe Time to become a trixie or forky!
@aelaraji@aelaraji.com Yes, exactly. It also blows my mind that with sooo much less budget and equipment, her videos are way superior to productions of big TV stations.
@aelaraji@aelaraji.com Anytime! Glad you like it, too. :-)
We got a very colorful sunset today: https://lyse.isobeef.org/abendhimmel-2025-12-09/
@prologic@twtxt.net Nice! And foggy as heck, very beautiful! Or is this smog?
@movq@www.uninformativ.de The terminal colors change quite drastically, but not the photo. Interesting.
Fuck me, soooooooo beautiful! Awwww! :‘-) https://www.youtube.com/watch?v=oYfKgi133qo
This focuses more on the landscape part, other episodes also have amazing interactions with the locals. I cannot recommend the Itchy Boots channel enough. It’s in my top three channels of all time I believe. I hardly get the travel bug, but this has now changed. Watching Noraly’s videos brings me great joy. It also shows humanity is not lost, contrary to what one might think in this crazy world. :-)
Caution, this channel gets very addictive!
git log. They simply don’t experience the pain that comes with bad commits / commit messages.
@movq@www.uninformativ.de I reckon you’re right. There cannot be any other explanation.
@movq@www.uninformativ.de Same. :‘-( I just don’t get how people do code archeology with all their shit messages and huge commits changing a gazillion of different things. I always try to lead by setting good examples, but nofuckingbody is picking up on that. At all. Even when bringing this up every now and then.
@prologic@twtxt.net Yeah, I don’t like them either.
As for changelogs, I prefer hand-written ones over something automatically cobbled together. Typically, they are just utter rubbish in my experience.
@shinyoukai@neko.laidback.moe @prologic@twtxt.net Maybe that is helpful to you: https://git.mills.io/yarnsocial/twtxt2html/issues/12#issuecomment-20792
@prologic@twtxt.net Awwww, I wanna run my hands through this fur so badly! :-)
@movq@www.uninformativ.de @bender@twtxt.net @prologic@twtxt.net Four people! Exactly my thoughts, bender, but super cute. :-)
@prologic@twtxt.net @bender@twtxt.net Reminds me of an apple, too. :-)