Skip to content
  • 0 Votes
    5 Posts
    0 Views
    trwnh@mastodon.socialT
    @julian @thisismissem which is to say, the following are equivalent within the same scope...@\context: [{toot: http://joinmastodon.org/ns#,Emoji: toot:Emoji},{toot: http://joinmastodon.org/ns#,IdentityProof: toot:IdentityProof}]@\context: [{toot: http://joinmastodon.org/ns#,Emoji: toot:Emoji,IdentityProof: toot:IdentityProof}]
  • 0 Votes
    18 Posts
    7 Views
    jupiter_rowland@hub.netzgemeinde.euJ
    @Stefan Bohacek @jdp23 @julian "Shadow mentioning" is a thing. (streams) and Forte do it to avoid clutter. Mentions don't have to be visible in a post/comment to work.
  • Quoted posts

    AP Test (community.nodebb.org)
    17
    0 Votes
    17 Posts
    7 Views
    scott@authorship.studioS
    For reference, Hubzilla renders both the same way. If you "share" someone's post (what Mastodon users call a "quote post") is basically just:@channel@example.com [quote]Whatever they said.[/quote]which gets translated to:@channel@example.com<blockquote>Whatever they said.</blockquote>If someone quotes someone's post in a forum, it is the same exact thing.And users can also add their own blockquotes to posts by using the BBCode [quote] tags too. It's all blockquotes.Note: This posts uses <code> blocks. This may not render properly on all platforms.
  • 0 Votes
    9 Posts
    8 Views
    D
    To be fair I have this cool software I'm working on that helps me answer that question immediately
  • 0 Votes
    19 Posts
    8 Views
    S
    @Julian I filtered out the null names and the upgrade went through: "use strict"; const db = require("../../database"); const meta = require("../../meta"); const categories = require("../../categories"); const slugify = require("../../slugify"); module.exports = { name: "Setting up default configs/privileges re: ActivityPub", timestamp: Date.UTC(2024, 1, 22), method: async () => { // Disable ActivityPub (upgraded installs have to opt-in to AP) meta.configs.set("activitypubEnabled", 0); // Set default privileges for world category const install = require("../../install"); await install.giveWorldPrivileges(); // Run through all categories and ensure their slugs are unique (incl. users/groups too) const cids = await db.getSortedSetMembers("categories:cid"); const names = await db.getObjectsFields( cids.map((cid) => `category:${cid}`), cids.map(() => "name"), ); const nullIndexes = names .map((element, index) => (element["name"] === null ? index : -1)) // mark null elements .filter((index) => index !== -1); let filteredNames = names.filter(element => element["name"] !== null); let filteredCids = cids.filter((_, index) => !nullIndexes.includes(index)); const handles = await Promise.all( filteredCids.map(async (cid, idx) => { const { name } = filteredNames[idx]; const handle = await categories.generateHandle(slugify(name)); return handle; }), ); await Promise.all([ db.setObjectBulk( filteredCids.map((cid, idx) => [`category:${cid}`, { handle: handles[idx] }]), ), db.sortedSetAdd("categoryhandle:cid", filteredCids, handles), ]); }, };
  • 0 Votes
    7 Posts
    11 Views
    mariusor@metalhead.clubM
    @unexpectedteapot Thank you. Indeed I missed that distinction, sorry for the noise @hongminhee.
  • 0 Votes
    16 Posts
    24 Views
    shlee@aus.socialS
    @julian @thisismissem @trwnh makes sense as well for “followers only”… if you post a post with abuse and include someone.. It *could* reach the somebody and all of their followers as well boosted via their server (with controls. Opens the abuse vector slightly.
  • 0 Votes
    66 Posts
    15 Views
    kichae@catodon.socialK
    @omega @Kichae @baris @julian I think the only problem here is you assume people should be able to "grok" it.I don't think that's a problem. I think people should be able to understand that the Internet is a communications platform. Growing up on IRC isn't a requirement to intuiting this; the point there was that I people understood it there and then. People should be able to understand it here and now, too. They've just been trained otherwise.
  • 0 Votes
    10 Posts
    15 Views
    mro@digitalcourage.socialM
    Hi @julian @Claire - but sending incorrect json you get neither as of today, do you?
  • 0 Votes
    9 Posts
    17 Views
    antonio5609@socialhub.activitypub.rocksA
    Hi,I think It would be helpful to include examples of common use cases for ActivityPub integration in NodeBB detailed setup instructions with screenshots and troubleshooting tips for potential issues users might encounter. Additionally a FAQ section addressing common questions could be valuable.Thanks
  • 0 Votes
    3 Posts
    12 Views
    simplycorbett@vidbin.socialS
    @julian @BeAware if by not advisable you mean not possible, yeah.You won’t be able to reuse the domain/subdomain later on if you take down your instance unless you have a self destruct function. And even then -every- server you’ve federated with has to be contacted for it to work correctly.It’s fun
  • 0 Votes
    13 Posts
    20 Views
    silverpill@mitra.socialS
    @julian @alex-mehr @trwnh>There's no guarantee that a collection would present items in chronological vs. reverse chronological order — are you checking the timestamps and reversing as needed?The ordering can be specified by some property of Collection>Wouldn't you need to paginage through the entire collection anyway?The client will fetch pages until it finds an item that has already been processed.> I think that informs why I set up topic synchronization in this manner, and why my idea of context collections contain only objects; to me, activities don't really mean much at all.I'd prefer context to be a collection of objects too, as long as there's a way to retrieve activity history.Activity-based sync seems more natural to me. I think ActivityPub can be better understood not as a protocol for social networking, but as a distributed database where nodes sync datasets by sending messages over the network. Messages are activities, datasets are collections. When I send a Follow activity and your server responds with an Accept, followers and following collections are updated on both sides (or their equivalents if you don't store activities and collections). More generally, any activity delivery can be viewed as a synchronization of outbox collection.I think such change of perspective can greatly improve DX and provide a solid foundation for further protocol extensions
  • 0 Votes
    2 Posts
    13 Views
    beaware@social.beaware.liveB
    @julian nice! I love reading your progress posts. Always excited for new AP implementations and seeing how each dev handles things once it's done.I'm obviously not a dev myself, but I really admire your work.
  • 0 Votes
    1 Posts
    9 Views
    No one has replied
  • Hello from Lemmy, part 3

    AP Test (community.nodebb.org)
    1
    0 Votes
    1 Posts
    7 Views
    No one has replied
  • Unique activity IDs

    AP Test (community.nodebb.org)
    4
    1 Votes
    4 Posts
    9 Views
    silverpill@mitra.socialS
    @julian Yes, IDs should be unique:>All Objects in [ActivityStreams] should have unique global identifiers. ActivityPub extends this requirement; all objects distributed by the ActivityPub protocol MUST have unique global identifiers, unless they are intentionally transient-- https://www.w3.org/TR/activitypub/#obj-id
  • 0 Votes
    5 Posts
    29 Views
    julian@community.nodebb.orgJ
    @trwnh@socialhub.activitypub.rocks said in Handling "410 Gone" when retrieving an actor: You could do what Reddit does and just leave the posts up but pointing to a tombstone user. If you've ever seen a post attributed to [deleted] then you know what I'm talking about. Yes, this makes sense. It's coming into clearer focus why account and content deletions are so noisy in ActivityPub, since each deletion of a user's content needs to be federated before the account can be deleted. In absence of anything more explicit (like your aforementioned DeleteAllCreatedObjects), that's all we have to explicitly signal full account and content deletion. I think we'll go ahead with that. NodeBB already does display something like [deleted] (we show "A Former User"), and we also save the old user id as a reference in case it needs to be cleaned up. That'll work, thank you for your input a!
  • 0 Votes
    6 Posts
    26 Views
    beaware@social.beaware.liveB
    @julian that's a good point. I feel it'd mostly be better for integration with Lemmy/Kbin type systems that mimic forums.
  • 0 Votes
    6 Posts
    31 Views
    julian@community.nodebb.orgJ
    Of course you have a wiki page for this already! Why am I not surprised. Yes, that follow-accept has state synchronization responsibilities means that some additional specification would be nice, though as long as everybody tends to conform to the same behaviour I suppose thats less urgent. I still don't like that the current UX is "follow is in a pending state", but short of additional specification re: error handling, there's not much to do here. At any rate it seems I am now correctly following @weekinfediverse@mitra.social so I suppose maybe my server was slow at processing the accept.
  • 0 Votes
    4 Posts
    23 Views
    trwnh@socialhub.activitypub.rocksT
    julian: If the activity is the thing being forwarded, then an additional complication could arise in that I cannot simply re-sign the activity, as my instance key does not belong to the originating actor. this is indeed an issue that arises due to the following: ActivityPub does not specify any authentication/verification mechanism HTTP Signatures, which the current fediverse uses, are not replayable or relayable. If you're concluding that this makes inbox forwarding impossible with HTTP Signatures, then congratulations, you understand why LD Signatures ended up being used for this (and why FEP-8b32 proposes using Data Integrity Proofs at the LD level as well). It's either that, or find a way to replay entire HTTP messages (so that the HTTP Signature can be validated against the original HTTP interaction). Or otherwise rethink the fundamentals of the fediverse's entire security model.