In my quest to build an #ActivityPub based simple, no-frills bulletin board / forum system, I've gone ahead and pushed up my work-in-progress #golang ActivityPub single server framework: apcore. It has no README (yet) and still has a lot left TODO.
I hope to use it in the future to launch multiple small ActivityPub applications leveraging common serving, storing, and moderation features. But new #ActivityStreams vocabulary can be readily innovated upon.
As frameworks are communal, it is my hope that innovations and optimizations that others bring can then be leveraged by multiple projects. And helps give smaller software projects a larger voice in the development in the Fediverse. I haven't thought much about go-fed governance, and am very receptive to ideas.
Also, as it is built on go-fed/activity, adopters are able to support either, or both, the Server-to-Server (federation) protocol and the Client-to-Server protocol.
A licensing note: the go-fed/activity libraries have been and still are Open-Source licensed (BSD). Proprietary Fediverse projects, like write.as, are free to continue using as much or as little of these libraries to build server applications from scratch. It is complex due to the sheer amount of customization.
However, as go-fed/apcore is a server framework and therefore much more of a plug-and-play, hand-holdy, almost-an-application kind of situation, I've licensed it as FLOSS under the AGPL-3.0 license
...and in time-honored Fediverse tradition, since the code isn't finished yet, I should tag this whole thread with #soon.
@cj This is awesome, and sounds like it could be used to test/expand private communication cases mastodon doesn't really address.
GoLang has this pattern called interfaces that's really handy for when an object has different representations, e.g. html, text, and json views of an object decoded from Markdown with Pandoc metadata. What do you know about the performance implications of how this is implemented or how I can look it up?
Yes, that overly specific examples is relevant to your project 😂
@yaaps Golang interfaces are compile-time duck typing and so there's no additional runtime overhead beyond a usual pointer.
This forces Golang to use composition instead of inheritance. Basically, interfaces are "do-ers" so HTML, Text, and JSON types could satisfy a "Renderer" interface that just has 1 method "Render", and as long as each of those types implements it (enforced by compiler) there's no additional overhead to passing the stuff around.
Thanks. That was the perfect resource for understanding the performance profile of interfaces as a language feature
It's what I expected. Interfaces are at a right angle to expectations of functional programming, but the compiler should do the right thing if you write in functional patterns:
Thinking of an earlier conversation with @kensanata about what might be available to build a better home instance (than Sputnik Opphuichi) for end to end ActivityPub. If I can avoid implementing OAuth server and hardening Sputnik for open registrations, I can start working on fun stuff much sooner
Definitely worth some time in the repo next week after I catch up on a few things
Cleaning out drafts folder
For those who don't know, Golang interfaces and the lack of a bias towards static routes are really powerful tools for building a service where you create objects with arbitrary IDs and serve them with HTML, JSON, or other presentations 👍
@yaaps Hey thanks for the kind words! Unfortunately apcore got sidelined as I had to take care of personal things to make sure I could keep doing open source w/o outside concerns.
It's one of those things where it would only really pick up if I could get some extra pairs of hands from folks that want to contribute.
Yeah. Your work... you need to bang your head and iron your fingers like a disloyal house elf everytime you work with open source
How's that sock coming?
@yaaps LOL! 😂
I don't have a sock (that would never happen). It's a long and probably boring story otherwise, best saved for if we have the glorious opportunity to meet up at a conference or something like that.
@phoe You're not wrong.
They use the go-fed/activity library (forked at a specific revision) for both the free and the proprietary codes:
It's been a while since I talked to Matt and I don't know if he'll keep using it or not.
This Mastodon instance is for people interested in technology. Discussions aren't limited to technology, because tech folks shouldn't be limited to technology either!