# 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 6525
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=4096
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=4196
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=3996
@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. :-)
@prologic Thanks! Yeah, probably no winter anymore. But you'll never know what April has in petto.
Went into the woods for two hours and tried to take photos of birds. That didn't really work out. Too far away and quickly moving, branches in the way, which is messing with the autofocus. The fading light does the rest. I saw easily ten woodpeckers on one tree on a paddock, but they're super shy. Especially the green ones. It's impossible to sneak in. They fly off when I'm falling below 40-50 meters. The great spotted woodpecker in 12 was the last one on that tree and a second later it was gone, too. Gotta try harder next time.

Trees on a meadow with the sun in their backs
Cool, cool, cool, @stigatle! It's coming together. I reckon a wee bit of padding in the window wouldn't hurt. :-)
@stigatle I also prefer to host my own code myself. My mates and I have a server and there we run GitLab. But I only use GitLab because it is there. It would totally suffice me to use the filesystem for a bare git repo. I don't need all this fancy UI that GitLab or any other web UI brings. For bringing it to the public, making the git repo available over a webserver would be enough for me.

It depends on the project, its dependencies and the toolchain required to build it. But generally, compiling from source is fine with me, if I have all the tools on my system anyways. If somebody offered a Debian package, that would certainly be appreciated. These days, I rarely try out new software, though.
@jlj I see, interesting! So how many people did receive their new certificates in this public ceremony? Must have been a bunch if they also offer private ones. How long did it take? Is it just handing over paperworks with a short chat or is there also some sort of accompanying program?
@stigatle Oh yes. With some sunshine it would have been even nicer, but then the paths would also have been even more jammed with people. So overcast was totally alright. :-)
Parsing w/o Code Generators: Parser Combinators in Go with Generics: https://www.youtube.com/watch?v=x5p_SJNRB4U Oh yeah, this is really cool!
My mate and I went up our backyard mountain again. It only took us 45-50 minutes, but I was totally exhausted at the summit. Heaps of people were enjoying nature, too. Public holiday and vacation gets them out. Also, the summit restaurant drew a hell lot of folks. The rain front in the distance looked quite threatful, but we managed to escape. Only got light spit.

Frog spawn in a puddle
@prologic Ta!
Yesterday evening I had a feeling that my camera battery didn't charge properly. I didn't check, but sure enough, I was right. The battery indicator shows either a complete or only half a bar. I was down to one after taking the second photo. Oh well. Sun was hidden anyways. I had to visit the horror site and investigate a bit. I saw a forest mouse, the cam had already long failed me, though. Smell of freshly cut grass was in the air when I was returning. But back in town yucky rubber odor killed the nature experience quickly.

Some blue stuff that I do not know the name of, but it looks very cool
Thank you, @prologic! Hahahahaha! :-D In spoken German (at least here in the South) the word "bis" (to) is very often elimited in ranges. I think I heard that also in English. But maybe it's limited to integers and not being used when fractions are involved. I don't know. Interesting observation.
@prologic That's cool!
@prologic Correct, that's a concrete pump. The concrete mixer delivers the concrete mix in a funnel on the end of the pump. The concrete then gets pumped through the pipes and hoses and exits at the nozzle, hopefully in a concrete form. :-) These concrete pump trucks come in very handy if large quantities of concrete have to be put at higher elevations or where otherwise the reach of a regular concrete mixer is exceeded. The cheaper, but slower alternative is to use a concrete buckets on a crane. In order for the concrete pump to be able to pump it, the concrete must be much more liquid than usual. Special additives are added to the so called slump to make it suitable for pump use.

Jesse Muller has some nice videos on concrete mixers, pumps and buckets when he builds his house with insulated concrete forms, e.g. https://www.youtube.com/watch?v=OwW0iqmm3J8
Oh no, @carsten! Sorry to hear that. :-(
Achievement unlocked, grats, @jlj! I have to admit I first thought that this was shopped. Very good question, @movq. As a real brit jlj now has to serve in the military. This looks like being welcomed by some general. Yeah, I have absolutely no clue. ;-) Looking forward to the resolution.
@movq Yeah. :-D But I managed to survive the workday.
We had a blackout this afternoon for half, three quarters of an hour. Shortly after the fire brigade responded. I thought maybe the new kindergarden construction has caused something.

When I later went on my hike I saw that there was heavy machinery clearing the local scout site's surrounding wood lands. Both a harvester and forwarder were very busy. A few hundred meters further, a bunch of power company vehicles were parked. I could see 4WD cherry picker tire tracks in the grass leading to the clearing. So I reckon they threw a tree in the overhead power lines.

Fourth last tree getting cut down

The scout site is looking really terrible now. Very sad to see all these trees cut down. :-( I witnessed the killing of the last few trees there. Still have to edit all the video clips.

In the summer holidays that site hosts a forest recreation week where kids can build huts in the forest. Well, this time, there is no forest anymore. The sun will unbearably beat down. No shade in sight. Experiencing this today, I'm happy to be not part of this cool event anymore. Keeping my good memories.
@prx @prologic I'm slowly working on a rewrite of tt, that does not require a bunch of monkey patched libraries. Everything will be better. At least once finished. Whenvever that will be.
This night I dreamed that I will call it a day in a few minutes and then my alarm clock rang. That's when the nightmare practically started when I woke up.
Thank you, @prologic!