openEngiadina: From ActivityPub to XMPP

the challenge will not only be to have json-ld parsers/generators in different languages. the bigger challenge will probably be to make them compatible :wink:
I am very, very curious. I will use existing json-ld libs in my implementation and will report what that leads to. Since the day before yesterday iā€™m hacking again, letā€™s see how long i can keep it up. but iā€™m working inside with rdf4j as abstraction and transport turtle. json-ld will ā€œonlyā€ become an in/out adapter/translator in my case.

Once Iā€™m a little further along, Iā€™m happy to test json-ld compatibility with others. iā€™m starting with C2S though.

1 Like

I worked with JSON-LD parsers for a long time

But the large footprint and buggy implementations have lead me to favour a different approach

And that is to use general native JSON parsers, and extract the relevant LD from the payload

It is a very nice, encouraging article.
One more important point is

ā€œAnd why has everything become an array?ā€

Cause it does not help anybody if software expects it not to be an array when ActivityPub clearly says, it can be an array.

The Fediverse needs JSON-LD alone for not loosing content.
Have a look at e.g. Federation - Mobilizon ā€“ you would loose all the schema.org properties when you just use the JSON payload.
If you donā€™t use JSON-LD, your software will not know where the event is and all users are lost. This is one of 1000 examples.


about

ā€œThere are practically no implementations of the ActivityPub Client-to-Server protocol (C2S)ā€

I am leading a team at a large publishing house writing a server and a client and I am using every free minute to write my Open Source client, see Commits Ā· redaktor/widgets-preview Ā· GitHub

And so the above sentence is just frustrating and disencouraging to read that there are no implementations (apart from:)

  • pleroma,
  • and-status
  • smithereen (see sloph to smithereen demo)
  • independent clients and more
1 Like

Thank you for pointing out the existing C2S implementations. I changed the wording in the post to ā€œThere are not many implementations of the ActivityPub Client-to-Server protocol (C2S).ā€ and linked to your post.

It was not my intention to frustrate or discourage. Sorry that you felt so.

Well, it is one choice less for our users now ā€¦ And you were the only ActivityPub project who made it through that strange NGI0 thing, I think.

Wondering how other ActivityPub Elixir devs will handle it, e.g. https://lemmy.ml/post/95684 ā€¦

Anyway: What should we do with the Talk then?
It is false information nowā€¦

Absolutely not ! json-ld is still linked data. Even itā€™s awful :wink:
My implementation will understand json-ld and it will also generate json-ld. Iā€™m just afraid that very few people can interpret my json-ld. I currently working on an docker image.
Features now:

  • Receiving a create activity
  • read activities/Objects by their subject
  • no authenticatiopn yet
  • no actor profile yet.
  • supports json-ld, turtle and many other rdf syntax.

maybe we should think about a webservice that translates json-ld to turtle and vice versa.:wink:
I have one processor each for (in/out) that does this translation for me

What I meant is that the info with ActivityPub in the video is not up to date and viewers could be thankful for an update (maybe via comment) ā€¦

that translates json-ld to turtle

Yes maybe ā€“ will look what turtle is is exactly.
I am using the ā€œreference implementationā€ of the JSON-lD tools for node.js ā€¦

Manu Sporny was also engaged at the Conference and it works nicely for me.

Soundā€™s great, so your client can be the first test client for my C2S Server :wink:

1 Like

Well, just some coming to my mind ā€¦
There is much more !

This post is a wiki, add yours:

Implementations of the ActivityPub Client-to-Server protocol (C2S)

Server

Also leaving this here

PS: Not sure about https://bonfirenetworks.org but Mayel is also doing Elixir, see GitHub - bonfire-networks/activity_pub: Modular ActivityPub library in Elixir

1 Like

Some more description by @pukkamustard on rationale of using XMPP as discussed on Matrix:

Do you think I should go for XMPP? What would be the pros and cons?

I think you should go for XMPP. There are three main advantages I see:

  1. Everything you need to get it working is well specified. You need to read a RFC and a couple of XEPs. Unfortunately ActivityPub seems to be underspecified and getting a working/federating implementation is non-trivial.
  2. There are working, well-tested and generic XMPP servers that you can just use. Generic in the sense that XMPP servers do not care what kind of content you transport over them. This is not the case for ActivityPub. I am not aware of any ActivityPub server that allows arbirtary types of content to be transported. This was something we were trying to do with CPub. With XMPP we just use ejabberd or prosody (both work perfectly fine).
  3. With XMPP youā€™re not bound to Web technologies. XMPP main transport is TCP, but it works over WebSocket (what we are using in GeoPub) and other things such as radio links (XEP-0361: Zero Handshake Server to Server Protocol). ActivityPub is a Web first stack. If you create a non-web client you still need a lot of web libraries.

Cons:

  • You need to read some XEPs and other documents that look scary.
  • You need to deal with XML. But IMHO thatā€™s better than having to deal with JSON-LD.

Can we easily bridge XMPP with ActivityPub?

Libervia project is working on this (NLnet; XMPP-ActivityPub gateway).

GeoPub uses ActivityStreams over XMPP. Which should make a bridge very easy (ActivityStreams over XMPP ā€” inqlab)

Later on @pukkamustard mentions:

Of course there are a couple of generic ActivityPub servers in development. Among them rdf-pub by @naturzukunft (linkedopenactors / rdf-pub Ā· GitLab)

Also worth mentioning ActivityPods (GitHub - assemblee-virtuelle/activitypods: ActivityPub + Solid PODS = ā¤ļø) and Bonfire (https://bonfirenetworks.org/)

(Thereā€™s also https://semapps.org)

Considering that many people, who are doing generic servers, looked for help ā€“
and considering all the meetings, I disagree.
Also, I started GitHub - redaktor/server which just went the closed-source-way for G+J cause we did not get funding at nlnet ā€¦
It seems to be a vicious circle but maybe we should actively collect the efforts.

Apart from go-fed, python ap, epicyon, bonfire, semapps ā€¦ there is also a Rust start now: