#activitystreams — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #activitystreams, aggregated by home.social.
-
Here is my work-in-progress FEP for using JSON Resume with ActivityPub:
FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD
https://codeberg.org/reiver/fep/src/branch/fep-6158/fep/6158/fep-6158.md
I prefer to write for clarity, so it still needs work.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158
-
Here is my work-in-progress FEP for using JSON Resume with ActivityPub:
FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD
https://codeberg.org/reiver/fep/src/branch/fep-6158/fep/6158/fep-6158.md
I prefer to write for clarity, so it still needs work.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158
-
Here is my work-in-progress FEP for using JSON Resume with ActivityPub:
FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD
https://codeberg.org/reiver/fep/src/branch/fep-6158/fep/6158/fep-6158.md
I prefer to write for clarity, so it still needs work.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158
-
Here is my work-in-progress FEP for using JSON Resume with ActivityPub:
FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD
https://codeberg.org/reiver/fep/src/branch/fep-6158/fep/6158/fep-6158.md
I prefer to write for clarity, so it still needs work.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158
-
Here is my work-in-progress FEP for using JSON Resume with ActivityPub:
FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD
https://codeberg.org/reiver/fep/src/branch/fep-6158/fep/6158/fep-6158.md
I prefer to write for clarity, so it still needs work.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158
-
I may have written a JSON-LD schema for JSON Resume.
It is defined in terms of ActivityPub.
For example:'Resume' is a sub-type of an ActivityPub 'Object'. There are some new fields defined. Etc.
...
Now the question is — where do I put it?
Do I create a pull-request to the JSON Resume resume-schema repo?
Do I create a FEP?
Do I put it somewhere else?
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
I may have written a JSON-LD schema for JSON Resume.
It is defined in terms of ActivityPub.
For example:'Resume' is a sub-type of an ActivityPub 'Object'. There are some new fields defined. Etc.
...
Now the question is — where do I put it?
Do I create a pull-request to the JSON Resume resume-schema repo?
Do I create a FEP?
Do I put it somewhere else?
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
I may have written a JSON-LD schema for JSON Resume.
It is defined in terms of ActivityPub.
For example:'Resume' is a sub-type of an ActivityPub 'Object'. There are some new fields defined. Etc.
...
Now the question is — where do I put it?
Do I create a pull-request to the JSON Resume resume-schema repo?
Do I create a FEP?
Do I put it somewhere else?
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
I may have written a JSON-LD schema for JSON Resume.
It is defined in terms of ActivityPub.
For example:'Resume' is a sub-type of an ActivityPub 'Object'. There are some new fields defined. Etc.
...
Now the question is — where do I put it?
Do I create a pull-request to the JSON Resume resume-schema repo?
Do I create a FEP?
Do I put it somewhere else?
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
I may have written a JSON-LD schema for JSON Resume.
It is defined in terms of ActivityPub.
For example:'Resume' is a sub-type of an ActivityPub 'Object'. There are some new fields defined. Etc.
...
Now the question is — where do I put it?
Do I create a pull-request to the JSON Resume resume-schema repo?
Do I create a FEP?
Do I put it somewhere else?
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
My personal desire would be to create a format from scratch (because you are in control, you get something bespoke to your needs, and it is personally satisfying), but —
I think there is probably an advantage to using something (such as JSON resume) that already has wide adoption.
I guess that makes me inclined towards the latter.
...
So, if I go that way, I would have to decide: plain JSON or JSON-LD.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
My personal desire would be to create a format from scratch (because you are in control, you get something bespoke to your needs, and it is personally satisfying), but —
I think there is probably an advantage to using something (such as JSON resume) that already has wide adoption.
I guess that makes me inclined towards the latter.
...
So, if I go that way, I would have to decide: plain JSON or JSON-LD.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
My personal desire would be to create a format from scratch (because you are in control, you get something bespoke to your needs, and it is personally satisfying), but —
I think there is probably an advantage to using something (such as JSON resume) that already has wide adoption.
I guess that makes me inclined towards the latter.
...
So, if I go that way, I would have to decide: plain JSON or JSON-LD.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
My personal desire would be to create a format from scratch (because you are in control, you get something bespoke to your needs, and it is personally satisfying), but —
I think there is probably an advantage to using something (such as JSON resume) that already has wide adoption.
I guess that makes me inclined towards the latter.
...
So, if I go that way, I would have to decide: plain JSON or JSON-LD.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
My personal desire would be to create a format from scratch (because you are in control, you get something bespoke to your needs, and it is personally satisfying), but —
I think there is probably an advantage to using something (such as JSON resume) that already has wide adoption.
I guess that makes me inclined towards the latter.
...
So, if I go that way, I would have to decide: plain JSON or JSON-LD.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
RE: https://mastodon.social/@reiver/116597879302607072
More on a resume / CV on the Fediverse on Social Web.
Another option could be to use something like "JSON resume":
https://github.com/jsonresume/resume-schema/blob/master/job-schema.json
It seems to be popular.
It isn't JSON-LD. Although I think it would be straightforward to translate it to JSON-LD, if that was desired.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
RE: https://mastodon.social/@reiver/116597879302607072
More on a resume / CV on the Fediverse on Social Web.
Another option could be to use something like "JSON resume":
https://github.com/jsonresume/resume-schema/blob/master/job-schema.json
It seems to be popular.
It isn't JSON-LD. Although I think it would be straightforward to translate it to JSON-LD, if that was desired.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
RE: https://mastodon.social/@reiver/116597879302607072
More on a resume / CV on the Fediverse on Social Web.
Another option could be to use something like "JSON resume":
https://github.com/jsonresume/resume-schema/blob/master/job-schema.json
It seems to be popular.
It isn't JSON-LD. Although I think it would be straightforward to translate it to JSON-LD, if that was desired.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
RE: https://mastodon.social/@reiver/116597879302607072
More on a resume / CV on the Fediverse on Social Web.
Another option could be to use something like "JSON resume":
https://github.com/jsonresume/resume-schema/blob/master/job-schema.json
It seems to be popular.
It isn't JSON-LD. Although I think it would be straightforward to translate it to JSON-LD, if that was desired.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
RE: https://mastodon.social/@reiver/116597879302607072
More on a resume / CV on the Fediverse on Social Web.
Another option could be to use something like "JSON resume":
https://github.com/jsonresume/resume-schema/blob/master/job-schema.json
It seems to be popular.
It isn't JSON-LD. Although I think it would be straightforward to translate it to JSON-LD, if that was desired.
#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume
-
On Tags (including Hash-Tags) in ActivityPub.
2/
A new version of ActivityPub could extend the type of "tag" from:
Object | Link
to:
Object | Link | xsd:string
And that would make the following valid ActivityPub:
"tag": ["apple", "banana", "cherry"]
Of course, it would have to be specified how to interpret this. (Ex: as "type":"Hashtag", or whatever.)
#ActivityPub #ActivityStreams #FediDev #HashTag #HashTags #Tag #Tags
-
On Tags (including Hash-Tags) in ActivityPub.
1/
I think new developers coming to ActivityPub want to write something like:
"tag": ["apple", "banana", "cherry"]
It is unfortunate that that isn't valid ActivityPub. But, that it must instead be:
"tag": [
{
"type": "Hashtag",
"name": "#apple"
},
{
"type": "Hashtag",
"name": "#banana"
},
{
"type": "Hashtag",
"name": "#cherry"
}
]...
#ActivityPub #ActivityStreams #FediDev #HashTag #HashTags #Tag #Tags
-
RE: https://mastodon.social/@reiver/116597841178183282
There is also the other question of — would the resume / CV be JSON-LD.
On one hand, if it was in JSON-LD, it would make it machine-legible similar to ActivityPub.
On the other hand, I don't think anyone is going to write JSON-LD (especially HTML embedded in a JSON string value) by hand. But, I do think some people will want to write their resume by hand.
It feels like user-experience is fighting with JSON-LD based machine-legibility.
-
How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc?
I think it is tempting to put the whole resume in the Actor document.
But, it is probably better for the Actor document to point (rather than include) it. And, have the resume / CV live somewhere else.
It should probably be done in a way that let's people have multiple resumes / CV. For example, for different roles / career tracks, etc.
-
Remote Inbox Architecture
2/
The Remote Inbox server deals with incoming activities, objects, etc, from other users..
The front-end can get the inbox (and other feeds') data from the Remote Inbox server.
(You'd probably want to store cached data from the Fediverse elsewhere from these two servers, as I've said before. But, that is a separate thread.)
-
Remote Inbox Architecture
1/
This, the Remote Inbox Architecture, is an architecture for a Fediverse back-end server that I think could be useful.
Here is how it works — there are (at least) 2 servers involved: (1) the main back-end server, and (2) a remote inbox server.
The actor file on main back-end server "points" the inbox to the remote server.
It separates the user's content from the front-end related functionality
...
-
On moving an actor's content.
4/
Or, instead of using the ActivityPub 'Update' activity —
Couldn't we use the ActivityPub 'Move' activity.
https://www.w3.org/TR/activitystreams-vocabulary/#dfn-move
With the "origin" and "target" fields.
Where "origin" contains the old ID URL, and "target" contains the new ID URL.
.
-
On moving an actor's content.
3/
There a many different conventions we could come up with to allow an ActvityPub 'Update' activity to be used to change an object's "id" field.
We (the Fediverse developer community) just need to pick one that everyone is willing to implement.
For example, perhaps the "origin", "result", or "target" field should be used:
https://www.w3.org/TR/activitystreams-vocabulary/#dfn-origin
https://www.w3.org/TR/activitystreams-vocabulary/#dfn-result
https://www.w3.org/TR/activitystreams-vocabulary/#dfn-target
Or —
...
-
On moving an actor's content.
2/
Could an ActivityPub 'Update' activity be used to move objects from one server to another server?
Could an 'Update' activity be used to change an object's "id" field?
After all, the "id" is used to identity what is being changed. It is the targeting mechanism.
How can you provide the old "id" to target the (old) object you want to change the "id" of, while also providing a new "id"?
https://www.w3.org/TR/activitypub/#update-activity-inbox
...
-
On moving an actor's content.
1/
One of the things that comes up on the Fediverse from time to time — is the ability for people to move their accounts.
For example, someone started off at:
@joeblow@example.com
But, now wants to "move" to:
@misterx@host.example
There is a mechanism to do that.
That mechanism moves their followers, their followees, BUT —
It does NOT move their content over!
That is a problem. Could we address this‽
...
-
I think ActivityPub Partial Updates won't work well with attachments or tags.
Not unless there is a way to reliably just target the item in the attachments or tags array that you want to modify. AFAIK, there isn't.
You have to download the old version of the whole attachments or tags array first, update it locally, and then upload the whole (updated) thing. This creates a race-condition.
See also: https://mastodon.social/@reiver/116446675376417979
-
In ActivityPub, these are all equivalent:
"type":"Banana"
"type":["Banana"]
"type":{"@id":"Banana"}
"type":[{"@id":"Banana"}]
"type":{"id":"Banana"}
"type":[{"id":"Banana"}]
"@type":"Banana"
"@type":["Banana"]
"@type":{"@id":"Banana"}
"@type":[{"@id":"Banana"}]
"@type":{"id":"Banana"}
"@type":[{"id":"Banana"}]
-
In ActivityPub, these are all equivalent:
"type":"Banana"
"type":["Banana"]
"type":{"@id":"Banana"}
"type":[{"@id":"Banana"}]
"type":{"id":"Banana"}
"type":[{"id":"Banana"}]
"@type":"Banana"
"@type":["Banana"]
"@type":{"@id":"Banana"}
"@type":[{"@id":"Banana"}]
"@type":{"id":"Banana"}
"@type":[{"id":"Banana"}]
-
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.
-
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:
-
There is a comparison that can be made between ActivityPub and Event-Sourcing.
3/
With ActivityPub, Activities are often applied to an object. That object gets assigned an ID in the form of a URL.
(And, by URL I mean URL, URI, IRI, etc.)
One doesn't have to read through all the Activities in an inbox, outbox, etc to get the final state of an object.
One can just get the JSON-LD document from the object's ID URL to get the final state.
-
There is a comparison that can be made between ActivityPub and Event-Sourcing.
2/
With Event-Sourcing, you can "project" the events to get another (often more peformant) view of the data in the events.
Without having to incur the cost of having to read all the events to figure out the final state.
...
-
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.
...
-
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
-
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-uploadx/blob/master/proto.md
I like that it uses Content-Range in the protocol. I would have done the similar.
-
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/ActivityPub/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.
-
What do you think about JSON-LD language maps for "preferredUsername"?
I.e., preferredUsernameMap.
"preferredUsernameMap": {
"en": "hello",
"fa": "درود",
"ko": "안녕하세요"
} -
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'.
-
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.