# 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 15156
# self = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=12575
# next = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=12675
# prev = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=12475
@david Yeah, but it happened so fast with him. šŸ˜… I remember watching some of his talks 1-3 years ago, looked completely different, I think. šŸ˜…

Luckily I can still recognize the voice, so I know it’s him, lol.
@lyse The hash/thread-id would be shorter, but you’d lose two other benefits of (replyto:…):

1. You need a special client again to compute hashes.
2. The original feed URL is no longer visible, thus you might need to ask a Yarn pod occasionally for missing twts (I do that surprisingly often, now that I’ve implemented it) – but now you’ve lost the guarantee that Yarn gives you the correct information, because you can no longer verify it.
@lyse The hash/thread-id would be shorter, but you’d lose two other benefits of (replyto:…):

1. You need a special client again to compute hashes.
2. The original feed URL is no longer visible, thus you might need to ask a Yarn pod occasionally for missing twts (I do that surprisingly often, now that I’ve implemented it) – but now you’ve lost the guarantee that Yarn gives you the correct information, because you can no longer verify it.
@lyse The hash/thread-id would be shorter, but you’d lose two other benefits of (replyto:…):

1. You need a special client again to compute hashes.
2. The original feed URL is no longer visible, thus you might need to ask a Yarn pod occasionally for missing twts (I do that surprisingly often, now that I’ve implemented it) – but now you’ve lost the guarantee that Yarn gives you the correct information, because you can no longer verify it.
@lyse The hash/thread-id would be shorter, but you’d lose two other benefits of (replyto:…):

1. You need a special client again to compute hashes.
2. The original feed URL is no longer visible, thus you might need to ask a Yarn pod occasionally for missing twts (I do that surprisingly often, now that I’ve implemented it) – but now you’ve lost the guarantee that Yarn gives you the correct information, because you can no longer verify it.
@lyse Right, feed rotation gets ugly. We’d have (replyto:example.com/tw.txt,$timestamp) but maybe that feed doesn’t actually contain that stamp, so you have to got further back … but you should NOT reference an archived feed in your (replyto:…) thingy, it should still be the ā€œmain feed URLā€ (because the contents of archived feeds aren’t stable, see @prologic’s feeds for example). That’s not too great.

Man, I’m completely torn on this. I’d almost prefer not to decide anything. šŸ˜‚
@lyse Right, feed rotation gets ugly. We’d have (replyto:example.com/tw.txt,$timestamp) but maybe that feed doesn’t actually contain that stamp, so you have to got further back … but you should NOT reference an archived feed in your (replyto:…) thingy, it should still be the ā€œmain feed URLā€ (because the contents of archived feeds aren’t stable, see @prologic’s feeds for example). That’s not too great.

Man, I’m completely torn on this. I’d almost prefer not to decide anything. šŸ˜‚
@lyse Right, feed rotation gets ugly. We’d have (replyto:example.com/tw.txt,$timestamp) but maybe that feed doesn’t actually contain that stamp, so you have to got further back … but you should NOT reference an archived feed in your (replyto:…) thingy, it should still be the ā€œmain feed URLā€ (because the contents of archived feeds aren’t stable, see @prologic’s feeds for example). That’s not too great.

Man, I’m completely torn on this. I’d almost prefer not to decide anything. šŸ˜‚
@lyse Right, feed rotation gets ugly. We’d have (replyto:example.com/tw.txt,$timestamp) but maybe that feed doesn’t actually contain that stamp, so you have to got further back … but you should NOT reference an archived feed in your (replyto:…) thingy, it should still be the ā€œmain feed URLā€ (because the contents of archived feeds aren’t stable, see @prologic’s feeds for example). That’s not too great.

Man, I’m completely torn on this. I’d almost prefer not to decide anything. šŸ˜‚
… then, of course, I wouldn’t *need* to ask a Yarn pod for a certain twt if we used (replyto:…) instead of (#123467), because the original source of the twt is no longer obscured by a hash value and I can just pull the original feed. Asking a Yarn pod is only interesting at the moment because I have no idea where to get (#123467) from.

Only when the original feed has gone offline will querying a Yarn pod become relevant again.

I have to admit here that some of the goals/philosophy of Yarn simply don’t apply to my use cases. šŸ˜… I don’t run a daemon that speaks a gossipping protocol with neighboring pods or stuff like that. I think I don’t have a hard time accepting that feeds might go offline in two months, so be it. Digging up ancient twts from some sort of globally distributed file system isn’t one of my goals. It’s a completely different thing for me. Hmmm. šŸ¤”
… then, of course, I wouldn’t *need* to ask a Yarn pod for a certain twt if we used (replyto:…) instead of (#123467), because the original source of the twt is no longer obscured by a hash value and I can just pull the original feed. Asking a Yarn pod is only interesting at the moment because I have no idea where to get (#123467) from.

Only when the original feed has gone offline will querying a Yarn pod become relevant again.

I have to admit here that some of the goals/philosophy of Yarn simply don’t apply to my use cases. šŸ˜… I don’t run a daemon that speaks a gossipping protocol with neighboring pods or stuff like that. I think I don’t have a hard time accepting that feeds might go offline in two months, so be it. Digging up ancient twts from some sort of globally distributed file system isn’t one of my goals. It’s a completely different thing for me. Hmmm. šŸ¤”
… then, of course, I wouldn’t *need* to ask a Yarn pod for a certain twt if we used (replyto:…) instead of (#123467), because the original source of the twt is no longer obscured by a hash value and I can just pull the original feed. Asking a Yarn pod is only interesting at the moment because I have no idea where to get (#123467) from.

Only when the original feed has gone offline will querying a Yarn pod become relevant again.

I have to admit here that some of the goals/philosophy of Yarn simply don’t apply to my use cases. šŸ˜… I don’t run a daemon that speaks a gossipping protocol with neighboring pods or stuff like that. I think I don’t have a hard time accepting that feeds might go offline in two months, so be it. Digging up ancient twts from some sort of globally distributed file system isn’t one of my goals. It’s a completely different thing for me. Hmmm. šŸ¤”
… then, of course, I wouldn’t *need* to ask a Yarn pod for a certain twt if we used (replyto:…) instead of (#123467), because the original source of the twt is no longer obscured by a hash value and I can just pull the original feed. Asking a Yarn pod is only interesting at the moment because I have no idea where to get (#123467) from.

Only when the original feed has gone offline will querying a Yarn pod become relevant again.

I have to admit here that some of the goals/philosophy of Yarn simply don’t apply to my use cases. šŸ˜… I don’t run a daemon that speaks a gossipping protocol with neighboring pods or stuff like that. I think I don’t have a hard time accepting that feeds might go offline in two months, so be it. Digging up ancient twts from some sort of globally distributed file system isn’t one of my goals. It’s a completely different thing for me. Hmmm. šŸ¤”
I’m bad with faces, I know that. But I’m having a *really* hard time recognizing Linus in this video:

https://www.youtube.com/watch?v=4WCTGycBceg

Basically a different person to me. Is it just me or has he really changed that much? 😳
I’m bad with faces, I know that. But I’m having a *really* hard time recognizing Linus in this video:

https://www.youtube.com/watch?v=4WCTGycBceg

Basically a different person to me. Is it just me or has he really changed that much? 😳
I’m bad with faces, I know that. But I’m having a *really* hard time recognizing Linus in this video:

https://www.youtube.com/watch?v=4WCTGycBceg

Basically a different person to me. Is it just me or has he really changed that much? 😳
I’m bad with faces, I know that. But I’m having a *really* hard time recognizing Linus in this video:

https://www.youtube.com/watch?v=4WCTGycBceg

Basically a different person to me. Is it just me or has he really changed that much? 😳
@david Glad you like it. šŸ˜…
@david Glad you like it. šŸ˜…
@david Glad you like it. šŸ˜…
@david Glad you like it. šŸ˜…
@david Aye, I’ve pushed some commits. (And this is *really* going to be the last non-trivial change. šŸ˜‚)
@david Aye, I’ve pushed some commits. (And this is *really* going to be the last non-trivial change. šŸ˜‚)
@david Aye, I’ve pushed some commits. (And this is *really* going to be the last non-trivial change. šŸ˜‚)
@david Aye, I’ve pushed some commits. (And this is *really* going to be the last non-trivial change. šŸ˜‚)
@david Like that, right? https://movq.de/v/80f888d381/s.png
@david Like that, right? https://movq.de/v/80f888d381/s.png
@david Like that, right? https://movq.de/v/80f888d381/s.png
@david Like that, right? https://movq.de/v/80f888d381/s.png
Okay, the recently implemented --fetch-context, which asks a Yarn pod for a twt, wouldn’t *break*, but jenny would not be able anymore to verify that it actually got the correct twt. That’s a concrete example where we would lose functionality.
Okay, the recently implemented --fetch-context, which asks a Yarn pod for a twt, wouldn’t *break*, but jenny would not be able anymore to verify that it actually got the correct twt. That’s a concrete example where we would lose functionality.
Okay, the recently implemented --fetch-context, which asks a Yarn pod for a twt, wouldn’t *break*, but jenny would not be able anymore to verify that it actually got the correct twt. That’s a concrete example where we would lose functionality.
Okay, the recently implemented --fetch-context, which asks a Yarn pod for a twt, wouldn’t *break*, but jenny would not be able anymore to verify that it actually got the correct twt. That’s a concrete example where we would lose functionality.
@david Yeah, I was annoyed by this myself lately. twts have become *so long* nowadays, it really gets in the way.
@david Yeah, I was annoyed by this myself lately. twts have become *so long* nowadays, it really gets in the way.
@david Yeah, I was annoyed by this myself lately. twts have become *so long* nowadays, it really gets in the way.
@david Yeah, I was annoyed by this myself lately. twts have become *so long* nowadays, it really gets in the way.
@prologic Can you come up with actual scenarios where it would break? Or is it more of a gut feeling?

The thing that keeps bugging me is this:

If we were to switch to location-based addressing and (replyto:…), the edit problem would resolve itself. Implementations could use that exact string (e.g., https://example.com/tw.txt,2024-09-18T12:45Z) as the internal identifier of a twt and that is pretty much the only change that you have to make. And then you could throw away all code and tests currently required for calculating hashes. (In jenny, I would also be able to and actually have to remove that code that skips over twts with a timestamp older than $last_fetch. This only got added as a workaround ā€œto avoid broken threads all the timeā€.) The net result would be *less code*.

Implementing this whole (edit:#hash) thing means *more code*. (For jenny, specifically, *a lot* more code, if I want to allow users to create such twts.)

Do you see why I’m so reluctant to jump on this bandwagon? šŸ˜…

I haven’t come up yet with good, concrete examples where (replyto:…) would break. As soon as that happens, I’ll change my mind. šŸ¤”
@prologic Can you come up with actual scenarios where it would break? Or is it more of a gut feeling?

The thing that keeps bugging me is this:

If we were to switch to location-based addressing and (replyto:…), the edit problem would resolve itself. Implementations could use that exact string (e.g., https://example.com/tw.txt,2024-09-18T12:45Z) as the internal identifier of a twt and that is pretty much the only change that you have to make. And then you could throw away all code and tests currently required for calculating hashes. (In jenny, I would also be able to and actually have to remove that code that skips over twts with a timestamp older than $last_fetch. This only got added as a workaround ā€œto avoid broken threads all the timeā€.) The net result would be *less code*.

Implementing this whole (edit:#hash) thing means *more code*. (For jenny, specifically, *a lot* more code, if I want to allow users to create such twts.)

Do you see why I’m so reluctant to jump on this bandwagon? šŸ˜…

I haven’t come up yet with good, concrete examples where (replyto:…) would break. As soon as that happens, I’ll change my mind. šŸ¤”
@prologic Can you come up with actual scenarios where it would break? Or is it more of a gut feeling?

The thing that keeps bugging me is this:

If we were to switch to location-based addressing and (replyto:…), the edit problem would resolve itself. Implementations could use that exact string (e.g., https://example.com/tw.txt,2024-09-18T12:45Z) as the internal identifier of a twt and that is pretty much the only change that you have to make. And then you could throw away all code and tests currently required for calculating hashes. (In jenny, I would also be able to and actually have to remove that code that skips over twts with a timestamp older than $last_fetch. This only got added as a workaround ā€œto avoid broken threads all the timeā€.) The net result would be *less code*.

Implementing this whole (edit:#hash) thing means *more code*. (For jenny, specifically, *a lot* more code, if I want to allow users to create such twts.)

Do you see why I’m so reluctant to jump on this bandwagon? šŸ˜…

I haven’t come up yet with good, concrete examples where (replyto:…) would break. As soon as that happens, I’ll change my mind. šŸ¤”
@prologic Can you come up with actual scenarios where it would break? Or is it more of a gut feeling?

The thing that keeps bugging me is this:

If we were to switch to location-based addressing and (replyto:…), the edit problem would resolve itself. Implementations could use that exact string (e.g., https://example.com/tw.txt,2024-09-18T12:45Z) as the internal identifier of a twt and that is pretty much the only change that you have to make. And then you could throw away all code and tests currently required for calculating hashes. (In jenny, I would also be able to and actually have to remove that code that skips over twts with a timestamp older than $last_fetch. This only got added as a workaround ā€œto avoid broken threads all the timeā€.) The net result would be *less code*.

Implementing this whole (edit:#hash) thing means *more code*. (For jenny, specifically, *a lot* more code, if I want to allow users to create such twts.)

Do you see why I’m so reluctant to jump on this bandwagon? šŸ˜…

I haven’t come up yet with good, concrete examples where (replyto:…) would break. As soon as that happens, I’ll change my mind. šŸ¤”
For implementations, it would be nice if ā€œupdate twtsā€ always came *after* the twt they are referring to. So I thought about using this opportunity to mandate append-style feeds. But that’s just me being lazy. Implementations will *have to* be able to cope with any order, because feeds cannot/should not be trusted. 🫤
For implementations, it would be nice if ā€œupdate twtsā€ always came *after* the twt they are referring to. So I thought about using this opportunity to mandate append-style feeds. But that’s just me being lazy. Implementations will *have to* be able to cope with any order, because feeds cannot/should not be trusted. 🫤
For implementations, it would be nice if ā€œupdate twtsā€ always came *after* the twt they are referring to. So I thought about using this opportunity to mandate append-style feeds. But that’s just me being lazy. Implementations will *have to* be able to cope with any order, because feeds cannot/should not be trusted. 🫤
For implementations, it would be nice if ā€œupdate twtsā€ always came *after* the twt they are referring to. So I thought about using this opportunity to mandate append-style feeds. But that’s just me being lazy. Implementations will *have to* be able to cope with any order, because feeds cannot/should not be trusted. 🫤
Trying to sum up the current proposal (keeping hashes):

1. Extend the hash length to avoid collisions.
2. Introduce the concept of, what shall we call it, ā€œupdate twtsā€.
- A twt starting with (edit:#3f36byq) tells clients to update the twt #3f36byq with the content of this particular twt.
- A twt starting with (delete:#3f36byq) advises clients to delete #3f36byq from their storage.

Right?
Trying to sum up the current proposal (keeping hashes):

1. Extend the hash length to avoid collisions.
2. Introduce the concept of, what shall we call it, ā€œupdate twtsā€.
- A twt starting with (edit:#3f36byq) tells clients to update the twt #3f36byq with the content of this particular twt.
- A twt starting with (delete:#3f36byq) advises clients to delete #3f36byq from their storage.

Right?
Trying to sum up the current proposal (keeping hashes):

1. Extend the hash length to avoid collisions.
2. Introduce the concept of, what shall we call it, ā€œupdate twtsā€.
- A twt starting with (edit:#3f36byq) tells clients to update the twt #3f36byq with the content of this particular twt.
- A twt starting with (delete:#3f36byq) advises clients to delete #3f36byq from their storage.

Right?
Trying to sum up the current proposal (keeping hashes):

1. Extend the hash length to avoid collisions.
2. Introduce the concept of, what shall we call it, ā€œupdate twtsā€.
- A twt starting with (edit:#3f36byq) tells clients to update the twt #3f36byq with the content of this particular twt.
- A twt starting with (delete:#3f36byq) advises clients to delete #3f36byq from their storage.

Right?
@prologic

> you'd never have been able to find let alone pull up that ~3yr old Twt of me (_my very first_), hell I'd even though I lost my first feed file or it became corrupted or something

I get what you mean, but to be fair, it’s much less mysterious than that. šŸ˜… The twt in question exists in your archived feed. It’s not like I pulled it out of some cache of an unrelated Yarn pod.

But, yes, I *could have* done that and I could have verified that it actually is the twt I was looking for. So that’s clearly an advantage of the current system.~
@prologic

> you'd never have been able to find let alone pull up that ~3yr old Twt of me (_my very first_), hell I'd even though I lost my first feed file or it became corrupted or something

I get what you mean, but to be fair, it’s much less mysterious than that. šŸ˜… The twt in question exists in your archived feed. It’s not like I pulled it out of some cache of an unrelated Yarn pod.

But, yes, I *could have* done that and I could have verified that it actually is the twt I was looking for. So that’s clearly an advantage of the current system.~
@prologic

> you'd never have been able to find let alone pull up that ~3yr old Twt of me (_my very first_), hell I'd even though I lost my first feed file or it became corrupted or something

I get what you mean, but to be fair, it’s much less mysterious than that. šŸ˜… The twt in question exists in your archived feed. It’s not like I pulled it out of some cache of an unrelated Yarn pod.

But, yes, I *could have* done that and I could have verified that it actually is the twt I was looking for. So that’s clearly an advantage of the current system.~
@prologic

> you'd never have been able to find let alone pull up that ~3yr old Twt of me (_my very first_), hell I'd even though I lost my first feed file or it became corrupted or something

I get what you mean, but to be fair, it’s much less mysterious than that. šŸ˜… The twt in question exists in your archived feed. It’s not like I pulled it out of some cache of an unrelated Yarn pod.

But, yes, I *could have* done that and I could have verified that it actually is the twt I was looking for. So that’s clearly an advantage of the current system.~
(Or maybe I’m talking nonsense. That’s known to happen. I’ll go to bed. šŸ˜‚)
(Or maybe I’m talking nonsense. That’s known to happen. I’ll go to bed. šŸ˜‚)
(Or maybe I’m talking nonsense. That’s known to happen. I’ll go to bed. šŸ˜‚)
(Or maybe I’m talking nonsense. That’s known to happen. I’ll go to bed. šŸ˜‚)
@quark Printing a version? I’ll think about it. šŸ¤”

It would be easy to do for releases, but it’s a little hard to do for all the commits in between – jenny has no build process, so there’s no easy way to incorporate the output of git describe, for example.
@quark Printing a version? I’ll think about it. šŸ¤”

It would be easy to do for releases, but it’s a little hard to do for all the commits in between – jenny has no build process, so there’s no easy way to incorporate the output of git describe, for example.
@quark Printing a version? I’ll think about it. šŸ¤”

It would be easy to do for releases, but it’s a little hard to do for all the commits in between – jenny has no build process, so there’s no easy way to incorporate the output of git describe, for example.
@quark Printing a version? I’ll think about it. šŸ¤”

It would be easy to do for releases, but it’s a little hard to do for all the commits in between – jenny has no build process, so there’s no easy way to incorporate the output of git describe, for example.
I’m not advocating in either direction, btw. I haven’t made up my mind yet. šŸ˜… Just braindumping here.

The (replyto:…) proposal is definitely more in the spirit of twtxt, I’d say. It’s much simpler, anyone can use it even with the simplest tools, no need for any client code. That is certainly a great property, if you ask me, and it’s things like that that brought me to twtxt in the first place.

I’d also say that in our tiny little community, message integrity simply doesn’t matter. Signed feeds don’t matter. I signed my feed for a while using GPG, someone else did the same, but in the end, nobody cares. The community is so tiny, there’s enough ā€œimplicit trustā€ or whatever you want to call it.

If twtxt/Yarn was to grow bigger, then this would become a concern again. *But even Mastodon allows editing*, so how much of a problem can it really be? šŸ˜…

I do have to ā€œadmitā€, though, that hashes *feel* better. It feels good to know that we can clearly identify a certain twt. It feels more correct and stable.

Hm.

I *suspect* that the (replyto:…) proposal would work just as well in practice.
I’m not advocating in either direction, btw. I haven’t made up my mind yet. šŸ˜… Just braindumping here.

The (replyto:…) proposal is definitely more in the spirit of twtxt, I’d say. It’s much simpler, anyone can use it even with the simplest tools, no need for any client code. That is certainly a great property, if you ask me, and it’s things like that that brought me to twtxt in the first place.

I’d also say that in our tiny little community, message integrity simply doesn’t matter. Signed feeds don’t matter. I signed my feed for a while using GPG, someone else did the same, but in the end, nobody cares. The community is so tiny, there’s enough ā€œimplicit trustā€ or whatever you want to call it.

If twtxt/Yarn was to grow bigger, then this would become a concern again. *But even Mastodon allows editing*, so how much of a problem can it really be? šŸ˜…

I do have to ā€œadmitā€, though, that hashes *feel* better. It feels good to know that we can clearly identify a certain twt. It feels more correct and stable.

Hm.

I *suspect* that the (replyto:…) proposal would work just as well in practice.
I’m not advocating in either direction, btw. I haven’t made up my mind yet. šŸ˜… Just braindumping here.

The (replyto:…) proposal is definitely more in the spirit of twtxt, I’d say. It’s much simpler, anyone can use it even with the simplest tools, no need for any client code. That is certainly a great property, if you ask me, and it’s things like that that brought me to twtxt in the first place.

I’d also say that in our tiny little community, message integrity simply doesn’t matter. Signed feeds don’t matter. I signed my feed for a while using GPG, someone else did the same, but in the end, nobody cares. The community is so tiny, there’s enough ā€œimplicit trustā€ or whatever you want to call it.

If twtxt/Yarn was to grow bigger, then this would become a concern again. *But even Mastodon allows editing*, so how much of a problem can it really be? šŸ˜…

I do have to ā€œadmitā€, though, that hashes *feel* better. It feels good to know that we can clearly identify a certain twt. It feels more correct and stable.

Hm.

I *suspect* that the (replyto:…) proposal would work just as well in practice.
I’m not advocating in either direction, btw. I haven’t made up my mind yet. šŸ˜… Just braindumping here.

The (replyto:…) proposal is definitely more in the spirit of twtxt, I’d say. It’s much simpler, anyone can use it even with the simplest tools, no need for any client code. That is certainly a great property, if you ask me, and it’s things like that that brought me to twtxt in the first place.

I’d also say that in our tiny little community, message integrity simply doesn’t matter. Signed feeds don’t matter. I signed my feed for a while using GPG, someone else did the same, but in the end, nobody cares. The community is so tiny, there’s enough ā€œimplicit trustā€ or whatever you want to call it.

If twtxt/Yarn was to grow bigger, then this would become a concern again. *But even Mastodon allows editing*, so how much of a problem can it really be? šŸ˜…

I do have to ā€œadmitā€, though, that hashes *feel* better. It feels good to know that we can clearly identify a certain twt. It feels more correct and stable.

Hm.

I *suspect* that the (replyto:…) proposal would work just as well in practice.
@falsifian @prologic @lyse

> - editing, if you don't care about message integrity

So that’s the big question, because that’s the only real difference between hashes and the (replyto:…) proposal.

Do we care about message integrity?

With (replyto:…), someone could write a twt, then I reply to it, like ā€œyou’re absolutely right!ā€, and then that person could change their twt to something malicious like ā€œthe earth is flat!ā€ And then it would look like I’m a nutcase agreeing with that person. šŸ˜…

Hashes (in their current form) prevent that. The thread is broken and my reply clearly refers to something else. That’s good, right?

But now take into account that we want to allow editing anyway. Is there even a point to using hashes anymore? Isn’t message integrity ignored anyway now, at least in practice?

There’s no difference (in practice) between someone writing

2024-09-18T12:34Z Brds are great!

and then editing it to either

2024-09-18T12:34Z (original:#12379) Birds are great! (Whoops, fixed a typo.)

or

2024-09-18T12:34Z (original:#12379) The earth is flat!

The actual original message is (potentially) gone. The only thing that we can be sure of now is that the twt was edited in *some* way. *Essentially*, the actual twt message is no longer part of the hash, is it? What does #12379 refer to? The edited message or the original one? We *want* it to refer to the edited one, because we don’t want to break threads, so … what’s the point of using a hash?
@falsifian @prologic @lyse

> - editing, if you don't care about message integrity

So that’s the big question, because that’s the only real difference between hashes and the (replyto:…) proposal.

Do we care about message integrity?

With (replyto:…), someone could write a twt, then I reply to it, like ā€œyou’re absolutely right!ā€, and then that person could change their twt to something malicious like ā€œthe earth is flat!ā€ And then it would look like I’m a nutcase agreeing with that person. šŸ˜…

Hashes (in their current form) prevent that. The thread is broken and my reply clearly refers to something else. That’s good, right?

But now take into account that we want to allow editing anyway. Is there even a point to using hashes anymore? Isn’t message integrity ignored anyway now, at least in practice?

There’s no difference (in practice) between someone writing

2024-09-18T12:34Z Brds are great!

and then editing it to either

2024-09-18T12:34Z (original:#12379) Birds are great! (Whoops, fixed a typo.)

or

2024-09-18T12:34Z (original:#12379) The earth is flat!

The actual original message is (potentially) gone. The only thing that we can be sure of now is that the twt was edited in *some* way. *Essentially*, the actual twt message is no longer part of the hash, is it? What does #12379 refer to? The edited message or the original one? We *want* it to refer to the edited one, because we don’t want to break threads, so … what’s the point of using a hash?
@falsifian @prologic @lyse

> - editing, if you don't care about message integrity

So that’s the big question, because that’s the only real difference between hashes and the (replyto:…) proposal.

Do we care about message integrity?

With (replyto:…), someone could write a twt, then I reply to it, like ā€œyou’re absolutely right!ā€, and then that person could change their twt to something malicious like ā€œthe earth is flat!ā€ And then it would look like I’m a nutcase agreeing with that person. šŸ˜…

Hashes (in their current form) prevent that. The thread is broken and my reply clearly refers to something else. That’s good, right?

But now take into account that we want to allow editing anyway. Is there even a point to using hashes anymore? Isn’t message integrity ignored anyway now, at least in practice?

There’s no difference (in practice) between someone writing

2024-09-18T12:34Z Brds are great!

and then editing it to either

2024-09-18T12:34Z (original:#12379) Birds are great! (Whoops, fixed a typo.)

or

2024-09-18T12:34Z (original:#12379) The earth is flat!

The actual original message is (potentially) gone. The only thing that we can be sure of now is that the twt was edited in *some* way. *Essentially*, the actual twt message is no longer part of the hash, is it? What does #12379 refer to? The edited message or the original one? We *want* it to refer to the edited one, because we don’t want to break threads, so … what’s the point of using a hash?
@falsifian @prologic @lyse

> - editing, if you don't care about message integrity

So that’s the big question, because that’s the only real difference between hashes and the (replyto:…) proposal.

Do we care about message integrity?

With (replyto:…), someone could write a twt, then I reply to it, like ā€œyou’re absolutely right!ā€, and then that person could change their twt to something malicious like ā€œthe earth is flat!ā€ And then it would look like I’m a nutcase agreeing with that person. šŸ˜…

Hashes (in their current form) prevent that. The thread is broken and my reply clearly refers to something else. That’s good, right?

But now take into account that we want to allow editing anyway. Is there even a point to using hashes anymore? Isn’t message integrity ignored anyway now, at least in practice?

There’s no difference (in practice) between someone writing

2024-09-18T12:34Z Brds are great!

and then editing it to either

2024-09-18T12:34Z (original:#12379) Birds are great! (Whoops, fixed a typo.)

or

2024-09-18T12:34Z (original:#12379) The earth is flat!

The actual original message is (potentially) gone. The only thing that we can be sure of now is that the twt was edited in *some* way. *Essentially*, the actual twt message is no longer part of the hash, is it? What does #12379 refer to? The edited message or the original one? We *want* it to refer to the edited one, because we don’t want to break threads, so … what’s the point of using a hash?
Regarding jenny development: There have been enough changes in the last few weeks, imo. I want to let things settle for a while (potential bugfixes aside) and then I’m going to cut a new release.

And I guess the release after that is going to include all the threading/hashing stuff – if we can decide on one of the proposals. šŸ˜‚
Regarding jenny development: There have been enough changes in the last few weeks, imo. I want to let things settle for a while (potential bugfixes aside) and then I’m going to cut a new release.

And I guess the release after that is going to include all the threading/hashing stuff – if we can decide on one of the proposals. šŸ˜‚
Regarding jenny development: There have been enough changes in the last few weeks, imo. I want to let things settle for a while (potential bugfixes aside) and then I’m going to cut a new release.

And I guess the release after that is going to include all the threading/hashing stuff – if we can decide on one of the proposals. šŸ˜‚
Regarding jenny development: There have been enough changes in the last few weeks, imo. I want to let things settle for a while (potential bugfixes aside) and then I’m going to cut a new release.

And I guess the release after that is going to include all the threading/hashing stuff – if we can decide on one of the proposals. šŸ˜‚
@aelaraji Looks like your shell didn’t turn the \\n into actual newlines:


$ echo -n "https://twtxt.net/user/prologic/twtxt.txt\\n2020-07-18T12:39:52Z\\nHello World! 😊" | openssl dgst -blake2s256 -binary | base32 | tr -d '=' | tr 'A-Z' 'a-z' | tail -c 7
zq4fgq
$ printf "https://twtxt.net/user/prologic/twtxt.txt\\\\n2020-07-18T12:39:52Z\\\\nHello World! 😊" | openssl dgst -blake2s256 -binary | base32 | tr -d '=' | tr 'A-Z' 'a-z' | tail -c 7
p44j3q
@aelaraji Looks like your shell didn’t turn the \n into actual newlines:


$ echo -n "https://twtxt.net/user/prologic/twtxt.txt\n2020-07-18T12:39:52Z\nHello World! 😊" | openssl dgst -blake2s256 -binary | base32 | tr -d '=' | tr 'A-Z' 'a-z' | tail -c 7
zq4fgq
$ printf "https://twtxt.net/user/prologic/twtxt.txt\\n2020-07-18T12:39:52Z\\nHello World! 😊" | openssl dgst -blake2s256 -binary | base32 | tr -d '=' | tr 'A-Z' 'a-z' | tail -c 7
p44j3q
@aelaraji Looks like your shell didn’t turn the \n into actual newlines:


$ echo -n "https://twtxt.net/user/prologic/twtxt.txt\n2020-07-18T12:39:52Z\nHello World! 😊" | openssl dgst -blake2s256 -binary | base32 | tr -d '=' | tr 'A-Z' 'a-z' | tail -c 7
zq4fgq
$ printf "https://twtxt.net/user/prologic/twtxt.txt\\n2020-07-18T12:39:52Z\\nHello World! 😊" | openssl dgst -blake2s256 -binary | base32 | tr -d '=' | tr 'A-Z' 'a-z' | tail -c 7
p44j3q
@aelaraji Looks like your shell didn’t turn the \n into actual newlines:


$ echo -n "https://twtxt.net/user/prologic/twtxt.txt\n2020-07-18T12:39:52Z\nHello World! 😊" | openssl dgst -blake2s256 -binary | base32 | tr -d '=' | tr 'A-Z' 'a-z' | tail -c 7
zq4fgq
$ printf "https://twtxt.net/user/prologic/twtxt.txt\\n2020-07-18T12:39:52Z\\nHello World! 😊" | openssl dgst -blake2s256 -binary | base32 | tr -d '=' | tr 'A-Z' 'a-z' | tail -c 7
p44j3q
@quark They’re all RFC3339, unless I’m mistaken: https://ijmacd.github.io/rfc3339-iso8601/ So they’re all correct.
@quark They’re all RFC3339, unless I’m mistaken: https://ijmacd.github.io/rfc3339-iso8601/ So they’re all correct.
@quark They’re all RFC3339, unless I’m mistaken: https://ijmacd.github.io/rfc3339-iso8601/ So they’re all correct.
@quark They’re all RFC3339, unless I’m mistaken: https://ijmacd.github.io/rfc3339-iso8601/ So they’re all correct.
@prologic So the feed would contain *two* twts, right?


2024-09-18T23:08:00+10:00	Hllo World
2024-09-18T23:10:43+10:00	(edit:#229d24612a2) Hello World
@prologic So the feed would contain *two* twts, right?


2024-09-18T23:08:00+10:00\tHllo World
2024-09-18T23:10:43+10:00\t(edit:#229d24612a2) Hello World
@prologic So the feed would contain *two* twts, right?


2024-09-18T23:08:00+10:00	Hllo World
2024-09-18T23:10:43+10:00	(edit:#229d24612a2) Hello World
@prologic So the feed would contain *two* twts, right?


2024-09-18T23:08:00+10:00	Hllo World
2024-09-18T23:10:43+10:00	(edit:#229d24612a2) Hello World
@prologic I don’t get paid for ā€œstanding byā€ and ā€œwaiting for a callā€, that’s right. But I’m fine with that, because I don’t *have to* be available, either. šŸ˜… If someone were to call me (or send me a text message), I wouldn’t be *obliged* to help them out. If I have the time and energy, I will do it, though. And that extra time will be paid.

It works for us because there are enough people around and there’s a good chance that someone will be able to help.

Really, I am glad that we have this model. The alternative would be actual on-call duty, like, this week you’re the poor bastard who is legally required to fix shit. That’s just horrible, I don’t want that. šŸ˜…

What I was referring to in the OP: Sometimes I check the workphone simply out of curiosity. šŸ˜‚
@prologic I don’t get paid for ā€œstanding byā€ and ā€œwaiting for a callā€, that’s right. But I’m fine with that, because I don’t *have to* be available, either. šŸ˜… If someone were to call me (or send me a text message), I wouldn’t be *obliged* to help them out. If I have the time and energy, I will do it, though. And that extra time will be paid.

It works for us because there are enough people around and there’s a good chance that someone will be able to help.

Really, I am glad that we have this model. The alternative would be actual on-call duty, like, this week you’re the poor bastard who is legally required to fix shit. That’s just horrible, I don’t want that. šŸ˜…

What I was referring to in the OP: Sometimes I check the workphone simply out of curiosity. šŸ˜‚
@prologic I don’t get paid for ā€œstanding byā€ and ā€œwaiting for a callā€, that’s right. But I’m fine with that, because I don’t *have to* be available, either. šŸ˜… If someone were to call me (or send me a text message), I wouldn’t be *obliged* to help them out. If I have the time and energy, I will do it, though. And that extra time will be paid.

It works for us because there are enough people around and there’s a good chance that someone will be able to help.

Really, I am glad that we have this model. The alternative would be actual on-call duty, like, this week you’re the poor bastard who is legally required to fix shit. That’s just horrible, I don’t want that. šŸ˜…

What I was referring to in the OP: Sometimes I check the workphone simply out of curiosity. šŸ˜‚
@prologic I don’t get paid for ā€œstanding byā€ and ā€œwaiting for a callā€, that’s right. But I’m fine with that, because I don’t *have to* be available, either. šŸ˜… If someone were to call me (or send me a text message), I wouldn’t be *obliged* to help them out. If I have the time and energy, I will do it, though. And that extra time will be paid.

It works for us because there are enough people around and there’s a good chance that someone will be able to help.

Really, I am glad that we have this model. The alternative would be actual on-call duty, like, this week you’re the poor bastard who is legally required to fix shit. That’s just horrible, I don’t want that. šŸ˜…

What I was referring to in the OP: Sometimes I check the workphone simply out of curiosity. šŸ˜‚
@prologic text/plain without an explicit charset is still just US-ASCII:

> The default character set, which must be assumed in the absence of a charset parameter, is US-ASCII.

https://www.rfc-editor.org/rfc/rfc2046.html#section-4.1.2
https://www.rfc-editor.org/rfc/rfc6657#section-4
@prologic text/plain without an explicit charset is still just US-ASCII:

> The default character set, which must be assumed in the absence of a charset parameter, is US-ASCII.

https://www.rfc-editor.org/rfc/rfc2046.html#section-4.1.2
https://www.rfc-editor.org/rfc/rfc6657#section-4
@prologic text/plain without an explicit charset is still just US-ASCII:

> The default character set, which must be assumed in the absence of a charset parameter, is US-ASCII.

https://www.rfc-editor.org/rfc/rfc2046.html#section-4.1.2
https://www.rfc-editor.org/rfc/rfc6657#section-4
@prologic text/plain without an explicit charset is still just US-ASCII:

> The default character set, which must be assumed in the absence of a charset parameter, is US-ASCII.

https://www.rfc-editor.org/rfc/rfc2046.html#section-4.1.2
https://www.rfc-editor.org/rfc/rfc6657#section-4
@lyse Ouch. 🄓 Well, jenny always decodes as UTF-8 (because the spec says so) and this hasn’t caused any issues – yet.
@lyse Ouch. 🄓 Well, jenny always decodes as UTF-8 (because the spec says so) and this hasn’t caused any issues – yet.
@lyse Ouch. 🄓 Well, jenny always decodes as UTF-8 (because the spec says so) and this hasn’t caused any issues – yet.
@lyse Ouch. 🄓 Well, jenny always decodes as UTF-8 (because the spec says so) and this hasn’t caused any issues – yet.
@prologic It’s not ā€œtrueā€ oncall duty (I don’t do that anymore, it fucks up your life and health), but more of an unwritten rule that sysadmins should have a smartphone. If there is an emergency and I happen to have time to help, I will. But nobody can force me to. So far, it works for us.

And, well, I also need that thing for 2FA. šŸ˜…
@prologic It’s not ā€œtrueā€ oncall duty (I don’t do that anymore, it fucks up your life and health), but more of an unwritten rule that sysadmins should have a smartphone. If there is an emergency and I happen to have time to help, I will. But nobody can force me to. So far, it works for us.

And, well, I also need that thing for 2FA. šŸ˜…
@prologic It’s not ā€œtrueā€ oncall duty (I don’t do that anymore, it fucks up your life and health), but more of an unwritten rule that sysadmins should have a smartphone. If there is an emergency and I happen to have time to help, I will. But nobody can force me to. So far, it works for us.

And, well, I also need that thing for 2FA. šŸ˜