Email or username:

Password:

Forgot your password?
74 posts total
marius

#Smithereen 0.9 is out!

Photo albums are, of course, the headline feature of this release. In addition to that, there's the groups newsfeed and redesigned mobile profiles.

Also, Smithereen is now available on Docker Hub: hub.docker.com/r/grishkaa/smit

#ActivityPub #mastodev

Алексей Фаянс

Thanks for docker images! Finally no more building this daily on my own. :)

marius

NodeBB v4.0.0 — Federate good times, come on!

Today's the day! :tada:

After nearly a full year in development, NodeBB v4.0.0 has landed, bringing federation between NodeBB instances (and a connection to the wider fediverse of social media) to forum software.

Fedi-what?

Fediverse! Here's a TechCrunch primer about it, but at the end of the day, it doesn't really matter. All you need to know is that NodeBB plugs in to a wider social network so that you don't have to cultivate an audience, they're already there.

The genesis

It was back in mid-2023 when I had the initial idea of interconnecting NodeBB forums. Back then, I had far smaller ambitions... I wanted a singular NodeBB to be able to communicate with other forums running NodeBB. To do that, we'd need to build out a centralized service to act as a bridge between instances, and corresponding slim clients on individual installs to consume the relayed data. At the time, concept like decentralization were not even part of my thought process.

It was during this period when I was doing my research that I stumbled on Mastodon, and later, ActivityPub, the protocol that powers it all. Since then, it's been one wild ride getting NodeBB to speak the same language.

Funding

Soon after dipping my toes into all that Mastodon had to offer, I discovered the NLNet Foundation, and their corresponding fund — NGI Zero Core. With the promise of funding, NodeBB could fully commit to implementing the protocol in short order, instead of piece by piece over time. We sent in an application and were delighted to be approved for the August 2023 call.

Their funding was instrumental in providing the financial stability to experiment with ActivityPub and to participate in developer circles, such as the SWICG, FediForum, and much more.

The fund continues to operate, perhaps you could benefit, or donate to the cause. It has certainly made a difference to NodeBB.

Federate, or not, it's your choice

NodeBB v4 comes shipped with the capability to interact with other NodeBB forums and any other ActivityPub-speaking software, right out of the box. We opted to make this a core feature instead of a plugin, since there were many changes made to core to support even the concept of accepting content from outside itself.

To that end, any users upgrading from v3.x will automatically have federation disabled, in order to reduce surprise. Any new forums will federate automatically.

You can turn federation on and off (and adjust some other fun toggles) directly from ACP > Settings > Federation (ActivityPub).

Even after turning federation on, how you use it shapes how well connected you will be. There is no centralized authority artificially boosting your content, so the name of the game is establishing two-way follow relationships to other sites.

The ActivityPub Equalizer

We're not alone in this journey to interoperate with other decentralized services. We're not even the only forum software to attempt to do so.

- Discourse has a working plugin.
- Ghost is building out in the open.

I specifically highlight these two because they both started in the early 2010s, same as NodeBB. It's always been a bit of an informal competition between us, and we always checked in on what the others were doing (growth-wise, pricing-wise, etc.) Truth be told, I don't think the ghost team ever really noticed NodeBB, but I digress...

The funny thing about ActivityPub is that at the end of the day, the overarching goal of seamless communication breaks down any barriers between competing organizations.

NodeBB and Discourse have been vying for the exact same market share (forums, community-building, self-started or enterprise) for over 10 years, and it was only after ActivityPub came around that the dev teams even started talking to one another.

Funny how that works.

So how does it all work?

Our documentation portal has been updated with the latest information about the ActivityPub functionality in v4.

If you have any questions about how it works or how to configure some aspect of it, please don't hesitate to reach out in the corresponding v4 support thread.

If you run NodeBB, the quickest way to see this in action is to upgrade to v4, and then paste this post's URL into your search bar. It should show up automatically, and you should be able to read and reply to it, directly from your own forum. Neat!

NodeBB v4.0.0 — Federate good times, come on!

Today's the day! :tada:

After nearly a full year in development, NodeBB v4.0.0 has landed, bringing federation between NodeBB instances (and a connection to the wider fediverse of social media) to forum software.

Fedi-what?

Fediverse! Here's a TechCrunch primer about it, but at the end of the day, it doesn't really matter. All you need to know is that NodeBB plugs in to a wider social network so that you don't have to cultivate an audience, they're already there

Show previous comments
Matthias Pfefferle

@julian congrats, this is amazing! thanks for all your work and support!!!

:gnu:Hacker

@julian It's great. I saw first a link to your website and I could not reply from my Mastodon account. I had to find the post through Mastodon itself.

Maybe in the future you could add the possibility to reply from mastodon account.

sk
Welcome! and hello from hubzilla!
marius

A reminder that one year ago this was happening in the #Benidorm #cyclocross race.

#biketooter

Fu

@mariusor I am too old. I don't understand TikTok.

Karma Sahne - R.I.P @natenom

@mariusor I always go slower on the easy parts of a CX track to have the power to look like a high performer on the difficult parts.

Sometimes it works. 😁

marius

Because my laptop is dying I had to resurrect my old desktop machine. It hasn't booted since May 2023.

Wish me luck with the updates. :D

A screenshot of the list of boot times on a linux machine as returned by journalctl --list-boots.

The last entry is from today, 2025-01-17, and the previous one is dated as 2023-05-13.
marius

Hi, Mastodon 🦣

Anyone in Stuttgart who could answer a couple of questions for me?

1. How are things at the main train station now? Last time I was there, it was a construction site & frustrating to get around.

2. Is it worth visiting Wilhelma in winter or should I stick to the Natural History Museum? I don't have time for both.

marius

In case there are any followers of mine based in Brussels: on 28th January I am discussing the future of railways in the EU at an event in Brussels

Informal event, and there is even beer

Come along!

beersandpolitics.com/rail-for-

marius

Support for the new Wayland screen capture protocol has been merged in wlroots!

Next step: implement individual window capture

gitlab.freedesktop.org/wlroots

marius

@friendica Hey, I'm not sure what's happening with your instance but it's been slamming one of my services in the past 24 hours. Can you please block the instance releases.bruta.link from your side?

I'm not sure what's happening, but there's no content on my instance that should be requested multiple times a second incessantly.

marius

@helpers maybe you guys are also interested.

I opened a ticket also on github: github.com/friendica/friendica

I'm not sure it's an actual bug, more of a support request really, but I would appreciate any kind of clue about what's happening.

My assumption is that my server returns something weird with respect to caching or the ActivityPub payload that gets the friendica client confused.

I'll try to add some mitigations on my side too. 🙇

marius

After what seems like a thousand years I have started replacing some synchronous client to server #ActivityPub fetch requests with loading the same information from an indexed cache in my link aggregator.

I think I've started the work on inbox/outbox async fetch and indexing around 3-4 months ago, and only now I am able to make proper use of it.

I guess I should have used a real RDBMS instead of reinventing the wheel on every turn. :D

#brutalinks #GoActivityPub #golang

marius

Well, a #friendica instance is slamming some of my #activitypub servers. Does anyone have clue about what might be wrong?

Since ~3 days it keeps requesting the same URL over and over at a pretty high RPS.

#bad_bot

naturzukunft

@mariusor is it a valid url ? Does it send a post ? Maybe i've to take a lokk in my logs ;-x

marius

Just to add to this, Friendica is known to have issues with being an unkind citizen of the web before (this time for RSS):

> Friendica, various versions. 100% unconditional requests. Occasionally shows up < 10s after the previous poll. Not good.

rachelbythebay.com/w/2024/10/2

marius

And the Pidgin 3.0 Experimental 1 release (and it's update) are up on Flathub Beta now! Don't know how to use Flathub Beta? Well we put together some instructions for you! discourse.imfreedom.org/t/pidg

#OpenSource #Pidgin #Messaging #Pidgin #Flatpak #FlatpakBeta

marius

After way too many years the very first release of Pidgin 3.0, Experimental 1 has been released! You can read all about it over on our official Discourse post!! discourse.imfreedom.org/t/pidg

#OpenSource #Pidgin #Chat #Messaging #Release

Val Packett 🧉

@pidgin never thought i'd see a libadwaita based app with a source download on SOURCEFORGE 0.o

marius

Can someone with more #JavaScript experience tell me what's an idiomatic way of solving the problem of an application that must fetch multiple URLs?

I currently have the issue that a lot of those URLs actually are the same, so I end-up with 40 requests for the same resource.

Is there an elegant way to solve this with minimal overhead over the native fetch API?

#frontend #javascript #noframework #webdev

diabhoil

@mariusor have something like a global dictionary (object) of type <string, Promise>. If the url is already a key in the dictionary then just resolve the promise again, otherwise add to dictionary and resolve.

marius

In the end this turned out to be as easy as modifying the options we passed to the fetch() function. Afterwards the browser caching mechanism was enough to mitigate slamming the server.

The changes made:
* the fetch request was done with a slightly broken accept header, which had the server always return HTML instead of a JSON document
* the fetch request was using 'no-cors' option, which strips the accept header (the mdn docs say it should stay, but it doesn't look like it for my tests)
* the fetch request now uses 'force-cache' option to avoid making more requests to the server even if it's stale.

TY:
@tjcrowdertech @diabhoil @hattifattener @yasser

In the end this turned out to be as easy as modifying the options we passed to the fetch() function. Afterwards the browser caching mechanism was enough to mitigate slamming the server.

The changes made:
* the fetch request was done with a slightly broken accept header, which had the server always return HTML instead of a JSON document
* the fetch request was using 'no-cors' option, which strips the...

Firefox developer tool network tab, showing a large number of identical requests made to the same URL. All of them are being shown as coming from local browser cache, which was our desired goal in the first place.
marius

Merry Crossmass to me I guess. Good signs for the new year.

And one stubbed toe for every advent day to the person who let their dog poop where I was riding.

#biketooter #crossmass #cyclocross #cycling

marius

Another piece of risky code that relies on Go compiler internals is added to the Rube Goldberg machine that is the #GoActivityPub library... Sigh.

The link to the code: git.sr.ht/~mariusor/ssm/tree/a

A screenshot of a function in the Go programming language doing something very risky using the unsafe.Pointer combined with a type replicated from the go standard library, which is possible to get changed in the future, and thus breaking the function in the process.
Go Up