Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
We Distribute
  1. Home
  2. General Discussion
  3. Today we have #ActivityPub, which provides real and actual #Federation, but is overly complex and difficult to implement, and we have ATProto, which promises Federation, but delivers central control and is even more complex and difficult to implement.

Today we have #ActivityPub, which provides real and actual #Federation, but is overly complex and difficult to implement, and we have ATProto, which promises Federation, but delivers central control and is even more complex and difficult to implement.

Scheduled Pinned Locked Moved General Discussion
activitypubfederationfediprotocolsprogramming
37 Posts 5 Posters 6 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • jackwilliambell@rustedneuron.comJ This user is from outside of this forum
    jackwilliambell@rustedneuron.comJ This user is from outside of this forum
    jackwilliambell@rustedneuron.com
    wrote last edited by
    #1

    Today we have #ActivityPub, which provides real and actual #Federation, but is overly complex and difficult to implement, and we have ATProto, which promises Federation, but delivers central control and is even more complex and difficult to implement.

    See this discussion (you'll need to scroll down a bit to find my contribution):

    > https://circumstances.run/@davidgerard/115335451897410462

    Dave Winer would love the point I was making there…

    [contd]

    #Fedi #protocols #programming #WTF

    jackwilliambell@rustedneuron.comJ 1 Reply Last reply
    0
    • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

      Today we have #ActivityPub, which provides real and actual #Federation, but is overly complex and difficult to implement, and we have ATProto, which promises Federation, but delivers central control and is even more complex and difficult to implement.

      See this discussion (you'll need to scroll down a bit to find my contribution):

      > https://circumstances.run/@davidgerard/115335451897410462

      Dave Winer would love the point I was making there…

      [contd]

      #Fedi #protocols #programming #WTF

      jackwilliambell@rustedneuron.comJ This user is from outside of this forum
      jackwilliambell@rustedneuron.comJ This user is from outside of this forum
      jackwilliambell@rustedneuron.com
      wrote last edited by
      #2

      Why do I say #ActivityPub is overly complex and difficult to implement?

      I'd need to get into some very geeky weeds to explain exactly why and I'm not going to do that on a thread. But, suffice to say, there's only a small number of full-featured Fedi implementations out there for a reason. And every single one of them is using a protocol implementation directly tied to their overall implementation.

      This has been pointed out before:

      > Playing with ActivityPub. https://macwright.com/2022/12/09/activitypub

      [contd]

      jackwilliambell@rustedneuron.comJ 1 Reply Last reply
      0
      • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

        Why do I say #ActivityPub is overly complex and difficult to implement?

        I'd need to get into some very geeky weeds to explain exactly why and I'm not going to do that on a thread. But, suffice to say, there's only a small number of full-featured Fedi implementations out there for a reason. And every single one of them is using a protocol implementation directly tied to their overall implementation.

        This has been pointed out before:

        > Playing with ActivityPub. https://macwright.com/2022/12/09/activitypub

        [contd]

        jackwilliambell@rustedneuron.comJ This user is from outside of this forum
        jackwilliambell@rustedneuron.comJ This user is from outside of this forum
        jackwilliambell@rustedneuron.com
        wrote last edited by
        #3

        In fact, the closest thing we have to an ActivityPub *Reference Implementation* is the Express ActivityPub Server, which hasn't been updated recently and is only a *partial implementation*:

        > https://github.com/dariusk/express-activitypub

        I probably don't need to make the following point if you are a coder, but for the peanut gallery: Every substantial and mature protocol comes with a *Reference Implementation* as a testbed. And, by extension, this means ActivityPub is neither substantial nor mature.

        [contd]

        jackwilliambell@rustedneuron.comJ 1 Reply Last reply
        0
        • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

          In fact, the closest thing we have to an ActivityPub *Reference Implementation* is the Express ActivityPub Server, which hasn't been updated recently and is only a *partial implementation*:

          > https://github.com/dariusk/express-activitypub

          I probably don't need to make the following point if you are a coder, but for the peanut gallery: Every substantial and mature protocol comes with a *Reference Implementation* as a testbed. And, by extension, this means ActivityPub is neither substantial nor mature.

          [contd]

          jackwilliambell@rustedneuron.comJ This user is from outside of this forum
          jackwilliambell@rustedneuron.comJ This user is from outside of this forum
          jackwilliambell@rustedneuron.com
          wrote last edited by
          #4

          Am I dunking on ActivityPub right now? Well, yeah, I guess I am.

          Do not take this to mean I think we shouldn't be using ActivityPub. Hell, I'm using it right now! I'll take something that works over promised Pie in the Sky or 'doesn't actually deliver' any day. I'm not stupid.

          Here's the problem: I can't easily roll my own Fedi servers. There is no such thing as a 'generic, but tweakable Fedi server' and there are no libraries implementing the server protocol without baggage.

          [contd]

          jackwilliambell@rustedneuron.comJ 1 Reply Last reply
          0
          • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

            Am I dunking on ActivityPub right now? Well, yeah, I guess I am.

            Do not take this to mean I think we shouldn't be using ActivityPub. Hell, I'm using it right now! I'll take something that works over promised Pie in the Sky or 'doesn't actually deliver' any day. I'm not stupid.

            Here's the problem: I can't easily roll my own Fedi servers. There is no such thing as a 'generic, but tweakable Fedi server' and there are no libraries implementing the server protocol without baggage.

            [contd]

            jackwilliambell@rustedneuron.comJ This user is from outside of this forum
            jackwilliambell@rustedneuron.comJ This user is from outside of this forum
            jackwilliambell@rustedneuron.com
            wrote last edited by
            #5

            There are libraries out there for client implementations in many languages. And several of them even support Mastodon extensions to ActivityPub. But that's not what I'm talking about.

            I'm saying I can't simply throw together a proof of concept ActivityPub server for some crazy idea I might have. And the reason for this is the protocol itself; so complex and layered every attempt to implement it has ended up tightly coupled to the rest of the implementation. This is a bad thing.

            [contd]

            jackwilliambell@rustedneuron.comJ 1 Reply Last reply
            0
            • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

              There are libraries out there for client implementations in many languages. And several of them even support Mastodon extensions to ActivityPub. But that's not what I'm talking about.

              I'm saying I can't simply throw together a proof of concept ActivityPub server for some crazy idea I might have. And the reason for this is the protocol itself; so complex and layered every attempt to implement it has ended up tightly coupled to the rest of the implementation. This is a bad thing.

              [contd]

              jackwilliambell@rustedneuron.comJ This user is from outside of this forum
              jackwilliambell@rustedneuron.comJ This user is from outside of this forum
              jackwilliambell@rustedneuron.com
              wrote last edited by
              #6

              This thread is getting long, so I'm going to cut to the chase: I think there needs to be yet another Federation protocol. A simple protocol with a full-featured and generic Reference Implementation.

              And I think it should be based on RSS 1.0 or the Atom Syndication spec (except dump XML and use JSON or something):

              > http://www.atomenabled.org/developers/syndication/

              > https://validator.w3.org/feed/docs/rss1.html

              And, finally? I think it should support peer-to-peer Federation.

              Let's call it 'Really Simple Federation' – RSF…

              [contd]

              jackwilliambell@rustedneuron.comJ daniel@gultsch.socialD 3 Replies Last reply
              0
              • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                This thread is getting long, so I'm going to cut to the chase: I think there needs to be yet another Federation protocol. A simple protocol with a full-featured and generic Reference Implementation.

                And I think it should be based on RSS 1.0 or the Atom Syndication spec (except dump XML and use JSON or something):

                > http://www.atomenabled.org/developers/syndication/

                > https://validator.w3.org/feed/docs/rss1.html

                And, finally? I think it should support peer-to-peer Federation.

                Let's call it 'Really Simple Federation' – RSF…

                [contd]

                jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                jackwilliambell@rustedneuron.com
                wrote last edited by
                #7

                The goal is to have a specification you can read and grok in an afternoon – and then implement something usable in a week.

                After that we create a bridge from RSF to ActivityPub and we let a thousand implementations bloom…

                [fin]

                silverpill@mitra.socialS 1 Reply Last reply
                0
                • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                  The goal is to have a specification you can read and grok in an afternoon – and then implement something usable in a week.

                  After that we create a bridge from RSF to ActivityPub and we let a thousand implementations bloom…

                  [fin]

                  silverpill@mitra.socialS This user is from outside of this forum
                  silverpill@mitra.socialS This user is from outside of this forum
                  silverpill@mitra.social
                  wrote last edited by
                  #8

                  @jackwilliambell

                  And I think it should be based on RSS 1.0 or the Atom Syndication spec (except dump XML and use JSON or something)

                  But ActivityPub is the evolution of Atom/RSS, with JSON instead of XML...

                  Perhaps you actually want a 'Really Simple ActivityPub'? It could be designed to be compatible with ActivityPub, so a bridge won't be necessary.

                  I think this is doable. I think the flavor of ActivityPub we use in Fediverse is already very close to Really Simple ActivityPub, it just doesn't have a spec (yet).

                  jackwilliambell@rustedneuron.comJ 1 Reply Last reply
                  0
                  • silverpill@mitra.socialS silverpill@mitra.social

                    @jackwilliambell

                    And I think it should be based on RSS 1.0 or the Atom Syndication spec (except dump XML and use JSON or something)

                    But ActivityPub is the evolution of Atom/RSS, with JSON instead of XML...

                    Perhaps you actually want a 'Really Simple ActivityPub'? It could be designed to be compatible with ActivityPub, so a bridge won't be necessary.

                    I think this is doable. I think the flavor of ActivityPub we use in Fediverse is already very close to Really Simple ActivityPub, it just doesn't have a spec (yet).

                    jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                    jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                    jackwilliambell@rustedneuron.com
                    wrote last edited by
                    #9

                    @silverpill

                    > "But ActivityPub is the evolution of Atom/RSS, with JSON instead of XML..."

                    Not exactly. ActivityPub is based on ActivityStreams. And ActivityStreams are a variant of RDF using JSON-LD instead of RDF XML. So, at best ActivityPub is based on RSS 2.0. (Which itself is overly complex IMHO.)

                    > "Perhaps you actually want a 'Really Simple ActivityPub'?"

                    Sort of. I want something much simpler anyway. But I don't want to use JSON-LD, so no direct interop will be possible.

                    jackwilliambell@rustedneuron.comJ trwnh@mastodon.socialT 2 Replies Last reply
                    0
                    • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                      @silverpill

                      > "But ActivityPub is the evolution of Atom/RSS, with JSON instead of XML..."

                      Not exactly. ActivityPub is based on ActivityStreams. And ActivityStreams are a variant of RDF using JSON-LD instead of RDF XML. So, at best ActivityPub is based on RSS 2.0. (Which itself is overly complex IMHO.)

                      > "Perhaps you actually want a 'Really Simple ActivityPub'?"

                      Sort of. I want something much simpler anyway. But I don't want to use JSON-LD, so no direct interop will be possible.

                      jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                      jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                      jackwilliambell@rustedneuron.com
                      wrote last edited by
                      #10

                      @silverpill

                      Follow this link and scroll down to my contribution:

                      > (fixed url) https://circumstances.run/@davidgerard/115335451897410462

                      There I explain (a) I don't have a problem with subject/predicate/object triplet-based network graphs, but (b) lots of people have difficulty conceptualizing them.

                      JSON-LD, like RDF XML, is incredibly flexible and you can do amazing things with it based on few simple rules. But, as I wrote in this ancient Slashdot post, RDF is hard PRECISELY because RDF is simple:

                      > https://slashdot.org/~Jack%20William%20Bell/journal/16717

                      jackwilliambell@rustedneuron.comJ 1 Reply Last reply
                      0
                      • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                        @silverpill

                        Follow this link and scroll down to my contribution:

                        > (fixed url) https://circumstances.run/@davidgerard/115335451897410462

                        There I explain (a) I don't have a problem with subject/predicate/object triplet-based network graphs, but (b) lots of people have difficulty conceptualizing them.

                        JSON-LD, like RDF XML, is incredibly flexible and you can do amazing things with it based on few simple rules. But, as I wrote in this ancient Slashdot post, RDF is hard PRECISELY because RDF is simple:

                        > https://slashdot.org/~Jack%20William%20Bell/journal/16717

                        jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                        jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                        jackwilliambell@rustedneuron.com
                        wrote last edited by
                        #11

                        @silverpill

                        While I'm referring to that ancient Slashdot post, let me surface a comment offering a reason why Dave Winer didn't like RDF and my response.

                        The point here? Whenever we have something like JSON-LD or RDF XML (or, for that matter, SOAP) we are dealing with what some people (and I among them) will call an over-engineered mess.

                        In this conceptualization ActivityStreams are capable of supporting nearly ANY use case. But they are over-engineered for 80% of use cases.

                        jackwilliambell@rustedneuron.comJ trwnh@mastodon.socialT 2 Replies Last reply
                        0
                        • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                          @silverpill

                          While I'm referring to that ancient Slashdot post, let me surface a comment offering a reason why Dave Winer didn't like RDF and my response.

                          The point here? Whenever we have something like JSON-LD or RDF XML (or, for that matter, SOAP) we are dealing with what some people (and I among them) will call an over-engineered mess.

                          In this conceptualization ActivityStreams are capable of supporting nearly ANY use case. But they are over-engineered for 80% of use cases.

                          jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                          jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                          jackwilliambell@rustedneuron.com
                          wrote last edited by
                          #12

                          @silverpill

                          Also, FWIW? In the end Dave Winer was right about the 'Semantic Web'. Not only did it *not* take the web by storm, it failed PRECISELY for the reasons Dave said it would fail.

                          You can say a lot of things about Dave, I know I've said most of them. But I've come to fully internalize and accept his main orgainizing precept: "Do the simplest thing that could possibly work."

                          silverpill@mitra.socialS 1 Reply Last reply
                          0
                          • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                            @silverpill

                            Also, FWIW? In the end Dave Winer was right about the 'Semantic Web'. Not only did it *not* take the web by storm, it failed PRECISELY for the reasons Dave said it would fail.

                            You can say a lot of things about Dave, I know I've said most of them. But I've come to fully internalize and accept his main orgainizing precept: "Do the simplest thing that could possibly work."

                            silverpill@mitra.socialS This user is from outside of this forum
                            silverpill@mitra.socialS This user is from outside of this forum
                            silverpill@mitra.social
                            wrote last edited by
                            #13

                            @jackwilliambell

                            I want something much simpler anyway. But I don't want to use JSON-LD, so no direct interop will be possible.

                            It's hard to find a developer who wants to use JSON-LD in a social application. But the good news is that JSON-LD is not required, and not even used: our servers produce and consume plain JSON documents. Yes, these documents have @context property, but for most implementations this is purely ceremonial thing.

                            Here's some test data: https://funfedi.dev/support_tables/hashtag_jsonld/

                            That's what I meant when I said that the flavor of ActivityPub we use in Fediverse is already quite close to 'Really Simple ActivityPub'. Nobody wanted an over-engineered protocol, so it was simplified and optimized by early adopters.

                            1 Reply Last reply
                            0
                            • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                              This thread is getting long, so I'm going to cut to the chase: I think there needs to be yet another Federation protocol. A simple protocol with a full-featured and generic Reference Implementation.

                              And I think it should be based on RSS 1.0 or the Atom Syndication spec (except dump XML and use JSON or something):

                              > http://www.atomenabled.org/developers/syndication/

                              > https://validator.w3.org/feed/docs/rss1.html

                              And, finally? I think it should support peer-to-peer Federation.

                              Let's call it 'Really Simple Federation' – RSF…

                              [contd]

                              jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                              jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                              jackwilliambell@rustedneuron.com
                              wrote last edited by
                              #14

                              NOTE: While spelunking on this stuff I discovered JSON Feed:

                              > https://www.jsonfeed.org/version/1/

                              Which is basically Atom Syndication or RSS 1.0 using JSON and fully compatible with them:

                              > https://www.jsonfeed.org/mappingrssandatom/

                              danlyke@researchbuzz.masto.hostD 1 Reply Last reply
                              0
                              • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                                NOTE: While spelunking on this stuff I discovered JSON Feed:

                                > https://www.jsonfeed.org/version/1/

                                Which is basically Atom Syndication or RSS 1.0 using JSON and fully compatible with them:

                                > https://www.jsonfeed.org/mappingrssandatom/

                                danlyke@researchbuzz.masto.hostD This user is from outside of this forum
                                danlyke@researchbuzz.masto.hostD This user is from outside of this forum
                                danlyke@researchbuzz.masto.host
                                wrote last edited by
                                #15

                                @jackwilliambell I haven't looked at it in a while, but I *really* like the IndieWeb spec that did feed markup via classes on elements in your danged HTML page, where the content already freakin' exists, and where you can read what's showing up as a human.

                                So you just add some class tags to your blog's main page, and the syndicator gets update notifications and whatnot just like that... And there's no confusion about HTML escaping, or...

                                jackwilliambell@rustedneuron.comJ 1 Reply Last reply
                                0
                                • danlyke@researchbuzz.masto.hostD danlyke@researchbuzz.masto.host

                                  @jackwilliambell I haven't looked at it in a while, but I *really* like the IndieWeb spec that did feed markup via classes on elements in your danged HTML page, where the content already freakin' exists, and where you can read what's showing up as a human.

                                  So you just add some class tags to your blog's main page, and the syndicator gets update notifications and whatnot just like that... And there's no confusion about HTML escaping, or...

                                  jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                                  jackwilliambell@rustedneuron.comJ This user is from outside of this forum
                                  jackwilliambell@rustedneuron.com
                                  wrote last edited by
                                  #16

                                  @danlyke

                                  I didn't catch that, but it goes directly to my point of keeping it simple. That is, unless they did some kind of RDF markup for the semantics…

                                  I'll have to take a look at that.

                                  danlyke@researchbuzz.masto.hostD 1 Reply Last reply
                                  0
                                  • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                                    @danlyke

                                    I didn't catch that, but it goes directly to my point of keeping it simple. That is, unless they did some kind of RDF markup for the semantics…

                                    I'll have to take a look at that.

                                    danlyke@researchbuzz.masto.hostD This user is from outside of this forum
                                    danlyke@researchbuzz.masto.hostD This user is from outside of this forum
                                    danlyke@researchbuzz.masto.host
                                    wrote last edited by
                                    #17

                                    @jackwilliambell I think it was at https://indieweb.org/microformats , and I think I remember implementing it for Flutterby, though my recent rebuild from circa 2013 backups might have blown that and I may need to re-do it.

                                    trwnh@mastodon.socialT 1 Reply Last reply
                                    0
                                    • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                                      @silverpill

                                      > "But ActivityPub is the evolution of Atom/RSS, with JSON instead of XML..."

                                      Not exactly. ActivityPub is based on ActivityStreams. And ActivityStreams are a variant of RDF using JSON-LD instead of RDF XML. So, at best ActivityPub is based on RSS 2.0. (Which itself is overly complex IMHO.)

                                      > "Perhaps you actually want a 'Really Simple ActivityPub'?"

                                      Sort of. I want something much simpler anyway. But I don't want to use JSON-LD, so no direct interop will be possible.

                                      trwnh@mastodon.socialT This user is from outside of this forum
                                      trwnh@mastodon.socialT This user is from outside of this forum
                                      trwnh@mastodon.social
                                      wrote last edited by
                                      #18

                                      @jackwilliambell @silverpill you've got a missing link: https://activitystrea.ms started as an extension to atom, and then developed a json serialization that could be used instead of or alongside the atom serialization. json activity streams 1.0 was taken to the w3c and evolved into activity streams 2.0, which optionally uses json-ld if you want to use external vocabularies.

                                      trwnh@mastodon.socialT 1 Reply Last reply
                                      0
                                      • trwnh@mastodon.socialT trwnh@mastodon.social

                                        @jackwilliambell @silverpill you've got a missing link: https://activitystrea.ms started as an extension to atom, and then developed a json serialization that could be used instead of or alongside the atom serialization. json activity streams 1.0 was taken to the w3c and evolved into activity streams 2.0, which optionally uses json-ld if you want to use external vocabularies.

                                        trwnh@mastodon.socialT This user is from outside of this forum
                                        trwnh@mastodon.socialT This user is from outside of this forum
                                        trwnh@mastodon.social
                                        wrote last edited by
                                        #19

                                        @jackwilliambell @silverpill in practice, fedi uses external vocab anyway without json-ld, they just expect everyone else to have the exact same context instead of actually using the provided context. in other words, they hardcode understanding certain shorthand terms without actually checking if those terms mean what they think they mean. this mostly only works because mastodon is the de facto protocol and reference implementation, and not many people care about publishing activities.

                                        jackwilliambell@rustedneuron.comJ 1 Reply Last reply
                                        0
                                        • jackwilliambell@rustedneuron.comJ jackwilliambell@rustedneuron.com

                                          @silverpill

                                          While I'm referring to that ancient Slashdot post, let me surface a comment offering a reason why Dave Winer didn't like RDF and my response.

                                          The point here? Whenever we have something like JSON-LD or RDF XML (or, for that matter, SOAP) we are dealing with what some people (and I among them) will call an over-engineered mess.

                                          In this conceptualization ActivityStreams are capable of supporting nearly ANY use case. But they are over-engineered for 80% of use cases.

                                          trwnh@mastodon.socialT This user is from outside of this forum
                                          trwnh@mastodon.socialT This user is from outside of this forum
                                          trwnh@mastodon.social
                                          wrote last edited by
                                          #20

                                          @jackwilliambell @silverpill the confounding factor is that activitystreams was defined for the purpose of describing streams of activities. literal "activity streams". this is a very clear application and use case, and was even thought to be the unifying model for all social activity on the web. sure, you can map things into rdf just like you can map *anything* into rdf (and json-ld is a way to map any arbitrary json into flat statements). but activitystreams is not being used for that purpose.

                                          trwnh@mastodon.socialT 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          Powered by NodeBB Contributors
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups