@julian@community.nodebb.org
@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. Browse more on the original instance.

Jeremiah, (edited ) to webdev
@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,
@julian@community.nodebb.org avatar

@liaizon oh I know, I'll send a Question activity, and all of the answers won't be text (as Mastodon expects, but uris to as:Note) hahahah

julian,
@julian@community.nodebb.org avatar

@jenniferplusplus theoretically a Q&A site would bundle in answers, so we'd send anyOf or oneOf too!

@liaizon @thisismissem

julian,
@julian@community.nodebb.org avatar

@thisismissem ๐Ÿ˜ˆ

(That's an imp smiling emoji btw, Mastodon strips it out because we send inline images)...

J12t, to meta
@J12t@social.coop avatar

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

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 , talking about .:

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@community.nodebb.org (although the handle will change at some point) for latest updates and discussion ๐Ÿ‘

Codeberg, to stackoverflow
@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 fediverse
@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!

##### NodeBB Community

A community to talk about development and ask questions about NodeBB modern forum software

[ faviconNodeBB Community (community.nodebb.org)

](https://community.nodebb.org/login)

##### NodeBB Community

A community to talk about development and ask questions about NodeBB modern forum software

[ faviconNodeBB Community (community.nodebb.org)

](https://community.nodebb.org/login)

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
@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 fediverse
@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
@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,
@julian@community.nodebb.org avatar

@blaue_Fledermaus โ€” interesting idea, but my gut feeling is no, because post visibility (which at present, NodeBB doesn't even support at all) and deletion are two separate properties in ActivityPub.

One is defined in the object itself (to, cc, etc.), whereas if a post is deleted, it simply ceases to exist or becomes a Tombstone.

julian,
@julian@community.nodebb.org avatar

@eeeee said in Reconciling ActivityPub Deletes with NodeBB deletion:

The only thing Delete then Purge does is add extra step to removing something!

Technically they needn't be two steps. You could just go straight to purge.

We toyed with the idea of removing deletes altogether... not sure where we landed haha @baris?

julian, to random
@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,
@julian@community.nodebb.org avatar

Technical stuff ahead ๐Ÿšจ...

This is merely exposing the frontend UI to the already established backend logic.

We have two methods internally that are used for this:

  • Notes.assert, which when given a object url or id, parses it and attempts to resolve the parent chain all the way to the top-level post. It then creates a topic to house all of those posts.
  • Actors.assert, which when given an object url, id, or handle, creates a local representation of the user.

How come "query"/etc. didn't show up?

For both user and post searching, if the passed-in url does not resolve or does not resolve to a processable object, then we do not proceed. It's important to realize that while in an ideal world, we'd all be passing immutable identifiers everywhere, the real world is just a bit messier.

Search queries could be a post or user URL, or a webfinger handle, so additional logic was required to handle those use cases. Most ActivityPub-enabled software I've encountered handle these vanity URLs when queried via ActivityPub โ€” it returns the appropriate representation for processing. Some do not, and so in those cases, those items will not show up in the search results.

julian, to random
@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@snarfed.org'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 ๐Ÿ˜†

julian, to random
@julian@community.nodebb.org avatar

As of today, the NodeBB-ActivityPub implementation now supplies both context and audience properties with every post.

N.B. When I say context and audience, these are also terms used by the ForumWG that refer to "topic" and "category", in NodeBB parlance.


Early indications from the last ForumWG meeting indicate movement towards the inclusion of context in a low-level as:Note object (a federated NodeBB post), resolvable as an as:Collection or as:OrderedCollection. The latter is what NodeBB will send, ordered by post time.

Discussions with @angus also suggest that Discourse has the ability to parse an as:OrderedCollection context if provided, but currently does not if encountered as a property in a Note.

A minor change today also updates the audience property, which used to erroneously point to the context/topic, but now points to the audience/category. This change aligns usage of this property with FEP-1b12's expectations.


This change should allow other implementors to:

  • automatically group objects together given a the provided context, and
  • more thoroughly backfill a given object's context, without relying on inReplyTo traversal
julian, to random
@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,
@julian@community.nodebb.org avatar

@arnelson Let me add you to the list-of-people-to-mention whenever something is scheduled ๐Ÿ™‚

J12t, to ai
@J12t@social.coop avatar

Concerned about ? Overblown imho. Be concerned about people who might even consider doing something like this!

https://www.reuters.com/world/us-official-urges-china-russia-declare-only-humans-not-ai-control-nuclear-2024-05-02/

julian,
@julian@community.nodebb.org avatar

@J12t in an alternate reality where AI has control over the nuclear arsenal of every nation state... we'd then only be several steps removed from the TOS episode "A Taste of Armageddon", where an AI foregoes war completely and just vaporizes its own citizens after simulating war between another nation.

julian, to random
@julian@community.nodebb.org avatar

I may regret creating this topic but here goes.

If you experience a bug or other unexpected behavior while using NodeBB and its related ActivityPub integration, please post it here so it can be tracked and resolved.

No formal process as of yet, and we're still at pre-alpha so expect many things to be broken or unavailable ๐Ÿ˜…

julian,
@julian@community.nodebb.org avatar

@nutomic hello! Hope it was a successful test ๐Ÿ™‚

julian,
@julian@community.nodebb.org avatar

@the@community.nodebb.org that's intentional, it acts more like a category than a list of unread topics.

So you can mark a topic as read but it'll stay there, just like marking a topic read in an existing category.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • โ€ข
  • anitta
  • mdbf
  • magazineikmin
  • Durango
  • Youngstown
  • vwfavf
  • slotface
  • ngwrru68w68
  • khanakhh
  • rosin
  • kavyap
  • thenastyranch
  • PowerRangers
  • DreamBathrooms
  • Leos
  • ethstaker
  • hgfsjryuu7
  • osvaldo12
  • cubers
  • GTA5RPClips
  • modclub
  • InstantRegret
  • everett
  • tacticalgear
  • normalnudes
  • tester
  • cisconetworking
  • provamag3
  • All magazines