# 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 6171
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=4116
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=4216
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=4016
@movq Simply ask your personal helicopter pilot to drop you off at the office roof.
@mckinley Oh, this is so great! :'-D Gotta have to tell this my mates who play Factorio. Also had to laugh when reading the introduction:

> [Compared to Excel] serious financial, medical or industrial applications should probably stick to the more mature calculation capabilities found in Factorio circuits.
@prologic Thank you very much! The originals are now available in this 11.4 MiB ZIP archive.

@darch I could be wrong, but I don't see a pun here, maybe some English native speaker can correct me. From my point of view it's just a parody on Robin Hood with some ridiculously funny spin. Monty Python at their finest. The lupin part *might* be a reference to tulip mania, when prices in the Netherlands for tulips bulbs went through the sky in 1637. Or it's just some random thing without a deeper meaning.
Yeah, @movq, we've cut it short and unfortunately didn't make it to the third emperor-mountain. Some feet called it quits prematurely.

Our four hour long night hike turned out to be really great. It was surprisingly warm, most of the way a t-shirt was enough. Only in the end we had to pull over a jumper for the long sleeves. We saw plenty of bats flying around us and also a marten in one of the villages. It was sitting in the middle of the road and then hid under a parked car. On the downside, tons of mozzies were also around.

Gates of Ruin Rechberg are closed at night

In one place the street lights shining on the tree leaves in combination with slight mist turned the scenery into something really incredible. Can't describe it other than mystical. Just super beautiful and impossible (for me) to capture on film.

We brought our torches, but didn't end up using them. The moon and starlit sky was enough. Only in the forests it sometimes got a bit dark on us. The first night hike of the season was a great success and will be repeated several times.
Dennis Moore, Dennis Moore, riding through the night…

Lupins

https://lyse.isobeef.org/waldspaziergang-2023-05-28/
@movq Thank you! No, that's straight from the camera, apart from resizing no manipulation was performed in post.
@prologic Yeah, most sheep around here have lighter hair, too.
@prologic This is so cool! @mckinley We went on a long hike (~24 km) yesterday, a short stroll this morning and are about to have an ~15 km night hike tonight. Let's see how that goes.
@prologic Thank you! Yeah, these are sheep with long hair. I don't know the exact name or breed. Maybe they're just about to be sheared.
@mckinley That's an interesting article, mate!
We went on a little bit longer hike again, super nice weather. A bit too hot in the sun already. https://lyse.isobeef.org/waldspaziergang-2023-05-26/

Meadow
Brutal Circular Saw Blade Fight with Hydraulic Press: https://youtu.be/7AMcN021x3A
@movq @mckinley Hahaha, very nice! :-D I did not know of fc. @abucci Heck yeah, great story! :-D I never came across something similar. I know these buses exist, but I've never seen one in person.
@stigatle Nice view, oh yeah.
@movq I especially love the doch and hiking videos! :-D
We just had a very violet sunset: https://lyse.isobeef.org/abendhimmel-2023-05-16/

Sunset
Got the best picture book April weather yesterday afternoon. It did not rain as much as advertised, though.

Rain and sun
@mckinley That's one more than I have. ;-)
@abucci With things like these I also always wonder in the end why I did not do/fix/improve/… it months or years ago.
@stigatle Thanks, mate! :-)
@stigatle Heck yeah, this is an awesome view! I don't mind the grayness at all.
Thank you very much, @movq! Yep, that was very spectacular. :-)
Thanks, @prologic! Yes, luckily, this is just a backlit cloud behind a bunch of trees. But it certainly looks like a large fire. I'm glad that it is not. :-)
Nice forest fire this evening:

Backlit cloud behind some trees at sunset
@movq Cable for the win! Agreed, that's a very silly trend. If they at least used regular batteries, AA, AAA or something like that.

That reminds me that I have to get replacement ear pads for both my headset and headphone. The synthetic leather is falling apart and black fuzzy crap ends up all over my face. Also, my headset's left ear piece has some intermittent contact that seems to get worse lately. Shaking my head usually fixes it for some time. Not sure if trying to repair that will finally break the headset instead.
This evening I greased all the axles and crudely fixed a few more handles of our handcarts for the upcoming scout flea market at the upcoming weekend. We also pumped up the tires and replaced two destroyed tubes. We gotta have to replace or completely overhaul some tongues and sidewall boards next time, though. They're too worn out and the plywood is delaminating and falling apart beyond repair. The badly maintained handcarts just have to bear up once more before we find time to properly service them like they actually deserve it. The handcarts will be used to collect donated stuff from people's homes and to move items from the sorting area outside to the right locations in the hall.
@abucci Haha, yes. It's not recommended to be close to it. :-)
@movq Reminds me of classic https://xkcd.com/1172/.
@abucci I heard you like listening to engines: https://www.youtube.com/watch?v=FsJ4Zm647n0
My mate and I just juggled again for the first time after the beginning of the pest. It's awesome how well it worked after all those years. Like we never paused at all. The saying is true: It's similar to riding a bicycle, you'll never forget how to do that.
@movq Sorry, mate! ;-)
Hahaahaaa, that's a good HPC video! Add some glue and you have a legit piece of OSB. :-D Transforming wood into rock with a 150 ton hydraulic press: https://youtu.be/eSNWVEPsDFs
@prologic You sure don't like that. That's like language attrition! But you have to like the fact that they actually talked to each in person other and not, like, used a chat on their phones for that.
@stigatle Ta! Yeah, can't complain about that. :-)
Before hiking, I watched "The Silver Bullet Syndrome Part 2 – Complexity Strikes Back!" by Hadi Hairi. Probably nothing new for you guys, but still highly recommended: https://www.youtube.com/watch?v=WN3CSOai_ZU I haven't seen part 1 and he said in the opening, that's not needed.
That's good news, @prologic, congrats! :-)
@prologic @movq Thank you, mates! On today's hike we saw several thousand tadpoles in a much larger forest lake. It's going to be great! That's the tree where the easter bunny picks all the eggs. They're all locally sourced. :-D
My mate and went on a longer hike today. About 24 km in to the minute seven hours. We started after lunch and the sun was beating down with 22°C. My cattleman hat served me well. 51 shows the Wasserberg ("water mountain") on the left (also in 52) and the Fuchseck ("fox corner") on the right (also in 53). I should have taken another distance shot from back home somewhere. But 03-05, 08, 15 and 21 show our backyard mountain Hohenstaufen. And in this one from yesterday you can see the Fuchseck to the left of the center.

At the Fuchseck summit a guy went down the steep mountain straight through the brush. So we thought, let's take this beaten path, too. But there was none. We couldn't figure out where he went and which route he took. We only heard the rustling of leaves and cracking of twigs and branches at the beginning when we were still taking photos up top. But we said, let's try it anyway, when he manages it, we will, too. The North slope was about 70° steep and covered with 15 cm of leaves. Super slippery, we slid more than walked. But once committed, there was no easy way back up again. There were lots of sketchy sections and I wondered what the heck I was doing there. We had to brace ourselves with one or sometimes both hands on the slope. Then we saw the dude sitting in a tree and we continued our adventure downhill. 29-31 show the much easier parts closer to the bottom before we hit an official path.

Later we took a new well-graveled logging trail which then dead ended. So we then decided to walk through the tall grass in the forest to meet a parallel footpath. We survived much crazier terrain earlier. So what could possibly go wrong? This long patch of grass was an old, now probably abandonned path anyways. I misjudged the distance to the other path quite a bit and it took us much longer than anticipated. Finally, on the real path, I had collected ten ticks on my pants! Bloody bastards.

After the shower I now feel like a new person. I reckon I'll find some great sleep tonight.

Probably cherry stones on a barbed wire fence
@movq I see, ta.
It was very close and hot, awful! Now it's spitting a wee bit. I also just saw the first lightning in the distance while typing these lines. Very dark outside, I hope we get a thunderstorm with a lot of rain. In the afternoon, we visited the tadpoles:

Tadpoles
@movq Thank you! Yeah, I'm quite lucky with nature indeed. Although, there can be quite some people around, too. Especially if the weather is cooperating. But it helps that I don't mind getting a bit dirty, so I can take smaller, less frequently travelled paths. :-) If I move one day, I will only relocate to rural areas with very few people (much less than here) and lots of nature, like Schwarzwald, Schwäbische Alb, Allgäu etc. The ever-growing population just sucks.
@prx I never heard of jot before. Often I simply use pwgen -sy 64.
This time I got some pictures and videos of the deer. However, only three were grazing over there, at the other end I could see two more. It was really cool watching them for 10-15 minutes coming up the paddock towards me. But the light disappeared, so shots didn't get any better over time (79 deer files and most were hopelessly blurred). What can you do. Also, the tadpoles are back again, yeah! It was my first encounter of the season. Looking forward to see them grow up.

Deer eating yummy grasses
@marado Hahaha, go for it! :-D
@movq Yeah, I do enjoy that. :-)
@movq Maybe also quite low hanging clouds. :-?
Woah mates, I'm telling you, today it was really worth it again! I got surprised by the rain, but the rainbow made up for everything. I saw plenty of birds, a nice sunset (by then my battery died once again) and seven deer! The first one when I had to pee in the woods. :-D It was maybe ten meters away from me. Really awesome, best view so far and hard to top! :-D About two minutes later, four deer were grazing on a pasture. A bit later one large deer was standing on a forest path and watching me. It was the only one that did not run away, even though I was walking past quite close to it, I reckon 10-15 meters. And at the end one was hiding in the shrubs two meters away from me. I'm super glad that I went outside this evening. :-)

Bird on a tree
Thanks, @thecanine. Haha, okay! That borders on cheating. :-D But now I'm wondering why I didn't think of that myself. Too easy.
@marado I see, thanks! Of course somebody had already thought of that. :-)
I had to use my tick stones twice today to crush those little bastards. I detected them on both of my hands shortly one after the other. Also came across two deer and finally managed to see some bees in closeup. My mate takes pictures of them for a month already. I reckon our seasons always lack a bit behind (but not this many weeks).

Bees on dandlions

Can't get enough and want more? This way! I've got you covered.
I'm wondering, has somebody ever tried to use these activity pixel matrices for some kind of art and create an image or text? It might become @thecanine's longest endeavor for a new grayscale dog so far. ;-)

Activity pixel display
Now there is a way to block feeds in yarns: https://git.mills.io/yarnsocial/search/pulls/16
Finally, both tool well boxes for the sawhorses are done. 09-11 illustrates the use on a small sawhorse. However, they will be screwed to a larger one.

Tool well boxes for sawhorses

I'm thinking that I might be better off if they can be just hung without any tools. The first thing that came to mind are two U-shaped hooks which are attached to the box and get simply hung into the sawhorse beam. In order to avoid bumps on the beam by the hooks, I could mortise two slots, so the hooks are then flush. But then I have some mortises in the top, which might not be ideal when the tool wells are not attached.

Another idea is to mount two larger dowels (~20 mm diameter) to the side of the tool well and drill two matching holes into the beam. Then the tool well could be slid in from the side. To avoid coming loose, a wedge could be inserted in a mortise of the dowel on the other side of the beam. Like a traditional wooden joint in benches and tables. Let's see what I end up with.~
And three quarter of an hour later the sun has done its job. Although, it's overcast now as I write this three photo update.
@stigatle With his right eye pulled up, he's gonna eat me every second! :-D He's enjoying his new chain, isn't he? Already ran around the tree stump a bunch of times. :-)
What a nice soup! Can't even see the other hillside. There are two minutes between 02 and 03, one can see the fog slightly clearing.

Thick fog
@movq Yeah. Although, two thunders the whole day (just a few minutes apart when we were in the forest), that was it. But a very rainy day. ;-)

If I press the trigger button halfway down (until I feel a slight resistence), the camera sets focus and exposure. They get locked when I hold it halfway. Only if I press it all the way, the picture is taken. After today's adventure the camera now triggers even when the button is only pressed halfway. Sometimes, maybe 10%, it works as it should. But the rest of the time, the photo is taken prematurely. I can feel both points, but the second one seems to have shifted upwards to the first one. This really sucks.

Had some nice fog and sunset today:

Very red sunset
@movq Man, this is very nice! The bugs in 4642 and 4630 are really cool. :-) The low hanging clouds or fog in 4651 remind me of my view this evening. In just about 15 minutes, fog rolled in. 4653 is an awesome cloud photo. Your videos 4611 and 4613 are also amazing. I love how the birds are singing and thunder roars in the distance. Just super cool. Fascinating to see how rapidly the storm moves in.
The weather forecast was completely off. Dry with two small exceptions of rain in the next hour, they said. Literally the opposite was true. Even got thunder twice. I can't get any wetter, legs and feet completely submerged in water. I had to wring out my socks and hiking trousers, shoes are too stiff, though. Should have worn rubber boots and a pair of rain trousers to my rain jacket. Even the camera went on strike (luckily, it works again). I have to admit, in the beginning, walking in the rain was really nice. But when you pump water with every step, it's getting a bit unpleasant.

https://lyse.isobeef.org/waldspaziergang-2023-04-28/
@prologic Yeah. Also cut my short side pieces 16 mm too long because I'm an idiot (and hence wasted a bit more board than needed). But better than trimmed too short. And luckily, it's reclaimed material, too. Gonna complete that project tomorrow. Hopefully.
@movq It's you-urgently-need-a-break-day!
Oh crap, the clamp on my router fence slipped, so the fence moved and now my board has a crooked rabbet. This is the side piece of a tool rest box that can be mounted on sawhorses, so it could be worse if it were some nice project for the house. But it still looks like shit. Always make sure everything is tight before flicking the switch, kids!

Particle board with fucked up rebbet
I don't like the idea of an additional special bang. DTD, bah! Why not simply use # doctype = whatever? Also, which problem does this solve? What would clients do differently? And humans just could look at the comment or URL and see that this feed makes use of extensions – if they care. Twtxt purists would certainly hate such a new thing, too, I don't think it helps them in any way. So I don't see the use case for that. Can you please elaborate, @darch, what you had in mind?

My feed's preamble starts with (links to be debatable):


# Learn more about twtxt at: https://github.com/buckket/twtxt
# This feed makes use of some extensions: https://dev.twtxt.net/
Thanks, @prologic! Hahaha, "fire lake from hell", I like that one! :-D 12 is zoomed into the sunset from 11's bottom right.
@prologic Phew, at first I thought that was ambient temperature. Glad you're over the worst part.
@prologic That's cute.
@carsten I think nothing of AI in general. Too often AI-stuff turned out to be some kind of fraud. My general opinion of AI is very bad. You don't know how or what the thing "learned", most often something very different than what one would think. Hence, there's no way to fix it if it's broken. And as far as I understand it one doesn't know when it's trained enough. So in my eyes it's a giant waste of resources. Anyways.
Hope you're doing alright, @carsten. Just a nice cloud formation on my way to the scout meeting. Added two more shots:

Sunset
@carsten Oh, all fake. Too bad.
It's nearly suncream time again. The sun is blazing down today. T-shirt weather at 16°C without much wind. Even 19°C tomorrow. The yellow dandelion blooms beautifully in the meadows. We went on a quick stroll.

Fenced in deer like the shade
@carsten Wow, good drawings! What program did you use? Looks like straight out of a comic book.
@carsten Ein Kuchenduft liegt in der Luft!
Oh yes, @ionores, I think the construction site is in the hedge. Some years back there were nests, too. But bloody cats mugged them. I hope the new residents are luckier this time.
Ta, @prologic!
Thanks, @movq! Yeah, that was really awesome. She just landed not even two meters next to me when I was taking photos of the sunset. There was just an empty washing line between me and her, but I reckon that doesn't really count. :-) Normally, they all fly off immediately (or not land in the first place), but she watched me for about a minute over her shoulders. And I in turn froze and tried to push the trigger as many times as possible before she suddenly took off. Due to the low light, most photos were quite blurred, she turned her head very often left and right. And it certainly did not help that my zoom was too close at first, too. I just got very, very, very lucky today. :-)
@xuu Heck, this is interesting! I did not know about plan files, just read up on them and yes, your conclusion seems spot on! ;-) Hahaha, very cool.
She was back this evening!

Female common blackbird with nest construction material in her beak
@prologic Damn, speedy recovery! In a few days you should be hopefully over the worst part. That's what I've heard and seen most of the time.
@darch Haha, all good. I actually expected that to be a software bug for sure, not user error. ;-) But better that way. Much easier to "fix", as proven. :-) And I can confirm, no more requests for that file.
@prologic Aha, got you! Thanks for digging that up. :-)
@xuu @prologic I will never give up threading! It's a very vital civil achievement.
Thanks, @prologic, these are common blackbirds: https://en.wikipedia.org/wiki/Common_blackbird
@prologic That would be great.
@prologic I only suggested to change the info page, not the user agent. ;-)
@prologic Ah, I see! But why are there no caching request headers sent along (judging by HTTP 200 instead of 304)?
@prologic I agree with @abucci, @darch and @marado. Also, in order to set a good example, we would have to rename our feed filenames which would break threading.
And another weird thing is that yarnd's User-Agent header now contains all sorts of build information: yarnd/0.15.1@7dd5a93e 2023-03-27T00:53:59+10:00 go1.20.3 (~https://… I reckon this is a regression from the version change on the info page I proposed on IRC months ago. Maybe even last year.

What a joy to look in the logs once in a while. :-D
Also, @darch's yarnd is requesting my /twtxt-2022-08.txt every few minutes (interval varies between ~2-5 minutes). Nothing seems to be cached, though, because 200 is sent all the time. Any idea what's going on here and how to fix it, @prologic?~
In yarnd one can block certain URLs. Is there a way to do the same in yarns, @prologic? If so, can you please add https://lyse.isobeef.org/user/lyse/twtxt.txt, http://lyse.isobeef.org and https://lyse.isobeef.org to the yarns blacklist? Especially the first URL spams my error log every hour. It might also be useful to do some housekeeping with other crap URLs: https://search.twtxt.net/stats/feeds/discovered?l=30&q=lyse&s=-failures
Blackbird looking at the camera

Please ignore the dirty railing. I simply claim that the blackbird only therefore feels so comfortable!! I just started to wipe it clean but then it began to rain. Gotta finish tomorrow.
Great, @stigatle! Is this a double free in https://github.com/stig-atle/YarnDesktopClient/blob/main/YarnDesktopClient.cpp#L126? curl_easy_cleanup is called twice (lines 126 and 128) in case of an error. Similarly in other code blocks.

And you're leaking memory: https://curl.se/libcurl/c/curl_slist_append.html You gotta have to call curl_slist_free_all. Maybe use a cURL C++ wrapper library or write your own wrapper around the C library to make your life a bit easier.

Regarding escaping the JSON input for your HTTP requests, have a look there: https://rapidjson.org/md_doc_stream.html#StringBuffer This is probably the easiest.

Yeah, I know, small baby steps. :-)
@stigatle That's what our weather looks like, too. A nice, dark gray rain soup.
@stigatle Happy hacking, mate! :-) Assuming that the server sends a proper certificate chain, you need just the root CA that signed the intermediate or server certificate locally in your key store.
@prologic You can't win them all. Just leave that channel. Fixed. :-)
Nice work, @stigatle! Didn't try to compile it because I don't run yarnd (and I avoid GTK like the plague), but looked at the code. First and foremost, I very strongly suggest you choose your favorite code formatter and apply it. :-) Especially the space placement is inconsistent. Secondly, if someone's password contains a quote, they're having a bad day. ;-)

Thirdly, are you sure about disabling TLS certificate checking? And one last remark: personally, I like early returns, it makes the code more readable in my opinion than deeply nested control structures. Especially, when the code gets longer, questions like "here's an else, what if did it belong to a few pages up?" are greatly reduced. Some people even say that grouping stuff into functions avoids long functions altogether.

Enjoy your pizza! I'll have some tomorrow. Dough is proving overnight.
@movq Wow, that's crazy.
@xuu @prologic @movq Not just limited to cloud.
@xuu @prologic Ta! Will work on that and improve it as time permits.
@movq That was veeerrry long indeed. :-D
I played around with parsers. This time I experimented with parser combinators for twt message text tokenization. Basically, extract mentions, subjects, URLs, media and regular text. It's kinda nice, although my solution is not completely elegant, I have to say. Especially my communication protocol between different steps for intermediate results is really ugly. Not sure about performance, I reckon a hand-written state machine parser would be quite a bit faster. I need to write a second parser and then benchmark them.

lexer.go and newparser.go resemble the parser combinators: https://git.isobeef.org/lyse/tt2/-/commit/4d481acad0213771fe5804917576388f51c340c0 It's far from finished yet.

The first attempt in parser.go doesn't work as my backtracking is not accounted for, I noticed only later, that I have to do that. With twt message texts there is no real error in parsing. Just regular text as a "fallback". So it works a bit differently than parsing a real language. No error reporting required, except maybe for debugging. My goal was to port my Python code as closely as possible. But then the runes in the string gave me a bit of a headache, so I thought I just build myself a nice reader abstraction. When I noticed the missing backtracking, I then decided to give parser combinators a try instead of improving on my look ahead reader. It only later occurred to me, that I could have just used a rune slice instead of a string. With that, porting the Python code should have been straightforward.

Yeah, all this doesn't probably make sense, unless you look at the code. And even then, you have to learn the ropes a bit. Sorry for the noise. :-)