home.social

#activitystreams — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #activitystreams, aggregated by home.social.

  1. Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

    FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

    codeberg.org/reiver/fep/src/br

    I prefer to write for clarity, so it still needs work.

    #ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158

  2. Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

    FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

    codeberg.org/reiver/fep/src/br

    I prefer to write for clarity, so it still needs work.

    #ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158

  3. Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

    FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

    codeberg.org/reiver/fep/src/br

    I prefer to write for clarity, so it still needs work.

    #ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158

  4. Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

    FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

    codeberg.org/reiver/fep/src/br

    I prefer to write for clarity, so it still needs work.

    #ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158

  5. Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

    FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

    codeberg.org/reiver/fep/src/br

    I prefer to write for clarity, so it still needs work.

    #ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. RE: mastodon.social/@reiver/116597

    More on a resume / CV on the Fediverse on Social Web.

    Another option could be to use something like "JSON resume":

    jsonresume.org/

    github.com/jsonresume/resume-s

    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

  17. RE: mastodon.social/@reiver/116597

    More on a resume / CV on the Fediverse on Social Web.

    Another option could be to use something like "JSON resume":

    jsonresume.org/

    github.com/jsonresume/resume-s

    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

  18. RE: mastodon.social/@reiver/116597

    More on a resume / CV on the Fediverse on Social Web.

    Another option could be to use something like "JSON resume":

    jsonresume.org/

    github.com/jsonresume/resume-s

    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

  19. RE: mastodon.social/@reiver/116597

    More on a resume / CV on the Fediverse on Social Web.

    Another option could be to use something like "JSON resume":

    jsonresume.org/

    github.com/jsonresume/resume-s

    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

  20. RE: mastodon.social/@reiver/116597

    More on a resume / CV on the Fediverse on Social Web.

    Another option could be to use something like "JSON resume":

    jsonresume.org/

    github.com/jsonresume/resume-s

    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

  21. 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

  22. 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

  23. RE: mastodon.social/@reiver/116597

    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.

    #ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

  24. 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.

    #ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

  25. 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.)

    #ActivityPub #ActivityStreams #FediDev #RemoteInbox

  26. 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

    ...

    #ActivityPub #ActivityStreams #FediDev #RemoteInbox

  27. On moving an actor's content.

    4/

    Or, instead of using the ActivityPub 'Update' activity —

    Couldn't we use the ActivityPub 'Move' activity.

    w3.org/TR/activitystreams-voca

    With the "origin" and "target" fields.

    Where "origin" contains the old ID URL, and "target" contains the new ID URL.

    .

    #ActivityPub #ActivityStreams #FediDev

  28. 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:

    w3.org/TR/activitystreams-voca

    w3.org/TR/activitystreams-voca

    w3.org/TR/activitystreams-voca

    Or —

    ...

    #ActivityPub #ActivityStreams #FediDev

  29. 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"?

    w3.org/TR/activitypub/#update-

    ...

    #ActivityPub #ActivityStreams #FediDev

  30. 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‽

    ...

    #ActivityPub #ActivityStreams #FediDev

  31. 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: mastodon.social/@reiver/116446

    #ActivityPub #ActivityStreams #FediDev

  32. 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 #ActivityStreams #FediDev #JSONLD

  33. 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 #ActivityStreams #FediDev #JSONLD

  34. 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

  35. @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:

    social.coop/@smallcircles/1165

  36. 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.

    #ActivityPub #ActivityStreams #EventSourcing #FediDev

  37. 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.

    ...

    #ActivityPub #ActivityStreams #EventSourcing #FediDev

  38. 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

  39. 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

  40. 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:

    github.com/kukhariev/node-uplo

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

    #ActivityPub #ActivityStreams #FediDev

  41. It seems as if the uploadMedia ActivityPub extension does not provide a way to resume an upload that didn't previously compete.

    w3.org/wiki/SocialCG/ActivityP

    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

  42. What do you think about JSON-LD language maps for "preferredUsername"?

    I.e., preferredUsernameMap.

    "preferredUsernameMap": {
    "en": "hello",
    "fa": "درود",
    "ko": "안녕하세요"
    }

    #FediDev #JSONLD #ActivityPub #ActivityStreams

  43. 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

  44. I think it would be better if instead of Fediverse software outputting the following for ActivityPub/ActivityStreams Notes, Articles, etc:

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

    It would instead output something more like:

    "attributedTo": {
    "id":"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