Powered by longhorn, an ActivityPub Client based blog. This means an existing Fediverse account is used to federate blog entries. The entire thing is based on bovine and the corresponding ActivityPub server.
When building stuff for the Fediverse there is a lot of stuff not covered in documentation or specification. One such thing is how to pass a conversation from the backend to the frontend to render it. This issue is further made difficult by json-ld being linked data, and thus not being a single thing, but something one can iteratively fetch more of. The approach described here is implemented as a renderer in buffalo-components in React see here.
I have collected some performance data on bovine and ActivityPub usage statistics. I thought I'll share them here. Mostly, as I don't think there are many numbers out there. First, I ran an experiment, I doubted the Moopocalypse, involving two accounts sending "mooooo" back and forth. The result is that bovine can handle at least two activities a second. Second, I measured how many activities my account "@email@example.com" sees. The result was one every 13 seconds. This includes useless activities such as Delete or Announces of Like from Lemmy.
In this new Bovine Implementation Note, I will discuss how I'm handling quotes in longhorn, the ActivityPub Client this blog runs on. This discussion is based on my thoughts in Thoughts on oEmbed and quoting. In particular, I will disucss how the quoting notification problem is solved in longhorn. One issue that is not solved by this implementation is enabling posters to mark their posts as not quotable. This cannot be solved here, as first such a mark must be set by the posters. Finally, I only ensured that this implementation works well together with Mastodon so far.
I'm currently experimenting with using Mastodon as a client for bovine, and want to explain how the setup works. This means that I keep running bovine on mymath.rocks, but can use a locally running Mastodon instance (mastodon.local) to write and read posts. In this case, Mastodon is no longer a federated ActivityPub server, but a client application. I will discuss both how to post from mastodon.local and have a federated and home timeline.
In this third Bovine Implementation Note, I will discuss how I am handling what to show to an user viewing an object from Bovine in a web browser. This is mainly so I have a specification to refer to from writing the tests for Bovine. There will be two types of behavior, first for objects having an url property, i.e. objects having a known web representation, second objects without the url property.
In this second _Bovine Implementation Note, I introduce a flow how to register ActivityPub Clients with an ActivityPub Server based on Moo-Auth-1. The goal here is to describe behavior that is already implemented in bovine and used for example in mechanical_bull. By the use of asymmetric encryption (Ed25519), there is no need for a secret to be exchanged in order to register a client.
I'm talking about how software can fail gracefully and how it will be important to the FediVerse to require your software to have nice failure behavior. As an example, you folks on Mastodon and possible other platforms, you might only see one paragraph followed by a link. This is what I would call "pretending everything is ok, while it isn't". You'll miss all the content, if you don't click on the link.
Over the Christmas holiday season the FediVerse was animated with discussions about "quote boosts". This describes the act of embedding a post into another post and adding a comment. For various reasons this lead to tempers boiling high. Since then many new Mastodon apps emerged, some of these support quote boosts in some form and nobody seems to care. This post is both to record some things and to experiment.
One of my goals with this blog is to make it into a first class ActivityPub citizen. Today, I want to talk about how to make it so that Mastodon can lookup the blog post, when pasting the URL in its search box. I mostly write this down, to have the behavior documented somewhere.
In this first Bovine Implementation Note, I introduce Moo Authentication and Authorization for HTTP requests. This meant as an authentication and authorization scheme to replace [HTTP Signatures] when communicating with Bovine. The simplest to state advantage is that HTTP requests will be authenticable without having to look up a private key. For this Moo Auth will replace the usage of an RSA keypair with Ed25519, which has the advantage of shorter keys.
As some of you people might notice, this post looks a little bit unusual compared to other ones. It has a title, followed by a paragraph, followed by a link. This is due it not being a Note but an Article as far as ActivityPub is concerned. Mastodon makes out of this what you see. Now, why am I writing this thing, well I hope that my comment system is now working. So if you reply to this publicly on Mastodon, it should appear on the page with the link. More details after clicking on the link.
Writing a blog about my thoughts on the FediVerse versus microblogging has the distinct advantage that I can repeat myself even better. I can first microblog, then blog, then microblog, then blog, then microblog, ... without boring myself. Also due to the nature of repeating myself, I get to generate testing data.
I rant about Identity in the FediVerse. It's mostly written, so I have a text to test various things. Also I'm building a blog, where texts like this belong. The blog is going to be an ActivityPub Client. While building this, I realized that I need to implement 2 to 1 below, and it annoys me.