# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 7053
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=7052
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=6952
Hahaha, in dieser Liste https://de.wikipedia.org/wiki/Benutzerin:Anneke_Wolf/Edits_des_Grauens sind schon echte Perlen enthalten, z.B. https://de.wikipedia.org/w/index.php?title=Baustelle&diff=prev&oldid=18568598 :-D
@movq I haven't noticed an increase in flies here, feels totally normal. Just a bit more fruit flies in the house with all the windfall gathering. It was worse the past years, though.
@bender I thought the same. Or just don't clean it at all to add to the patina. :-)
The colorful autumn looks stunning, even with a gray sky. https://lyse.isobeef.org/spaziergang-zum-oedenturm-2025-10-12/
Jason delivers again! This pallet wood coffee table looks truly fantastic, but cleaning the surface might be not the easiest thing in the world I reckon: https://youtu.be/3weDt0GCa-Q
@movq @prologic Unfortunately, I had to review a coworker's code that was also spewed out the same way. It was abso-fucking-lutely horrible. I didn't know upfront, but then asked afterwards and got the proud (!) answer that it indeed was "assisted". I bet this piece of garbage result was never checked or questioned the tiniest bit before submitting for review. >:-( It didn't even do the right thing as a bonus.

What a giant shitshow. Things just have to burn to the ground several times.
@alexonit Hahaha, why does this sound so familiar? :-D
@alexonit Hell yeah, that looks great! :-) What a pity you're not having any photos, though. I love that you went to a craftsmanship school and learned some amazing skills. The older I get, the more I admire all sorts of crafts. That's also why I started building physical stuff myself in my spare time.

This sketch is well done, so you countersunk the holes to make room for the heads. Makes absolutely sense. Mille grazie! <3
@movq Yeah, it's lovely out there right now.
@movq That's satisfying. :-) Not all my clocks are radio-controlled, though.

I've got a digital alarm clock from the Netherlands (no idea where I got this) and it always runs an hour late. No clue. I put it on a shelf in the workshop where it causes the least amount of confusion.
@prologic Oh, I will certainly check this out! Thanks for the tip, mate! <3
I went on a short stroll in the woods and came across two great spotted woodpeckers. They were busy with their courtship display, I reckon, so it took them a while to notice me and escape into thicker parts out of sight. That was really awesome. There are a lot of apples and sloes now, looking really good. The cam issues still persist, though, I wish the photos were sharper. Also, I got the error that the function wheel was not adjusted correctly and alledgedly pointed between two options numerous times. And no, it was bang on a setting. https://lyse.isobeef.org/waldspaziergang-2025-10-07/
In today's blurry photos series: https://lyse.isobeef.org/rabe-2025-10-06/
@prologic Oh, that's cool! :-) Feeding magpies seems to be an Aussie thing, the Cutting Edge Engineering Australia videos usually also include a cute magpie feeding clip.

@bender Off you go to the magpie hunt! We wanna see Florida pies!
Today, I experimented with Linux Capabilities as a continuation to my Unix Domain Sockets research from a few months ago: https://lyse.isobeef.org/caller-information-via-unix-domain-sockets/#capabilities

I learned that I don't know hardly anything and there is heaps more to explore. Tomorrow, I will do the same in Go and see how that feels.
I got the magpie again this morning: https://lyse.isobeef.org/elster-2025-10-05/ 02 is at takeoff.
Oh great, I got two order confirmation e-mails. No, I didn't click twice, same order number, two different Message-IDs.
@alexonit Thanks mate! Ah cool, now I'm curious, what did you make? :-)

You used the rubber hammer to fold the metal, not to set the rivets, right? :-? I glued cork on my wooden mallet some time ago. This worked quite good for bending. But rubber might be even better as it is a tad softer. I will try this next time, I think I have one deep down in a drawer somewhere.
@zvava No HEAD requests, but regular GETs with If-Modified-Since request headers if possible: https://git.mills.io/yarnsocial/yarn/src/branch/main/internal/fetcher.go#L270
Flamy skies are always great to look at: https://lyse.isobeef.org/abendhimmel-2025-10-04/
I experimented with a 2.4x7mm aluminium rivet I had on hand. As expected, it was quite a bit long. Using my pliers wrench, I was able to crush it down by quite some bit. I should have taken a photo right after the hand riveter for comparison. Now, it's much smoother and the chance of cutting my hand open is reduced by quite a bit. But breaking the burr with a few file strokes is still necessary. I should get 2.4x4mm rivets and try with them. I reckon they would be more suited for my 0.5mm sheet metal.

With the pliers wrench again, I was able to also crush down the chopped off 3mm copper nail and form a second head. That was surprisingly easy. Now, I need to figure out how to efficiently make a head on the remaining copper nail shaft, so that I can use this again.

Both are rock solid, there's absolutely no movement at all between the two sheet metal cutoffs.

https://lyse.isobeef.org/tmp/nietenexperiment/
@movq Too bad. :-/
@movq Yep, there's python3-tk and a bunch more packages with extensions.
@movq Nice! Are there still chicken on this field?
@movq I never programmed with Tkinter myself and it's been ages that I ran a program which used it. I always thought that it looks awful. But maybe there are nicer themes these days. I just wanted to give the demo python3 -m tkinter a try, but this module doesn't exist. I was always under the wrong impression that Tkinter is bundled with Python.
@movq I was never a fan of GTK, because coming from KDE, it didn't offer remotely as much of customizability. What are you switching to, Xfce?
@zvava yarnd fetches the feeds roughly every ten minutes:


grep twtxt.net www/logs/twtxt.log | cut -d ' ' -f1 | tail -n 20
2025-10-04T07:00:45+02:00
2025-10-04T07:10:26+02:00
2025-10-04T07:22:43+02:00
2025-10-04T07:30:45+02:00
2025-10-04T07:40:48+02:00
2025-10-04T07:52:59+02:00
2025-10-04T08:00:07+02:00
2025-10-04T08:13:33+02:00
2025-10-04T08:23:13+02:00
2025-10-04T08:31:22+02:00
2025-10-04T08:41:29+02:00
2025-10-04T08:53:25+02:00
2025-10-04T09:03:31+02:00
2025-10-04T09:11:42+02:00
2025-10-04T09:23:11+02:00
2025-10-04T09:29:49+02:00
2025-10-04T09:36:17+02:00
2025-10-04T09:46:33+02:00
2025-10-04T09:58:40+02:00
2025-10-04T10:06:54+02:00


I suspect that the timing was just right. Or wrong, depending on how you're looking at it. ;-)
Uuuhhh, that's rather interesting, I didn't know about that:

> Aachen has been officially certified as "Bad Aachen", but for alphabetical reasons usually declines to use the prefix
>
> — https://en.wikipedia.org/wiki/List_of_spa_towns_in_Germany#A

That made me chuckle.
Sieht ganz so aus, als hätte die gute @kat ihre Büchse mit in den Kurort Bad Gateway genommen.

Sorry, this pun only works in German, where "Bad" means spa and is used as prefix for spa towns.
@movq You should send 'em this sample. ;-)
@movq It completely escapes me, too. I will never understand it, but people are just wired very differently.

Relevant film: https://www.youtube.com/watch?v=YYNbSuMLZZg
@movq Yeah, the lighting needs to be right in order to make them really pop like this. I got lucky today. :-)
My photos are categorized as crafts porn for my workmates: https://lyse.isobeef.org/tmp/porn.png
The main feed got quite large again, so it's time for another rotation into archive feeds. I just noticed that I forgot to upload the archive feeds last time. Whoops. :-)
Autumn and magpie around the corner: https://lyse.isobeef.org/elster-2025-10-02/
Okay, they are also offering 2.8x25mm copper nails. Which I actually do have a single one here. :-)

My hardware collection also includes a few brass-like looking screws that I could repurpose into rivets. But I reckon I have to upgrade my burner first. I'm not a metal worker by any means, so I could be totally wrong, but I imagine that some heat is necessary to loosen the work-hardening effect when beating on them. I will do some experiments on Saturday and report back.
@movq Not sure, if this observation is correct. I know so many techies who also use every latest shit and automate their homes which is scary as hell to me.
@alexonit I just checked my local hardware store next town and 4mm brass rod is the closest I find.
@movq No doubt, some things are just so much better the low-tech way. Waste paper, like an opened envelope, suits a shopping list perfectly fine. You've got a nice handwriting, I like it.
@movq \o/
@thecanine Oh no, the poor crocodile is struck by lightning!
There was a monster in the sky: https://lyse.isobeef.org/abendhimmel-2025-10-01/

Lizard or shark or something
@movq I wish I could truly say that. :-D
Thanks, @alexonit! Yeah, this classic rivet is a good, yet laborous alternative. I don't mind the work, I just don't have any copper at hand. I might give this some more thought, though.
@alexonit Hahaha, that made me laugh real good. :-D I find it always surprising what collects in a short amount of time.
@zvava Mixing both addressing schemes combines the worst of both worlds in my opinion. Please don't do that.
@zvava Yes, the specification defines the first url to be used for hashing. No matter if it points to a different feed or whatever. Just unsubscribe from malicious feeds and you're done.

Since the first url is used for hashing, it must never change. Otherwise, it will break threading, as you already noticed. If your feed moves and you wanna keep the old messages in the same new feed, you still have to point to the old url location and keep that forever. But you can add more urls. As I said several times in the past, in hindsight, using the first url was a big mistake. It would have been much better, if the last encountered url were used for hashing onwards. This way, feed moves would be relatively straightforward. However, that ship has sailed. Luckily, feeds typically don't relocate.
Haha, turns out, it's the perfect size to fit hankies: https://lyse.isobeef.org/tmp/blechschachtel/07.jpg
Thank you, @alexonit! It's not sealed at all. If you were pouring in a liquid, it would run out on all four corners. It's just folded over and carefully hammered shut as best as possible. 03 is a bit blurred, but you can see the tab from the right (the short side) tucking in on the left (the long side). The hem on top clamps it in place fairly decently.

I decided against blind rivets, because they leave ugly looking and sharp backsides, which can also interfer with the contents of the box. However, they would be an easy solution to make the corners more rigid and prevent any movement from the short sides.

Unfortunately, I can't weld or solder, so that's not an option. It would be the by far best solution. I wanna learn it one day, though.

Yes, Ken is a really great dude. He's the reason I gave this a shot in the first place. :-)
@itsericwoodward No worries, all good, mate! We all have to start somewhere. Other software requests my feed several orders of magnitude more often.

I can confirm, the User-Agent header appears to be fixed. \o/

Two other things I noticed, though:

1. There's now an OPTIONS request for my feed coming from something that claims to be Firefox, pointing to your feed URL in the query. No clue what this is about. In any case, it's rejected with a 405 Method Not Allowed.

2. Not that these few requests bother me at all, but you might wanna implement caching next with either the If-Modified-Since or If-None-Match request headers. This way, if the feed hasn't changed, the web server can reply with a 304 Not Modified and no body at all, saving unnecessary traffic. But again, this is really not an issue for me at all. I just wanted to make sure you're aware of it, that's all. It might be even already on your agenda. Or you might decide to never do anything about it, which is also fine for me. :-)
@prologic Ta! :-)
@movq It's an ancient 1.22.4. :-)
@movq I got an empty line through the table, similarly to one of the linked bug reports, just at a different location:

https://lyse.isobeef.org/tmp/screenshot-2025-09-27-13-56-13.png
@bender @movq Thank you! Not sure what I end up putting in there, but I'm sure I will find some tools to go in. :-)

Yes, this was a flat piece of sheet metal. It went together like a cardboard box, just much slower and with timbers clamped down to get a straight folding line. I don't have a sheet metal brake, so I just carefully hammered the piece bit by bit. Like in this video by the Sheet Metal Dude: https://www.youtube.com/watch?v=WYgEfWEMXk0
For a very first attempt, I'm extremely happy how this tray turned out: https://lyse.isobeef.org/tmp/blechschachtel/ The photos look rougher than in person. The 0.5mm aluminium sheet was 300x200mm to begin with. Now, the accidental outside dimensions are 210x110mm. It took me about an hour to make. Tomorrow, I gotta build a simple folder, so I don't have to hammer it anymore, but can simply bend it a little at a time.
@movq You didn't miss anything. Just time for more useful stuff. ;-)
@alexonit You might wanna have a look at this: https://lyse.isobeef.org/tmp/twthash.py
Exactly, @zvava, I agree. (Although, in my client at least, I wouldn't use hashes anywhere.)
Hey @itsericwoodward, I just wanna let you know that twtstrm/0.4.0 sends a broken User-Agent header. Instead of the URL, the nick is repeated.
@zvava Hahaha, I love it! <3 This illustrates the contradiction very well.
@alexonit Maybe I misunderstood, but you have to keep the timezone offsets in mind. Simple alphabetical sorting of the timestamp strings does not yield a truly chronological order. It might be close enough for you, though.
@movq I've got this magic spell in my config: -f bestvideo[height<=?1080]+bestaudio/best
@bender @movq I had automatically yt-dlped https://www.youtube.com/watch?v=OZTSIYkuMlU. It's only worth for an experiment, no recommendation to watch.
Whooooaaaah, I just accidentally found out that VLC can play 360° videos and I am able to pan around! Crazy shit. I actually scrolled in order to adjust the volume like it usually works, but it zoomed in and out instead. Then I saw the title hinting at the 360° stuff. Even though this is not my cup of tea, it's nice that VLC supports it.
@movq Yeah, it took quite some time to load. But then it was briefly back. Now it's 503ing immediately all the time.
Removing the empty cache file and it works again. No idea about the PATH glitch, though. Very strange.
@movq Woah, cool!

(WTF, asciiworld-sat-track somehow broke, but I have not changed any of the scripts at all. O_o It doesn't find the asciiworld-sat-calc anymore. How in the world!? When I use an absolute path, the .tle is empty and I get a parsing error. Gotta debug this.)
@prologic I know we won't ever convince each other of the other's favorite addressing scheme. :-D But I wanna address (haha) your concerns:

1. I don't see any difference between the two schemes regarding link rot and migration. If the URL changes, both approaches are equally terrible as the feed URL is part of the hashed value and reference of some sort in the location-based scheme. It doesn't matter.

2. The same is true for duplication and forks. Even today, the "cannonical URL" has to be chosen to build the hash. That's exactly the same with location-based addressing. Why would a mirror only duplicate stuff with location- but not content-based addressing? I really fail to see that. Also, who is using mirrors or relays anyway? I don't know of any such software to be honest.

3. If there is a spam feed, I just unfollow it. Done. Not a concern for me at all. Not the slightest bit. And the byte verification is THE source of all broken threads when the conversation start is edited. Yes, this can be viewed as a feature, but how many times was it actually a feature and not more behaving as an anti-feature in terms of user experience?

4. I don't get your argument. If the feed in question is offline, one can simply look in local caches and see if there is a message at that particular time, just like looking up a hash. Where's the difference? Except that the lookup key is longer or compound or whatever depending on the cache format.

5. Even a new hashing algorithm requires work on clients etc. It's not that you get some backwards-compatibility for free. It just cannot be backwards-compatible in my opinion, no matter which approach we take. That's why I believe some magic time for the switch causes the least amount of trouble. You leave the old world untouched and working.

If these are general concerns, I'm completely with you. But I don't think that they only apply to location-based addressing. That's how I interpreted your message. I could be wrong. Happy to read your explanations. :-)
@alexonit Personally, I find the reversed order of URL first and then timestamp more natural to reference something. Granted, URL last would be kinda consistent with the mention format. However, the timestamp doesn't act as a link text or display text like in a mention, so, it's some different in my opinion. But yeah.
@prologic Yes, no doubt. There's always something somewhere.
@movq But it's so reliable and they have all the experts, they know what they're doing! And don't forget, it's way cheaper! Just think of the 34 cents saved every year on paper, the business dude calculated!

Enjoy your weekend! (I hope, you just called it a day and don't have to drive to the office or silly shenanigans like that.)
@movq That's transparency hardware support!
@zvava In tt, I recognize umlauts in nicks, but they cannot include whitespace, @, !, #, (, ), [, ], <, >, " (but ' is okay). Whitespace also acts as a separator between nick and URL. @<Hello World http://example.com> ends up exactly like that and is not a mention.
@zvava @movq I'm not entirely sure about the spaces, but maybe they were omitted to simplify parsing of mentions in the form of @<nick url>. If the next token after the @<nick does not look like a URL, it's not a mention but regular text. This is just wild guessing, though.

Looking at the regex and tests in the original twtxt reference implementation seems to confirm that theory in the sense as it relies on whitespace as the delimiter:

https://lyse.isobeef.org/tmp/screenshot-2025-09-17-21-30-25.png

Another thing about nicks is that the original twtxt reference implementation converts nicks to all lowercase:

https://lyse.isobeef.org/tmp/screenshot-2025-09-17-21-20-39.png

You probably know this already, the original twtxt file format specification can be found here: https://twtxt.readthedocs.io/en/latest/user/twtxtfile.html

As for extensions, I don't know of anything outside of twtxt.dev that has actually been (partially) implemented. However, there is also the issue tracker of the official reference implementation. You might wanna dig through that. For example, there is an alternative suggestions of multiline messages: https://github.com/buckket/twtxt/issues/157
@zvava There would be only one hash for a message. Some to be defined magic date selects which hash to use. If the message creation timestamp is before this epoch, hash it with v1, otherwise hammer it through v2. Eventually, support for v1 could be dropped as nobody interacts with the old stuff anymore. But I'd keep it around in my client, because why not.

If users choose a client which supports the extensions, they don't have to mess around with v1 and v2 hashing, just like today.

As for the school of thought, personally, I'd prefer something else, too. I'm in camp location-based addressing, or whatever it is called. There more I think about it, a complete redesign of twtxt and its extensions would be necessary in my opinion. Retrofitting has its limits. Of course, this is much more work, though.
I'm happy to report, after the successful remix of System Of A Down with the Nooran Sisters from India in https://www.youtube.com/watch?v=mi106DZJhuQ I stumbled across something almost equally great from Pakistan, Nusrat Fateh Ali Khan: https://www.youtube.com/watch?v=aZYG-9usGPI It's a banger! The girls are unmatched, though.
What a crazy color temperature this yellow orange was in person! Sick lighting this evening: https://lyse.isobeef.org/abendhimmel-2025-09-15/

Yellow orange clouds
@movq Luckily, I had a grep -v git at the end, so my repo is still in working order. Phew. I wish find had grep-like --exclude-dir and --exclude options (or the include variants) instead of its own weird options that I never can remember and combine properly.
@movq Nice Jacob's ladder. ;-) I had to look up this term, I also found Zig Zag. What do you folks call this in your languages? In German, it's Hexentreppe (lit. Witch's Staircase).
@zvava It is just completely impossible to make v2 backwards-compatible with v1.

Well, breaking threads on edits is considered a feature by some people. I reckon the only approach to reasonably deal with that property is to carefully review messages before publishing them, thus delaying feed updates. Any typos etc., that have been discovered afterwards, are just left alone. That's what I and some others do. I only risk editing if the feed has been published very few seconds earlier. More than 20 seconds and I just ignore it. Works alright for the most part.
I corrupted my SQLite test database with sed -i s/… $(find …). Clearly, I found too many files. That's the signal to go to bed.
@zvava For the time being, just show both.
Great. Yet another messed up plain text e-mail part. The URL was actually HTML-escaped. Took me five attempts to figure this out, because of course it had to be several kilometers long. In fact, the e-mail stated: "Please do not be surprised that the link is particularly long. It contains your personal configuration."

A normal person is completely lost (that's why I got involved). Visting the broken URL opens a popup dialog suggesting to deactivate script blockers. Which I had already done upfront as a matter of prudence.

Fun bonus on top: The JWT in the link has identical iat (issued at) and exp (expiry) claims. The expiry is definitely not checked, it's well in the past.

Medical software just has to be horrible. It's a law.
Thanks, @thecanine. It's completely horizontal, I don't see any diagonals. Anyway, it's great art, happy drawing!
Hahaha, @bender, you're just the best with the words! :-D I love it.
@thecanine Yeah, what @bender said. That tail is sick. Is this dog crying, though? The vertically elongated eye looks a bit like a tear running down.
@bender Absolutely. My computer science teacher was really great and in a lot of aspects very similar. Especially combining the theoretical and practical parts. He's also the main reason I ended up where I am today. I'm very grateful to him. Mr. Burger, however, takes this on a whole new level.
We just had some lovely colors again: https://lyse.isobeef.org/abendhimmel-2025-09-12/

Sunset
Woooooaaaahh, that's bloody amazing! I wish I'd had a teacher like that.

English version: https://youtu.be/wi_q6IythMk
German version: https://youtu.be/2Lv1MMlFDBs
@kat The duck was in a darker spot, so my camera wasn't all that happy with the lighting. Upon further inspection, you're right, now that you pointed it out, I can see it too! The feathers do look like an oil painting. ;-)
@bender Sadly, it's super relevant. It's a really good sketch. I'm actually surprised you know this German series. :-)
@zvava Yeah, mentions are a great way to discover other feeds.

Regarding the "look at this, but I don't want to add anything at all", this never happened to me. Apparently, it seems to be a thing for others.
It was nice to start a walk in the woods with sunshine. The last times it was all soupy. It was quite windy, autumn is certainly here. Soon, the leaves will begin to turn. https://lyse.isobeef.org/waldspaziergang-2025-09-11/

Privacy-concerned duck in a creek
@movq Haha, that girl is good! :-D
@kat I reckon the original <details> need to have the open attribute set in order to expand it, so I cannot just define some custom CSS rules to do that in my browser.

But in regards to twtxt, my client won't hide anything in that realm anyway. :-) It's just more noise.
@kat Ta. The only good use for <details> is to collapse long logs in bug analysis reports. Other than that, I find it rather annoying to expand sections manually.

As for spoilers, personally, I don't care at all. Not the slightest bit. If there is something that I don't wanna read, I just stop reading. ¯\_(ツ)_/¯

But I've got the feeling that I've got an unpopular opinion on that matter. ;-)_
@bender I see, thanks. Well, I never found these warnings useful. To hide answers to conundrums or the like, ROT13ing or base64-encoding them is plenty sufficient.

Hahaha, I never heard of Poopgate before. :-D Poor passengers.
@zvava I never used any of the social media platforms, that's why I'm probably ignorant.

I don't understand the concept of a retwt. Just quote the (relevant) parts from whereever and comment on that. Or post a link instead of a quote. Sounds simple enough. :-) That's also has the benefit that it works with every source, no matter what. Since it's called retwt, I'd imagine this to only work (well) with whatever messages the system itself offers. But I could be wrong. What would be the benefit of having a dedicated message type or structure for "hey, look at that" messages in your opinion?

Hmm, what's a content warning?
@movq Fun fact, inhabitants of this town are nicknamed „Brandstifter“ (arsonists). In the 19th century, a firebug caused a number of big fires here.
@kat Ten stories or more are already very tall in my books. Not sure at which height I would start calling high rise buildings sky scrapers, but Wikipedia suggests around 150 meters, depending on region.

Oh, I just found https://upload.wikimedia.org/wikipedia/commons/f/f1/Pier_17_2018-03_jeh.jpg and this really does not look all that high. I thought that this would be at least 50 or 100 meters up. I was completely wrong. :-D