# 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=6652
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=6752
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=6552
@kat That sounds fun! I'm happy to read an article on how you did that. :-)
@kat That sounds fun! I'm happy to read an article on how you did that. :-)
@movq I hear you! I'd also love to forbid any use in military software (development). Even though I cannot imagine anything of my stuff ending up there.
@movq I hear you! I'd also love to forbid any use in military software (development). Even though I cannot imagine anything of my stuff ending up there.
@movq Das wär auch meine Vermutung. :-) Wir nennen sie hier Peterling.
@movq Das wär auch meine Vermutung. :-) Wir nennen sie hier Peterling.
Sooo many new spam feeds to mute in the twtxt.net discovery view. :-( The RSS/Atom to Twtxt feed bridge was a mistake, I believe. I guess I just have to abandon that altogether and rely on my subscriptions to interact with new feeds in order to discover legitimate new ones. Not sure if that works, sounds like a chicken-'n'-egg problem.
Sooo many new spam feeds to mute in the twtxt.net discovery view. :-( The RSS/Atom to Twtxt feed bridge was a mistake, I believe. I guess I just have to abandon that altogether and rely on my subscriptions to interact with new feeds in order to discover legitimate new ones. Not sure if that works, sounds like a chicken-'n'-egg problem.
@kat Oh, even a large one!
@kat Oh, even a large one!
@movq Wow, this is sick!
@movq Wow, this is sick!
@arne Ohh, sehr hübsch geworden!
@arne Ohh, sehr hübsch geworden!
@sorenpeter Cool, that animation is quite hypnotic. :-)
@sorenpeter Cool, that animation is quite hypnotic. :-)
@movq Regarding https://www.uninformativ.de/blog/postings/2025-05-21/0/POSTING-en.html: Hahaha, that's what I immediately thought, too! The pain of going back to CVS. :-D I used that back in school. Quickly after, I upgraded to SVN and even that was terrible in comparison to a modern VCS, such as git.

In any case, happy hacking!
@movq Regarding https://www.uninformativ.de/blog/postings/2025-05-21/0/POSTING-en.html: Hahaha, that's what I immediately thought, too! The pain of going back to CVS. :-D I used that back in school. Quickly after, I upgraded to SVN and even that was terrible in comparison to a modern VCS, such as git.

In any case, happy hacking!
@movq Zum Beispiel: https://www.youtube.com/watch?v=-unPs-NrVI0
@movq Zum Beispiel: https://www.youtube.com/watch?v=-unPs-NrVI0
@movq That's cool! Both of you can now form a house band. :-)
@movq That's cool! Both of you can now form a house band. :-)
@kat Ta! The dead end wasn't all that bad in my opinion. Personally, I really do like dirt paths and exploring. It was all dried up, so no muddy mess we had to walk through. More like climbing over thick branches that have been worked into the ground by harvesters or forwarders in the muddy winter. Rough terrain. My mate, on the other hand – whose idea it was to check out the real summit in the first place ;-) — wasn't all that pleased about the detour. Oh well. :-D
@kat Ta! The dead end wasn't all that bad in my opinion. Personally, I really do like dirt paths and exploring. It was all dried up, so no muddy mess we had to walk through. More like climbing over thick branches that have been worked into the ground by harvesters or forwarders in the muddy winter. Rough terrain. My mate, on the other hand – whose idea it was to check out the real summit in the first place ;-) — wasn't all that pleased about the detour. Oh well. :-D
@movq Das klingt ein wenig nach einem Johnny-Einschub zwischen zwei Liedern auf einer EAV-CD. :-D
@movq Das klingt ein wenig nach einem Johnny-Einschub zwischen zwei Liedern auf einer EAV-CD. :-D
@movq Yeah, that sounds pretty good!
@movq Yeah, that sounds pretty good!
@movq What a wonderful present! Crazy how time flies.
@movq What a wonderful present! Crazy how time flies.
@movq I'm glad you like that raven. :-) This is the original for when you get a screen as big as an entire wall one day: https://lyse.isobeef.org/abendhimmel-2025-05-16/01.JPG
@movq I'm glad you like that raven. :-) This is the original for when you get a screen as big as an entire wall one day: https://lyse.isobeef.org/abendhimmel-2025-05-16/01.JPG
@kat I only listened to you while going through my photos, so I did not pay very close attention. :-)

Since you have a proper server – haha, not just one – and hence are not limited, I suggest you learn a real programming language and don't waste your time with this PHP mess. It might have improved a wee bit since I was a kid, but it felt like some hacked together shit. The defaults also were questionable at best, it was easier to hold it wrong than right. This stands testament to bad design and is especially terrible from a security point of view.

You're right, programming is like any other craft. You only truly learn by actually doing it. And this just takes time. Very long time to master it. Or as close to as it gets. The more you know, the more you realize what else you don't know (yet). It's a never ending process. So, take it easy, don't get discouraged, happy hacking and enjoy the endeavor! :-)
@kat I only listened to you while going through my photos, so I did not pay very close attention. :-)

Since you have a proper server – haha, not just one – and hence are not limited, I suggest you learn a real programming language and don't waste your time with this PHP mess. It might have improved a wee bit since I was a kid, but it felt like some hacked together shit. The defaults also were questionable at best, it was easier to hold it wrong than right. This stands testament to bad design and is especially terrible from a security point of view.

You're right, programming is like any other craft. You only truly learn by actually doing it. And this just takes time. Very long time to master it. Or as close to as it gets. The more you know, the more you realize what else you don't know (yet). It's a never ending process. So, take it easy, don't get discouraged, happy hacking and enjoy the endeavor! :-)
We had sun, clouds, wind, rain and a whole lot of fun on our trip to the Wasserberg. We've been out seven hours in total, not bad at all for all those kilometers. We added on some detours to check out a pond I've been introduced by a mate a few years back.

After some (expensive) tucker at the Wasserberghaus, we tried to actually visit the summit this time. However, there's nothing to see, just a rough logging trail (46-49). That was a dead end, so we had to turn around. It was some nice exploring, but I reckon this was my first and last time up there. :-)

Wasserberg on the left, Fuchseck on the right

Unfortunately, we didn't go to the neighboring Fuchseck this time, only the Wasserberg with some extras.

https://lyse.isobeef.org/wanderung-auf-den-wasserberg-2025-05-18/
We had sun, clouds, wind, rain and a whole lot of fun on our trip to the Wasserberg. We've been out seven hours in total, not bad at all for all those kilometers. We added on some detours to check out a pond I've been introduced by a mate a few years back.

After some (expensive) tucker at the Wasserberghaus, we tried to actually visit the summit this time. However, there's nothing to see, just a rough logging trail (46-49). That was a dead end, so we had to turn around. It was some nice exploring, but I reckon this was my first and last time up there. :-)

Wasserberg on the left, Fuchseck on the right

Unfortunately, we didn't go to the neighboring Fuchseck this time, only the Wasserberg with some extras.

https://lyse.isobeef.org/wanderung-auf-den-wasserberg-2025-05-18/
@movq Wow! This giant Tux is just fucking amazing, I have to say. <3 Even a bricked Tux and a GNU!
@movq Wow! This giant Tux is just fucking amazing, I have to say. <3 Even a bricked Tux and a GNU!
@kat Yup, we got lucky. :-)
@kat Yup, we got lucky. :-)
@thecanine Things in general just sitting around collect dust. Granted, plush is an even worse dust magnet. We badly need some anti-dust material. ;-)

Nice, did you print this keychain yourself?
@thecanine Things in general just sitting around collect dust. Granted, plush is an even worse dust magnet. We badly need some anti-dust material. ;-)

Nice, did you print this keychain yourself?
@bender Hahahaha! :-D
@bender Hahahaha! :-D
Once again, we had some very beautiful colors this evening: https://lyse.isobeef.org/abendhimmel-2025-05-16/

Sunset
Once again, we had some very beautiful colors this evening: https://lyse.isobeef.org/abendhimmel-2025-05-16/

Sunset
@movq Oh, okay. Too bad. :-D Or luckily, thinking of all the dust they collect.
@movq Oh, okay. Too bad. :-D Or luckily, thinking of all the dust they collect.
@bender Just to save some unnecessary und useless network traffic. :-) So that I can download more 1080p videos!@1
@bender Just to save some unnecessary und useless network traffic. :-) So that I can download more 1080p videos!@1
It's this time again to archive another quarter. I should do this probably monthly to keep the main feed small.
It's this time again to archive another quarter. I should do this probably monthly to keep the main feed small.
@movq @prologic Ta!
@movq @prologic Ta!
@movq Woah! :-) Is/was that your room?
@movq Woah! :-) Is/was that your room?
@bender Ta! :-)
@bender Ta! :-)
@movq Oh, made in Germany explains the prices. Surprisingly, buying via the reseller is *much* cheaper than purchasing it from the manufacturer directly. WTF. O_o
@movq Oh, made in Germany explains the prices. Surprisingly, buying via the reseller is *much* cheaper than purchasing it from the manufacturer directly. WTF. O_o
@movq Yeah, we're pattern matching machines. :-) Only the trans5c preview looks like a brain to me. :-) Trans4 is a bacterium.
@movq Yeah, we're pattern matching machines. :-) Only the trans5c preview looks like a brain to me. :-) Trans4 is a bacterium.
@movq They already do:

> […] These changes will apply to operations like cloning repositories over HTTPS […]

On a positive note: Finally time to get rid of as many Go dependencies as possible. :-)
@movq They already do:

> […] These changes will apply to operations like cloning repositories over HTTPS […]

On a positive note: Finally time to get rid of as many Go dependencies as possible. :-)
@movq @kat Just have a beeswax candle ready for sniffing. :-)
@movq @kat Just have a beeswax candle ready for sniffing. :-)
@movq There are some real bangers in your collection! Aro3, the octopus, would look great on a wall.
@movq There are some real bangers in your collection! Aro3, the octopus, would look great on a wall.
@movq A quick search revealed https://www.tux-onlineshop.de/plueschtiere next door to you, but these tuxes look rather ugly. Also, shipping to the US&A is 60 bucks. I bet @kat's sister can do better. :-)
@movq A quick search revealed https://www.tux-onlineshop.de/plueschtiere next door to you, but these tuxes look rather ugly. Also, shipping to the US&A is 60 bucks. I bet @kat's sister can do better. :-)
@movq Has that hashing change even be accepted? :-?
@movq Has that hashing change even be accepted? :-?
Nice European greenfinch: https://lyse.isobeef.org/gruenfink-2025-05-10/

Nice European greenfinch: https://lyse.isobeef.org/gruenfink-2025-05-10/

@kat You don't need to change the directory first in line 11, you can just create the directory, that's sufficient since you're having an absolute path.

The echo in line 13 is useless, you can simplify this to: newdir="$WD/$now" If you reversed this line with the previous one, you could make use of the variable in the directory creation: mkdir "$newdir".

In line 16, pull the directory change out of the loop upfront. The loop body doesn't modify the working directory, so no need to reset it with each cycle. In fact, you could even spare the cd altogether when you simply tell find where to look: find "$basedir" -type f….

I didn't try it, but if I read the manpage correctly, you should be able to simplify line 19 as well:

> -C Change to DIR before performing any operations. This option is order-sensitive, i.e. it affects all options that follow.

Hence, remove the cd and put the -C "$WD" as the first argument to tar. Again, I didn't try it. Proceed with caution.

Finally, you don't need to specify the full path to rm in line 21. I bet, /bin is in your PATH. When you removed the previous cd from my last suggestion, the relative path that follows won't work anymore. So, just use the absolute path that you already have in a variable: rm -rf "$newdir"

I hope you find this tiny review a wee bit useful. :-)
@kat You don't need to change the directory first in line 11, you can just create the directory, that's sufficient since you're having an absolute path.

The echo in line 13 is useless, you can simplify this to: newdir="$WD/$now" If you reversed this line with the previous one, you could make use of the variable in the directory creation: mkdir "$newdir".

In line 16, pull the directory change out of the loop upfront. The loop body doesn't modify the working directory, so no need to reset it with each cycle. In fact, you could even spare the cd altogether when you simply tell find where to look: find "$basedir" -type f….

I didn't try it, but if I read the manpage correctly, you should be able to simplify line 19 as well:

> -C Change to DIR before performing any operations. This option is order-sensitive, i.e. it affects all options that follow.

Hence, remove the cd and put the -C "$WD" as the first argument to tar. Again, I didn't try it. Proceed with caution.

Finally, you don't need to specify the full path to rm in line 21. I bet, /bin is in your PATH. When you removed the previous cd from my last suggestion, the relative path that follows won't work anymore. So, just use the absolute path that you already have in a variable: rm -rf "$newdir"

I hope you find this tiny review a wee bit useful. :-)
@kat @movq @prologic Yeah, I'm also having them in my repertoire for ages, so I'm used to the weird command line options. From today's perspective, they're not consistent with the rest of the typical shell utilities, that's for sure.

Regarding find | grep foo, I recommend find -name '*foo*', prologic. Also, I regularly use -type d and -type f to find directories or files.
@kat @movq @prologic Yeah, I'm also having them in my repertoire for ages, so I'm used to the weird command line options. From today's perspective, they're not consistent with the rest of the typical shell utilities, that's for sure.

Regarding find | grep foo, I recommend find -name '*foo*', prologic. Also, I regularly use -type d and -type f to find directories or files.
@kat Nothing wrong with handwritten HTML. That's often superior to generated stuff I believe. :-)
@kat Nothing wrong with handwritten HTML. That's often superior to generated stuff I believe. :-)
Thanks to @kat and her shelf I finally spent several hours in the woodshop. I wanted to build two drawers for the workbench and thought that I will complete this project in no time. I've been so wrong again. ;-)

I didn't draw any plans, just measured a few times and then went to cutting a bunch of particle board leftovers at the table saw. I routed rebates on the sides, fronts and backs to lap the boxes and sink in the bottom. It turned out that having no plans was a stupid idea. I cut exactly on the lines as I calculated and measured, however, the math in my head fell apart when it eventually met reality. The bottoms are too short, so I gotta glue on some strips. Also, with the longer fronts, the sides won't work either, I have to fix them as well. :-D

Finally, the lid of my cyclone bucket broke when the negative pressure got too large. Oh well. It was just an old wood glue bucket, I've got another empty one, so I can use that lid but strengthen it first with some plywood. Something for future Lyse to deal with.

All in all, it was still good fun. Wood (haha) do it again, but at least with some sketches on paper. ;-)
Thanks to @kat and her shelf I finally spent several hours in the woodshop. I wanted to build two drawers for the workbench and thought that I will complete this project in no time. I've been so wrong again. ;-)

I didn't draw any plans, just measured a few times and then went to cutting a bunch of particle board leftovers at the table saw. I routed rebates on the sides, fronts and backs to lap the boxes and sink in the bottom. It turned out that having no plans was a stupid idea. I cut exactly on the lines as I calculated and measured, however, the math in my head fell apart when it eventually met reality. The bottoms are too short, so I gotta glue on some strips. Also, with the longer fronts, the sides won't work either, I have to fix them as well. :-D

Finally, the lid of my cyclone bucket broke when the negative pressure got too large. Oh well. It was just an old wood glue bucket, I've got another empty one, so I can use that lid but strengthen it first with some plywood. Something for future Lyse to deal with.

All in all, it was still good fun. Wood (haha) do it again, but at least with some sketches on paper. ;-)
@anth Congrats, that's pretty cool! Quite some time, I'm impressed.

@prologic You'll sometimes find the "Creation Date" in whois. Our domain was registered in 2009. Woah. That's also been a while, crazy.
@anth Congrats, that's pretty cool! Quite some time, I'm impressed.

@prologic You'll sometimes find the "Creation Date" in whois. Our domain was registered in 2009. Woah. That's also been a while, crazy.
@movq Yup, that's Mr. Compiler Explorer. :-)
@movq Yup, that's Mr. Compiler Explorer. :-)
@prologic There have always been and there will always be people who have absolutely no clue what they're doing. I've been 100% one of them when I started. Guaranteed, heaps of new SQL injections are born every single day, numbers rising.

That doesn't justify all the WAF crap in the first place, though. In my opinion it's just a filthy plaster applied to an injected wound. The software itself must be secure. Otherwise, don't put that shit on the internet. Probably not even operate it at all. Nowhere. Fix it or throw it in the bin.
@prologic There have always been and there will always be people who have absolutely no clue what they're doing. I've been 100% one of them when I started. Guaranteed, heaps of new SQL injections are born every single day, numbers rising.

That doesn't justify all the WAF crap in the first place, though. In my opinion it's just a filthy plaster applied to an injected wound. The software itself must be secure. Otherwise, don't put that shit on the internet. Probably not even operate it at all. Nowhere. Fix it or throw it in the bin.
@kat @bender Hahaha! I can't recall either, maybe even just a chisel or a knive? I'm not terribly good at it, not even close. It's just fun. And I do it all too rarely. :-/
@kat @bender Hahaha! I can't recall either, maybe even just a chisel or a knive? I'm not terribly good at it, not even close. It's just fun. And I do it all too rarely. :-/
@kat That's cool. Also, looks like a fun woodworking project in case you exceed the hundred slots. :-) The plywood lap joints might be quite repetetive, but gang cutting them with a story stick or some other fixture shouldn't be too terrible.
@kat That's cool. Also, looks like a fun woodworking project in case you exceed the hundred slots. :-) The plywood lap joints might be quite repetetive, but gang cutting them with a story stick or some other fixture shouldn't be too terrible.
@movq Their gold teeth collection? ;-)
@movq Their gold teeth collection? ;-)
What do you think I just learned about in this awesome Computerphile video with Matt Godbolt called "Subroutines in Low Level Code"? https://www.youtube.com/watch?v=1su3lAh-k4o

Here's the plot twist, the phrase "till the cows come home". Hahaha, I never heard this before, but I love it! It's always interesting to me to hear English sayings. Sometimes we have the same in German, sometimes – like in this case – entirely different ones. It's fascinating that even though one hasn't come across proverbs, it's typically still clear from the context what's meant.

Yep, some unexpected language stuff. ;-)
What do you think I just learned about in this awesome Computerphile video with Matt Godbolt called "Subroutines in Low Level Code"? https://www.youtube.com/watch?v=1su3lAh-k4o

Here's the plot twist, the phrase "till the cows come home". Hahaha, I never heard this before, but I love it! It's always interesting to me to hear English sayings. Sometimes we have the same in German, sometimes – like in this case – entirely different ones. It's fascinating that even though one hasn't come across proverbs, it's typically still clear from the context what's meant.

Yep, some unexpected language stuff. ;-)
Thanks, @movq! That seems to be much easier. It's already implemented in the Python docs as examples of recvmsg(…) and sendmsg(…):

* https://docs.python.org/3/library/socket.html#socket.socket.recvmsg
* https://docs.python.org/3/library/socket.html#socket.socket.sendmsg

I looked at them sooo many times in order to figure out why my SCM_CREDENTIALS sending code didn't work. :-D
Thanks, @movq! That seems to be much easier. It's already implemented in the Python docs as examples of recvmsg(…) and sendmsg(…):

* https://docs.python.org/3/library/socket.html#socket.socket.recvmsg
* https://docs.python.org/3/library/socket.html#socket.socket.sendmsg

I looked at them sooo many times in order to figure out why my SCM_CREDENTIALS sending code didn't work. :-D
Yesterday, I had a look at Unix domain sockets and how to obtain the caller information: https://lyse.isobeef.org/caller-information-via-unix-domain-sockets/
Yesterday, I had a look at Unix domain sockets and how to obtain the caller information: https://lyse.isobeef.org/caller-information-via-unix-domain-sockets/