aka freamon@lemmy.world, freamon@feddit.nl, and any username from lemmon.website

  • 5 Posts
  • 107 Comments
Joined 1 year ago
cake
Cake day: July 17th, 2023

help-circle

  • Thank you.

    I think there’s more to it though, in that simple values aren’t moved, they’re always copied (with any & in front indicating whether it’s the value to copy or the address)

    To illustrate:

    fn how_many(a: u32, fruit: String) {
        println!("there are {} {}", a, fruit);
    }
    
    
    fn main() {
        let a=4;
        let fruit = String::from("Apples");
        how_many(a, fruit);
    
        println!("the amount was {}", a);         // this works
        println!("the fruit was {}", fruit);      // this fails
    }
    
    

    The ‘a’ was copied, and the ‘fruit’ was moved.


  • Mmmm. It’s the instance that people are on on that’s doing (or not doing) much of the work there. If you comment on a post, the instance will send 1 copy to me (who’s responsible for federating it out to other Lemmy instances) and 1 copy to Mastodon for the post’s author.

    If you reply to a Lemmy comment, it doesn’t send it to Mastodon because it’s not for the author (in much the same way that you don’t get replies to replies in your inbox if you’re the OP of a Lemmy post). For local posts, both Mastodon and Lemmy show the local comment tree, but neither can show every Fediverse interaction because they never hear about them.

    Likewise, if you reply to a Mastodon comment, your instance will send it to the comment author, but not the post author, so won’t appear anywhere under their post.

    As for Mastodon comments on Lemmy … it depends. I follow some accounts, so when I post them to Lemmy, top-level comments come through automatically (again, though, I never hear about replies to replies). Other content is just stuff I’ve seen and grabbed. I often post the existing replies, but not if they’ve turned Authorized Fetch on, and I don’t typically go back and check for more later.







  • Observation, mostly. Also guesswork and trial-and-error, because I never realised these were all in the docs.

    The comments in here are from me running lemmy in a VM, and subscribing to a fake community on a VPS (you can mimic a community with a webfinger response and a bunch of static files). The activities sent by lemmy just went to a basic server, that dumped out the JSON files it received.

    I mostly made this post so I could point to something when posting about a Ruby script that can be used to interact with lemmy from the command line. This provides the opportunity to learn about ActivityPub, separate from the more complicated applications that currently implement it.



  • freamon uses his new-found powers to edit the sidebar

    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "id": "https://local.com/activities/update/20f7397d-f124-45aa-a1b2-b8366c17f6db",
      "actor": "https://local.com/u/freamon",
      "to": [
        "https://www.w3.org/ns/activitystreams#Public"
      ],
      "object": {
        "type": "Group",
        "id": "https://remote.com/c/interesting",
        "preferredUsername": "interesting",
        "inbox": "https://remote.com/c/interesting/inbox",
        "followers": "https://remote.com/c/interesting/followers",
        "publicKey": {
          "id": "https://remote.com/c/interesting#main-key",
          "owner": "https://remote.com/c/interesting",
          "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAovFqf5abQp7EpeiwTku9\nUkp5nzFIk6ny/89hfMOrZigJR5RUG44J+TFnT8mHompvViDSQXP4qwJ8bVqQySpU\nIXzm4pKy1ykmuh+Ez0yS3/VaUHLYYi8vXhq5yMc70lIBsZ36KnBspFQBNW7ToHMI\nJia9du/2shxq1huApgpUFbVq/I4FLHQSKYVStCxWkJhTakNxvBLvVBroFF8Izwur\n/d79mTV40scCJX/HkgFqlxFYmmrc1/M2P2Ci3VS5u0oebBHwivvm6QTOVCHIIIgc\n7JM1eo/TdJ0QNkSE6YqSAEbSF1M1KODUPmfvyVrOuUCNJ2V64anD2b6tWCIyHlDN\nvwIDAQAB\n-----END PUBLIC KEY-----\n"
        },
        "name": "An Interesting Community",
        "summary": "<h4>An interesting community</h4>\n",
        "source": {
          "content": "#### An interesting community",
          "mediaType": "text/markdown"
        },
        "sensitive": false,
        "attributedTo": "https://remote.com/c/interesting/moderators",
        "postingRestrictedToMods": false,
        "outbox": "https://remote.com/c/interesting/outbox",
        "endpoints": {
          "sharedInbox": "https://remote.com/inbox"
        },
        "featured": "https://remote.com/c/interesting/featured",
        "language": [
          {
            "identifier": "und",
            "name": "Undetermined"
          },
          {
            "identifier": "en",
            "name": "English"
          }
        ],
        "published": "2024-01-01T17:22:16Z",
        "updated": "2024-02-13T22:05:25.819020Z"
      },
      "cc": [
        "https://remote.com/c/interesting"
      ],
      "type": "Update",
      "audience": "https://remote.com/c/interesting"
    }
    

  • The community mod at remote.com decides to make freamon a moderator

    {
      "@context": "https://www.w3.org/ns/activitystreams",
      "actor": "https://remote.com/u/mod",
      "to": "https://www.w3.org/ns/activitystreams#Public",
      "object": "https://local.com/u/freamon",
      "target": "https://remote.com/c/interesting/moderators",
      "cc": "https://remote.com/c/interesting",
      "type": "Add",
      "id": "https://remote.com/activities/add/390751ec-9b21-4585-875f-2fb088c69c5a",
      "audience": "https://remote.com/c/interesting"
    }
    

    Replies to this comment are all moderator actions.


  • freamon changes his mind again, and undoes the delete

    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "id": "https://local.com/activities/undo/91bd96a3-9fb8-4dde-acfb-3d7ee682a41a",
      "actor": "https://local.com/u/freamon",
      "to": [
        "https://www.w3.org/ns/activitystreams#Public"
      ],
      "object": {
        "actor": "https://local.com/u/freamon",
        "to": [
          "https://www.w3.org/ns/activitystreams#Public"
        ],
        "object": "https://local.com/comment/1",
        "type": "Delete",
        "id": "https://local.com/activities/delete/55f2f17e-6c5d-44f2-ae53-e65c8496dfc3",
        "audience": "https://remote.com/c/interesting",
        "cc": [
          "https://remote.com/c/interesting"
        ]
      },
      "type": "Undo",
      "audience": "https://remote.com/c/interesting",
      "cc": [
        "https://remote.com/c/interesting"
      ]
    }
    

  • freamon regrets his comment, and deletes it.

    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "id": "https://local.com/activities/delete/c08be088-fd16-47fe-a286-3e0c24abc15b",
      "actor": "https://local.com/u/freamon",
      "to": [
        "https://www.w3.org/ns/activitystreams#Public"
      ],
      "object": "https://local.com/comment/1",
      "type": "Delete",
      "audience": "https://remote.com/c/interesting",
      "cc": [
        "https://remote.com/c/interesting"
      ]
    }
    

  • freamon replies to his own post, with an inline link to the same image, and an emoji

    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "id": "https://local.com/activities/create/c394a258-eac5-4555-8b98-823002cbb88c",
      "actor": "https://local.com/u/freamon",
      "to": [
        "https://www.w3.org/ns/activitystreams#Public"
      ],
      "object": {
        "type": "Note",
        "id": "https://local.com/comment/1",
        "attributedTo": "https://local.com/u/freamon",
        "to": [
          "https://www.w3.org/ns/activitystreams#Public"
        ],
        "cc": [
          "https://remote.com/c/interesting",
          "https://local.com/u/freamon"
        ],
        "content": "<p>Comment text<br />\n<img src=\"https://i.imgur.com/T7Z3vUU.jpeg\" alt=\"\" /></p>\n<p>😜</p>\n",
        "inReplyTo": "https://local.com/post/3",
        "mediaType": "text/html",
        "source": {
          "content": "Comment text              \n![](https://i.imgur.com/T7Z3vUU.jpeg)\n\n 😜 ",
          "mediaType": "text/markdown"
        },
        "published": "2024-02-13T21:48:18.776300Z",
        "tag": [
          {
            "href": "https://local.com/u/freamon",
            "name": "@admin@local.com",
            "type": "Mention"
          }
        ],
        "distinguished": false,
        "audience": "https://remote.com/c/interesting"
      },
      "cc": [
        "https://remote.com/c/interesting",
        "https://local.com/u/freamon"
      ],
      "tag": [
        {
          "href": "https://local.com/u/freamon",
          "name": "@freamon@local.com",
          "type": "Mention"
        }
      ],
      "type": "Create",
      "audience": "https://remote.com/c/interesting"
    }
    

    Note 1: lemmy uses ‘Page’ for a post, and ‘Note’ for a comment, whereas mastodon uses ‘Note’ for both, with ‘inReplyTo’ distinguishing between the two.
    Note 2: this is sent to the main community at remote.com, and also to the post’s author (it would appear in his inbox if they weren’t the same person)


  • freamon creates a post in the interesting community. He adds a title, a body, links to an image, and tags it as in English.

    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "id": "https://local.com/activities/create/37f46c10-9fc2-4228-b8ea-3803eb911485",
      "actor": "https://local.com/u/freamon",
      "to": [
        "https://www.w3.org/ns/activitystreams#Public"
      ],
      "object": {
        "type": "Page",
        "id": "https://local.com/post/3",
        "attributedTo": "https://local.com/u/freamon",
        "to": [
          "https://remote.com/c/interesting",
          "https://www.w3.org/ns/activitystreams#Public"
        ],
        "name": "Title Text",
        "cc": [],
        "content": "<p>Body Text</p>\n",
        "mediaType": "text/html",
        "source": {
          "content": "Body Text",
          "mediaType": "text/markdown"
        },
        "attachment": [
          {
            "href": "https://i.imgur.com/T7Z3vUU.jpeg",
            "type": "Link"
          }
        ],
        "commentsEnabled": true,
        "sensitive": false,
        "published": "2024-02-13T21:46:05.705099Z",
        "language": {
          "identifier": "en",
          "name": "English"
        },
        "audience": "https://remote.com/c/interesting"
      },
      "cc": [
        "https://remote.com/c/interesting"
      ],
      "type": "Create",
      "audience": "https://remote.com/c/interesting"
    }
    

  • freamon changes his mind about post 2, and undoes his downvote

    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "id": "https://local.com/activities/undo/e677b1ba-caaf-4a2f-9472-681705f337a3",
      "actor": "https://local.com/u/freamon",
      "object": {
        "actor": "https://local.com/u/freamon",
        "object": "https://remote.com/post/2",
        "type": "Like",
        "id": "https://local.com/activities/like/70edfad8-dcbb-42cd-8fd2-f674844b8801",
        "audience": "https://remote.com/c/interesting"
      },
      "type": "Undo",
      "audience": "https://remote.com/c/interesting"
    }
    

    Note: due the expection of unique ‘id’ fields, the encapsulated object isn’t the same, so this is probably best read as ‘undo vote’


  • The interesting community came with 2 posts. freamon upvotes post 1, and downvotes post 2

    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "id": "https://local.com/activities/like/16e6a46e-b80b-4d13-8258-2f724c53ed1c",
      "actor": "https://local.com/u/freamon",
      "object": "https://remote.com/post/1",
      "type": "Like",
      "audience": "https://remote.com/c/interesting"
    }
    
    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "id": "https://local.com/activities/dislike/576f119f-5aa5-4f5e-ba48-a79b26f0fae3",
      "actor": "https://local.com/u/freamon",
      "object": "https://remote.com/post/2",
      "type": "Dislike",
      "audience": "https://remote.com/c/interesting"
    }
    

  • freamon changes his mind. He doesn’t want to subscribe anymore

    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "actor": "https://local.com/u/freamon",
      "to": [
        "https://remote.com/c/interesting"
      ],
      "object": {
        "actor": "https://local.com/u/freamon",
        "to": [
          "https://remote.com/c/interesting"
        ],
        "object": "https://remote.com/c/interesting",
        "type": "Follow",
        "id": "https://local.com/activities/follow/c934a27e-0dad-4641-85f5-a83e04d672a4"
      },
      "type": "Undo",
      "id": "https://local.com/activities/undo/a9047cfc-ed0e-49c2-86da-9a0b3dbdc463"
    }
    

    Note 1: lemmy expects these ‘id’ fields to be unique, so the encapulated ‘Follow’ isn’t the same as the one that was sent.
    Note 2: lemmy also sends a Undo/Follow if you block a community


  • The interesting community accepts freamon’s subscription request
    The subscription status changes to ‘joined’

    {
      "actor": "https://remote.com/c/interesting",
      "to": "https://local.com/u/freamon",
      "object": {
        "actor": "https://local.com/u/freamon",
        "to": null,
        "object": "https://remote.com/c/interesting",
        "type": "Follow",
        "id": "https://local.com/activities/follow/c66515bd-6f81-44e0-8af9-c4c4ae307051"
      },
      "type": "Accept",
      "id": "https://remote.com/activities/accept/4ca771e6-0213-478a-83ba-d957984b98c5"
    }
    

  • freamon subscribes to the interesting community
    The subscription status changes to ‘pending’

    {
      "@context": [
        "https://join-lemmy.org/context.json",
        "https://www.w3.org/ns/activitystreams"
      ],
      "actor": "https://local.com/u/freamon",
      "to": [
        "https://remote.com/c/interesting"
      ],
      "object": "https://remote.com/c/interesting",
      "type": "Follow",
      "id": "https://local.com/activities/follow/5cc358b8-9eae-49ef-8b5c-05d98504bda1"
    }