ActivityPub

298 readers
2 users here now

Icon base by Lorc under CC BY 3.0 with modifications to add a gradient

founded 2 years ago
MODERATORS
1
 
 

The title sounds horrible. Maybe the concept is, too. But bear with me.

BLUF: A server extension that allows servers to replicate and relate user profile social scores, as defined by the community.

Caveat: I'm wiring from an essentially democratic values POV. Libertarians, anarchists, and fascists will disagree with some of my premises for differing reasons.

An idea I've had knocking around for years is that regulating all behavior is a bad idea. We want as few laws covering personal behavior as possible while still ensuring safety and basic harmony. Laws covering rape, theft, and assault I think most of us can agree are good. Laws covering how people dress, what music they listen to, the books they read are bad laws. Laws covering hate speech and noise in public spaces are in a gray area.

But this doesn't mean there's historically not been regulation for social behavior; it's just been done by peer pressure. Someone using racist language might not be illegal, but that person might be ostracized or booed, and that might affect their behavior. That can be good social pressure. A goth might also get dirty looks from people, and this might cause them to change how they present in public; this could be bad social pressure. However, I argue that there is a role for social pressure that starts where the law ends and helps preserve polite society. Of you disagree, then you probably disagree with this idea, and can stop reading.

What if, for every profile, servers maintain metadata about the profile that the profile owner does not control. This would be a set of labels assigned by other members of communities - arbitrarily, and without moderation. The metadata would be a label and a score, the score being a simple count of the number of users who agree or attach that label to the profile. This metadata would be communicated by servers when profiles are shared; we could imagine a central server hosting the data, but this is a federated ecosystem, so the data would also be federated.

The impetuous for this idea was the increase of troll accounts as Lemmy becomes more popular. A story might go:

I see a post, and a response which leads to a conversation. It appears to me that one of accounts is acting like a troll, so I mark the account "troll", giving it a "troll:1" score. Maybe several other people agree, and separately also add "troll;" eventually, through this and other interactions, the account eventually ends up with some high "troll" score.

Clients can handle this data in various ways. They could annotate the account in user views. Users could set thresholds, such as "hide comments by users with troll value > 100". They could ignore simple refuse to do anything with the data.

Ignoring the difficulty of implementation details (how do you ensure each user only gets to increment a value one time? Who defines the labels? Is it an arbitrary set, and if so, how can servers filter for offensive labels? How do you prevent bad actor servers from assigning their own, fake scores?), I wonder whether this would be a net benefit or net negative.

Honestly, while I am not interested in building an echo chamber, I have no interest in reading the opinions of pro-Nazi fascists. I do not enjoy watching the pass-time of trolls trying to foment arguments. And I'm happy to crowd source the evaluation of people's behavior to filter this content. A good troll can waste a lot of time by appearing to argue in good faith, only becoming obvious after a long series of exchanges that they're just being contrarian with the only goal of making people upset.

This was really more of a shower thought, except it occurred to me on the couch when I was reading a thread where one person was obviously arguing in good faith, and the other was obviously trolling.

I think it could balance itself if there were both positive, negative, and neutral labels. Maybe we all troll a little, at times; maybe we have bad days, or make poor judgments in our replies. But I think this tally idea would work if it's thought of and used as thresholds. Maybe an account has a "troll" rating of 50, but also "reasonable" score of 400. Maybe someone with a "communist" score of 1000 would be proud of it, while fascists consider it a negative and filter those accounts.

Mostly, I think it'd hurt troll-like behavior, agent provocateurs, and shill/advertisement accounts whose success relies on subterfuge and misrepresentation.

I have no doubt that this will be a controversial idea. I'm not sure that I love it or think it's a good idea, myself. But I had the thought, and now it's out there.

2
 
 

Hey everyone! I'm excited to introduce BotKit, a new framework specifically designed for creating standalone ActivityPub bots.

What makes BotKit different from typical Mastodon bot approaches is that it creates fully independent ActivityPub servers. This means your bots aren't constrained by platform-specific limitations like character limits or attachment restrictions. Each bot is a complete ActivityPub server in itself.

The API is designed to be extremely straightforward. You can create a complete bot in a single TypeScript file, with intuitive event handlers for follows, mentions, replies, and more. Here's a quick example:

const bot = createBot<void>({
  username: "mybot",
  name: "My Bot",
  summary: text`A bot powered by BotKit.`,
  kv: new MemoryKvStore(),
  queue: new InProcessMessageQueue(),
});

bot.onMention = async (session, message) => {
  await message.reply(text`Hi, ${message.actor}!`);
};

BotKit currently supports Deno, with plans to add Node.js and Bun support in future releases. It leverages all the federation capabilities of Fedify but abstracts away the complexity, letting you focus purely on your bot's behavior.

The framework is still in early development, but we'd love to hear your thoughts and feedback. Feel free to try it out and let us know what kind of bots you build with it!

3
 
 

The version 1.3.0 of Fedify, an ActivityPub server framework, released! The key changes include:

For details, see the full changelog as well!

Fedify 1.3.0 is available at JSR and npm.

4
 
 

cross-posted from: https://lemmy.ml/post/21657544

Finally, Hollo 0.1.0 released! Hollo is a single-user federated microblogging software which is ActivityPub-enabled and powered by Fedify.

Hollo has the most of features that Mastodon has except for moderation tools, and also include:

  • CommonMark (a.k.a. Markdown) and up to 4,096 characters per post
  • Misskey-style quotes (compatible with Misskey, Akkoma, Fedibird, etc)
  • Misskey-style emoji reactions (both Unicode emojis and custom emojis are supported; compatible with Misskey, Akkoma, kmyblue, etc)
  • Generally much relaxed limitations (more poll options, more attachments, and so on)
  • … and many more!

If you're interested in Hollo, please give it a try! There are several ways to install it: using Railway, using Docker (and Docker Compose), or manually.

If you're already using Hollo, please upgrade it to v0.1.0:

5
6
7
8
 
 

it's about activitypub protocol itself calling our real host public key to validate http signature . Is that commonly known fact and can the fediverse be improved here?

9
4
Any good friendica server (self.activitypub)
submitted 1 year ago by itsaj26744 to c/activitypub
 
 

Maybe I can ask this question here?

Is there any good friendica server which is well maintained and do not block lemmy.world and lemmy.ml?

10
3
submitted 2 years ago* (last edited 2 years ago) by nulluser to c/activitypub
 
 

When making an activitypub request from either a lemmy or mastodon server (I haven't tried others)

(eg curl https://programming.dev/c/activitypub -A 'WhizzleGig/0.1;' -H 'Accept: application/activity+json'),

for their context they include...

"@context": [                                                                                                                                                                                                                                                                                                                                                                                                                          
    "https://www.w3.org/ns/activitystreams",                                                                                                                                                                                                                                                                                                                                                                                             
    "https://w3id.org/security/v1",                                                                                                                                                                                                                                                                                                                                                                                                      
    {

(note: https://w3id.org/security/v1), and for the security portion of the record, they return something like ...

"publicKey": {                                                                                                                                                                                                    
    "id": "https://programming.dev/c/activitypub#main-key",                                                                                                                                                         
    "owner": "https://programming.dev/c/activitypub",                                                                                                                                                               
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nBlahBlahBlah\n-----END PUBLIC KEY-----\n"                                                                                                                                                           
  },

(note how publicKeyPem and owner are both nested inside publicKey).

However, upon reviewing https://w3id.org/security/v1 and https://w3id.org/security, my interpretation is that those should not be nested inside publicKey but should be at the same level. Am I misreading something?