# 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 7058
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5952
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=6052
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5852
@jost Yeah, this AI crap is a big reason not to blog.
@movq So they say. :-D
@movq So they say. :-D
I'm not a huge fan of docker. Sorry for the poor screen grab quality, but this is the funniest analogy for "no docker" vs "docker" I've come across: https://lyse.isobeef.org/tmp/no-docker-vs-docker-analogy.png :-D
I'm not a huge fan of docker. Sorry for the poor screen grab quality, but this is the funniest analogy for "no docker" vs "docker" I've come across: https://lyse.isobeef.org/tmp/no-docker-vs-docker-analogy.png :-D
Well, that's another bug: The search https://twtxt.net/search?q=%22LOOOOL%2C+great+programming+tutorial+music%22 yields the wrong hash. It should have been poyndha instead.
Well, that's another bug: The search https://twtxt.net/search?q=%22LOOOOL%2C+great+programming+tutorial+music%22 yields the wrong hash. It should have been poyndha instead.
@thecanine Lol… I just don't change my default profile pictures. (Well, only when my teammates ask me to.)
@thecanine Lol… I just don't change my default profile pictures. (Well, only when my teammates ask me to.)
@doesnm Haha, that's great! :-D
@doesnm Haha, that's great! :-D
They fixed it. :-D https://www.youtube.com/watch?v=A8b7HFUXPqk
They fixed it. :-D https://www.youtube.com/watch?v=A8b7HFUXPqk
@thecanine Some precious cloud space. Probably the Atlassian one.

How does one end up with an avatar of that weird size to begin with? :-D
@thecanine Some precious cloud space. Probably the Atlassian one.

How does one end up with an avatar of that weird size to begin with? :-D
@falsifian Do you want me to reconfigure my nginx to look at the User-Agent in order to serve you a different file for the time being? ;-) Good luck with your paper!
@falsifian Do you want me to reconfigure my nginx to look at the User-Agent in order to serve you a different file for the time being? ;-) Good luck with your paper!
@movq Open-plan offices are just a giant mistake. I've never seen a single working one where people can actually concentrate. Except when I was the first one around in the morning.
@movq Open-plan offices are just a giant mistake. I've never seen a single working one where people can actually concentrate. Except when I was the first one around in the morning.
@prologic @bender Looks like something for /dev/null.
@prologic @bender Looks like something for /dev/null.
While I now have a somewhat working fix for it in yarnd (https://git.mills.io/yarnsocial/yarn/pulls/1232), I also have the feeling that I should fix literal formatting in lextwt as well. This also uncovered more bugs I believe: https://git.mills.io/yarnsocial/go-lextwt/pulls/28

But then there is also the question why the textarea is populated with @<url> in the first place rather than @<nick url> or yarnd's own @nick@domain/@nick syntax. It indeed has to do something with whether I follow the mentioned feed or not.

Anyway, something to investigate for future Lyse or maybe @prologic and/or @xuu. G'night!
While I now have a somewhat working fix for it in yarnd (https://git.mills.io/yarnsocial/yarn/pulls/1232), I also have the feeling that I should fix literal formatting in lextwt as well. This also uncovered more bugs I believe: https://git.mills.io/yarnsocial/go-lextwt/pulls/28

But then there is also the question why the textarea is populated with @<url> in the first place rather than @<nick url> or yarnd's own @nick@domain/@nick syntax. It indeed has to do something with whether I follow the mentioned feed or not.

Anyway, something to investigate for future Lyse or maybe @prologic and/or @xuu. G'night!
Righto, must be some caching thing that's going on, too. Now, with JS enabled and a feed that I follow, hitting "Reply" actually automatically enters @nick@domain in the textarea. Submitting it correctly writes "@ in the feed. Let's dig…
Righto, must be some caching thing that's going on, too. Now, with JS enabled and a feed that I follow, hitting "Reply" actually automatically enters @nick@domain in the textarea. Submitting it correctly writes "@ in the feed. Let's dig…
@bender @prologic I can reproduce this locally, too. But it doesn't matter if I follow the feed or not. With JS enabled, hitting "Reply" opens a textarea with @<url>. Submitting this writes @<domain url> instead of @<nick url> in the feed.

However, when I have JS disabled, "Reply" jumps to the top of the page, but the the textarea is at the bottom. So, after scrolling down, the textarea is not filled with anything. Which is expected I reckon. Entering @nick@domain or just @nick resolves to the correct @<nick url> in the feed.
@bender @prologic I can reproduce this locally, too. But it doesn't matter if I follow the feed or not. With JS enabled, hitting "Reply" opens a textarea with @<url>. Submitting this writes @<domain url> instead of @<nick url> in the feed.

However, when I have JS disabled, "Reply" jumps to the top of the page, but the the textarea is at the bottom. So, after scrolling down, the textarea is not filled with anything. Which is expected I reckon. Entering @nick@domain or just @nick resolves to the correct @<nick url> in the feed.
@prologic @movq I sadly agree.
@prologic @movq I sadly agree.
@movq So true! Either I'm hanging around with my direct teammates socializing in person in a meeting room or some other workmates are making so much noise in the open-plan office that I cannot concentrate at all. In any case, completely unproductive. :-D Luckily, I very rarely have to go to the office.
@movq So true! Either I'm hanging around with my direct teammates socializing in person in a meeting room or some other workmates are making so much noise in the open-plan office that I cannot concentrate at all. In any case, completely unproductive. :-D Luckily, I very rarely have to go to the office.
My hike today started off with a nice great spotted woodpecker right after the town sign. The -1°C didn't feel all that cold in the sun. Even on the flat, I had to open my jacket with the sun on my back. The biotope got dug over, that's now looking really sad. And they also fell a few large chestnuts. Surprisingly, there was actually snow on the mountain. Not much, maybe around three centimeters at most. It was melting and falling down the trees, which looked really cool. I enjoyed it a lot: https://lyse.isobeef.org/waldspaziergang-2025-02-04/

Crazy ice crystals on twigs
My hike today started off with a nice great spotted woodpecker right after the town sign. The -1°C didn't feel all that cold in the sun. Even on the flat, I had to open my jacket with the sun on my back. The biotope got dug over, that's now looking really sad. And they also fell a few large chestnuts. Surprisingly, there was actually snow on the mountain. Not much, maybe around three centimeters at most. It was melting and falling down the trees, which looked really cool. I enjoyed it a lot: https://lyse.isobeef.org/waldspaziergang-2025-02-04/

Crazy ice crystals on twigs
@bender Bwhahahahaaaahaaaahaaaaahaaaaaaa! :-D Oh man, my cheeks are hurting and eyes are watering. :-D I love it!
@bender Bwhahahahaaaahaaaahaaaaahaaaaaaa! :-D Oh man, my cheeks are hurting and eyes are watering. :-D I love it!
@falsifian Yes! The first part about the history was my favorite. Not that the second one about finding life on Mars wasn't interesting, no, not at all! But maybe it's just that Earth is a bit more relatable. :-) I'm sure they will dig up something eventually.
@falsifian Yes! The first part about the history was my favorite. Not that the second one about finding life on Mars wasn't interesting, no, not at all! But maybe it's just that Earth is a bit more relatable. :-) I'm sure they will dig up something eventually.
@eapl.me Hahahahaa, this is truly brilliant! :-D The file descriptor slider is funny as heck! :-D
@eapl.me Hahahahaa, this is truly brilliant! :-D The file descriptor slider is funny as heck! :-D
@movq The light pollution map reports red for my town. That's fairly accurate, I'd say. The view from home is not all that great. Yeah, I can see Ursa Major and a bunch of other stars. Maybe even some satellites. But there's definitely a sky glow at the horizon.

When I leave town, I can see a bit more. However, it doesn't compare to the alps or even some rural parts in Australia. The latter was by far the craziest I've ever seen in my life. Looked like a space telescope photo in person. Soooooooooooooo many stars and the band of the milky way was easily visible to the naked eye. Up until then, I didn't even know this was remotely possible down on earth. Absolutely stunning. :-)
@movq The light pollution map reports red for my town. That's fairly accurate, I'd say. The view from home is not all that great. Yeah, I can see Ursa Major and a bunch of other stars. Maybe even some satellites. But there's definitely a sky glow at the horizon.

When I leave town, I can see a bit more. However, it doesn't compare to the alps or even some rural parts in Australia. The latter was by far the craziest I've ever seen in my life. Looked like a space telescope photo in person. Soooooooooooooo many stars and the band of the milky way was easily visible to the naked eye. Up until then, I didn't even know this was remotely possible down on earth. Absolutely stunning. :-)
@sorenpeter It depends on your requirements. If you just want to put your code somewhere for yourself, simply push it over SSH on a server and call it good. That's what I do with lots of repos. If you want an additional web UI for read access for the public, cgit comes to mind (a mate uses that). Prologic runs Gitea, which offers heaps more functionality like merge requests.
@sorenpeter It depends on your requirements. If you just want to put your code somewhere for yourself, simply push it over SSH on a server and call it good. That's what I do with lots of repos. If you want an additional web UI for read access for the public, cgit comes to mind (a mate uses that). Prologic runs Gitea, which offers heaps more functionality like merge requests.
That was a super interesting talk, I can recommend it: https://media.ccc.de/v/38c3-microbes-vs-mars-a-hacker-s-guide-to-finding-alien-life
That was a super interesting talk, I can recommend it: https://media.ccc.de/v/38c3-microbes-vs-mars-a-hacker-s-guide-to-finding-alien-life
@prologic Go just moved back to second place. :-)
@prologic Go just moved back to second place. :-)
@movq Nice! I would have missed the plane if you hadn't pointed it out. :-) Venus is very visible these days. When a mate and I went on a night walk during clear sky this week, the night sky looked really great, it was easy to spot the second planet. We got lucky, ISS just passed above our heads, too. Most of the week, it was cloudy, though.
@movq Nice! I would have missed the plane if you hadn't pointed it out. :-) Venus is very visible these days. When a mate and I went on a night walk during clear sky this week, the night sky looked really great, it was easy to spot the second planet. We got lucky, ISS just passed above our heads, too. Most of the week, it was cloudy, though.
@movq Hahaha, that's a good one! :-D I came across this one before, but couldn't remember the answer.
@movq Hahaha, that's a good one! :-D I came across this one before, but couldn't remember the answer.
@prologic Yes, C has it. I even thought that C invented it, but it seems to stem from CPL.

The closest to get to if expressions at the moment is to use a lambda:

foo := func() {
if bar {
return "spam"
}
return "eggs"
}()

But that's also not elegant at all.=
@arne Auweia! Wär's da nicht sinnvoller, von dem Ding möglichst zügig wegzukommen? Ich hab keine Ahnung, was es da heutzutage so an tauglichen Alternativen gibt. Aber selbst alles selber zu bauen, wär da ja mittelfristig weniger aufwändig, wenn man das mit dem ständigen Zusammenkehren der Scherbenhaufen vergleicht.
@thecanine That's one of the cool properties, you can use it at whatever frequency you like.
@aelaraji :-D
@arne Jepp, sehr gute Wahl! :-)
@xuu I think I also ran into CSRF problems with multiple open yarnd tabs in the past.
@xuu Ah, it was JS then. Thanks. :-)
@movq Okay, cool. :-) I'll look at Mutt this year. I have the feeling I might like it after some initial pain.
@movq Fingers crossed! :-)
@thecanine It's always nice to look at your creations.
Oh yeah, @aelaraji, electrostatic cat fur to the rescue! :-D
@prologic Which one? I don't mind the ternary operator at all. In fact, I often find myself missing it in Go. I don't find the two alternatives particularly elegant:

foo := "eggs"
if bar {
foo = "spam"
}

Or:

var foo string
if bar {
foo = "spam"
} else {
foo = "eggs"
}

To my eye, this just would look a lot nicer:

foo := bar ? "spam" : "eggs"

Or at least as the Pythons do it:

foo = "spam" if bar else "eggs"

The ternary operator especially shines with relatively short expressions.
@arne Ohjemine, TYPO3! O_o Lass mich schreiend davonlaufen!

Mit dieser absoluten Katastrophensoftware vor dem Herrn haben wir mal ein Studienprojekt gemacht. Die hat alle Vorurteile komplett übererfüllt. Angefangen von Fehlerseiten, die statt 4xx oder dergleichen immer mit HTTP 200 ausgeliefert wurden oder auch, dass das generierte HTML leider einfach ungültig war. Über die Implementierung von Löschen durch einen Deleted-Schalter in der Datenbank, das Speichern von Passwörtern im Klartext bis hin zu völlig umständlichen Bedienungskonzepten. Alles hat immer brutal viele Schritte gebraucht. Das Zeilennummernrumgeeier im TYPO-Script erinnerte eher an Basic. Uns kam es auch so vor, als ob man damit nicht ernsthaft was sinnvolles machen könnte.

Zu allem Überfluss hatte irgendwer noch ein ganz hundsmiserables Buch ausgegraben, das als Vorbereitung dienen sollte. Ich kann mich zum Glück weder an den Titel noch den Autor erinnern, aber ich weiß noch, wie das komplett inkonsistent geschrieben war. Anfangs gabs mehrere Seiten zu Unicode und UTF-8 wurde angepriesen, aber alle Beispiele haben dann auf ISO-8859-1 gesetzt. Gezeigter Beispielcode war häufig unterste Schublade. Selten hab ich so merkwürdige Erklärungen gelesen: „Wenn Sie die Sicherheitswarnhinweise stören, kommentieren Sie doch bitte im Quelltext die die()-Funktion in $ZEILE aus.“ Oder ein anderer Klassiker: „Ausgeschrieben würde der Code wohl folgendes tun…“. War sich der Autor also nicht ganz sicher, ob sein Codeschnipsel vllt. doch in Wahrheit was ganz anderes tut.

Seit diesem gigantischen Trauma (das hat mich wirklich sehr nachhaltig geprägt, wie man Dinge nicht machen sollte) hab ich erfolgreich einen Bogen um das TYPO3-Universum gemacht.

Ich kann nur hoffen, dass es zwischenzeitlich ein wenig besser geworden ist. Aber Deinem Kurzbericht zufolge scheint da ja immer noch der Wurm drin zu sein. Mein Beileid! :-(
@movq That's an interesting setup! What MUA do you use?
@movq So, the building renovation finally started?
Rats! @aelaraji, you need an emergency hamster and a wheel attached to a bicycle dynamo…

Fingers crossed that this doesn't happen a third time today.
If people just wrote error free code to begin with, there would be no need for error handling! :-P

No, honestly, I don't think that there is anything wrong with the current approach. I don't see any wins of any of the proposals I've come across.
@arne Hahaha! :-D
@kat You mean the ? as suffix for boolean returning functions or as ternary operator (condition ? true_value : false_value)?

Interestingly, I just had to look up the first case. I was under the wrong impression that the question mark at the end would be some shortcut for chained function or method calls that handles nil return values in a graceful way without actually dereferencing and thus crashing. I probably never wrote more than 30 lines of Ruby in my entire life. Must have been some other language.
@kat Haha, I see. :-)
Even after fixing yesterday's mail server TLS certificate renewal incident (main hostname was not included) my KMail did not want to receive e-mails anymore. I had to restart Akonadi now in order to make this work again. I really should look at mutt one day.
@arne Eis im Januar, ja sapperlott, ist denn schon wieder Sommer im hohen Norden!?
@kat Something is broken with the TLS:

$ curl https://remix.girlonthemoon.xyz
curl: (35) error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error
@prologic I don't like it either. Too much magic, that only works in certain cases.
@movq No, I don't think so. But I just looked it up. And yes, that sounds a bit creepy. I certainly heard similar calls, maybe it even was a heron. I don't know.
That's a cool comparision of an obstacle run with a knight, fire fighter and soldier: https://www.youtube.com/watch?v=pAzI1UvlQqw
@sorenpeter Thanks mate, I got really lucky with this one. :-)
@prologic Have you successfully dug up some gold already? The dream of having your own yacht is coming closer.
@arne Ich gratuliere zum Vorhangstangenrichtfest. :-)
@arne Hehe, schon faszinierend, wie manche Sachen das Hirn ziemlich neu verdrahten.
@arne Zum Thema Dinosauerier fällt mir dieser 38C3-Vortrag ein, den ich mir die Tage angesehen hab: https://media.ccc.de/v/38c3-how-to-spec-fun-with-dinosaurs
I just saw this heron fly by my window, so I investigated: https://lyse.isobeef.org/graureiher-2025-01-25/

Heron on a roof
@movq Es kann nun noch mehr Daten abschnorcheln! Hurra!
Thanks, @andros! I commented and replied here: https://git.mills.io/yarnsocial/twtxt.dev/pulls/8#issuecomment-18490
@andros Just when you have made something idiot-proof, the world invents a better idiot.

The mother of the morons is always pregnant.
@movq Progress! They could be at your door any second now. ;-)
@movq That's cool! :-)
@xuu I'm innocent!
@movq Have the workers even arrived yet?
@arne Unzählige Stellschrauben hab ich auch noch vor mir. Ich will gar nicht dran denken. :-D
@arne Uuuuhhh, das fühlt sich klasse an, gute Arbeit mein Lieber! :-)

Besonders positiv hervorheben muss ich die Rohdatenansicht. Sowas hab ich mir auch schon in der Vergangenheit hin und wieder gewünscht. Wie toll es doch wär, direkt den Eintrag im Original zu sehen, ohne erst im Feed mühsam auf die Suche gehen zu müssen, was auch noch einen Wechsel auf den Browser oder den Editor erzwingt. Das werd ich mir definitiv auch einbauen. Insbesondere für die Entwicklung absolut hilfreich. Die Textarea könntest Du noch mit einem readonly-Attribut ausstatten.

Die Gesamtbaumansicht einer Unterhaltung gefällt mir ebenfalls. Davon bin ich ja ein großer Verfechter. Nicht nur die direkten Antworten zu sehen, sondern alle. Klar, bei tief verschachtelten Unterhaltungen und sehr langen Beiträgen verliert man da doch mal den Überblick, aber die kommen in der Praxis meiner Erfahrung nur selten vor.

Die zwei Elemente in der Fußzeile eines Beitrags würde ich auch noch versuchen in die Kopfzeile zu verschieben, dann wird die Darstellung insgesamt kompakter, gerade bei Unterhaltungen könnte das von Vorteil sein.

Weiter so!
@arne Klingt gut, Du darfst uns gern mal ein paar Bildschirmfotos vom aktuellen Stand zeigen. :-) Die erste Aufnahme sah bereits recht aufgeräumt aus.

Ich müsste auch endlich mal an meinem Client weitermachen. Aber heut nimmer.
@arne Ahja, danke für die Erläuterung! Einrückungen waren meinem Parser tatsächlich egal, der dürfte einfach ein trim() angewendet haben, bevor sich die Zeile zur näheren Verarbeitung angesehen hat. :-D
@movq It says F=700, D=70 and RK=20. I have to research what magnification that translates to, a few days have passed since physics class. Your Celestron Ultima 100 looks much more high quality than this thing.=
@movq Großartig! :-D
@arne Hahaha, vor Dekaden hab ich auch mal einen „XML“-„Parser“ selbst gebaut. Der wollte dann pro Zeile entweder einen öffnenden oder einen schließenden Tag oder aber einen Wert haben. :-O Ganz übel, aber für den damaligen Anwendungsfall hat's gelangt. War halt bloß kein XML. :-D

Was konkret war dann das Problem von dem zu sauberen XML in Deinem Fall? Und schön zu hören, dass Du das Gerät vor dem vorzeitigen Elektroschrotttod bewahrt bekommen hast. :-)

Zum Abschluss noch ne ganz doofe Frage, ganz offensichtlich hab ich von Radios keinen blassen Schimmer. Wieso muss denn das Ding überhaupt mit XML rumfuhrwerken? O_o
@xuu The Pod.LastSeen and Pod.LastUpdated fields are only ever updated in the Cache.DetectPodFromUserAgent(…) function as far as I can tell. This function is called in Cache.DetectClientFromRequest(…) and Cache.DetectClientFromResponse(…).

Cache.DetectClientFromRequest(…) is only invoked when the twtxt.txt is requested and looks at the User-Agent HTTP request header.

Cache.DetectClientFromResponse(…) is only called in Cache.FetchFeeds(…) and looks at the Powered-By HTTP response header. This header would be set in twtxt.txt HTTP responses from yarnd. A bunch of places invoke Cache.FetchFeeds(…), including a periodic job (UpdateFeedsJob.Run()). Maybe something is iffy around these locations.
@movq It's an old, cheap Optus without any model information on it. It was maybe 180DM or so in a discounter 25, 30 years ago. Its main job is to collect dust, can't even remember its last use. That must have been easily 15 years ago I reckon. Thus, absolutely no surprise. Maybe I'll just take it apart and see what I can see as the week progresses.
I'm rather frozen after half an hour looking at Venus and Saturn through the telescope outside. I couldn't see any rings around Saturn. Disappointing. It also appeared rather dark. The very bright Venus on the other hand told me that there is something growing inside the scope. :-( Or maybe there is dust.