# 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 6510
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5334
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5434
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5234
@movq Lol, someone just showed me this brilliant German (Saxon, actually) song. The title Hitzetodcheck translates to "heat death check". Sorry to all non-German speakers. https://www.youtube.com/watch?v=1qHH3RO_X34

I'm also ready absolutely ready for winter.
@abucci Yep, --open-registrations=false has to also use the equal sign, just like the short form, otherwise it's activated. At least that's consistent. But, is has no effect, if the settings.yaml claims something different.

I have the impression that command line flags only take effect the first time you start yarnd. Unless the option has no pendant in the config file, such as -A/--admin-user $user. Since -A is not a boolean, but takes a string, you are free to use a blank or an equal sign…

It's this package: https://github.com/spf13/pflag?tab=readme-ov-file#command-line-flag-syntax

I also noticed and fixed the typo. 8-)
Yeah, user error on my end, never mind. The persisted settings.yaml overrides the command line arguments. That's surprising to me. I expected the command line options to overrule the config file. Oh well.
@quark :-P
@aelaraji Hmmm, so it _is_ permanent damage. Damn! :-( I'm no electronics guy, but I'd suspect it to be broken, if unplugging it and plugging it in again doesn't fix it. Kinda doubt that a repair shop will get it going again. I have no idea where I would bring it over here. The best I can think of is to ask the volunteers at the repair café if they have any suggestions, I reckon they're not able to fix it either. But that place is only open once a month.

How much of your screen is gone by now? Looks like a lot.

Wow, crazy. A decade ago, I think I only experienced power outages three or maybe four times in my entire life. Since then, they became a bit more frequent. Probably five or six, maybe more. Not sure how many of these events are attributed to construction incidents, where an excavator ripped a power line apart. Last time, loggers threw a tree in an overhead power line, so the power company had to disconnect my area from the grid.
@abucci You can also use -R=false on the command line or leave it out entirely. When explicitly stating -R=false, there has to be an equal sign. With a space (-R false) it's somehow parsed as -R which is equivalent to -R=true. O_o Very weird. I'd really like to see an error instead.

I still have to figure out the precedence of the settings.yaml or command line arguments. I'm probably holding it wrong, but it seems to give me different results…
@quark @movq A general workaround in these cases is to wrap the command in a shell script and reference said script instead.
@aelaraji Oh, shoot! The broken rows are permanent? Looks like you're the king of power outages. :-( How frequent do you experience blackouts?
@movq Phew, that was a close call.
@quark Enjoy! :-)
@aelaraji Bwhahaha! :'-D
@mckinley Wow, I was not aware, that there are different kinds of blackberries. But of course there are. Everything has all sorts of different species, why would it be different with these tasty guys? :-)

I just read up on them and – surprise, surprise – it turns out, the Himalayans are not native to most of Europe either. Doh! It gets even more interesting, their origin is unclear. Maybe Armenia and the Caucasus region. Fascinating!
@movq @prologic Right, what can possibily go wrong!? ;-)

It's funny that you mention it, too. We also were quite surprised that it was incredibly quiet in nature. Not just no man-made noise (we obviously avoided the crowds), not even in the distance, but also hardly any birds. We joked they're still exhausted from the heat of the days before and still resting.
@abucci Thank you for using Lyse's Unofficial Yarnd Help Desk: https://lyse.isobeef.org/tmp/yarnd-disable-registrations.png
@prologic Or c) you click on a link somebody gave you. My brain is a bit dead now, but that might be a problem when you're logged in.
Today, I learned about vim "+normal $", how cool! :-) Thanks @quark!
I just learned from a German documentary that there is goldbeating. Never heard of that term before. Super interesting.
@prologic Great! Git knowledge is helpful in a lot of situations. What's the website about? You both had some fun writing HTML by hand? :-)
@prologic No worries, all good. :-)
@bender Wasn't too terrible, I just watched a video in the background. ;-)
@thecanine Oh no! :-( Please don't!
It cooled off to 20°C today, but mid week is supposed to be crazy hot again. It was a nice walk, also plenty of people around, though. So we decided against going up our backyard mountain to avoid the masses. We finally took a path that we haven't checked out for years. That was pretty cool. I couldn't remember anything on that.

Garden with sunflowers in the background

More scenery: https://lyse.isobeef.org/waldspaziergang-2024-08-25/

Neither of us has ever seen such a marmelade bun mushroom:

Marmelade bun in the woods, ah, no, it's a mushroom
@prologic @movq You can just GET /twt/<HASH> with Accept: application/json:


$ curl -sH 'Accept: application/json' https://twtxt.net/twt/fgthxaq | jq 
{
  "twter": {
    "nick": "prologic",
    "uri": "https://twtxt.net/user/prologic/twtxt.txt",
    "avatar": "https://twtxt.net/user/prologic/avatar#gdoicerjkh3nynyxnxawwwkearr4qllkoevtwb3req4hojx5z43q"
  },
  "text": "(#tkjafka) @<falsifian https://www.falsifian.org/twtxt.txt> @<movq https://www.uninformativ.de/twtxt.txt> You actually only really want the missing root Twt. You could just fetch this from any Yarn pod. There are scripts I built way back when yo do this 😅",
  "created": "2024-08-23T00:54:04Z",
  "markdownText": "(#tkjafka) [@falsifian](https://www.falsifian.org/twtxt.txt#falsifian) [@movq](https://www.uninformativ.de/twtxt.txt#movq) You actually only really want the missing root Twt. You could just fetch this from any Yarn pod. There are scripts I built way back when yo do this 😅",
  "hash": "fgthxaq",
  "tags": [
    "tkjafka"
  ],
  "subject": "(#tkjafka)",
  "mentions": [
    "@<falsifian https://www.falsifian.org/twtxt.txt>",
    "@<movq https://www.uninformativ.de/twtxt.txt>"
  ],
  "links": []
}
@prologic I returned way later. Maybe next time. :-)
I'm heading back to the workshop. :-)
@prologic Noone around. :-)
@movq The second one is at least discouraged. https://dev.twtxt.net/doc/twtsubjectextension.html#format

> […] Putting mentions before the hash is still supported but discouraged. […]
@movq The second one is at least discouraged. https://dev.twtxt.net/doc/twtsubjectextension.html#format

> \n Putting mentions before the hash is still supported but discouraged. \n
@movq It's a very low-traffic channel. At least when I usually idle around. :-)
It is really cool to watch this guy building a crossbow: https://www.youtube.com/watch?v=K-ogGdXTGkM
@prologic Cool, simplification is gold. Non-existent code is the best code. :-)
@movq @quark Look at all the nice branching! :-)
@quark It's a giant mess at the moment. I started rewriting it from scratch in January last year. But that's also a big undertaking. And that's why I stopped. I should proceed, though. Let's see.
@quark Bwahahahahaha, yeah! :-D Well, birds can be considered descendants.
@movq Oder gar ±inf Grad! Bibber, schwitz. Naja, passt auf jeden Fall zum Ortsnamen. :-) Mittlerweile haben sie ihr kaputtes JS repariert.
So, by "evolve" you actually mean "remove", @prologic? :-?
Let me take this opportunity to recommend something to @bmallred: https://staystrong.run/user/bmallred/twtxt.txt returned 200 but no Last-Modified header - can’t cache content :-)

Another modification I made is to actually cache it anyways. Otherwise, tt wouldn't show anything. I implemented that for some other feed that doesn't exist anymore.
Correct, @bender. Since the very beginning, my twtxt flow is very flawed. But it turns out to be an advantage for this sort of problem. :-) I still use the official (but patched) twtxt client by buckket to actually fetch and fill the cache. I think one of of the patches played around with the error reporting. This way, any problems with fetching or parsing feeds show up immediately. Once I think, I've seen enough errors, I unsubscribe.

tt is just a viewer into the cache. The read statuses are stored in a separate database file.

It also happened a few times, that I thought some feed was permanently dead and removed it from my list. But then, others mentioned it, so I resubscribed.
To get this going, I implemented the easiest, next best option I could think of. Happy to get some feedback. Yes, it should be improved in the future, no doubt about that. Although, I have changed a few things in yarnd in the past, I'm not really familiar with the code base, so beware of bugs and other undesired side effects.
@falsifian @bender I'd certainly hate my client for automatic feed unsubscription, too.
Hmm, bissel kalt… https://lyse.isobeef.org/tmp/null-grad.png
@prologic Yeah, I've noticed that as well when I hacked around. That's a very good addition, ta! :-)

Getting to this view felt suprisingly difficult, though. I always expected my feeds I follow in the "Feeds" tab. You won't believe how many times I clicked on "Feeds" yesterday evening. :-D Adding at least a link to my following list on the "Feeds" page would help my learning resistence. But that's something different.

Also, turns out that "My Feeds" is the list of feeds that I author myself, not the ones I have subscribed to. The naming is alright, I can see that it makes sense. It just was an initial surprise that came up.
Righto, I cobbled something together here: https://git.mills.io/yarnsocial/yarn/pulls/1172 It needs a bunch more work, though. Screen time is up for today.
@movq Mr. Watson for the doping test please.
Yeah, the ErrDeadFeed is never actually checked anywhere. It's only set and that's it.
I'm wrong! Both 404 and 410, among others, are considered dead feeds: https://git.mills.io/yarnsocial/yarn/src/branch/main/internal/cache.go#L1343 Whatever that actually means.
@bender You could be right. Grepping the yarnd code for 410 and Gone did not reveal anything. Maybe, maybe it is handled by another library. But I kinda doubt it.
@bender 404 could be indeed a temporary error if the file resides on a mounted remote filesystem and then the mount point fails for some reason. With a symlink from the web root to the file on the mount, the web server probably will not recognize the mount point failure as such. Thus, it might not reply with a 503 Service Unavailable (or something like that), but 404 Not Found instead. (I could be wrong on that, though.)

The right™ way is to signal 410 Gone if the feed does not exist anymore and will not come back to life again. But that's hard to come by in the wild. Somebody has to manually configure that in almost all situations.

But yes, as @falsifian points out, exponential backoff looks like a good strategy. Probably even report a failure to users somehow, so they can check and potentially unsubscribe.
@bender Yeah, this is just unbelievable.
@bender There you go, will be removed later: https://lyse.isobeef.org/tmp/Sam_Watson_DESTROYS_Speed_Climbing_World_Record_Paris2024_Olympics-ezgweVd4a98.mp4 (46.9 MiB)
My mate just said "WTF, there's somehow a wall lizard in the family tree" and I can only agree: https://www.youtube.com/watch?v=ezgweVd4a98 Looks like this is the first real evidence of those lizard people. :-D
@movq No wonder with all these yarnds. :-D
@movq Maybe they're not all coming from yarnd, but one of them could be from yarns, the search engine. Just a wild guess. My twtxt.txt access log doesn't record the source IP address, so I don't know.

And aren't there any other hosted yarnd instances? Maybe it was never really implemented, but I remember @prologic thought about hosting dedicated yarnds for others in the past. Could be well over a year ago, not sure.

Another possibility might be a forgotten development instance idling around (or not so much :-D) in the background. I think the default user agent points to txtxt.net, not example.com. At least when I last checked the yarnd code. That was also several months ago.
@mckinley Oh, I didn't know they're not native to the US. These bushes grow very rapidly like weeds. I know a few places where they have been heavily cut back, almost cleared completely, but a year later, they've already exceeded two meters of height again. Pretty cool. :-)

@movq It's very yummy. :-) Unfortunately, the mustard manifacturer changed the traditional slip-on caps to screw caps. Haven't seen the old jars anymore.
@stigatle @prologic @bender We had some lovely, cloudy 20°C today with some light rain mixed in. But by the end of the week, we're back at 30°C and beyond. I will definitely enjoy the 15°C at night the next few days.
Transformed four kilograms of blackberries into a bit over three kilograms of blackberry jelly. https://lyse.isobeef.org/brombeergelee-2024-08-19/ The leftover jelly did not fit in prepared canning jars, so I dumped it in a regular drinking glass (which was a mustard glass in its former life): Jelly in drinking glass The rest is cooling off on the bench outside.
This is a sick looking pour art: https://www.youtube.com/watch?v=qL6tuJXn9Fo
@movq Haha, me too. I didn't even know it is an actual word.
@stigatle Oh yeah, this is cool. Keep doing that. :-)
@off_grid_living I see. When I build static websites by hand, I usually do not need a real web server to serve it locally for testing purposes. I use relative links in all the documents and basically never resort to web server features, such as authentication, URL rewrites etc.

I consequently make use of the UTF-8 encoding and state that in each end every one of the HTML files. This keeps me from surprises later on. The web server in the end is configured to automatically include the Content-Type header with the right character encoding (super easy as it is always UTF-8) in the response, so this is very bullet-proof in my mind.

My editor simply does not auto-"correct" anything. This almost never works in my experience. Especially when dealing with computer languages.
@movq I don't know. It was the first time I saw two kestrels this close. It was over within seconds, one of them took off, the other one ended up sitting on a branch of that tree. I could not tell which one, though.
@prologic They're broadcasting the ant war. Black against white ants. That's what we called it back in school. :-)
@prologic Hahaha! :-D Yep, focus on your real business. :-)
@stigatle The sky lighted up, but the thunderstorm was far away. Even though it was dead silent in the neighborhood, I could hardly make out the super quiet thunder roaring in the distance.

Oh I bet, nearly getting hit by lightning is very frightening.
I saw a kestrel on a power pole the other day. It then flew off and attacked another one sitting in a tree:

Fighting kestrels

More peaceful before that: https://lyse.isobeef.org/turmfalke-2024-08-07/
I witnessed absolutely crazy summer lightning before I went to bed. The sky flashed constantly, about every three seconds and then several times a second. It was a really nice natural spectacle to watch. :-) Very rare to exerience such a heavy one. My cam was too shitty, though. All photos and videos turned out just totally black.

When I woke up at 5am, I had a quick look in the Northern sky and saw a tiny shooting star. I then happily went back to bed. :-)
@prologic In tt, I have to press r to toggle the read status for each and every message. The disadvantage is that I have to mark all messages read explicitly, the advantage is that I have to mark all read explicitly, and hence no silly automation messes with me and causes wild surprises. But in theory it would be possible to automatically mark a message read when it is selected for three seconds or something like that. Not sure, though, how well any of that would work with a web UI.
@bender Ah, I see, the mentions. :-)
@off_grid_living Despite I don't really understand why you want the web server and website contents on a USB stick that travels around with you, do you even need a web server at all? I might be totally wrong, but I get the impression that it's only you who uses the "website" on whatever machine the USB drive is plugged in. It's not served over the internet, is it? It's just for yourself, so that you can look up stuff on the "website" or something like that. But you don't actually serve the website to the entire world?

Again, I could completely misunderstand the use case here. But assuming it's not connected to the internet, since you just have HTML and plain text files on the USB stick, no PHP or other stuff that needs to be interpreted first, you could just view these files locally in any browser (via local file:// protocol) without the web server (via http(s)://) in between. Much simpler.
Lucky you, @prologic. Yeah, sounds like it. :-D

All sky covered in clouds, except to the East. No chance of witnessing the stars shooting around. Still 25°C. Bah.
Interesting! https://publicholidays.com.au/royal-queensland-show/ Enjoy your day off, @prologic!
@movq Same here. Nothing. Malicious deception!
@bender Haha, no worries. I do like that you enjoyed your real life and not wasted it online. :-)

But I'm wondering how you discovered it a week later. Are you somehow regularly checking complete recent feed histories?
@bender Hahaha, that's a good one! :-D
@bender @movq That's a pity! :-( In the following half an hour, I only saw two more right of Ursa Major (the only constellation I recognize). Let's see how cloudy it actually will get tonight. The forecast to be clear sky between 1 and 3am. But that's a bit late.
@movq @bender That's what I thought while reading the code, too. I believe -eq is for numerical comparation only. Weird error message, though. Tells something about the implementation.
Heck yeah, I already saw three shooting stars in 10 minutes. Perseids are awesome! :-)
@off_grid_living There are probably many extensions for Apache2. Nearly all of which you don't need. Maybe libapache2-mod-php* if you want to make use of PHP.

Typically, systemd will automatically start your webserver during system startup. Your package manager (apt) does not prompt you, because the package maintainer has chosen some defaults for you which works with the rest of the system. So there is simply no need. Why would you want to change the installation directory anyways?

Also, right after installation, I'd assume that Apache2 is automatically started. If you want to start Apache2 by hand, you can sudo systemctl start apache2, there are also the stop and restart verbs.

The tutorial linked by @prologic seems a bit outdated to me (old Ubuntu version and SysVInit), you might be better off with: https://ubuntu.com/server/docs/how-to-install-apache2 Even though, that's probably also not so beginner-friendly.
@prologic Yeah, paid. If not even big IT companies offer more, I will not emmigrate to Down Under. ;-)
@movq I agree!
@stigatle @prologic Wow, that's surprising. Assuming a full time job, you are legally entitled to at least 20 days annual leave in Germany. Some companies even offer 30, esp. when in a union. I don't know how many companies actually do, but in my circle of friends and acquaintances, nearly everyone has 30 days paid vacation. I somehow thought it's very similar in Scandinavia and Australia.

Oh boy, the week is already over and I haven't accomplished much useful stuff when I look back on it. Gotta check the vacation calendars of my workmates tomorrow and take one or the other week off soon.
@movq That's a tough one. Maybe drones and cameras. They make for greater videos to watch online (no, I don't have any of that). Not to forget high-speed internet, that's sloooowly getting rolled out.
@off_grid_living A gamer will not necessarily become a programmer. Especially these days I'd say.
@off_grid_living @stigatle It's been a few years that I used Apache, but I also strongly recommend to run the Linux version. As root: apt-get install apache2 Its configuration file is probably _/etc/apache2_/apache2.conf_ these days. https://ubuntu.com/server/docs/how-to-install-apache2_
@off_grid_living Hmm, but why is regular dirt not good enough for the hens outside?

Yeah, like with everything, quality has its price.
Great to have you back, @off_grid_living! It's always a treat to watch your garden and build projects. Maybe you can work on getting the pictures a bit sharper. :-)

I'm wondering, what's the reason behind the carpet for the chickens? To help with cleanup?

Wheat just tastes good. I'm a sucker for bread. But not limited to wheat only, the majority sure is, though.

With the summer on full blast here, it's funny to read about frost. I'd immediately trade your weather. :-D
Heyho @falsifian, I don't either. :-)
@aelaraji Oh, you actually did try it out, very cool! :-)
Happy 28th birthday, @bender! 8-)
@aelaraji Because we don't have milk crates here in Germany. :-D At least I never came across them for milk, just the cardboard boxes for the milk tetra paks. But they don't hold the weight of a monitor.

@movq LOL²!
@prologic @bender Yeah, I really enjoyed his builds.
There ya go: https://git.mills.io/yarnsocial/go-lextwt/pulls/21
@stigatle Enjoy the time off! I reckon I should also plan for some vacation in the near future.
@mckinley @movq LOL!
@prologic @xuu Hmm, looks like this fix was based on my unsuccessful attempt to repair it, hence heaps of tests are failing when I run make test. I will look into that.
@bender @xuu I love this meme! :'-D
@prologic Thanks for reverting! Now we just have to properly fix the bug. Or decide whether this attribute feature is really needed in the first place.
Let me suggest to use a more secure password, @bender. One, that does not contain "password". Like hunter2!!
Git bisecting reveals https://git.mills.io/yarnsocial/yarn/commit/3a760502be273c306b488f8815adfd85b97a37f0 from five weeks ago. This updates all sorts of dependencies. Markdown and lextwt jump into my eye. These are my best bets so far.
@prologic Yep. Doesn't matter if JS in turned on or not. So it is somewhere hiding in the Go core. Some replacement going berserk, I'd say.

It happens to each bracketed text individually: https://lyse.isobeef.org/tmp/bracketed-text/triple.png

But then the question still is, why on earth does it happen to old twts, too? I'm getting into my code excavator.