@julian@community.nodebb.org cover
@julian@community.nodebb.org avatar

julian

@julian@community.nodebb.org

Hi! I'm Julian, one of the co-founders of NodeBB, the forum software you are using right now. I started this company with two colleagues, Baris and Andrew, in 2013, and have been doing the startup thing since (although I think at some point along the way we stopped being a startup and just became a boring ol' small business). In my free time I rock climb, cycle, and lift weights. I live just outside Toronto, Canada, with my wife and three children.

This profile is from a federated server and may be incomplete. View on remote instance

julian , to Random stuff
@julian@community.nodebb.org avatar

At the last ForumWG meeting, we discussed at length about Article vs. Note, and whether there was a desire to expand usage of as:Article. You can review those minutes here.

One of the action items that came out was to collate the state of current implementations. Unfortunately, outside of implementations that federate non-textual content (e.g. Pixelfed Stories, Mobilizon Events, etc.), the majority of implementors just use as:Note, which is not surprising given Mastodon's treatment of non-Note objects.

You can see the results of the summary here.


What is less clear is whether there is pent-up demand for use of a different data type for more richly forrmatted content. @mikedev and @jupiter_rowland provided some very illuminating history behind previous attempts to use as:Article, but importantly it seems that Mastodon (via @renchap) may be open to supporting this in some form as well.

While Mastodon has every reason to display as:Note as it sees fit, I'd like to hopefully address the undue influence towards using it especially in instances where as:Article were more appropriate. Mike (upthread) suggested a compromise:

  • that as:Note be reserved for content with attachments (images or otherwise), perhaps with a limited subset of html
  • and as:Article be used for content with a richer set of html (e.g. tables), and including the ability to display inline images

I explicitly did not specify that Note was for shorter content and Article for longer, because there exist plenty of examples of the reverse.

Does anybody see potential complications from such an arrangement?

julian , to Random stuff
@julian@community.nodebb.org avatar

My post from a couple weeks back indicated that NodeBB started following part of FEP-7888: Demystifying the context property.

Our implementation is an endorsement of @trwnh's proposal that the context property be given additional formalization.

During the last ForumWG call, they intentionally (or perhaps unintentionally) summarized their desire that implementors should "just use collections", and that that would be a good starting point for future iteration.

With the current state of context being "there is no coordinated usage of context", this topic aims to provide a snapshot of implementors' use of that property (or lack thereof), and to stimulate further discussion on potential use cases.

Note that this is not the first time the question has been raised. trwnh's discussion topic contained one such summary of current implementations.

As per that topic:

  • Mastodon — does not use context, but provides an ostatus:conversation property
  • Pleroma/Akkoma — uses context, but the url provided is unresolvable, likely used similarly to Mastodon
  • Streams (@mikedev) — uses context, resolves to an OrderedCollection containing all activities encontered (Creates, Updates, etc.)

My hope is that a provided context resolving to a Collection (or subtype thereof) would allow for proactive topic backfill, instead of relying on reply chain traversal, which while workable, has some rather specific downsides.

As mentioned per the above linked announcement that NodeBB was following FEP-7888:

  • We attach context to all Note objects (NodeBB posts), and it resolves to an OrderedCollection that contains the uris to the other objects in the context (the NodeBB topic).
julian OP ,
@julian@community.nodebb.org avatar

@silverpill @trwnh if the collection contains the entire activity log pertaining to the context, then it makes it harder to determine whether a given object is contained in the collection (as @jenniferplusplus mentioned in another thread). If you see a Create(Note) you can't be certain it doesn't get Delete(Note)'d later on in the collection!

hrefna , to Random stuff
@hrefna@hachyderm.io avatar

Part of my frustration with and one of the things I find baffling giving everything else in it: the lack of tools for backpressure.

Backpressure is fundamental in building reliable distributed systems (c.f., Notes on Distributed Systems for Young Bloods). From a C2S perspective I get why it wouldn't need to be specified, but from a S2S federated protocol perspective its absence is frustrating.

All that it says is to take care not to overwhelm others and a bit on rate limits

julian ,
@julian@community.nodebb.org avatar

@jenniferplusplus:

I want a mechanism to determine if two party's view of a collection are equivalent. I want to be able to query if an object is contained in a collection without enumerating the whole collection. I want a mechanism to request re-delivery or maybe failed delivery notifications.

For what it's worth, these are all goals that would align well with the interests of a broad set of implementors. I make a little noise now and again about the SWICG forum task force, but directly addressing some of these concerns would definitely be on our radar.

Current focus is on aligning on a common object type for higher level collections (the context), but I'm thinking that Collection (ordered, ideally) would be the best fit and also allow for future use cases like you mentioned earlier.

You have the ideas, we might be able to supply the coordination...

cc @hrefna @SoniEx2

julian , to Random stuff
@julian@community.nodebb.org avatar

I'm confused about a particular aspect of Inbox Forwarding as detailed in the ActivityPub spec:

... the server needs to forward these to recipients that the origin was unable to deliver them to. To do this, the server MUST target and deliver to the values of to, cc, and/or audience...

... The server MUST only target the values of to, cc, and/or audience on the original object being forwarded, and not pick up any new addressees whilst recursing through the linked objects (in case these addressees were purposefully amended by or via the client).

Emphasis mine.

My reading suggests that only the values of to, cc, and audience on the referenced object should be used, and not those values on the activity itself.

But doing so would preclude the use of Inbox Forwarding in scenarios where the Activity wrapper contains additional addressees that the underlying object does not have.

e.g. A Note by A contains a single addressee: as:Public. It is then Announced by B and C. Later, A updates the Note, and their server sends out Update(Note) with the following addressees: as:Public, B, B/followers, C, C/followers, but the object referenced still contains a single addressee: as:Public.

In that case, when received by B and C, should they forward the activity to their followers?

thisismissem , to Random stuff
@thisismissem@hachyderm.io avatar

@julian hey, how does NodeBB federate things like categories with posts?

julian ,
@julian@community.nodebb.org avatar

@thisismissem still being worked on and liable to change, but right now a category/audience is on the fediverse as a Group actor and announces all posts made to topics within it, as per FEP-1b12

Topics/contexts are currently not sent out to inboxes, but when queried, return an OrderedCollection.

julian ,
@julian@community.nodebb.org avatar

@thisismissem Ah, yes, Notes also do contain that information.

The earlier post I made contains context (the topic OrderedCollection), and audience (the containing category). Here's a subset of that object json:

{
	"id":"https://community.nodebb.org/post/99688",
	"type":"Note",
	"to":[...],
	"cc":[...],
	"inReplyTo":"https://hachyderm.io/users/thisismissem/statuses/112440197848097443",
	"published":"2024-05-14T15:44:53.375Z",
	"url":"https://community.nodebb.org/post/99688",
	"attributedTo":"https://community.nodebb.org/uid/2",
	"context":"https://community.nodebb.org/topic/2d35681b-8aee-42f2-9edc-cfc145cf294e",
	"audience":"https://community.nodebb.org/category/-1",
	"sensitive":false,
	"summary":null,
	"name":null,
	"content":"...",
}

audience is mentioned in FEP-1b12 (@nutomic), and context is mentioned in FEP-7888 (@trwnh)

julian ,
@julian@community.nodebb.org avatar

Current implementations of ActivityPub are passive. You follow people, content comes in, and you build a context around it based on what you already know.

The long view here is that an active means of content discovery should be possible, and the first step to doing that is maintaining a both a context and audience at the object level, but also to have higher-level collections be backreferenceable to those same objects.

audience being a Group and not an OrderedCollection potentially makes this problematic, but... one problem at a time. Maybe this is where the streams property could work, who knows.

@thisismissem @trwnh

julian ,
@julian@community.nodebb.org avatar

@trwnh said in @julian hey, how does NodeBB federate things like categories with posts?:

a third way would be to define an extension property/collection indicating "members" that you can Join/Leave or be Add/Remove to by mods.

Pardon my ignorance, but isn't this exactly what streams is for?

streams
A list of supplementary Collections which may be of interest.

Granted it's only mentioned in the context of an Actor object.

julian ,
@julian@community.nodebb.org avatar

@trwnh right, and I'm asserting that that flexibility is what could allow implementors to assign semantic meaning to a collection contained in streams (but how that looks is beyond scope of this post)... because what we have now is a property that is essentially useless because other implementors don't know how others use it, so nobody uses it. At most, an implementor could use it to transmit metadata to other instances of the same implementation.

Jeremiah , to Random stuff
@Jeremiah@alpaca.gold avatar

Hey @MDN, with Stack Overflow’s ongoing community implosion, now would be an excellent time to launch MDN Answers so people have a better place to help each other learn.

https://answer.apache.org/

Edit: Or @nodebb / other ActivityPub-enabled forum/threaded discussion community server software

julian ,
@julian@community.nodebb.org avatar

@thisismissem @Jeremiah @flyboy yep, we've been working on federation this year.

We're watching the implosion of StackOverflow with interest and would help facilitate a federated alternative if there is interest.

julian ,
@julian@community.nodebb.org avatar

@liaizon honestly I'm interested in this purely just to see how badly Mastodon will muck things up if I start sending NodeBB Q&A topics as a Question activity, because Mastodon currently uses it for Polls.

But they don't have a monopoly on using it, and I can make the argument that my use case is more in spirit to the protocol 😸

julian , to Random stuff
@julian@community.nodebb.org avatar

@trwnh I think I figured out why those posts of yours from way back didn't federate in.

Your identity to the NodeBB forum had 0 rep, so you were limited to one post every 300 seconds.

I've removed that limitation for now.

J12t , to Random stuff
@J12t@social.coop avatar

Finally I'm getting around to listen to @mike 's Dot.Social episode with @rklambo and @pcottle from , talking about .

Mike asks the most important question first: "why are you [Meta] doing this [Fediverse integration]?"

[cont]

julian ,
@julian@community.nodebb.org avatar

@J12t said in Finally I'm getting around to listen to @mike 's Dot.Social episode with @rklambo and @pcottle from #meta, talking about #threads.:

Rachel: one of the challenges with the fediverse is: how do you figure out where your content went, and how can I follow that conversation that now exists on multiple different servers?

Something ForumWG is actively researching at present. A lot of the fediverse is built on reply chains, fragmented ones, but there's a better path forward, and we're figuring out just how to do it.

You shouldn't ever have to "view original post" except out of a sense of curiosity.

julian ,
@julian@community.nodebb.org avatar

@J12t follow the category here: @swicg-threadiverse-wg (although the handle will change at some point) for latest updates and discussion 👍

Codeberg , to Random stuff
@Codeberg@social.anoxinon.de avatar

Anyone considering how to break the already? Any alternative work in progress?

julian ,
@julian@community.nodebb.org avatar

@Codeberg @maegul @drewdevault I'd argue that a forum with Q&A functionality is already most of what SO is.

So NodeBB can do that with the Q&A plugin, and we're moving towards federation.

smallcircles , to Random stuff
@smallcircles@social.coop avatar

Hey, which app allows an to be used as a ?

https://social.coop/@smallcircles/112414539433136490

#❓

julian ,
@julian@community.nodebb.org avatar

@smallcircles I can't believe it actually worked!

https://community.nodebb.org/post/99626

julian ,
@julian@community.nodebb.org avatar

@smallcircles hashtags aren't linked in-post in NodeBB. They're metadata at the topic level.

But regardless, here's how it looks... and here's the link to the tag page

1000004008.png

skinnylatte , to Random stuff
@skinnylatte@hachyderm.io avatar

I haven’t encountered a single vegetable-centered dish at any of the Thai, Japanese, Malaysian restaurants I’ve visited in LA. It is possible to eat differently from the rest of the world (re a conversation a few days ago about always having to order veggies)

(To be clear, I agree everyone should eat veggies if they want! But also that, there are many cuisines which simply aren’t vegetable-centered)

(I had a very large raw papaya salad, lots of fiber but also enough chilli to kill a bear)

julian ,
@julian@community.nodebb.org avatar

@skinnylatte you got it.

It's not that Asians (specifically for me, HK) don't eat veg, it's that protein is much less favoured as the main ingredient in a dish. This extends practically everywhere, like European countries.

Take for example the prototypical American BBQ: brisket, pulled pork, ribs, and the sides are mac & cheese and cole slaw... Americans don't consider a breakfast proper unless there's bacon or something red meat involved, or I guess if you really have to compromise, eggs.

If there's a breakfast without meat, it's explicitly called a continental breakfast!

dansup , to Random stuff
@dansup@mastodon.social avatar

Anyone building a federated Stack Overflow?

julian ,
@julian@community.nodebb.org avatar

@benpate @utzer may I pose a question?

What is the actual difference between a site like StackOverflow (or their sister sites on the exchange) vs. a forum with a question-and-answer functionality built in?

At its core, as Ben alluded to, each question is essentially a "topic/thread", with immediate replies considered "answers", and further sub replies considered "comments".

An accepted answer needn't federate, though it can always provide that information via a separate ActivityStreams property.

My assertion isn't that StackOverflow does anything different "technically", but that their network effect and centralization, along with being the only good option to ExpertsExchange, allowed them to prosper.

julian ,
@julian@community.nodebb.org avatar

@benpate said in Anyone building a federated Stack Overflow?:

Personally, the "accepted answer" is the killer feature. Dunno if NodeBB, Kbin, or others already support this.

Yes! NodeBB's been around for a decade, we have tons of stuff that got built because people wanted it.

So yeah we have a plugin that already does full question-and-answer support. We use it on our forum: https://community.nodebb.org/category/16/technical-support

Note the "solved" and "unsolved" labels, and descending into a solved topic, you'l see the accepted answer floated to the top.


NodeBB's theme and plugin engine is very flexible, so it is feasible to stand up a StackOverflow clone rapidly.

julian , to Random stuff
@julian@community.nodebb.org avatar

For a lot of things in ActivityPub, there are almost direct parallels in NodeBB. An as:Note object pairs well with a NodeBB post, an as:Person is a NodeBB user, etc.

One thing that didn't map 1:1 was the Delete activity, which at surface level, seems rather straightforward — just delete the object! However, once you dig in, there are some additional considerations:

  • in NodeBB, we have two separate states for content removal.
    • A delete, where the post is still present (but its content unavailable to non-privileged users), and a
    • A purge, where the post is scrubbed from the database entirely, and all references to it, removed
  • in ActivityPub, there is a single activity, as:Delete
  • Implementors may opt to replace the object representation with an as:Tombstone (how quaint!), but they may also just opt to use a 404

So there are some nuances that are left intentionally vague.

Kaniini on SocialHub makes the argument that a Delete should be treated like a cache invalidation, which has its own merits.


This is how NodeBB will interpret the protocol specification, and how we will align it with our own dual-state post deletion mechanic (delete & purge):

  1. When a local post is deleted, we will federate out an Update(Tombstone) referencing the id
  2. Afterwards, if the content is retrieved, an as:Tombstone will be served.
    • Deleted posts in NodeBB still maintain their place in the topic, so when the context is retrieved, the note will still be present in the collection.
  3. If we receive an Update(Tombstone), we will delete the local representation of the post
  4. When a local post is purged, we will federate out a Delete(Note)
  5. Afterwards, if the content is retrieved, we will serve a 404
    • The note will no longer exist in the context collection
  6. If we receive a Delete(Note) (or Article, or Question, etc.) we will not delete it immediately. Instead, as kaniini advises, we will attempt to retrieve the object from the origin:
    • If we see an as:Tombstone, we will delete the post (soft delete)
    • If we encounter a 404 or 410, we will purge the post (hard delete)

I'm writing this out less as a guideline for myself, but to solicit opinions and to give others a chance to point out if I've interpreted the spec incorrectly.

julian , to Random stuff
@julian@community.nodebb.org avatar

Finally, you are now able to look up remote content and user profiles using the built-in NodeBB search tooling.

In the quick search bar and on the search page itself, you can paste in a URL to a post. If NodeBB can fetch it using the ActivityPub protocol, then it will be immediately parsed and returned as a search result:

057bb06d-4108-4d1e-b715-61d32691959e-image.png

If you change the search type to "In users", or use the search bar in the users page, then you can look up remote users using their URL or handle:

2230f50f-bed2-4470-aa97-3037a7d13d02-image.png

This change resolves the final hurdle stopping a brand new NodeBB from connecting to the fediverse. It wasn't possible to actually find anyone or anything in order to start those first follow relationships. Now it is possible.


Aside — I'm frankly surprised by how long it's taken for me to actually do this. It goes to show you just how much you'll put off doing something if it's not really critical.

image/png

julian , to Random stuff
@julian@community.nodebb.org avatar

You know what I just noticed about @mike's DotSocial podcast? The introductions are always succinct and to-the-point. There's no 30-second "John Smith spent 15 years at X doing Y with Z, and revolutionized foo by barbaz, and is also on the board of Fizzbuzz. He is a leading champion for..." blah-de-blah-blah.

Take @snarfed.org@fed.brid.gy's introduction:

The beauty of an open system is that anyone can build on top of it, and try to make it a better place, in the fediverse, software engineer Ryan Barrett is one such developer. Most recently, Ryan built a bridge to connect Bluesky, which uses the AT Protocol, to Mastodon and other platforms, using the ActivityPub protocol. He wanted to advance the fediverse's promise of interoperability. His work ignited a firestorm, revealing learnings, lessons, and insights discussed today.

I never realized how often meaningless polished intros happens on podcasts, radio shows, TV interviews, etc., because I've just learned to tune it all out.

... or maybe it's because if you're an ActivityPub dev, Ryan needs no introduction :laughing:

julian , to Random stuff
@julian@community.nodebb.org avatar

Please see below for minutes from today's Forum and Threaded Discussions Task Force monthly meeting.

Apologies in advance if I misrepresented anybody or missed any crucial bits of information


Participants

in order of appearance


  • Dmitri invited participants to the regular SWICG call tomorrow; best place to be informed of upcoming events: SocialCG calendar"please come by, it is free for everyone to join or listen in"
  • Angus provided an update to the working group's inclusion under the banner of the Social Web Incubator Community Group (SWICG), revised name would be the Forums and Threaded Discussions Task Force, or "ForumWG" for short.
  • Julian provided an update on this past month's usage of the fediverse to hold asynchronous discussion, a number of threads have been started on the respective forum categories (both of which federate out) for the working group pertaining to discussions re: agenda items, and have been fairly well received.
  • Angus and Julian will update the respective handles of their categories to reflect the new working group name

"Lay of the Land" survey reports

  • Angus: The general spirit of these surveys is 'these are the existing X approaches, the plurality may indicate the need to converge'
  • Nomenclature
    • Rimu: Document continues to be expanded upon
    • Evan re-iterates that it is unlikely any implementors will change their nomenclature to match
    • Angus asks whether participants find utility in the list
    • Evan indicates that whatever is decided upon is best used "on-the-wire", Julian agrees and notes that the agreed-upon terminology would be used in the "Definitions" portion of any report written by ForumWG; suggests the list may be best kept as a living reference
    • Rimu indicates that as the list grows, alternative ways to represent the data may be required
    • Round of applause for Rimu for taking the initiative to start (and now maintain) the list
  • Object Type (Article vs. Note vs. Page)
    • Impetus for topic: WordPress sending out as:Note when as:Article would be more suitable
      • @jupiter_rowland (in topic, paraphrased): Mastodon values microblogging UX and locked down their allowed html to satisfy this constraint, despite Hubzilla's pleas
      • @mikedev (in topic, paraphrased): Raised issue in 2017 to address issues with inline images being removed. Suggested a compromise: treat Article and Note differently (Note, text only with attachments; Article, full HTML) — Eugen 7 months later closed issue with change to further hamper treatment of Article, by showing only title and link back to source.
      • @pfefferle (in topic): "You can choose 'Note' if you want to have the best compatibility"
    • Evan: Whether a note or article is federated, it shouldn't hamper implementation; but as:Page should not be used
    • Mattias: Choice is given to user as to how WP maps the native Post object to ActivityPub. Historically sent out Article but received a lot of pushback from early adopters. Difficult to reconcile UX with technical limitations
    • Evan: "An as:Note is a Tweet (we just couldn't call it that), an as:Article is a blog post"
    • Emelia: "Should software publish different objects based on content length, even if using the same mechanism?"
    • a: Big picture view — it doesn't seem complicated, but it is, because the line between them is completely arbitrary.
    • Mattias: We try to autodetect (no headers, content length, etc.), would prefer different content types based on what users write, but the advantage is being able to read content natively on the user's platform of choice
    • Dmitri: "I think we've got several questions in parallel:
      1. What SHOULD these things (Note & Article) be used for.
      2. What to do about Mastodon who only seems to consume Notes."
    • Emelia: Don't Articles usually have titles?
      • Everyone else: crickets (made us think!)
    • a: https://wiki.trwnh.com/tech/spec/activitypub/confusion/note-vs-article/ (also indicates using title to discriminate Article vs. Post isn't 100%)
    • a: The reason we're talking about this is because of various differring implementations - for example, in one implementor's mental model, you have a thread with a title and that is separate from the posts contained within; posts that may also have titles of their own. How do we reconcile this?
    • Julian and Rimu note that @renchap replied in-topic: "... we would like to improve how non-Note objects are processed/displayed in Mastodon."
    • Julian mentions a compromise put forth by @mikedev where Notes are smaller pieces of content with limited markup and attachments, and Articles are (sometimes) larger pieces with formatting, inline images. Additional survey/spreadsheet to be created, but we could as a group (Mastodon included) converge on a path forward and a report to the SocialCG could be authored. To be continued next month.
  • Group Actor characteristics
    • 1b12 - announcing the activities of their actors, this is what Discourse and NodeBB do, other implementations have taken this approach
    • @nutomic (paraphrased): "intent of 1b12 is to describe the existing status quo"
    • 400e - Pubicly appendable collections; Picked up by a few other folks, also potentially Mastodon (with their new groups implementation)
    • How do we treat group actors in forum/threaded implementations?
      • a: 400e - Groups send Add activities, 1b12 - Groups send Announce activities, otherwise, a Group could even send regular Creates (editor's note: this is a dramatic simplication of the actual post here)
      • Evan: announce style makes the most sense, understanding that folks use both - suggestion: document both but let consumers know they'll see one or both
      • Rimu: Implementors can make opinionated decisions on how it should work, and adjust based on the reality of how the major players adopt
      • Angus will continue collating responses into a spreadsheet re: group implementations
  • Open item: feedback on desired UX (@trwnh)
    • Can a group be multiple different things? e.g. a context/thread has some recipients, a context could be an actor. How forums choose to (or could) represent these relationships via ActivityPub is what is currently being solicited
    • a: Boils down to "Collections, please use them", but best to start foundationally: Notes in Collections, first.
    • Due to lack of time discussion of this will take place asynchronously on the fediverse: https://community.nodebb.org/post/99491 (if this does not open in your client, paste it into the search box)
    • Julian provided one user story: "If you want to share a context to others, one should share the higher-ordered collection, and not what we do today, which is to share the url/object uri for OP."
      • A suitable implementation could see that and backfill the entire context locally, and redirect the user to the first object.
    • Angus noted that Discourse already has some support for Collections, will provide details async on forum topic (linked above)

Action Items

  • @angus and @julian will update the respective handles of their categories to reflect the new working group name
  • @julian to collate responses to Article vs. Name among implementors, supply recommendation at next meeting.
  • @angus to collate responses re: Group federation among implementors, continue discussion next meeting
  • @trwnh to solicit feedback asynchronously via the fediverse
julian , to Random stuff
@julian@community.nodebb.org avatar

Unfortunately during today's ForumWG call, we did not have enough time to fully discuss @trwnh's desire to solicit feedback regarding the Fediverse UX for forums.

The next best thing is to collect those user stories via the fediverse and discuss again at the next meeting, so here we are!

@trwnh will start off the discussion with a reply here.

julian , to Random stuff
@julian@community.nodebb.org avatar

An update from last night brings some additional logic to the title generation of topics from the fediverse.

Previously if a title was provided in the name property, that was used as the topic title.

While that hasn't changed (and is the strongest signal for a topic title), not all fediverse content contains titles. Specifically, Mastodon posts do not require or even have a space to put a title in.

For those cases, we fall back to generating one based on the content. We literally grabbed the first 128 characters or so, and added an ellipsis to the end.

While that worked okay as a stopgap, it meant that a lot of topics ended up with really long titles — not ideal.

The new logic tries to grab the first line of text (either the first <p> or line), and from there, the first sentence, using some naive regular expressions.

While still not a proper alternative to... you know... specifying a title, it's better than nothing I suppose!

I wonder if other fediverse softwares implement title generation logic like this...

julian , to Random stuff
@julian@community.nodebb.org avatar

So I have an unreadable notification on slack, because I'm a cheapskate and don't pay for it:

cdbd601b-84ff-47b5-9890-117431c7b4d0-image.png

... and now my taskbar icon will just have a red dot forever, thus rendering it completely useless. Excellent.

81552386-6487-4953-a192-a9fb24fc56fe-image.png

image/png

maegul , (edited ) to News from fediverse
@maegul@hachyderm.io avatar

Reflecting on the firefish/calckey "moment"

which was about a year ago now, I can't help but suspect it was a small event with wider implications on the dominance of in the

I think it was the last chance to direct the twitter migration energy into discovering new/different fedi platforms.

And it was blown, with alt-social in a weird steady/waiting state that's smaller I suspect, than what many hoped for.

@fediverse

cntd: https://hachyderm.io/@maegul/112358202238795371

1/

julian ,
@julian@community.nodebb.org avatar

@maegul at the end of the day Firefish burned brightly but quickly. It might be worth doing a post-mortem of it purely as a technical exercise because building a fediverse application has some unique constraints... though I imagine when you get down to it the failures may end up being the same social and/or technical failings you see anywhere else.

Sometimes I wonder how much their name choice (Calckey, specifically) set them back on their fedi speedrun.

After all, NodeBB isn't exactly a "hip" and marketable brand name 😬

julian ,
@julian@community.nodebb.org avatar

@maegul said in Reflecting on the firefish/calckey "moment" ...:

And so all the promise of being big/serious was facade/hype.

But being honest here, who hasn't thrown out a few "company we's" in order to sound bigger or more established?

I did not see firsthand what happened (I guess I didn't follow the right people!), so I'm probably off. How much of it was bluster and when does it become problematic? Bluster is rewarded in the capitalist Americas, blech...

poppastring , to Random stuff
@poppastring@dotnet.social avatar

I was looking at implementing with a while back, and I admittedly struggled and lost my enthusiasm for the project. However, I have found @mapache explanations and tutorials incredibly helpful and intuitive.

I am following his guide here: https://maho.dev/2024/02/a-guide-to-implement-activitypub-in-a-static-site-or-any-website/

DasBlog is not static so some of this does not apply, but enough does, and for the rest I can easily overlap gaps with the rich blogging engine. I am currently on step 5, this is happening!

julian ,
@julian@community.nodebb.org avatar

@poppastring nice, go @mapache!

Your resources were not available (or maybe I just didn't know about them at the time), but this looks great!

julian , to Random stuff
@julian@community.nodebb.org avatar

There have been some scattered discussions I've seen over the past year that mention that @pfefferle's WordPress ActivityPub plugin federates their blog posts out as an as:Note, and that the only reason this is done is because Mastodon only treats as:Note (and as:Question) as a first-class object and relegates anything else to a fallback handler that takes a short snippet of the content, and shows a link back to the original source, thus losing any in-app benefits (boosts, replies, etc.)

Whether this is actually true or not, I do not know. So that's why I'd like to ask Mattias — or anybody else with some context — here.


For reference:

  • as:Article: Represents any kind of multi-paragraph written work.
  • as:Note: Represents a short written work typically less than a single paragraph in length.
  • as:Page: Represents a Web Page.

I have also noticed that Lemmy, perhaps out of principle, sends out an as:Page for new generated content, and only the replies federate out as as:Note. It has unfortunately led to some assertions that Lemmy's federation is "broken", even though it is arguably not the case.

@nutomic, care to weigh in?


I don't even blame Mattias for opting to send everything out as as:Note.

End of the day right now it doesn't matter how Mattias or Nutomic represent their higher-level collection of data, because Mastodon is the largest implementor and neither they — nor anyone else I know of, for that matter — treat anything that's not as:Note or as:Question specially.

But that ought to change. The question is how, but this WG is not at the point where we start throwing around decrees and making up standards.

What's important to me right now is what the landscape looks like right now, and why that is the case.

N.B. The discussion here will eventually make its way to online real-time discussion at one of the future WG meetings.

julian , to Random stuff
@julian@community.nodebb.org avatar

Had a chance to listen to @pfefferle on WeDistribute's Decentered podcast. Surprisingly informative, and eye opening just how locked down shared hosting providers are.

Things we take for granted like the ability to mount routes on /.well-known (they could be blocked!)... or that you can't always assume cron is available.

https://wedistribute.org/podcast/wordpress-matthias-pfefferle/

Having used a VPS for years, I would never go back to shared hosting, but you definitely cannot argue with the convenience, ease of use (CPanel, et al.), and most of all, value for money. However, those three come with significant trade-offs in terms of flexibility and power.

Kudos to you Mattias for having the patience to try to get those shared hosting providers to change. If I were in your shoes I'd just tell them to hop on over to a different provider!

pfefferle , to News from fediverse
@pfefferle@mastodon.social avatar

Oh nice! Following a blog using is working like a charm!

Good job @julian

julian ,
@julian@community.nodebb.org avatar

Thanks @pfefferle! All I did was implement the protocol as many others have done. Half the credit would go to you as well for the other end of the integration!

It is really cool to be able to follow a blog from a forum. Are comments from the fediverse integrated?

julian ,
@julian@community.nodebb.org avatar

@pfefferle I think there's a bit of a push to provide a full fediverse client (that includes two-way interaction between users). That's what the NodeBB integration is trying to do — to be that all-in-one fediverse client.

But the reality is there's no reason you have to do that. Simply federating content out and maybe ingesting responses back as comments would be a feature complete integration as far as I'm concerned! Anything else is gravy.

julian , to Random stuff
@julian@community.nodebb.org avatar

Does anyone know what the most broadly implemented standard is for signalling that a web page has an alternative ActivityPub endpoint?

What I found online (and with @evan and @silverpill's input) was to deliver a Link header and set a <link> tag, but it doesn't seem to work (at least with Megalodon)...

julian , to Threadiverse Working Group
@julian@community.nodebb.org avatar

To refresh your memory, you can read the minutes of last week's meeting.

Please see @angus's note below regarding agenda preparation for the May WG meeting

Follow up

  1. The Social Web Community Group approved our application to turn this into a Task Force.
  2. Async work will happen across any federated platform followed by either (or both) of these categories

Next Meeting
We're going to have our next meeting in the first week of May.

Time
Please vote in our meeting poll. Whatever time we decide for this one, we'll aim to keep as our regular monthly slot.

Agenda
Please see this google doc. Everyone has comment permission. Julian will incorporate comments into the agenda.

Looking forward to seeing you at the next meeting!

My apologies for the delay. Angus and I have been working these past few weeks to hammer out some federation issues between our respective forum categories (the ones mentioned above re: async work.)

sam , to Random stuff
@sam@social.coop avatar

Is there any / fediverse software for forums?

I am not looking for Reddit alternatives (ie. not Lemmy, although, to be quite honest, I'm not really sure if or why that's different, but they feel fundamentally different from eg. Discourse or phpBB to me, interesting thing to think about later, I suppose).

julian ,
@julian@community.nodebb.org avatar

Hi @sam, it's very early days but Discourse and NodeBB have both been working independently on their respective ActivityPub implementations.

As of perhaps a month ago, the two started working together (along with Daniël from Flarum) as part of the SWICG Threaded Discussions and Forums task force.

As of this week, NodeBB and Discourse can synchronize categories with each other. Discourse has category actors, NodeBB has both user and category actors, plus content discovery via a dedicated route.

Happy to discuss more, but suffice to say this year is going to be big for forums on the fediverse!

julian , to Random stuff
@julian@community.nodebb.org avatar

I have a clarification question for @nutomic regarding 1b12. There are instances where a group actor may have occasion to announce multiple notes all at once. For example:

  1. New notes discovered while traversing upwards to root — may want to announce all parent notes
  2. An existing topic/thread (containing a variable number of notes) is assumed by this group actor (e.g. it was moved to the category/forum).

What would be the expected behaviour from an implementor in that scenario? A single Announce(Collection)? Multiple Announce(Note) in chronological order?

During our testing, @angus
did warn me that a collection was announced, and that caused issues because NodeBB's implementation didn't (and still doesn't) account for that. I believe he changed up the behaviour now.

@trwnh, Angus did mention offline that you warned him about this in the past!

julian OP ,
@julian@community.nodebb.org avatar

Ah it looks like this was covered by Angus' post over on SocialHub

julian , to Random stuff
@julian@community.nodebb.org avatar

Prior our last task force meeting, @rimu brought up the need for a common nomenclature for ease of communication between ActivityPub implementors. Rimu also took the initiative to conduct an informal survey to see what terminology was used across fediverse-capable software (and some non-federating software).

Going beyond "toots" vs "posts", it was noted (not surprisingly) that each software has their own name for things.

  • The most common object type passed around via the ActivityPub protocol (as:Note) could be called a comment, a post, or a reply
  • A grouping of as:Notes could be a post (!!), a topic, a thread, a conversation, or a discussion
  • A higher order grouping of those could be a community, a category, a forum, a (sub)tag, a group, or a magazine

The main takeaways were that while there was occasional convergence, it wasn't entirely surprising that there were more names for things than things to name. Secondly, it was fairly clear that putting forth a recommendation to align on nomenclature would be fairly futile.

What were we expecting... naming things is, after all, one of the hard problems in computing.

All joking aside, up with a common terminology — a lingua franca (thanks @AaronNGray!) — definitely has some advantages.

What terms do you think communicate these levels of organization most succinctly? Let us know!

julian OP ,
@julian@community.nodebb.org avatar

@trwnh nope (although perhaps there should be heh).

It's entirely possible that some logic is faulty and causes posts to be dropped. That'd be less than ideal, and rather hard to catch, too.

julian , to Random stuff
@julian@community.nodebb.org avatar

Hello all,

It's been quite a cold and rainy March and April, but with a couple nice days in between and warmer days ahead, I'm looking forward to getting outside more.

In the meantime, there's been quite a bit of compatibility fixing and incremental updates to the ActivityPub branch, so there hasn't been anything major to report, but nevertheless, we're getting closer and closer to an alpha.

@oplik0 has been helping me this month with some of the trickier aspects, so thank you!


Here's a short summary of what's been tackled on our backlog, in no particular order:

Posts from the fediverse can now be linked to, if you wish to share them with others. The "Copy Permalink" button will copy a shareable link to your clipboard, and "View Original Post" will allow you to view the content from its original source instance.

e8ed6153-9dbc-497d-b1f0-41a4d0bd2299-image.png

You are now able to see posts from remote users

Minor improvements to mentions so they don't (hopefully) get turned into link previews by Mastodon.

Updates to our link-preview plugin so that uploaded images and external links are added to the attachment property for other instances to consume.

Ability to view Popular topics known to this instance, sort of like Mastodon's "trending" feed.


Next up would be bigger items like content pruning and better reply handling.

In coordination with @angusmcleod from Discourse, we are also working on our category-to-category mirroring implementation. This would be used by the SWICG Forum and Link Sharing Task Force, since we're hoping to have asynchronous discussion via the fediverse.

Finding time to test is hard given our respective time zones, but we're getting close!

julian OP ,
@julian@community.nodebb.org avatar

Oh, one last (huge!) thing to add is that @oplik0 added basic support for the Flag activity.

Accepting this means that reports from other servers can be appropriately responded to from NodeBB.

The other half of this is federating responses back out (e.g. Note deletion, etc.)

This small step is part of our Trust and Safety branch of the ActivityPub work. Without it, we wouldn't feel safe enough to tag a release as an alpha.

julian , to Random stuff
@julian@community.nodebb.org avatar

Hey @JP_Bennett — would you be interested in connecting with @Jay-Moonah about having him on a show about the history of podcasting from the POV of one of the founders of Podcamp Toronto? He also founded the Toronto Independent Music Podcast back in 2005.

I was just having a conversation with him offline (how often do we do that nowadays?) and he's got an awful lot to share about podcasting and how far it's come in the years since.

RSS being an open protocol (and podcasting on top of it) sounds like it'd have some overlap with your userbase.

cc @FLOSS_Weekly

julian , to Random stuff
@julian@community.nodebb.org avatar

@oplik0 and I are having a discussion regarding the conditions upon which origin checking should be done on S2S activity receipt.

The spec says this:

Servers should not trust client submitted content, and federated servers also should not trust content received from a server other than the content's origin without some form of verification.

Reasonable, if a little open-ended. I took this to mean that if an Activity(Object) is received, if Object is a copy of the resource itself, that origin checking is required. This is reflected currently in the NodeBB code where if typeof object !== 'string then origin check is carried out.

Problem is, that's a code smell. It's not readily apparent why an origin check is only carried out under that condition. Compounding this is that not all activities need an origin check: Create, Update, and Delete typically don't (careful in my wording here, lest I say something way off-base).

@oplik0 advocates for a more explicit approach, where perhaps an object uri is dereferenced regardless, and an origin check is carried out if the specific Activity-Object type pair calls for it (and if the uri doesn't match).

P.S. Yes, @hrefna I know object can also be an Array... or undefined... or null... don't @ me!)

julian OP ,
@julian@community.nodebb.org avatar

@jenniferplusplus said:

I think you can trust that objects you receive that are attributed to the actor and hosted at the same authority as the actor are valid.

I think that's fair. If I recall correctly the main concern was Activity spoofing by third parties (e.g. Receiving Update(Note) from domainA for a Note whose origin hostname is domainB).

Each individual code path does their own checking if needed, so in the example above, Update handling actually does origin checking too (since the passed-in object is a uri, and thus not subject to checking via upstream middleware), but now that is a case of DRY.

Question is, what activity-pairs explicitly need origin checking... or conversely, is a deny-list a better fit? (e.g. Announce(Note) can refer to Notes outside of the actor origin, so don't do an origin check)

julian OP ,
@julian@community.nodebb.org avatar
  • All
  • Subscribed
  • Moderated
  • Favorites
  • supersentai
  • WatchParties
  • Rutgers
  • jeremy
  • Lexington
  • cragsand
  • mead
  • RetroGamingNetwork
  • loren
  • steinbach
  • xyz
  • PowerRangers
  • AnarchoCapitalism
  • kamenrider
  • Mordhau
  • WarhammerFantasy
  • itdept
  • AgeRegression
  • mauerstrassenwetten
  • MidnightClan
  • space_engine
  • learnviet
  • bjj
  • Teensy
  • khanate
  • electropalaeography
  • neondivide
  • fandic
  • All magazines