Last week I broke the screen on my phone and have been using an old broken Pixel 3a in the interim. A significant portion of the keyboard does not respond to taps, so I can't even log into Google (as the login screen is portrait-only), so no play store, and it's been an interesting experiment to carry on my day without apps.
First thought: people absolutely SUCK at building fast websites. Mastodon, Fastmail, Discord, Messenger (duh). Hot garbage.
I'm not even sure what to blame, and yeah, I'm totally biased here, because #nodebb is a product I built from the ground-up, but seriously people.
Why am I, some common schmuck of a dev, able to build something that beats the pants off of every existing site, speed-wise, with only minimal focus on speed?
As expected, when an instance attempts to respond to a Note with a larger audience than the note replied to, Mastodon will silently drop it from processing.
I don't actually know if this is codified anywhere in #ActivityPub or #ActivityStreams spec, but looking into it now. 💪
Edit: Might be it actually is processed, but doesn't link up to the more-restrictive parent. Also good I think. Not quite sure how I'd handle this in #nodebb ...
Maybe something I can try for the purpose of learning #Rust is setting up a real-time communication channel in #NodeBB (i.e. a socket that the web UI could use to show real-time information, typing indicators, etc). Maybe it's too easy or too hard... I also have an audio processing project I intend on doing in Rust but I haven't managed to get myself to do that yet.
Also, I still want #PikaPods to have NodeBB. It might become affordable for a lot more communities that way! There's a request lodged for it in their feedback thing but there's currently no indication they plan on adding it.
@thisismissem@paarth@pixelfed@iftas It's important to give leeway to project maintainers here. In all cases, there is no malicious intent, just ignorance over esoteric aspects of the chosen language. #nodebb itself contained a 10/10 0-day, and we were very thankful that it was reported and fixed quickly.
Finally figured out why #nodebb posts weren't queryable via Mastodon, turns out it does Content-Type checking, and I was inadvertently breaking #ActivityPub spec by sending in application/json when I should've been sending in "application/activity+json" or 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'
Latter doesn't play nicely with express, so using the former and all's well!
Full credit to @bouncepaw who gave me key to figuring it out! 🏅
@AltCode That's a good question. At this time I can only try to provide as much linkage and context as I can, and it's up to individual implementors to handle.
In #nodebb's case, each post will have an inReplyTo that points to its direct reply. OP (the root level post) does not have an inReplyTo.
All posts send audience which points to the TOPIC. Each topic (the Page object) sends audience which points to the category.
#FEP 1b12 leaves no room for topic references in replies 🫤
In my very limited, non-dev view of ActivityPub, it seems as though there's nothing that devs can do that would be a "violation of the spec".
With the way that a lot of implementations only use certain parts of the spec, fragmenting the Fediverse into seperate spaces in which only uses of the same software are compatible with each other; it leaves a lot to be desired...
What can devs do "wrong" that would make them seem malicious in the space?
I would have thought complete interoperability would be a major feature, yet I have been infinitely disappointed with current implementations and their almost complete incompatibility with other implementations.
Lemmy and Mastodon being one of the most notable examples. You can post to Lemmy from Mastodon and it seems to work pretty well for the most part. Yet posts from Lemmy on Mastodon, outside of strictly plain text comments, are literally just a link. From what I understand this is due to Mastodon not accepting "article" content types, which is what Lemmy uses for "posts".
@BeAware complete interoperability would indeed be a wonderful feature, but the simple adage holds true: the first 90% takes 10% of the time, the remaining 10% takes 90% of the time, and is also not very fun to do 😁
Also, what does "complete interoperability" mean when different software do different things? Anything that is a superset of #ActivityPub is easy (e.g. upvotes/downvotes are a superset of AP Likes), but its very hard the other way (#nodebb doesn't do post visibility like Mastodon)
At minimum it'd mean users would be able to talk back and forth between your forum and the wider fediverse (your mastodon server included, of course). Depending on the nature of discussion, it may be easier to parse discussions in a forum UX😄
Biggest thing is Mastodon acts more like a gateway to the fediverse, while #nodebb can curate long-running conversations better.
Have some kind of real-time interface. The chat-like style Spectrum.chat used was great for this (apart from Spectrum (source linked) being slow as hell).
Provide plenty of single sign-on. IndieAuth on by default could be a big help.
Have a cheap/free (at least sponsor open-source projects to be free), dead-simple way to host your own
Other nice-to-haves:
Fediverse support of some kind.
Integration with Discord (hell, using Discord's forums, and bi-directional! It's possible with Discord's API, last I checked).
@blake never say never! I've seen lots of interesting projects take on the whole "host Node.js on the cheap" aspect (@cloudron being one).
I won't bore you with details on why #nodebb fits the bill for the other parts of your post, because you explicitly mentioned it.
PHP hosting wasn't always simple either. I remember messing around with php-fpm for far too long. Node will get there (still waiting after a decade though 🤔)
Is there a way to follow #Lemmy communities through Mastodon in a way where you would only get new posts into your timeline? So filtering out the comments?
@BeAware@JMkinen yeah unfortunately the reason why I stopped following startrek.website, Mastodon is just not the ideal viewer for this sort of content.
Were it batched up into discrete topics like a forum would... now we're cookin' 😈
That has me thinking, I should follow a couple kbin communities and see how they look in #nodebb
...
ActivityPub is so neat! With all the new implementations coming out, it's slowly becoming my "one stop shop" internet aggregator.
For example, all from within my Mastodon instance I can:
Follow communities on Lemmy and Kbin, allowing me to interact with every post/comment and make my own post or comment to any community.
Follow my favorite podcasts and get new episodes directly in my feed via PodcastIndex.org
Follow WordPress blogs that have the ActivityPub plugin activated.
SOON enough I'll be able to:
Interact/follow accounts on Threads (and hopefully someday Instagram)
Follow/interact with comments/posts/communities from NodeBB forums.
This protocol is changing the internet and how I use it every day.
PS. If you want more information on how to do any of these things, just let me know and I will explain. Though please limit to asking about one or two at a time, as some are quite intricate in their implementations.
Edit: Nitter has been shut down 2 days after I posted this. Oh well. Fuck Xhitter
I think awhile back @thisismissem lamented the fact that you couldn't be notified of a reply chain unless a) you directly contributed to it (or were mentioned), and b) the replies kept mentioning you.
... and so we're in this weird situation where everybody on Mastodon just mention-spams so people don't get left out, which is... janky, let's not mince words.
#NodeBB keeps you in the loop by having the user follow a topic once replied-to, but I can't force this on Mastodon users (not morally, I literally can't). Most I can do is keep all topic participants in the loop by sending all the replies I get to their respective instances; while it'll show up in their home feed (one hopes), they won't get notified. That's a Mastodon-ism, and I can't change that.
Different implementors may handle incoming content differently though, so not all hope is lost!
@BeAware#WordPress being a php-scripted software benefits from some segregation of logic, so if a bad update occurs, parts of the site break, but the site as a whole is unlikely to become unresponsive.
#NodeBB runs on #nodejs and a bad update could literally bring down the forum, so early on a decision was made to have upgrades via cli, which is also a light form of gatekeeping.
But it's pretty easy... ./nodebb upgrade and grab a coffee 😄
@AltCode@nodebb soon! The two-way interface is still very much in active development so when queried, currently #nodebb doesn't know to respond with a Note object. That's easy to do though so I'll have that working soon hopefully!
I am not a fan of including big or obscure libraries into apps or services, but in the case of #ActivityPub I'd make an exception. If there would be a well-maintained standard compliant ActivityPub library that one could include instead of having to reinvent the wheel (and creating interoperability problems along the way) as I too often see happening right now, that would be GRAND!
@lobingera@jwildeboer I'm also writing an implementation for @nodebb but have been rolling my own logic for a lot of it for one simple reason... that while there are many parallels between #ActivityPub and #nodebb, that translation layer is not really generic enough to use by others.
However there is a lot of low level boilerplate that could be genericised out, and I'd love to do that for #javascript. Things like http signing and verification, key generation, etc.
ActivityPub defines a stream of objects whose content is essentially text, but can include HTML tags. For example, "<p>I <em>really</em> like strawberries!</p>" (wich I take from Example 8 in https://www.w3.org/TR/activitypub/).
In https://cosocial.ca/@evan/111771562317992298, @evan distinguishes short-form text (e.g., Mastodon 500 characters posts) from long-form text (WordPress article entries). Short-form text does not require much markup, but long-form text may require it to share a faithful copy of an article.
Currently, a WordPress blog does not look the same on Mastodon because the HTML elements are changed. For example, @evan blog entry https://evanp.me/2023/12/26/big-fedi-small-fedi/ has the element <h2 class="wp-block-heading">Big Fedy</h2>, which Mastodon shows as <p><strong>Big Fedy</strong></p>. I don't know who changed the original document structure (Mastodon or WordPress) but it appears that the HTML elements were modified to avoid breaking the Mastodon UX. I imagine that if we include SVG code directly on WordPress pages, these code may be complicated to render on Mastodon, even when the browser supports SVG rendering.
@evanprodromou, which HTML fragment is allowed for the content of an ActivityPub object?
Would love to hear your reasoning why!
Personally, I like the possibility of tangents in Reddit BUT I think I prefer the focus of staying on topic from a single thread.
@leroy@BeAware@multiverseofbadness sure, you're indirectly weighing in on the perceived "cultural fit" of the user in that particular forum's environment. You like what you see, you upvote.
But if you're talking literal and objectively, then also yes. #nodebb can be configured so new users with zero rep have their posts queued for approval. If you get one upvote, you clear the hurdle and can post freely.