# 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 6164
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5616
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5716
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5516
@bender Oohh, I see! :-D
@xuu I don't understand. Apart from the sentence being incomplete, what's "EF"?
@movq Yesterday, it was relatively nice at 11°C or so. Very windy and completely gray, though. Today, the sun was out at roughly just 5°C. The colors glowed much more in reality than in the photos: https://lyse.isobeef.org/morgensonne-2024-11-20/

I finally changed the broken gear shift bowden cable of my bicycle in a longer lunch break.
@bender My made-up rule is to keep at least three full months in the main feed and when rotating, I create one feed per month.

@doesnm There is no real recommendation I think. But if you hit half a MiB or so, it might be worth considering to rotate in order to keep the network traffic low. People with bad connectivitiy might appreciate it. I want to implement HTTP range requests in my client rewrite at some point in time (but first, it has to become kinda usable, though).
@sorenpeter @movq Hell yeah, this is awesome! :-)
Time to rotate three months into archive feeds again.
@prologic Hahaha! :'-D
@movq @bender Right, sooo strange. :-D But it worked, they managed to make me talk about that. Damn.
@movq @prologic Thank you! Yeah, the evening (and also morning) sun creates an absolutely great light. I really love it, it never gets old.
@movq When looking closely in the woods, I can spot ants that are sized the width of a finger. Soldier ants are also often larger than the workers they protect. But yeah, most ants in our regions are relatively small. :-)
Got an advertising handout in the letterbox that a pizzeria will offer and also deliver brick-oven-baked pizza starting 1st April.
Taking photos from a moving car is a tough challenge. https://lyse.isobeef.org/abendheimfahrt-2024-11-16/ Setting sun
@prologic @bender I can't make it, we tidy up our scout yard.
@movq Oh, cool. Larger than the the workers. I don't know the actual size of this test tube, but when this is a regular sized one, the queen is still not that big.
@prologic @bender No worries. In the end you did it all with your backup. And sorry for my exported timezone mess. :-/
@movq I'm all in on paper. In fact I noted down a todo item today on a physical sheet of paper when I was on the phone with a workmate. It then occurred to me that I could have just written it in a scratch file.

The parchment, on the other hand, might be a bit wasteful for just temporary ideas that are not perfectly layed out yet.
@wbknl @bender For improved longevity you should consider carving in steel or stone. This also has the additional benefit that you think more carefully before actually noting it down.
@bender The world is full of fools. One of 'em might even buy that for this money. O_o Even the original price is a total ripoff in my opinion.
@bender Try blocking JS.
@movq Yeah, the Swiss and C++ programmers use apostrophes. :-) My grandpa had an electronic desk calculator that also used some kind of apostrophes as the thousands separator on its cool display. Maybe it consisted of Nixie tubes, can't remember anymore.

I think non-breaking spaces are preferred nowadays to avoid the confusion.
@movq The dot is the thousands separator, so I'm surprised that it did not interpret it as €334,900.00. Luckily, you caught it in time! :-)
@xuu Hahaha, nice expression. :-D
@bender Fair point, could be. I probably have to implement it first or create some kind of a mockup to spare me the effort of some feature that I rip out again. :-)
@xuu Yep!
@movq Riiiight, I now remember reading that a long time ago. :-)
@bender I now read the German Wikipedia article on fog. These are some really beautiful pictures:

* https://upload.wikimedia.org/wikipedia/commons/a/a9/Nebelbank_in_der_W%C3%BCste_Namib_bei_Aus_%282018%29.jpg
* https://upload.wikimedia.org/wikipedia/commons/1/17/Space_Shuttle_Challenger_moving_through_fog.jpg
* https://upload.wikimedia.org/wikipedia/commons/9/96/Fog_Bow_%2819440790708%29.jpg
* https://upload.wikimedia.org/wikipedia/commons/a/ac/360_degrees_fogbow.jpg
@sorenpeter Section 7 on emojis: Exactly that, it's an avatar for text interfaces. The metadata name needs tweaking, but that's a cool idea. If I implemented this in my client, I'd make the text avatar overridable by the user, though. Otherwise I'd probably only see boxes for everbody in my terminal. :-D
@xuu LOL :-D
Thank you, @eapl.me! No need to apologize in the introduction, all good. :-)

Section 3: I'm a bit on the fence regarding documenting the HTTP caching headers. It's a very general HTTP thing, so there is nothing special about them for twtxt. No need for the Twtxt Specification to actually redo it. But on the other hand, a short hint could certainly help client developers and feed authors. Maybe it's thanks to my distro's Ngninx maintainer, but I did not configure anything for the Last-Modified and ETag headers to be included in the response, the web server just already did it automatically.

The more that I think about it while typing this reply, the more I think your recommendation suggestion is actually really great. It will definitely beneficial for client developers. In almost all client implementation cases I'd say one has to actually do something specifically in the code to send the If-Modified-Since and/or If-None-Match request headers. There is no magic that will do it automatically, as one has to combine data from the last response with the new request.

But I also came across feeds that serve zero response headers that make caching possible at all. So, an explicit recommendation enables feed authors to check their server setups. Yeah, let's absolutely do this! :-)

Regarding section 4 about feed discovery: Yeah, non-HTTP transport protocols are an issue as they do not have User-Agent headers. How exactly do you envision the discovery_url to work, though? I wouldn't limit the transports to HTTP(S) in the Twtxt Specification, though. It's up to the client to decide which protocols it wants to support.

Since I currently rely on buckket's twtxt client to fetch the feeds, I can only follow http(s):// (and file://) feeds. But in tt2 I will certainly add some gopher:// and gemini:// at some point in time.

Some time ago, @movq found out that some Gopher/Gemini users prefer to just get an e-mail from people following them: https://twtxt.net/twt/dikni6q So, it might not even be something to be solved as there is no problem in the first place.

Section 5 on protocol support: You're right, announcing the different transports in the url metadata would certainly help. :-)

Section 7 on emojis: Your idea of TUI/CLI avatars is really intriguing I have to say. Maybe I will pick this up in tt2 some day. :-)
Perfect, @eapl.me, it's fixed again. In fact this editor seems to support the Unicode line separator character all too well, otherwise it would not have replaced it in the first place. :-D Time to switch to a more unintelligent editor. ;-)
Thanks, @bender. I try to.
I haven't noticed any smell of fog, @bender. Might @nff's experience stem from a similar phenomenon that creates a lovely smell after a good, air-cleaning rain shower?
I built another small shelf for the drill press. I upcycled the wooden sticks from New Year rockets that littered the neighborhood. I really love the rustic look of it: https://lyse.isobeef.org/tmp/tischbohrmaschinenregal/

Shelf sitting on the drill press table before installing it between the posts of the stand

When I glued the shelf between the posts of the stand, I tightened the long clamp too hard, ripping the back panel and shelf board apart. So, I had to reglue them. :-)
Righto, @eapl.me, ta for the writeup. Here we go. :-)

Metadata on individual twts are too much for me. I do like the simplicity of the current spec. But I understand where you're coming from.

Numbering twts in a feed is basically the attempt of generating message IDs. It's an interesting idea, but I reckon it is not even needed. I'd simply use location based addressing (feed URL + '#' + timestamp) instead of content addressing. If one really wanted to, one could hash the feed URL and timestamp, but the raw form would actually improve disoverability and would not even require a richer client. But the majority of twtxt users in the last poll wanted to stick with content addressing.

yarnd actually sends If-Modified-Since request headers. Not only can I observe heaps of 304 responses for yarnds in my access log, but in Cache.FetchFeeds(…) we can actually see If-Modified-Since being deployed when the feed has been retrieved with a Last-Modified response header before: https://git.mills.io/yarnsocial/yarn/src/commit/98eee5124ae425deb825fb5f8788a0773ec5bdd0/internal/cache.go#L1278

Turns out etags with If-None-Match are only supported when yarnd serves avatars (https://git.mills.io/yarnsocial/yarn/src/commit/98eee5124ae425deb825fb5f8788a0773ec5bdd0/internal/handlers.go#L158) and media uploads (https://git.mills.io/yarnsocial/yarn/src/commit/98eee5124ae425deb825fb5f8788a0773ec5bdd0/internal/media_handlers.go#L71). However, it ignores possible etags when fetching feeds.

I don't understand how the discovery URLs should work to replace the User-Agent header in HTTP(S) requests. Do you mind to elaborate?

Different protocols are basically just a client thing.

I reckon it's best to just avoid mixing several languages in one feed in the first place. Personally, I find it okay to occasionally write messages in other languages, but if that happens on a more regularly basis, I'd definitely create a different feed for other languages.

Isn't the emoji thing "just" a client feature? So, feed do not even have to state any emojis. As a user I'd configure my client to use a certain symbol for feed ABC. Currently, I can do a similar thing in tt where I assign colors to feeds. On the other hand, what if a user wants to control what symbol should be displayed, similar to the feed's nick? Hmm. But still, my terminal font doesn't even render most of emojis. So, Unicode boxes everywhere. This makes me think it should actually be a only client feature.
@prologic Yeah, the principle of data economy. :-)

Btw. if you blindly run the command again in a few days, your query might match new feeds that are not included in today's list. Hence, some accounts might be dropped without a warning. But then, they probably don't care.
Hey @eapl.me, your feed is broken. All U+2028 got transformed into newlines.
@movq Ta! Absolutely, go for it. :-)
@movq Oh, it's only now that I got it… :-D
@falsifian Thanks mate! It just occurred to me the other night that my alt choices are not the best. I should probably fix them.

This also reminds me of a JS snippet my mate wrote for navigation in browsers that don't support incrementing numbers in the URLs. I'm using Tridactyl in Firefox and can Ctrl+A/Ctrl+X myself through albums with properly named files.
@movq :-D
@movq Yeah, I like the unstacked one better, too. But still a nice experiment I have to say. :-)
Went on a really cool walk today after the sun came out this arvo. Just 11°C and a fair bit of wind required a scarf and beanie. I love the autumn colors a lot and never tire of looking at them.

On the summit the view was absolutely terrible, because there were super low hanging clouds. But it still looked fairly spectacular. Very surreal, I could not make out the edge of the Swabian Alb. The haze just blended with the rest of the sky. Towards the sun it was just one giant white wall after half a kilometer or so. That doesn't happen all that often here.

After dusk I saw five deer on a meadow. Well their outlines against the remaining backlit sky.

https://lyse.isobeef.org/waldspaziergang-2024-11-04/

Beautiful colors in the woods
@movq Because who would enjoy their show then if they took their audience with 'em?
@bender Enjoy your vacation! I've got you covered as I'm currently building a voodoo doll out of silvester rocket sticks in the form of a small shelf for my drill needles.
Yeah, @movq, on this week's episode of Hair Care Tips™ with Lyse: It's super rare that I have spray cream, but at the moment there is a can in the fridge. After giving it a good shake, I parked the lid right next to the plate on the cold ceran stove, so I could apply some cream on my piece of apple pie. I then put the lid back on and noticed that there was some cream on the stove now. Since I did not move the plate, I dragged my long hair right through… :-)
@movq Some more options:

3. Summer lightning.
4. Obviously aliens@11!!@1

I once saw a light show in the woods originating most likely from a disco a few kilometers away. That was also pretty crazy. There was absolutely zero sound reaching the valley I was in.
I dripped some whipped cream from the lid on the stove. When I licked it up I pulled my hair through the cream on my cake. :-D
Oh no, @movq, get well soon! My voice also sounds like it's coming from a tin can.

Did you manage to already hide it all in your tummy, @bender? :-)
@movq Congrats, this is cool! :-) When I returned yesterday, I saw also a bunch of those.
@bender Exactly. :-) My apologies for the confusion.
I'm with @movq here and like to avoid bolting on more alternatives. Sorry @prologic.
They're already half way down, @prologic. Some trees are completely naked by now when I look out the window.
I'm a bit late to game this time, but I just went through my photos from last week. Leaves are definitely changing colors. https://lyse.isobeef.org/waldspaziergang-2024-10-24/

Leaves and cows
I attempted to build a small try-square, but my metal working skills totally suck. I tried to flatten the metal blade with a file, but I didn't reach my own goal. It's not perfectly straight. The square is almost 90°, it shifted a wee bit when drilling the holes for the pins. Also, the blade is 0.1mm off of being parallel. I have to try again or simply just buy one.

Homemade try-square next to real square

https://lyse.isobeef.org/tmp/anschlagwinkel/
Christmas trees in the shop: https://lyse.isobeef.org/tmp/tannenbaeume.jpg
@Codebuzz That's what I figure as well, thus my robot.txt looks like that:

User-agent: *
Disallow: /
Allow: /$*
@sorenpeter I started out with Konversation (KDE IRC client) but then moved to weechat over a decade later or so. I just like the terminal. In both setups I was just online when my computer was running.

Recently, @bender made me finally switch to weechat in a tmux session on my server: tmux new -s irc and then run weechat inside. On my local computer I then simply attach to that session, even got an alias for that: alias irc='ssh -t isobeef tmux attach -t irc' I'm now basically online 24/7 and can skip over the new messages in the backlog by hand when I start my local computer. :-D

I'm very happy with that. Can't imagine ever going back right now. I'm also wondering why it took me all those years to finally make the small step. Happy IRCing!
@movq @bender Oh yeah, cool, thanks! Wow, the number of strings picked up a lot over time.
That harp (or whatever you wanna call this instrument) playing is very fascinating to watch: https://www.youtube.com/watch?v=564u39PJfUI
@prologic Yep, looks alright. I just amended two typos: https://git.mills.io/yarnsocial/twtxt.dev/pulls/3
Absolutely, @movq. :-)
@prologic Unless somebody decides to change nicknames (which happened before).
Haha, 13 years later I got the response that my reported bug in GNAT (GNU Ada compiler) had been fixed a long time ago: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50263
@bender Well, I can't help it. I just saw the parse error popping up. ¯\_(ツ)_/¯

Oh, and the lang metadata field is indented with tabs, breaking the nice visual alignment._
@bender Well, I can't help it. I just saw the parse error popping up. ¯\\_(ツ)_/¯

Oh, and the lang metadata field is indented with tabs, breaking the nice visual alignment._
Hey @Codebuzz, looks like your second twt has a broken timestamp. :-)
@movq In our case at work the new behavior can indeed be considered an improvement. systemd would then restart the new version automatically if the old one crashed. Still, crashing in the first place is very uncool. We don't have a recent enough kernel version, though.
Heck yeah, this is some amazing space porn from ESA! https://dlmultimedia.esa.int/download/public/videos/2024/10/023/orig-2410_023_AR_EN.mp4
@movq My grandpa was very picky about the time and insisted on starting at 15:00 on time. Maybe that's a Swabian thing, I don't know.
@movq Nice!
@movq Kaffee und Kuchen erst um vier Uhr? Da sind die beiden aber 'ne ganze Stunde zu spät dran! Und wie hebt sie denn das Messer, eieiei?!

Lol, Schnitzelklopfen mit einem in Tüte eingepackten Schlosserhammer, das kam mir so auch noch nie unter. :-D

"Like a true German, I'm going to open this beer with my eye socket." Hahahahahahaaaaa! :-D
@movq We are just a terrible species. :-(
I thought I lost one of my knives at the flea market this year, but luckily, I just found it in my washbag. Woohoo, yippee! :-) So, I only miss the other that must have fallen out of my pocket when I cycled to the scouts last month.
@aelaraji Yeah, remebering them is a challenge. It often helped me in the past to just try using one or two new commands over and over again. But that obviously doesn't work that well when the specialized command does not come up in daily routines all that often.
@aelaraji Nice tricks, ta! I actually came across di{ some time ago but entirely forgot about it.
@aelaraji Hahaha. :-D I saw some TLS errors today when fetching your feed. Welcome back. :-)
@prologic @bender A 15-year-old reported a security vulnerability in some shitware and they acted like absolute dickheads. Unfortunately, that's how it often goes. The internet is full of similar reports where people a treated like that by companies, sometimes even way worse than that.

Read it, prologic, it's totally worth it. That's a great writeup by some very cool dude.

The PR article by the company just speaks for itself and reinforces their dick move. No more questions. https://support.zendesk.com/hc/en-us/articles/8187090244506-Email-user-verification-bug-bounty-report-retrospective
Haha, I love it! https://gist.github.com/hackermondev/68ec8ed145fcee49d2f5e2b9d2cf2e52
@movq Und nicht behebt. Schlag ich morgen mal unserem Auftraggeber vor. 8->
@movq Yup, I think that's my favorite season.
I do not notice any lag with my Logitech Lift. Haven't changed the inital battery from July last year yet. I have to say I'm rather impressed. The only reason for this cordless mouse is that I haven't found a vertical mouse with a tail. Otherwise, I'd 100% taken that.
Autumn is there: https://lyse.isobeef.org/morgensonne-2024-10-11/ Colored leaves in front of dark sky
@prologic Bluetooth still classifies as connecting remotely. The attacker has to be in close proximity, but yeah. If you use it only where noone else is around, you're fine. :-)
@prologic I have no clue, but the only thing that comes to mind is that chances of RCE are higher the more it exposes.
Just to be clear, I'm 100% for mandating UTF-8 and only UTF-8. Nothing else. Exactly how it has always been.

I just like to send a proper Content-Type stating the right encoding to be a good web citizen. That's all. :-)
Righto @anth, v2 is up again for me:

> Clients (and human readers) just assume a flat threading
> structure by default, read things in order […]

I might misunderstand this, but I slightly disagree. Personally, I like to look at the tree structure and my client also does present me the conversation tree as an actual tree, not a flat list. Yes, this gets messy when there are a lot of branches and long messages, but I managed to live with that. Doesn't happen very often. Anyway, just a personal preference. Nothing to really worry.

> The v2 spec requires each reply to re-calculate the hash
> of the specific entry I’m replying to […]

Hmmmm, where do you read that the client has to re-calculate the hash on reply? (Sorry, I'm probably just not getting your point here in the entire paragraph.)

> Clients should not be expected to track conversations back
> across forking points […]

I agree. It totally depends on the client.
Righto @anth, v2 is up again for me:

> Clients (and human readers) just assume a flat threading
> structure by default, read things in order \n

I might misunderstand this, but I slightly disagree. Personally, I like to look at the tree structure and my client also does present me the conversation tree as an actual tree, not a flat list. Yes, this gets messy when there are a lot of branches and long messages, but I managed to live with that. Doesn't happen very often. Anyway, just a personal preference. Nothing to really worry.

> The v2 spec requires each reply to re-calculate the hash
> of the specific entry I’m replying to \n

Hmmmm, where do you read that the client has to re-calculate the hash on reply? (Sorry, I'm probably just not getting your point here in the entire paragraph.)

> Clients should not be expected to track conversations back
> across forking points \n

I agree. It totally depends on the client.
@movq If my memory serves me right, I think v2 doesn't mention UTF-8 at all. Then I came along and noted that the Content-Type: text/plain might be not enough, as the HTTP spec defaults to Latin1 or whatever, not UTF-8. So there is a gap or room for incorrect interpretation. I could be wrong, but I understand @anth's comment that he doesn't want to even have a Content-Type header in the first place.

I reckon it should be optional, but when deciding to sending one, it should be Content-Type: text/plain; charset=utf-8. That also helps browsers pick up the right encoding right away without guessing wrong (basically always happens with Firefox here). That aids people who read raw feeds in browsers for debugging or what not. (I sometimes do that to decide if there is enough interesting content to follow the feed at hand.)
Merci, @movq! Back to gray this afternoon again, mostly dry, though.
Cool, @anth, thanks for the followup! I have to reread the original v2 in order to really follow your explanation, but that document seems to be offline at the moment. I'll try again later. :-)
Oh no, @xuu. :-( Speedy recovery and I hope you still miss out on long-covid.
Ta, @prologic!
Finally, a sunny day. I jumped at the opportunity and went for a quick evening stroll: https://lyse.isobeef.org/waldspaziergang-2024-10-09/

Bee hives in the evening shade
Good luck and all the best wishes, @bender. Please don't die!
@movq That was indeed an interesting dive! I also never heard of just before.
LOL: http://gopher.quux.org:70/Humor%20and%20Fun/Microsoft_KSH.txt|/MBOX-MESSAGE/1
Couldn't agree more, great article!
@movq No, that's just a general SQLite thing: https://gitlab.com/cznic/sqlite/-/issues/102 But, mkdir -p $dir and just retrying the command works.
@movq yarnd, jenny and tt.
@bender Yep, certainly not a larger city, just a ~20k town.~