# orderedItems[].object.content
ActivityPub specifications don't seem to provide a way to do Idempotent POSTs to your outbox.

That seems like a problem for C2S to me.

Networks are unreliable. You cannot tell the difference between an unreceived request vs an unreceived response. You'll get unwanted identical duplicate activities.

Although it isn't difficult to solve — a convention just needs to be picked.

For example, a new Idempotency field could be added to the JSON-LD payload.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
@dahukanna

Yes. I think you are asking exactly the right question:"What does it mean in this context?"

Many replies to the #poll ponder related questions, or state an "it depends". It is clear there's a lot of nuance and edge cases.

Reformulated, how delete should work is solution-specific, depends on domain, use cases, and stakeholders in SX terms.

And Delete activity in #ActivityStreams is not the well-understood part of #ActivityPub it is treated as today. See also:

https://social.coop/@smallcircles/1165 43333306382246

# orderedItems[].object.ephemeral.metadata[].description
@hipsterelectron@circumstances.run @ireneista@irenes.space @kopper@not-brain.d.on-t.work 

I consider this to be part of the "misconceptions" that exist on the ActivityPub fediverse, to once more quote the term as Rich Hickey uses in "Hammock driven development". See:

https://coding.social/blog/grassroots-evolution/#remove-misconceptions

The way I look at ActivityStreams is as a toolbox of social primitives, building blocks for federated solutions. Not as core capabilities of the ActivityPub protocol. Because they are simply not specified as universal and ubiquitous protocol capabilities.

If one particular object supports CRUD is solution-specific in my book. Ideally the ActivityStreams primitives all have well-defined singular purpose, but unfortunately that is not the case. More the opposite where everyone is encouraged to hammer their business domain into an ActivityStreams straitjacket.

# orderedItems[].object.ephemeral.metadata[].ogDescription
@hipsterelectron@circumstances.run @ireneista@irenes.space @kopper@not-brain.d.on-t.work 

I consider this to be part of the "misconceptions" that exist on the ActivityPub fediverse, to once more quote the term as Rich Hickey uses in "Hammock driven development". See:

https://coding.social/blog/grassroots-evolution/#remove-misconceptions

The way I look at ActivityStreams is as a toolbox of social primitives, building blocks for federated solutions. Not as core capabilities of the ActivityPub protocol. Because they are simply not specified as universal and ubiquitous protocol capabilities.

If one particular object supports CRUD is solution-specific in my book. Ideally the ActivityStreams primitives all have well-defined singular purpose, but unfortunately that is not the case. More the opposite where everyone is encouraged to hammer their business domain into an ActivityStreams straitjacket.

# orderedItems[].object.content
There is a comparison that can be made between ActivityPub and Event-Sourcing.

1/

With Event-Sourcing, your source-of-truth is an append-only series of events.

Ex: USER_REGISTERED, EMAIL_ADDRESS_VERIFIED, PASSWORD_CHANGED, etc.

In ActivityPub, this is similar to the inbox, outbox, etc being an append-only series of Activity.

Ex: Create, Like, Undo, etc.

...

#ActivityPub #ActivityStreams #EventSourcing #FediDev

# orderedItems[].object.content
Just thinking out loud —

If we wanted to support resumable uploads in C2S API, then — we probably need some URL to upload the file chunks to.

…

When a user POST to their own outbox, the HTTP "201 Created" response will have a "Location" header that provides a URL.

Maybe that could be used as the upload URL.

Or, maybe the JSON-LD document at that URL might contain a URL under the "object" field that could be used as the upload URL.

Other options too

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
I can think of different ways to support resumable uploads with ActivityPub, but — just to see what others are doing —

PeerTube seems to have resumable uploads already.

PeerTube seems to use this protocol for it:

https://github.com/kukhariev/node-uplo adx/blob/master/proto.md

I like that it uses Content-Range in the protocol. I would have done the similar.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.ephemeral.metadata[].description
Node.js middleware for handling resumable uploads. Contribute to kukhariev/node-uploadx development by creating an account on GitHub.

# orderedItems[].object.ephemeral.metadata[].ogDescription
Node.js middleware for handling resumable uploads. Contribute to kukhariev/node-uploadx development by creating an account on GitHub.

# orderedItems[].object.ephemeral.metadata[].twitterDescription
Node.js middleware for handling resumable uploads. Contribute to kukhariev/node-uploadx development by creating an account on GitHub.

# orderedItems[].object.content
It seems as if the uploadMedia ActivityPub extension does not provide a way to resume an upload that didn't previously compete.

https://www. w3.org/wiki/SocialCG/ActivityP ub/MediaUpload

If, for example, you are working with large files (such as video files) this would matter.

Because if you uploaded 1GB, and the upload stopped, you would want to resume at where it stopped, and not have to upload from the beginning again.

This would be important for ActivityPub C2S adoption.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
I think it would be better if instead of Fediverse software outputting the following for ActivityPub/ActivityStreams Notes, Articles, etc:

"attributedTo": "https://mastodon.social/users/reiver",

It would instead output something more like:

"attributedTo": {
"id":"https://mastodon.social/users/reiver",
"type":"Person",
"name":"Charles",
"preferredUsername": "reiver",
"icon": {...},
"image": {...},
}

This way the Activity* document contains everything needed to render it.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.ephemeral.metadata[].description
27.8K Posts, 1.35K Following, 2.4K Followers · I make things for the #Fediverse & #smallNet

Talk about #DeSo #FediDev #FediverseUX #P2P #Privacy #SpreadFediverse

I post #SciFiArt

Vlog at #AllYourBases #FinalForm

Work on #CrowdBucks #FediCon #FediverseAcademy #FediverseCity #FingerProtocol #GreatApe #Microdon #ProToGo #SocialFed

I life-cast at @reiver@firefish.lol

Code in #golang

I like to understand things. I like to make things.

The meaning of life — first survive, then reproduce 🌞

Formal b/g: comp sci, math. Pro b/g: soft eng, ml, research

# orderedItems[].object.ephemeral.metadata[].ogDescription
27.8K Posts, 1.35K Following, 2.4K Followers · I make things for the #Fediverse & #smallNet

Talk about #DeSo #FediDev #FediverseUX #P2P #Privacy #SpreadFediverse

I post #SciFiArt

Vlog at #AllYourBases #FinalForm

Work on #CrowdBucks #FediCon #FediverseAcademy #FediverseCity #FingerProtocol #GreatApe #Microdon #ProToGo #SocialFed

I life-cast at @reiver@firefish.lol

Code in #golang

I like to understand things. I like to make things.

The meaning of life — first survive, then reproduce 🌞

Formal b/g: comp sci, math. Pro b/g: soft eng, ml, research

# orderedItems[].object.ephemeral.metadata[].description
27.8K Posts, 1.35K Following, 2.4K Followers · I make things for the #Fediverse & #smallNet

Talk about #DeSo #FediDev #FediverseUX #P2P #Privacy #SpreadFediverse

I post #SciFiArt

Vlog at #AllYourBases #FinalForm

Work on #CrowdBucks #FediCon #FediverseAcademy #FediverseCity #FingerProtocol #GreatApe #Microdon #ProToGo #SocialFed

I life-cast at @reiver@firefish.lol

Code in #golang

I like to understand things. I like to make things.

The meaning of life — first survive, then reproduce 🌞

Formal b/g: comp sci, math. Pro b/g: soft eng, ml, research

# orderedItems[].object.ephemeral.metadata[].ogDescription
27.8K Posts, 1.35K Following, 2.4K Followers · I make things for the #Fediverse & #smallNet

Talk about #DeSo #FediDev #FediverseUX #P2P #Privacy #SpreadFediverse

I post #SciFiArt

Vlog at #AllYourBases #FinalForm

Work on #CrowdBucks #FediCon #FediverseAcademy #FediverseCity #FingerProtocol #GreatApe #Microdon #ProToGo #SocialFed

I life-cast at @reiver@firefish.lol

Code in #golang

I like to understand things. I like to make things.

The meaning of life — first survive, then reproduce 🌞

Formal b/g: comp sci, math. Pro b/g: soft eng, ml, research

# orderedItems[].object.content
Both Mastodon and Pixelfed seem to attach images as ActivityPub/ActivityStreams "type" = 'Document'.

I would have expected "type" = 'Image'.

'Document' isn't wrong. It is valid.

But, I would have expected the more specific type of 'Image'.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
What if web-browsers could render the ActivityPub / ActivityStreams JSON-LD source-code into the document it represents?

Fediverse clients can do it — why can't browsers?

I previously created a small-net / small-web browser client named SpaceMonkey.

It supports protocols such as Gemini, HTTP, HTTPS, Mercury, etc. And, formats such as GemText, HTML, Markdown, etc.

It now supports the ActivityPub / ActivityStreams JSON-LD format, too.

#ActivitiyPub #ActivityStreams #FediDev #SpaceMonkey

# orderedItems[].object.content
Was the original intent of the ActivityPub / ActivityStreams "name" field to be a title?

(It seems as if some software is using it that way.)

https://www. w3.org/TR/activitystreams-voca bulary/#dfn-name

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
What should the file-extension for ActivityPub / ActivityStreams documents be?

I.e., for application/activity+json data?

I've been using .activity

Ex: filename.activity

(The extension cannot be .json or .jsonld if you want to be able to detect it just based on the file-extension.)

What do you think?

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
What makes an ActivityPub Actor an Actor?

I think it is probably a bad idea to just restrict it to things with 'type': "Application", "Group", "Organization", "Person", and "Service". Restricting it to just those would mean you couldn't have new actor types (and sub-types) in the future.

So then, do we do it in a duck-typing way? And if "yes", how?

Maybe if something has an "inbox" OR and "outbox" it is an Actor. I.e., it could have just one of those.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
RE: https://mastodon.social/@reiver/116471 973046146144

If an ActivityPub Actor is something that has an "inbox" or an "outbox" (i.e., it could have just one or both) then —

Perhaps we should also be talking about "sources" and "sinks", too. Where —

An ActivityPub Source is an Actor with just an "outbox" (and no "inbox").

And, an ActivityPub Sink is an Actor with just an "inbox" (and no "outbox").

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.ephemeral.metadata[].description
What makes an ActivityPub Actor an Actor?

I think it is probably a bad idea to just restrict it to things with 'type': "Application", "Group", "Organization", "Person", and "Service". Restricting it to just those would mean you couldn't have new actor types (and sub-types) in the future.

So then, do we do it in a duck-typing way? And if "yes", how?

Maybe if something has an "inbox" OR and "outbox" it is an Actor. I.e., it could have just one of those.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.ephemeral.metadata[].ogDescription
What makes an ActivityPub Actor an Actor?

I think it is probably a bad idea to just restrict it to things with 'type': "Application", "Group", "Organization", "Person", and "Service". Restricting it to just those would mean you couldn't have new actor types (and sub-types) in the future.

So then, do we do it in a duck-typing way? And if "yes", how?

Maybe if something has an "inbox" OR and "outbox" it is an Actor. I.e., it could have just one of those.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
Can an ActivityPub 'Place' also be an Actor?

https://www. w3.org/TR/activitystreams-voca bulary/#dfn-place

With followers, an outbox, etc.

That could be useful for both real-life places, and fictional places in stories, and in video games.

#ActivityPub #ActivityStreams #FediDev #FediFiction #FediGames

# orderedItems[].object.content
Should an ActivityPub 'Place' be used to represent a fictional place?

https://www. w3.org/TR/activitystreams-voca bulary/#dfn-place

Such as a fictional place in a story, or a video game?

#ActivityPub #ActivityStreams #FediDev #FediFiction #FediGames

# orderedItems[].object.content
Would you play a Fediverse game?

Would you play a Fediverse game about Meta Humans?

#ActivityPub #ActivityStreams #FediDev #FediGames #Fediverse #Games #VideoGames #MetaHumans

# orderedItems[].object.content
ActivityPub outboxes are the new RSS / Atom / WebFeed.

You can just read from them to get a JSON feed of someone's posts.

I.e., you do NOT have to implement the full suite of Fediverse protocols, or Follow, or run your own server, or anything else to get someone's posts on the Fediverse — just read from their outbox.

#ActivityPub #ActivityStreams #AtomFeed #AtomFormat #DeSe #FediDev #FediDevs #Fediverse #JSON #OpenSocial #RSS #SocialWeb

# orderedItems[].object.content
I am outputting ActivityPub/ActivityStreams content for the listing of what is in a directory.

Think of it as the AP/AS version of output from the `ls` command.

AP/AS has a whole bunch of stuff that can be used to represents files. Even sub-types of files

https://www. w3.org/TR/activitystreams-voca bulary/#object-types

And, while AP/AS has 'Collection' (and 'CollectionPage') —

https://www. w3.org/TR/activitystreams-voca bulary/#dfn-collection

AP/AS doesn't have a 'Directory' type (as a sub-type of 'Collection')

#ActivityPub #ActivityStreams #FediDev #FediDevs #Fediverse

# orderedItems[].object.content
So, an interesting issue came up in the #Fedify repo that I've been thinking about: #629.

You know how every #fediverse server uses schema:PropertyValue in actor attachment for profile metadata fields (like “Website”, “GitHub”, etc.)? Turns out, strict #AS2 validators like browser.pub reject it, because the AS2 spec says attachment should only contain Object or Link—and PropertyValue is a schema.org type, not an Activity Streams 2.0 type.

The thing is, we can't just drop the type like we did with Endpoints (#576), because Mastodon and others rely on seeing "type": "PropertyValue" to render profile fields. But at the same time, it's technically not spec-compliant.

I'm leaning towards writing a #FEP to formalize this existing practice rather than trying to invent a new type (like toot:PropertyValue extending Object), which would be a nightmare to migrate across the whole fediverse.

What do you all think? Has anyone else run into this? Would love to hear thoughts from implementers and spec folks.

#fedidev #ActivityPub #ActivityStreams #ActivityStreams2 #AS2 #PropertyValue

# orderedItems[].object.source.content
So, an interesting issue came up in the #Fedify repo that I've been thinking about: [#629].

You know how every #fediverse server uses `schema:PropertyValue` in actor `attachment` for profile metadata fields (like “Website”, “GitHub”, etc.)? Turns out, strict #AS2 validators like [browser.pub] reject it, because the AS2 spec says `attachment` should only contain `Object` or `Link`—and [`PropertyValue` is a schema.org type][1], not an Activity Streams 2.0 type.

The thing is, we *can't* just drop the type like we did with `Endpoints` ([#576]), because Mastodon and others rely on seeing `"type": "PropertyValue"` to render profile fields. But at the same time, it's technically not spec-compliant.

I'm leaning towards writing a #FEP to formalize this existing practice rather than trying to invent a new type (like `toot:PropertyValue` extending `Object`), which would be a nightmare to migrate across the whole fediverse.

What do you all think? Has anyone else run into this? Would love to hear thoughts from implementers and spec folks.

#fedidev #ActivityPub #ActivityStreams #ActivityStreams2 #AS2 #PropertyValue

[#629]: https://github.com/fedify-dev/fedify/issues/629
[browser.pub]: https://browser.pub/
[1]: https://docs.joinmastodon.org/spec/activitypub/#schema
[#576]: https://github.com/fedify-dev/fedify/issues/576

# orderedItems[].object.ephemeral.metadata[].twitterTitle
PropertyValue attachments serialize with invalid type for AS2 Object/Link validation · Issue #629 · fedify-dev/fedify

# orderedItems[].object.ephemeral.metadata[].description
Description When Fedify serializes actor attachment properties containing PropertyValue items (used by Mastodon for profile metadata fields), the resulting JSON-LD uses schema:PropertyValue as the type: "attachment": [ { "type": "Propert...

# orderedItems[].object.ephemeral.metadata[].ogDescription
Description When Fedify serializes actor attachment properties containing PropertyValue items (used by Mastodon for profile metadata fields), the resulting JSON-LD uses schema:PropertyValue as the ...

# orderedItems[].object.ephemeral.metadata[].ogTitle
PropertyValue attachments serialize with invalid type for AS2 Object/Link validation · Issue #629 · fedify-dev/fedify

# orderedItems[].object.ephemeral.metadata[].twitterDescription
Description When Fedify serializes actor attachment properties containing PropertyValue items (used by Mastodon for profile metadata fields), the resulting JSON-LD uses schema:PropertyValue as the ...

# orderedItems[].object.ephemeral.metadata[].ogDescription
Explore the open social web through the lens of ActivityPub and the fediverse.

# orderedItems[].object.ephemeral.metadata[].ogTitle
BrowserPub · A browser for exploring ActivityPub and the fediverse

# orderedItems[].object.ephemeral.metadata[].description
A decentralized social networking protocol based upon the ActivityStreams 2.0 data format and JSON-LD.

# orderedItems[].object.ephemeral.metadata[].ogDescription
A decentralized social networking protocol based upon the ActivityStreams 2.0 data format and JSON-LD.

# orderedItems[].object.ephemeral.metadata[].twitterTitle
Endpoints object serializes with invalid "type": "as:Endpoints" in actor JSON · Issue #576 · fedify-dev/fedify

# orderedItems[].object.ephemeral.metadata[].description
Description When Fedify serializes an actor's endpoints property to JSON-LD (compacted), it includes "type": "as:Endpoints" in the output: "endpoints": { "type": "as:Endpoints", "sharedInbox": "https://example.com/activitypub/inbox" } Th...

# orderedItems[].object.ephemeral.metadata[].ogDescription
Description When Fedify serializes an actor's endpoints property to JSON-LD (compacted), it includes "type": "as:Endpoints" in the output: "endpoints": { "type": "as:Endpoints", "sharedInbox": "htt...

# orderedItems[].object.ephemeral.metadata[].ogTitle
Endpoints object serializes with invalid "type": "as:Endpoints" in actor JSON · Issue #576 · fedify-dev/fedify

# orderedItems[].object.ephemeral.metadata[].twitterDescription
Description When Fedify serializes an actor's endpoints property to JSON-LD (compacted), it includes "type": "as:Endpoints" in the output: "endpoints": { "typ...

# orderedItems[].object.content
1/

AFAIK, there isn't a way for an ActivityPub Actor (such as a Person actor) to specify a list of Service actors associated with it.

...

For example, imagine that there is a Service actor that represents a way to make a video call to me.

And, for example, I have my Mastodon Person actor.

And, I want to let people know about it (and other Service actors associated with me).

How do I do that using AP, etc‽

...

#ActivityPub #ActivityStreams #AudioCall #Call #FediDev #Fediverse #VideoCall