# 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 15506
# self = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=15006
# next = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=15106
# prev = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=14906
@quark I’ll translate “desert rat” as “Wüstenmaus”, which is kind of cute, and I’ll pretend that you just didn’t call your partner a rat. 😂
@kat Off-topic areas are always a good idea. :-) Web forums often had those. And web forums are actually what I had in mind, @bender. 😅 (While I do have a certain nostalgia for it *now*, Usenet has always been a bit weird to me. Can’t really explain why.)
@kat Off-topic areas are always a good idea. :-) Web forums often had those. And web forums are actually what I had in mind, @bender. 😅 (While I do have a certain nostalgia for it *now*, Usenet has always been a bit weird to me. Can’t really explain why.)
So, the “AI” bots have reached my website. Looks like they’re just slowly crawling everything at the moment – no DDoS-like attack yet. I wonder if that has something to do with my website being 100% static HTML. There are no GET parameters they can tweak and, at the end of the day, there’s not *that much* data on my server anyway … And maybe they have no idea what stagit is, so it doesn’t trigger “standard behavior”, like “this is a Gitea instance, let’s crawl this like crazy!”?
So, the “AI” bots have reached my website. Looks like they’re just slowly crawling everything at the moment – no DDoS-like attack yet. I wonder if that has something to do with my website being 100% static HTML. There are no GET parameters they can tweak and, at the end of the day, there’s not *that much* data on my server anyway … And maybe they have no idea what stagit is, so it doesn’t trigger “standard behavior”, like “this is a Gitea instance, let’s crawl this like crazy!”?
@bender Baaaaaah 😂

These are ideal working conditions:

https://movq.de/v/c0fb720543/server.mp4
@bender Baaaaaah 😂

These are ideal working conditions:

https://movq.de/v/c0fb720543/server.mp4
Confession:

I’ve never found microblogging like twtxt or the Fediverse or any other “modern” social media to be truly fulfilling/satisfying.

The reason is that it is focused so much on *people*. You follow this or that person, everybody spends time making a nice profile page, the posts are all very “ego-centric”. Seriously, it feels like everybody is on an ego-trip all the time (this is much worse on the Fediverse, not so much here on twtxt).

I miss the days of *topic-based* forums/groups. A Linux forum here, a forum about programming there, another one about a certain game. Stuff like that. That was really great – and it didn’t even suffer from the need to federate.

Sadly, most of these forums are dead now. Especially the nerds spend a lot of time on the Fediverse now and have abandoned forums almost completely.

On Mastodon, you can follow hashtags, which somewhat emulates a topic-based experience. But it’s not that great and the protocol isn’t meant to be used that way (just read the snac2 docs on this issue). And the concept of “likes” has eliminated lots of the actual user interaction. ☹️
Confession:

I’ve never found microblogging like twtxt or the Fediverse or any other “modern” social media to be truly fulfilling/satisfying.

The reason is that it is focused so much on *people*. You follow this or that person, everybody spends time making a nice profile page, the posts are all very “ego-centric”. Seriously, it feels like everybody is on an ego-trip all the time (this is much worse on the Fediverse, not so much here on twtxt).

I miss the days of *topic-based* forums/groups. A Linux forum here, a forum about programming there, another one about a certain game. Stuff like that. That was really great – and it didn’t even suffer from the need to federate.

Sadly, most of these forums are dead now. Especially the nerds spend a lot of time on the Fediverse now and have abandoned forums almost completely.

On Mastodon, you can follow hashtags, which somewhat emulates a topic-based experience. But it’s not that great and the protocol isn’t meant to be used that way (just read the snac2 docs on this issue). And the concept of “likes” has eliminated lots of the actual user interaction. ☹️
I’m keeping this color scheme on my laptop for now:

I’m keeping this color scheme on my laptop for now:

@andros You know, I’d really love to see how/if location-based addressing works in practice. I might fork jenny to judy and run both things in parallel for a while … 🤔
@andros You know, I’d really love to see how/if location-based addressing works in practice. I might fork jenny to judy and run both things in parallel for a while … 🤔
So, we’re at roughly 30°C now and my brain is in lala land. 🥵☹️
So, we’re at roughly 30°C now and my brain is in lala land. 🥵☹️
@bender Saw it this morning and I was like “say what now”. 😂 I certainly can’t beat that. 😂

(Also, cute name. The “-le” suffix is a German diminutive, so it means “little OS”. 😃)
@bender Saw it this morning and I was like “say what now”. 😂 I certainly can’t beat that. 😂

(Also, cute name. The “-le” suffix is a German diminutive, so it means “little OS”. 😃)
@kat Whoop, whoop! Congrats 🥳
@kat Whoop, whoop! Congrats 🥳
@lyse Kind of, but on the other hand: This twt right here refers to 3rvya6q and *your* feed, but your feed certainly does not include that particular twt (it comes from *my* feed).

But my proposal probably isn’t very helpful, either. We have this flat conversation model, so … this twt right here, what should it refer to? Your twt? My root twt? I don’t know.

@prologic Don’t include this just yet. I need to think about this some more (or drop the idea).
@lyse Kind of, but on the other hand: This twt right here refers to 3rvya6q and *your* feed, but your feed certainly does not include that particular twt (it comes from *my* feed).

But my proposal probably isn’t very helpful, either. We have this flat conversation model, so … this twt right here, what should it refer to? Your twt? My root twt? I don’t know.

@prologic Don’t include this just yet. I need to think about this some more (or drop the idea).
@bender It’s great if I’m sitting on the balcony and horrible otherwise. Gah.
@bender It’s great if I’m sitting on the balcony and horrible otherwise. Gah.
@prologic Not sure I’d attach any if clauses to this. My point is: Every time I see a hash, I’d like to have a hint as to where to find the corresponding twt.
@prologic Not sure I’d attach any if clauses to this. My point is: Every time I see a hash, I’d like to have a hint as to where to find the corresponding twt.
@andros @eapl.me @sorenpeter Sad to see you go. 🫤
@andros @eapl.me @sorenpeter Sad to see you go. 🫤
If we must stick to hashes for threading, can we maybe make it mandatory to always include a reference to the original twt URL when writing replies?

Instead of

(#123467) hello foo bar

you would have

(#123467 http://foo.com/tw.txt) hello foo bar

or maybe even:

(#123467 2025-04-30T12:30:31Z http://foo.com/tw.txt) hello foo bar

This would greatly help in reconstructing broken threads, since hashes are obviously unfortunately one-way tickets. The URL/timestamp would *not* be used for threading, just for discovery of feeds that you don’t already follow.

I don’t insist on including the timestamp, but having *some idea* which feed we’re talking about would help a lot.
If we must stick to hashes for threading, can we maybe make it mandatory to always include a reference to the original twt URL when writing replies?

Instead of

(#123467) hello foo bar

you would have

(#123467 http://foo.com/tw.txt) hello foo bar

or maybe even:

(#123467 2025-04-30T12:30:31Z http://foo.com/tw.txt) hello foo bar

This would greatly help in reconstructing broken threads, since hashes are obviously unfortunately one-way tickets. The URL/timestamp would *not* be used for threading, just for discovery of feeds that you don’t already follow.

I don’t insist on including the timestamp, but having *some idea* which feed we’re talking about would help a lot.
@kat My eyes hurt, though. 🥴
@kat My eyes hurt, though. 🥴
Once or twice a year, I make an effort to switch from dark mode / black terminals to light mode again.

It usually doesn’t end well, because the contrast is just not as good. There’s a reason that things like professional DAWs or CAD software use a dark theme.

With a heavy bold font, it’s much better:

https://movq.de/v/331aa40bde/s.png

My font doesn’t get any bolder than this, though. I’d have to make a new variant of it. Mhh. 🤔
Once or twice a year, I make an effort to switch from dark mode / black terminals to light mode again.

It usually doesn’t end well, because the contrast is just not as good. There’s a reason that things like professional DAWs or CAD software use a dark theme.

With a heavy bold font, it’s much better:

https://movq.de/v/331aa40bde/s.png

My font doesn’t get any bolder than this, though. I’d have to make a new variant of it. Mhh. 🤔
@andros We don’t know the cause, yet, do we? 🤔
@andros We don’t know the cause, yet, do we? 🤔
@lyse Oh, no, this is vastly exaggerated. Neil deGrass Tyson says, the earth is smoother than a cue ball (billiard): https://www.youtube.com/watch?v=OMP5dNsZ-6k That would make for a very dull OpenGL program, though. 😂
@lyse Oh, no, this is vastly exaggerated. Neil deGrass Tyson says, the earth is smoother than a cue ball (billiard): https://www.youtube.com/watch?v=OMP5dNsZ-6k That would make for a very dull OpenGL program, though. 😂
@iolfree Fuck no. 😅
@iolfree Fuck no. 😅
I guess this is trivial to do with some pre-existing engine, but it’s more fun to do it yourself: https://movq.de/v/0cfa4e9504/world.tar.gz
I guess this is trivial to do with some pre-existing engine, but it’s more fun to do it yourself: https://movq.de/v/0cfa4e9504/world.tar.gz
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.)
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.
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). 🥴
@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.
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 …
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?
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? 🤔
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 😅
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 🤣
@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:



🥴
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. 🥴
@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! 😂
@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. 🤯
@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. 🫤
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. 😂
@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. 😃
@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. 🥴
@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.
@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/

Can you beat me at the circle game? 😂 https://neal.fun/perfect-circle/

Sorry, more pixels:

Sorry, more pixels:

@bender Time to update my machines! 😅
@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)
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 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
@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)
“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? 😂
@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. 😂
@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!) 😏
@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. 😅=
@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. 🤷