hhmx.de

julian

julian (@julian@community.nodebb.org)

Föderation · Di 17.09.2024 16:29:02

@silverpill@mitra.social said:



NodeBB's FEP-7888 collection doesn't identify itself as a "thread".



That's because I am not aware of a clear way to signal that my collection is a thread.


Lemmy uses as:Page, which is far too generic of an object type to signal as a thread. Mastodon doesn't even have an external concept of a conversation (oStatus conversation notwithstanding)


@trwnh@mastodon.social


infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 17:09:21

@julian @silverpill We could define a dedicated type for Thread or Conversation or whatever you want to call "a Collection that contains only "post" objects", but it would still be a Collection as well. I think this was something I was considering for a FEP that I ended up never really writing because it felt unnecessary and also very premature. The general idea is to define some way to know what a Collection "contains" -- is it a Conversation or a MediaAlbum or whatever. The problem is taxonomy

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 17:12:39

@julian @silverpill Really we need to take a step back and first define what a "post" object is. I'm tentatively leaning toward "any object that has content", but I'm sure there are plenty of edge cases I haven't accounted for that will pop up when thinking more deeply about the issue.

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 17:15:14

@trwnh @julian @silverpill Content types? Note, Article, Image, Video, Audio, Document? That should cover most Web content collections.

If you want to add an extension (Listicle, say) you could multi-type with the most appropriate Activity Vocabulary content type (`type`: ['buzz:Listicle', 'as:Article']`).

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 17:23:29

@evan @julian @silverpill This goes back to a convo from yesterday about how to handle Activity types with content, which conceivably makes them "posts" in the sense of an "activity stream". ("John Created a Note" is a first-class item in much the same way "Sally Liked a Note" is also a first-class item in Facebook's activity feed, or "Alice Added 9 Images to a MediaAlbum" would be.)

If you put content on an Announce, then that Announce is ostensibly its own "post" in addition to being a share.

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 17:25:24

@evan @julian @silverpill But yes, in most cases, you will probably be using types such as Note or Article.

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 17:26:58

@trwnh @julian @silverpill especially in a forum thread, right? It's just not the place you put an `TentativeReject` activity or a `Relationship` object.

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 17:25:42

@trwnh @julian @silverpill OK. I mean, we just call that an `Object`.

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 17:30:23

@evan @julian @silverpill In terms of a potential WIP FEP, I would tentatively define a Conversation as a Collection where each item has at least `content`. I would likewise define a MediaAlbum as a Collection where each item is an Image or Video. There are probably other type definitions that could make sense.

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 17:35:42

@trwnh @julian @silverpill yeah, I just don't like the ducktyping on the 'content' property.

Erin 💽✨

Erin 💽✨ (@erincandescent@akko.erincandescent.net)

Föderation EN Di 17.09.2024 17:36:33

@trwnh @julian @silverpill I think the question here is "does a thread actually have any distinct properties of its own?"

Maybe a title, but that can also be inherited from either the first or most recent post. Many threaded discussion systems don't have thread objects at all, of course (email is perhaps the canonical example)

So I lean towards the idea that you should just redirect to the first thread in the post, and place the context (which when becomes just a collection of in-thread posts; an implementation detail) at another URL where it mostly becomes invisible to users.

And I think that's better, especially because having significant semantics on collections starts getting confusing when e.g. you have collection pages flying around

Really I think most types which can be represented directly as a collection (e.g. image galleries) are best represented as an object that possess a collection, though not everyone might agree

julian

julian (@julian@community.nodebb.org)

Föderation · Di 17.09.2024 17:40:06

@erincandescent@akko.erincandescent.net said:



So I lean towards the idea that you should just redirect to the first thread in the post, and place the context (which when becomes just a collection of in-thread posts; an implementation detail) at another URL where it mostly becomes invisible to users.



That's why I'm still on the fence about this whole thing. In principle, a thread object can and does exist in software, but in practice there is lots of prior art that says otherwise.


That said, email might be a threaded chain of messages, but most email clients I know have standardized around representing them as a discrete topic, if only in the UI.


@trwnh@mastodon.social @evan@cosocial.ca @silverpill@mitra.social


infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 17:45:00

@julian @erincandescent @evan @silverpill Let me put it this way: the latter half of FEP-7888 can be summarized as "reifying context as an object, and specifically a Collection". If you *just* want the grouping, then it could be an arbitrary opaque IRI. But what you gain by reifying the context as an object is specifically the ability to give it metadata properties. Particularly things like `attributedTo` or `audience`. Maybe even `followers` or `outbox`. An opaque IRI cannot do this.

Erin 💽✨

Erin 💽✨ (@erincandescent@akko.erincandescent.net)

Föderation EN Di 17.09.2024 17:48:16

@trwnh @julian @evan @silverpill I never did the URI should be opaque; what I implied was that perhaps it should be an implementation detail URI as opposed to a directly visible one.

Some of this is that I wonder how decoupled such a thread truly is *semantically* from it's root post

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 17:50:44

@trwnh @julian @erincandescent @silverpill you can also get the whole thing! That's the big benefit of having a `Collection` -- you can retrieve it.

silverpill

silverpill (@silverpill@mitra.social)

Föderation · Di 17.09.2024 18:01:46

@julian I reported this to you because one user asked me "why I can't discover this NodeBB thread from my instance?". I think this is going to happen quite often across the Fediverse.
Maybe in the future we will figure out how to deal with these collections, but right now this leads to a bad user experience

@trwnh @evan @erincandescent @evan

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 18:10:11

@silverpill @evan@cosocial.ca @erincandescent @julian @evan@community.nodebb.org I'd prefer impls update to support showing threads/collections, rather than NodeBB being held back. UX will get better as other impls update.

At the very least, browser.pub can do it! :P

Erin 💽✨

Erin 💽✨ (@erincandescent@akko.erincandescent.net)

Föderation EN Di 17.09.2024 18:18:04

@trwnh @silverpill @evan @julian @evan so, truthfully, I'm ambivalent to whether a thread object exists. But if it does, I feel like it should probably be reified distinctly from the thread collection primarily because I don't think treating collections as objects is a good idea. Maybe I'm wrong, but that's my strongly held opinion!

And yeah, then we can give threads a following collection and let people follow them as they wish.

Erin 💽✨

Erin 💽✨ (@erincandescent@akko.erincandescent.net)

Föderation EN Di 17.09.2024 18:32:39

@trwnh @evan @evan @julian @silverpill and to be clear my ambivalence about whether there should be a thread object comes primarily because I don't think this is a point on which we will ever get universal agreement

It's an area where I feel the only real route is the "why not both?" compromise that doesn't really make anyone happy

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 18:35:48

@erincandescent @julian @evan@community.nodebb.org @trwnh @silverpill Standards are about making arbitrary decisions in the pursuit of uniformity.

Erin 💽✨

Erin 💽✨ (@erincandescent@akko.erincandescent.net)

Föderation EN Di 17.09.2024 17:42:51

@trwnh @julian @silverpill (the other option is instead of redirection do <link> tags, and then you can link to both if you wish; imagine including <link rel="as:context" href="...">)

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 17:49:23

@erincandescent @julian @trwnh @silverpill a thread is a tree with a root. Every non-root node in the tree has an `inReplyTo` that points to one of the other nodes.

It's represented by a `Collection` in the `context` property of each object. (I don't like this, but it's common so we should just use it).

It's in reverse-chronological order.

If you started at the root node and walked the tree using the `replies` collection, you should visit exactly the same nodes as in the `context` collection.

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 17:56:40

@evan @erincandescent @julian @silverpill I don't think a thread *has* to be a tree -- it's a set. The "reply tree" is a separate structure. Threads can be forked out of other threads.

(I also dislike "reverse chron" and heavily favor "forward chron", but custom sorting of collections is not well-specced rn so that's a future step.)

silverpill

silverpill (@silverpill@mitra.social)

Föderation · Di 17.09.2024 18:11:39

@trwnh @evan @erincandescent @julian +1 for forward chron, that way you can start displaying posts without fetching the whole thread

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 18:13:49

@silverpill @trwnh @erincandescent @julian Use the `last` property to start with the oldest page.

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 18:17:00

@silverpill @trwnh @erincandescent @julian Also, I think you're imagining some kind of pre-order traversal sorting. If you want that, it's a lot easier to just walk the `replies` tree.

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 18:23:16

@evan @silverpill @erincandescent @julian just seems backwards to me, for no real reason. if you wanted reverse chron viewing of a forward chron collection, then it makes sense to fetch `last` and page backwards.

at the very least, `startIndex` as a property of OrderedCollectionPage makes **way** more sense with a forward chron presentation.

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 18:27:13

@trwnh @silverpill @erincandescent @julian

It's bad for caching to do forward chron, which is why we don't do it anywhere else.

Also, it does not help you build a tree structure; older nodes are not necessarily at the top of the tree.

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 19:01:34

@evan @silverpill @erincandescent @julian why is it bad for caching? it seems like the opposite to me -- reverse-chron means that pages are constantly updating and are almost never consistent! each new item in the collection pushes everything else behind it, and the last item of the page overflows into becoming the first item of the next page. if you did forward-chron, you could freeze "page 1" as soon as it got full, and move onto "page 2".

also, a viewer can easily tell where they left off.

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 19:04:47

@trwnh @silverpill @erincandescent @julian oh, yes, that's true, if you do "volatile paging" (last 20 pages).

If you have reified pages (item goes in one page and stays there), once the pages are full, they don't change (except for `Remove` activities).

Don't do volatile paging.

If you use reified pages, an add to a reverse-chron collection will typically have changes to `first` and the Collection itself.

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 19:05:59

@trwnh @silverpill @erincandescent @julian

If you have bidirectional links (`first` and `last`) you can have stable collections with rev-chron or forward-chron. So, fair point.

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 19:11:22

@evan @silverpill @erincandescent @julian Yeah, my point is that it seems almost entirely conventional whether to have "reverse" mean first.next.next... or last.prev.prev... -- and I favor the latter approach because it makes more sense imo, no double-inversion ("reverse-reverse chron", anyone?)

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 19:16:14

@trwnh @silverpill @erincandescent @julian Except for most interfaces, your first page is the current stuff, and you go back in time to find earlier stuff.

infinite love â´³

infinite love ⴳ (@trwnh@mastodon.social)

Föderation EN Di 17.09.2024 19:36:36

@evan @silverpill @erincandescent @julian This is what I meant by "conventional". On a forum thread, you generally read forward. On social media like Twitter, there is a heavy bias toward going reverse. And some interfaces even let you choose ascending or descending order.

Evan Prodromou

Evan Prodromou (@evan@cosocial.ca)

Föderation EN Di 17.09.2024 17:18:30

@julian @silverpill @trwnh So, what about returning the root object, like a `Note` or `Article`, with `replies` and `context` included?