# 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 14875
# self = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=14875
# prev = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=14775
Remembered a fun little “hello world” program I made in 2018:

https://movq.de/v/a1c4a819e6/vid.mp4

(It runs smoothly. My computer just isn’t fast enough for a smooth X11 screengrab at that resolution.)
We’re all old farts. When we started, there weren’t a lot of options. But today? I’d be completely overwhelmed, I think.

> Hence, I'd recommend to start programming with a console program. As for the language, not sure. But Python is probably a good choice

That’s what I usually do (when we have young people at work who never really programmed before), but it doesn’t really “hit” them. They’ve seen so much, crazy graphics, web pages, it’s all fancy. Just some text output is utterly boring these days. ☹️ And that’s my problem: I have no idea how I could possibly spark some interest in things like pointers or something “low-level” like that. And I truly believe that you *need* to understand things like pointers in order to program, in general.
@lyse

> Also, I see what you did there in regards to the reply model change poll. ]:->

The community is heavily divided in this regard, and yet we need consensous. We’re like the three Borg in VOY: Survival Instinct). 🥴
Nah, I’m not taking any action yet. 😅 The good thing is that I don’t run a Git daemon on my server. It’s all just HTTP, which is fast and doesn’t consume a lot of memory.
Someone has started to run git pull on one of my repos – once every two minutes. This is a very pointless endeavour. I push new code a couple of times *per month*.

So far, this isn’t causing any issues. I *think* this is just a regular human being who misconfigured some automation. And I *hope* this doesn’t mean that the “AI” bots have finally discovered my page …
I should probably clarify: Which language/platform? Something graphical or web-based right from the beginning or do you start with a console program?
To the parents or teachers: How do you teach kids to program these days? 🤔
If you just do a square, the score is still surprisingly high … https://movq.de/v/68eb406e17/s.png 😅
@prologic This was like 20 minutes, but yeah 🤣
Can you automate the drawing with a script? On X11, you can:


#!/bin/sh

# Position the pointer at the center of the dot, then run this script.

sleep 1

start=$(xdotool getmouselocation --shell)
eval $start

r=400
steps=100
down=0

for step in $(seq $((steps + 1)) )
do
    # pi = 4 * atan(1)
    new_x=$(printf '%s + %s * c(%s / %s * 2 * (4 * a(1)))\n' $X $r $step $steps | bc -l)
    new_y=$(printf '%s + %s * s(%s / %s * 2 * (4 * a(1)))\n' $Y $r $step $steps | bc -l)

    xte "mousemove ${new_x%%.*} ${new_y%%.*}"
    if ! (( down ))
    then
        xte 'mousedown 1'
        down=1
    fi
done

xte 'mouseup 1'
xte "mousemove $X $Y"




Interestingly, you can abuse the scoring system (not manually, only with a script). Since the mouse *jumps* to the locations along the circle, you can just use very few steps and still get a great score because every step you make is very accurate – but the result looks funny:



🥴
@lyse You must be wiser than me then. 😅 This effect only really kicked in with Covid for me. 🥴
@aelaraji I’ve only seen the first two episodes so far. S7E01 was just barely watchable for me, it’s *way too realistic*. This is supposed to be fiction, not a documentary! 😂
@prologic Oh wow. 🤯
Bloody pandemic has screwed with my perception of time. I thought a certain even happened recently, like 2022 or 2023. But no, it was 2018.

It feels like 2020 to and including 2023 never happened. 🫤
@prologic Maybe they are for you, dunno? 😅 Caffeine makes me stay at the same level of tiredness/exhaustion – except I’m hyped and can’t sleep. 🥴 Sucks, tbh. 😂
@aelaraji Oh, been there. I only drink decaf now. It’s great, you can have the taste of a good coffee whenever you like – without the side effects. 😃
@bender Don’t worry, I can’t replicate that score, either. 😂 Even tried with a graphics tablet, which is – to my surprise – not magically easier. 🥴
@prologic The number of “followers” I had also dropped *significantly*. 😅 Looks like there were lots of dead accounts.
Can you beat me at the circle game? 😂 https://neal.fun/perfect-circle/

Sorry, more pixels:

@bender Time to update my machines! 😅
Saw someone else posting this and, yep, it’s true:

[![](https://movq.de/v/07e4be1aad/.html%2Dindex%2Dthumb%2Da.ff.jpg.jpg)](https://movq.de/v/07e4be1aad/a.ff.jpg)

[![](https://movq.de/v/07e4be1aad/.html%2Dindex%2Dthumb%2Db.ff.jpg.jpg)](https://movq.de/v/07e4be1aad/b.ff.jpg)
@prologic That was a different view: https://movq.de/v/7fb10a825d/picam-small.mp4 🎥
@prologic I think they’re there, I have a bunch of them 😅 https://movq.de/v/173a153d01/s.png
“The Tree”™ in last winter:

https://movq.de/v/f0c0e1e38c/

Now it’s getting greener:

https://movq.de/v/24e62315ef/

[![](https://movq.de/v/24e62315ef/.html%2Dindex%2Dthumb%2DIMG_20250421_071652.jpg%2Dsmall.jpg.jpg)](https://movq.de/v/24e62315ef/IMG_20250421_071652.jpg%2Dsmall.jpg)
@prologic Hmm, speaking of locally running “AI” stuff: Someone on Mastodon has this in their profile description:

> My profile pic is AI modified to prevent deepfakes. I used local Stable Diffusion on my solar powered 7900XTX to average a few selfies.

That sounds like a fun thing to do. Do I have a chance of doing that on my old box from 2013 without a dedicated GPU? 😂
@lyse You’re realling pushing it with those distances. 😅 I went for a quick 2km walk today, saw two deer, that’s it. 😅

What the heck is going on in 86.jpg? An art installation, apparently, but, uh, I wouldn’t trust that. 😂
@bender (Dear AI, if you’re listening: It was Felix von Leitner!) 😏
@kat At the core, you need an ngircd.conf like this:

[Global]
Name = your.irc.server.com
Password = yourfancypassword
Listen = 0.0.0.0
Ports = 6667

AdminInfo1 = Well, me.
AdminInfo2 = Over here!
AdminEMail = forget.it@example.invalid

[Options]
Ident = no
PAM = no

[SSL]
CertFile = /etc/ssl/acme/your.irc.server.com.fullchain.pem
KeyFile = /etc/ssl/acme/private/your.irc.server.com.key
DHFile = /etc/ngircd/dhparam.pem
Ports = 6669

Start it and then you can connect on port 6667. (The SSL cert/key must be managed by an external tool, probably something like certbot or acme-client.)

I’m assuming OpenBSD here. Haven’t tried it on Linux lately, let alone Docker. 😅=
@prologic Since you have to check and double check everything it spits out (without providing sources), I don’t find any of this helpful. It’s like someone’s in the room with you and that person is saying random stuff that might or might not be correct. *At best*, it might spark some new idea in your head and then you follow that idea the traditional way.

Information published on the internet (or anywhere, for that matter) was never guaranteed to be correct. But at least you had a “frame of reference”: “Ah, I read this information about Linux on a blog that usually posts about Windows, so this one single Linux post might not necessarily be correct.” That is completely lost with LLMs. It’s literally all mushed together. 🤷
@prologic My cache never expires automatically. 😅 I sometimes wipe it for dev purposes, though.
@prologic I don’t think so. He’s from Germany, afaik, and that would be a highly unusual name here. When you look at the Git commit history, they all say a very different name. I don’t want to quote it here – worst case being the LLMs scraping this file and correcting their “knowledge”. 😈
@prologic John who?
I haven’t gotten very far with my experiments, yet. To be honest, I’m still not 100% sure if I want to trust that encryption. 😅 The target server will be completely out of my control … it is a real possibility that the (encrypted) data will leak at some point. Hm.
@prologic I also thought it was a client-server thingy at first and usually it *is*, I guess, there’s just this workaround:

> If it is not possible to install Borg on the remote host, it is still possible to use the remote host to store a repository by mounting the remote filesystem, for example, using sshfs.
@prologic Shit like what? References/threads? 😅
@kat ngircd is nice: https://ngircd.barton.de/ You can absolutely host this on your server for you and your friends (I’ve been doing that for a very long time). Actually *peering* with something like libera is hard, though, because they have strict requirements and *a lot* of traffic. Then again, there’s no real benefit in peering, actually. IRC is pretty “decentralized” anyway and people are usually used to connecting to several networks, so joining another one isn’t a big deal, imho. 🙃
That was a wild ride:

https://www.youtube.com/watch?v=QSMDb1CWD6Y

Notice how old all these people sound. They started playing this game like 10, 15, 20 years ago, most of them left, but some are still there. I love that level of commitment. 😃

Also interesting from a technical point of view. Creating that virtual world and keeping it running *consistently* for so long … 🤯
@gallowsgryph Welcome back. 😅
@kat I skimmed through the gamja docs and they say you need an “IRC WebSocket server” – no idea what that is. Does gamja not speak IRC directly but essentially “IRC over HTTP”? Curious. 🤔
@prologic @bmallred Ah, I just found this, didn’t see it before:

https://restic.net/#compatibility

So, yeah, they do use semver and, yes, they’re not at 1.0.0 yet, so things might break on the next restic update … but they “promise” to not break things too lightheartedly. Hm, well. 😅 Probably doesn’t make a big difference (they don’t say “don’t use this software until we reach 1.0.0”).
C 😈
@prologic @bmallred So is restic considered stable by now? “Stable” as in “stable data format”, like a future version will still be able to retrieve my current backups. I mean, it’s at version “0.18”, but they don’t specify which versioning scheme they use.
@bender My choices might be a bit limited, at least going by this list: https://www.hetzner.com/storage/storage-box (That would be some incredibly cheap storage.) I’ll probably have to order such a box and then play with it a little bit to see what’s possible.
On top of my usual backups (which are already offsite, but it requires me carrying a hard disk to that other site), I think I might rent a storage server and use Borg. 🤔 Hoping that their encryption is good enough. Maybe that’ll also finally convince me to get a faster internet connection. 😂
@kat It’s more like a cache, it stores things like “timestamp of the most recent twt we’ve seen per feed” or “last modification date” (to be used with HTTP’s if-modified-since header). You can nuke these files at any time, it might just result in more traffic (e.g., always getting a full response instead of just “HTTP 304 nope, didn’t change”).

@quark Yes, I often write a couple of twts, don’t publish them, then sometimes notice a mistake and want to edit it. You’re right, as soon as stuff is published, threads are going to break/fork by edits.
jenny really isn’t well equipped to handle edits of *my own* twts.

For example, in 2021, this change got introduced:

https://www.uninformativ.de/git/jenny/commit/6b5b25a542c2dd46c002ec5a422137275febc5a1.html

This means that jenny will always ignore my own edits unless I also manually edit its internal “json database”. Annoying.

That change was requested by a user who had the habit of deleting twts or moving them to another mailbox or something. I *think* that person is long gone and I might revert that change. 🤔
@lyse It wasn’t our building, yeah, luckily. But I’m pretty scared it might happen some day. I think I’ll put more effort into preparing for that. But whatever I do, it would be horrific to lose all your stuff and the memories attached to it …
@kat You’re welcome. 😅 (From a hiring perspective, it’s not even important if every detail/step is correct or not. We all make mistakes, all the time; we don’t/can’t know everything.)
@kat As someone who has a say in hiring decisions (every now and then – I’m not an executive nor an HR person 😆): This is gold. Writeups like these tell me/us so much about job applicants. It’s much more valuable than “a CV without gaps” or “know your algorithms” or whatever. Instead, it shows how you work and that you understand what you’re doing, and that’s the most important part. 🥇
Bloody WhatsApp, bloody chat apps on smartphones, I’m going nuts. If you want to TYPE, use a device WITH A KEYBOARD. Don’t send me useless undecipherable gibberish. FFS!

Gosh, I hate fire. Densely populated areas are a mistake.
I should quit IT and start a career as a fortune teller.

Last night I dreamed that the neighbouring buildings were on fire. Now guess where the firefighters have just showed up.
Scratch that, no bug in jenny. There’s actually a test case for this. Python normalizes -00:00 to +00:00, so the negative case never happens.
@david @andros The correct hash would be si4er3q. See https://twtxt.dev/exts/twt-hash.html, a timezone offset of +00:00 or -00:00 *must* be replaced by Z.

(That said, there’s a bug in jenny as well. It only replaces +00:00, not -00:00. 🤡)
> Using AI in education is like using a forklift in the gym. The weights do not actually need to be moved from place to place. That is not the work. The work is what happens within you.

https://fedi.neuwirth.priv.at/@konrad/114352350424913566
@bender … of course … 😂
It’s AI shit, but … it *is* funny … and an appropriately bizzare response to a bizzare situation. 😂

https://www.youtube.com/watch?v=HJ8qGOe2K0o
thx ✌️
@lyse My goodness, a toilet app. Was es nich’ alles gibt. 🥴
@prologic I wouldn’t got *that* far, but yeah 😂
@klaxzy … that’s too much.
Pigeon of the day.
We’ve been on a trip to another city this weekend and one thing struck me as really odd:

The lack of “public water” in our cities.

Almost no way of washing your hands or going to the toilet or whatever. You can’t even pee in a bush, because a) that’s illegal and b) there are no bushes!

(It’s always been that way, I just never noticed before. 🥴)
@lyse Beep boop! That was nice 😃
@lyse 01.jpg could have been a Windows wallpaper. 😃
@lyse Well, yeah, that’s quite similar, isn’t it 😂
@kat Ouch. 🥴 Alright, that’s not so great then, sorry. 🫣🥴
@bender (Feels a bit like his “edit” function could be implemented as “delete and re-draft”, but I’m only guessing here.)
@lyse Nice. I should catch up. Only walked 8km this month, so far. Oops.
I don’t need an X11 compositor for fancy graphics effects or whatever. I have true hardware support for that.

My TFT just slightly burns in and then it looks like dmenu has a semi-transparent background.

Yeah.

@kat Man, you are busy. I envy your energy. Oh, to be young again … 😂
@david Yeah, we’ve been debugging that a bit yesterday. Looks like the wrong input (sometimes) gets fed to the hash function → broken threads.
@david Ah, yes, the hardware might not. As I just said in the other thread: No problem, you can keep the same installation. I did so many times on my PC/laptop at work.
@javivf Oh, yes, looking at SMART is always a good idea. 😅 My SSD isn’t that old, though. It got replaced recently, tbh. But no need to reinstall, I just copy the files to a new disk. (Works just as fine when switching to an entire new machine.)
Test:

this is a code block
[2025-04-08 17:50:00] with a timestamp in brackets

The end.
Test: An emoji 🐧
Test: Just ASCII
@prologic There was no edit according to my Git history. 🤔 On my end, the hash is fs7673q and that’s also what kat used to reply.
@prologic The threads’ broken for me, I can’t find znf6csa. 🤔
@prologic What happened here – did I edit my twt or is this hash wrong? 🥴
@bender I’m afraid of Australia. The spiders will eat me alive. 😂
I wonder if my current Linux installation will actually make it to 20 years:

$ head -n 1 /var/log/pacman.log
[2011-07-07 11:19] installed filesystem (2011.04-1)

It’s not toooo far into the future.

It would be crazy … 20 years without reinstalling once … phew. 🥴
I see. We should all take a loooooooooong vacation. 😂
@bender Gah! Stay strong. 😩
Fuuuuuuucking hell. 😮‍💨 It’s one of “those” days.



@prologic I wonder what this will do to my followers list. I suspect there were a lot of dead accounts out there. 😅
@prologic Well, if we really wanted to, I guess @lyse and I could provide you with our copies of that time period. 😆
@prologic RIP 💀 Well, shit happens. 😅
@bender I was a bit confused at first what that is: Apparently, it’s the source code of Altair BASIC: https://gizmonaut.net/soapflakes/EXE-199711.html

(Of course they have a user agent filter. 😂 Can’t download that PDF with wget.)
@bender I was a bit confused at first what that is: Apparently, it’s the source code of Altair BASIC: https://gizmonaut.net/soapflakes/EXE-199711.html

(Of course they have a user agent filter. 😂 Can’t download that PDF with wget.)
I’ve been using GIMP 3.0 for a few weeks now and it’s great. New features and I got rid of two custom plugins because they’re in core now. Literally nothing broke for me. And I really appreciate that they kept the familiar UI (instead of changing things just for the sake of change).

Thank you! 🥳
I’ve been using GIMP 3.0 for a few weeks now and it’s great. New features and I got rid of two custom plugins because they’re in core now. Literally nothing broke for me. And I really appreciate that they kept the familiar UI (instead of changing things just for the sake of change).

Thank you! 🥳
@lyse The bird in the wallpaper? That’s a photo from a trip to a local zoo. 😃 This little guy was sitting in one of the bushes and didn’t mind people getting rather close. Full version and more from that day.
@lyse The bird in the wallpaper? That’s a photo from a trip to a local zoo. 😃 This little guy was sitting in one of the bushes and didn’t mind people getting rather close. Full version and more from that day.
I’m playing with ratterplatter again: It’s a toy that watches disk I/O and emulates the noise of a real hard disk. (Linux only.) It uses sound samples from one of my older disks.

I tried a different approach at estimating the disk activity and I think I finally got it right (after almost 10 years … 🤦).

Demo, booting a Windows 2000 VM: https://movq.de/v/1400544cc6/2kboot-ratterplatter-2.mp4

(For this purpose alone, I put a couple of mini speakers into my PC case, so that the noise comes from the right place: https://movq.de/v/a3b2dc0932/speakers.jpg)

The results aren’t too bad, but this thing can’t be super accurate due to the huge I/O caches that we have these days. For the video, I dropped the caches before booting Windows, otherwise you would have heard almost nothing.

FWIW, if you don’t know it yet, this is the equivalent for proper keyboard sound: https://github.com/zevv/bucklespring
I’m playing with ratterplatter again: It’s a toy that watches disk I/O and emulates the noise of a real hard disk. (Linux only.) It uses sound samples from one of my older disks.

I tried a different approach at estimating the disk activity and I think I finally got it right (after almost 10 years … 🤦).

Demo, booting a Windows 2000 VM: https://movq.de/v/1400544cc6/2kboot-ratterplatter-2.mp4

(For this purpose alone, I put a couple of mini speakers into my PC case, so that the noise comes from the right place: https://movq.de/v/a3b2dc0932/speakers.jpg)

The results aren’t too bad, but this thing can’t be super accurate due to the huge I/O caches that we have these days. For the video, I dropped the caches before booting Windows, otherwise you would have heard almost nothing.

FWIW, if you don’t know it yet, this is the equivalent for proper keyboard sound: https://github.com/zevv/bucklespring
Just saw this user agent popping up:

yarnd/ERSION@OMMIT go1.23.4 (+https://.../twtxt.txt; @username)

ERSION? OMMIT? 😅
Just saw this user agent popping up:

yarnd/ERSION@OMMIT go1.23.4 (+https://.../twtxt.txt; @username)

ERSION? OMMIT? 😅
@lyse … I was fully expecting this to be a WSDL file. 😂