# 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 28
# self = https://watcher.sour.is/conv/n252jtq
@movq What about something like what Antenna does?, supplying a URL you can call to push your feed
Gemini - About Antenna
@eaplmx I’ll check that out at the weekend. 👌
@eaplmx I’ll check that out at the weekend. 👌
@eaplmx I’ll check that out at the weekend. 👌
@movq could be something interesting, I vaguely remember Trackback in blogs like something similar for discoverability. https://en.wikipedia.org/wiki/Trackback
@eaplmx Just found this again: https://github.com/buckket/twtxt/issues/109 There were already thoughts about this back in 2016. And even an implementation of it in txtnix. We should revisit this.
@eaplmx Just found this again: https://github.com/buckket/twtxt/issues/109 There were already thoughts about this back in 2016. And even an implementation of it in txtnix. We should revisit this.
@eaplmx Just found this again: https://github.com/buckket/twtxt/issues/109 There were already thoughts about this back in 2016. And even an implementation of it in txtnix. We should revisit this.
@movq yarnd already supports this by using WebMentions -- It's just been neglected over some months and I'm trying to fix it proper for the upcoming v0.13 release. Is WebMentions suitable here do you think? It _has_ worked well in the past across pods at least, and honestly isn't that hard to implement anywhere else either.
@movq yarnd already supports this by using WebMentions -- It's just been neglected over some months and I'm trying to fix it proper for the upcoming v0.13 release. Is WebMentions suitable here do you think? It _has_ worked well in the past across pods at least, and honestly isn't that hard to implement anywhere else either.
@movq @prologic No idea about Gopher nor Gemini nor the details of Webmentions, is the concept of Webmentions applicable to these two protocols, too?
@prologic Hmm. Some thoughts.

WebMentions are probably the best solution in a world with “HTTP + server-side code”. (You need something to process the POST request.)

The … well, let’s call it “beauty” … of the original twtxt spec was that sending special HTTP user agents does *not* require server-side code. You can just grep your logs. This is probably not relevant for Yarn, but it is for me – I run a plain httpd, no CGI, no PHP, no nothing. That thing serves static HTML and that’s it. And I want to keep it that way, because it saves me a lot of trouble.

So that’s one aspect.

Another aspect is Gemini and Gopher: While they do support user input, they don’t support multiple fields. I.e., source and target as it is specified by WebMentions won’t work. So you have to come up with your own format anyway.

So, yeah, what’s left? How could it be done? Maybe something like this:

- We need a format to specify feed URL and nick name. I’d simply go with this: ${source.nick} ${source.url}, e.g. movq https://www.uninformativ.de/twtxt.txt
- HTTP: A GET request with one percent-encoded parameter, e.g.: https://www.uninformativ.de/twtxt.txt?follow=movq%20https%3A%2F%2Fwww.uninformativ.de%2Ftwtxt.txt
- Gemini: A request with a percent-encoded parameter, e.g.: gemini://www.uninformativ.de/twtxt.txt?movq%20https%3A%2F%2Fwww.uninformativ.de%2Ftwtxt.txt
- Gopher: A “search request” (menu type 7), no need for percent encoding here, e.g.: /twtxt.txt<literal_tab>movq https://www.uninformativ.de/twtxt.txt

*If* you run server-side code, then it can interpret this additional payload. If you, like me, run nothing but static httpd, then the requests will usually be served as if there was no parameter – but the full query will usually show up in log files.

So basically, this would be like moving the info from the HTTP user agent to some other place where it’s supported for all protocols.

Now, we could send this parameter for *every* request, but I’m not sure if that’s a good idea. For one, it creates noise. Also, what if a server is pedantic and takes the request *literally*, i.e. it searches for a file called twtxt.txt?follow=movq%20https:%2F%2Fwww.uninformativ.de%2Ftwtxt.txt? Or maybe Gopher servers refuse to serve the twtxt.txt file if there’s a search parameter. So I guess it’s better to only do these “pingback requests” every once in a while.

Strictly speaking, we could ignore HTTP entirely and just keep using the user agent here. We would then only be using this new format for Gopher and Gemini. I’m not sure, though, if it’s a good idea to use such different methods depending on the protocol. On the other hand, we should care about backwards compatibility.
@prologic Hmm. Some thoughts.

WebMentions are probably the best solution in a world with “HTTP + server-side code”. (You need something to process the POST request.)

The … well, let’s call it “beauty” … of the original twtxt spec was that sending special HTTP user agents does *not* require server-side code. You can just grep your logs. This is probably not relevant for Yarn, but it is for me – I run a plain httpd, no CGI, no PHP, no nothing. That thing serves static HTML and that’s it. And I want to keep it that way, because it saves me a lot of trouble.

So that’s one aspect.

Another aspect is Gemini and Gopher: While they do support user input, they don’t support multiple fields. I.e., source and target as it is specified by WebMentions won’t work. So you have to come up with your own format anyway.

So, yeah, what’s left? How could it be done? Maybe something like this:

- We need a format to specify feed URL and nick name. I’d simply go with this: ${source.nick} ${source.url}, e.g. movq https://www.uninformativ.de/twtxt.txt
- HTTP: A GET request with one percent-encoded parameter, e.g.: https://www.uninformativ.de/twtxt.txt?follow=movq%20https%3A%2F%2Fwww.uninformativ.de%2Ftwtxt.txt
- Gemini: A request with a percent-encoded parameter, e.g.: gemini://www.uninformativ.de/twtxt.txt?movq%20https%3A%2F%2Fwww.uninformativ.de%2Ftwtxt.txt
- Gopher: A “search request” (menu type 7), no need for percent encoding here, e.g.: /twtxt.txt<literal_tab>movq https://www.uninformativ.de/twtxt.txt

*If* you run server-side code, then it can interpret this additional payload. If you, like me, run nothing but static httpd, then the requests will usually be served as if there was no parameter – but the full query will usually show up in log files.

So basically, this would be like moving the info from the HTTP user agent to some other place where it’s supported for all protocols.

Now, we could send this parameter for *every* request, but I’m not sure if that’s a good idea. For one, it creates noise. Also, what if a server is pedantic and takes the request *literally*, i.e. it searches for a file called twtxt.txt?follow=movq%20https:%2F%2Fwww.uninformativ.de%2Ftwtxt.txt? Or maybe Gopher servers refuse to serve the twtxt.txt file if there’s a search parameter. So I guess it’s better to only do these “pingback requests” every once in a while.

Strictly speaking, we could ignore HTTP entirely and just keep using the user agent here. We would then only be using this new format for Gopher and Gemini. I’m not sure, though, if it’s a good idea to use such different methods depending on the protocol. On the other hand, we should care about backwards compatibility.
@prologic Hmm. Some thoughts.

WebMentions are probably the best solution in a world with “HTTP + server-side code”. (You need something to process the POST request.)

The … well, let’s call it “beauty” … of the original twtxt spec was that sending special HTTP user agents does *not* require server-side code. You can just grep your logs. This is probably not relevant for Yarn, but it is for me – I run a plain httpd, no CGI, no PHP, no nothing. That thing serves static HTML and that’s it. And I want to keep it that way, because it saves me a lot of trouble.

So that’s one aspect.

Another aspect is Gemini and Gopher: While they do support user input, they don’t support multiple fields. I.e., source and target as it is specified by WebMentions won’t work. So you have to come up with your own format anyway.

So, yeah, what’s left? How could it be done? Maybe something like this:

- We need a format to specify feed URL and nick name. I’d simply go with this: ${source.nick} ${source.url}, e.g. movq https://www.uninformativ.de/twtxt.txt
- HTTP: A GET request with one percent-encoded parameter, e.g.: https://www.uninformativ.de/twtxt.txt?follow=movq%20https%3A%2F%2Fwww.uninformativ.de%2Ftwtxt.txt
- Gemini: A request with a percent-encoded parameter, e.g.: gemini://www.uninformativ.de/twtxt.txt?movq%20https%3A%2F%2Fwww.uninformativ.de%2Ftwtxt.txt
- Gopher: A “search request” (menu type 7), no need for percent encoding here, e.g.: /twtxt.txt<literal_tab>movq https://www.uninformativ.de/twtxt.txt

*If* you run server-side code, then it can interpret this additional payload. If you, like me, run nothing but static httpd, then the requests will usually be served as if there was no parameter – but the full query will usually show up in log files.

So basically, this would be like moving the info from the HTTP user agent to some other place where it’s supported for all protocols.

Now, we could send this parameter for *every* request, but I’m not sure if that’s a good idea. For one, it creates noise. Also, what if a server is pedantic and takes the request *literally*, i.e. it searches for a file called twtxt.txt?follow=movq%20https:%2F%2Fwww.uninformativ.de%2Ftwtxt.txt? Or maybe Gopher servers refuse to serve the twtxt.txt file if there’s a search parameter. So I guess it’s better to only do these “pingback requests” every once in a while.

Strictly speaking, we could ignore HTTP entirely and just keep using the user agent here. We would then only be using this new format for Gopher and Gemini. I’m not sure, though, if it’s a good idea to use such different methods depending on the protocol. On the other hand, we should care about backwards compatibility.
@movq Hmmm after carefully reading your crique, I'm inclined to agree with you with respect to entirely dropping the notion of any kind of "hey I'm trying to mention you here!". That is to say, the original spec (_for all it's short ocmings_), really it's beauty was the "pull mode" which I really quite like.

So... Can we just decide never to support this at all? And instead expect (_which is up to clients really and doesn't need to be roamlized_) clients to keep track of if they've been mentioned already be mere fact of parsing feeds they follow?
@movq Hmmm after carefully reading your crique, I'm inclined to agree with you with respect to entirely dropping the notion of any kind of "hey I'm trying to mention you here!". That is to say, the original spec (_for all it's short ocmings_), really it's beauty was the "pull mode" which I really quite like.

So... Can we just decide never to support this at all? And instead expect (_which is up to clients really and doesn't need to be roamlized_) clients to keep track of if they've been mentioned already be mere fact of parsing feeds they follow?
The only downside of course is, new discovery. It is impossible to know, reach out to someone new, without them first following you. But that was always a shortcoming before. Do we really need this? Or should "social connections" be organic anyway? I don't know... 🤔 I'm included personally to rm -rf *webmention* all the code in yarnd as it's hard to support anyway...
The only downside of course is, new discovery. It is impossible to know, reach out to someone new, without them first following you. But that was always a shortcoming before. Do we really need this? Or should "social connections" be organic anyway? I don't know... 🤔 I'm included personally to rm -rf *webmention* all the code in yarnd as it's hard to support anyway...
@lyse Yes WebMentions could be applied to gopher and Gemini I think
@lyse Yes WebMentions could be applied to gopher and Gemini I think
@prologic Oh, hold on, we’re talking about two different things here. 😅

Yes, I agree: There doesn’t need to be a mechanism for actively sending a message from user A to user B when user A mentions user B.

What I meant, though, was indeed discovery of new feeds. Or rather: New followers. At the moment, you can only find out about new followers by inspecting their HTTP user agents – and *that* only works via HTTP. So, for the purpose of notifying feed authors about new followers, I was proposing a pingback-like mechanism. (And I think this is also what the original GitHub issue from 2016 was talking about.)
@prologic Oh, hold on, we’re talking about two different things here. 😅

Yes, I agree: There doesn’t need to be a mechanism for actively sending a message from user A to user B when user A mentions user B.

What I meant, though, was indeed discovery of new feeds. Or rather: New followers. At the moment, you can only find out about new followers by inspecting their HTTP user agents – and *that* only works via HTTP. So, for the purpose of notifying feed authors about new followers, I was proposing a pingback-like mechanism. (And I think this is also what the original GitHub issue from 2016 was talking about.)
@prologic Oh, hold on, we’re talking about two different things here. 😅

Yes, I agree: There doesn’t need to be a mechanism for actively sending a message from user A to user B when user A mentions user B.

What I meant, though, was indeed discovery of new feeds. Or rather: New followers. At the moment, you can only find out about new followers by inspecting their HTTP user agents – and *that* only works via HTTP. So, for the purpose of notifying feed authors about new followers, I was proposing a pingback-like mechanism. (And I think this is also what the original GitHub issue from 2016 was talking about.)
@movq Oh I see yes you are right slightly different but overlapping ideas Hmmmm 🤔
@movq Oh I see yes you are right slightly different but overlapping ideas Hmmmm 🤔
@movq Very interesting ideas! I think this needs to boil a little bit in our heads, before we can come to a conclusion.
@lyse @movq The thing is yarnd always supported the use of WebMentions -- It's been broken for a while because well priorities and we desperately need to slow down and focus on e2e integration tests (_yes I know @lyse !_) -- But it got fixed proper today once and for all, and it works really nicely.
@lyse @movq The thing is yarnd always supported the use of WebMentions -- It's been broken for a while because well priorities and we desperately need to slow down and focus on e2e integration tests (_yes I know @lyse !_) -- But it got fixed proper today once and for all, and it works really nicely.