Live data from Hacker News

Introduction to AT Protocol

mackuba.eu

101–110 of 117 posts

Re: Introduction to AT Protocol

#101
post #98
post #76

Earlier quoted context omitted.

When it comes to SMTP for email, time has only served to highlight its inadequacy. DMAC, DKIM, SPF, S/MIME, PGP are all ugly workarounds. The issues are fundamental.

those ugly workarounds are actually brilliant signs of adaptability (not signs of failure). SMTP isn't inadequate, it's resilient. There's a good chance we'll still have SMTP around another 50-500 years.

No, we won't w/o breaking changes. There's no way.

Even ignoring pressing issues like lack of mandatory E2EE, SMTP requires encoding binary data into text. This includes the main body for most emails these days. Awfully wasteful.

So it will go the way of FTP.

Re: Introduction to AT Protocol

#102
post #78
post #67

Earlier quoted context omitted.

> it should be possible to run completely independent atproto networks today But does anyone do it? It doesn't really matter if it's /theoretically possible/ if no one actually does it. Running an ActivityPub server is piss easy, anyone can do it on a $5 VPS or in their basement, and that's one of its big strengths.

BlackSky seems to be run by a competent dev with a high enough profile that I see his posts regularly without following him directly Based on his progress posts it seems that ATproto is intentionally moving in the right direction and BlackSky has progressed to the point he’s asking for volunteers to move off Bluesky and try out his implementations

What is this BlackSky you're talking about?

Re: Introduction to AT Protocol

#103

Earlier quoted context omitted.

> indexing by bytes instead of UTF-8 code units When the encoding is UTF-8 (which it is here), the code unit is the byte. They called the fields byteStart and byteEnd, but a more technically precise (no more or less accurate , but more precise ) labels would be utf8CodeUnitStart and utf8CodeUnitEnd.

Sorry, I keep mixing these - bytes instead of scalars, which I think would be more natural to iterate over in most languages (at least the ones I use).

OK, checked and Ruby does seem to use scalars. Well, unless you mess with encodings. Then it’s messy. So it’s probably better and worse than Python 3.

You may not have seen this interesting article before: https://hsivonen.fi/string-length/. I agree with its assessment that scalars are really pretty useless as a measure, and Python and Ruby are foolish to have chased it at such expense.

But seriously, I can’t think of any other popular languages that count by scalars or code points—it’s definitely not most languages, it’s a minority, all a very specific sort of language. “Most” encompasses well-formed UTF-8 (e.g. Rust), recommended UTF-8 but it doesn’t actually care (e.g. Go), potentially ill-formed UTF-16 (e.g. JavaScript, Java, .NET), and total-mess (e.g. C, C++).

Re: Introduction to AT Protocol

#104
post #78

Earlier quoted context omitted.

BlackSky seems to be run by a competent dev with a high enough profile that I see his posts regularly without following him directly Based on his progress posts it seems that ATproto is intentionally moving in the right direction and BlackSky has progressed to the point he’s asking for volunteers to move off Bluesky and try out his implementations

What is this BlackSky you're talking about?

https://www.blackskyweb.xyz - it's the black people community on Bluesky, they started first with some custom feeds and blocklists/labeller, now they have a PDS and relay, and they're planning to launch a forked version of the app and eventually have a full independent infra basically. With some extra features like option to make "internal" posts that aren't shared with the wider Bluesky but only with people on the PDS.

Re: Introduction to AT Protocol

#105

Earlier quoted context omitted.

Sorry, I keep mixing these - bytes instead of scalars, which I think would be more natural to iterate over in most languages (at least the ones I use).

OK, checked and Ruby does seem to use scalars. Well, unless you mess with encodings. Then it’s messy. So it’s probably better and worse than Python 3. You may not have seen this interesting article before: https://hsivonen.fi/string-length/ . I agree with its assessment that scalars are really pretty useless as a measure, and Python and Ruby are foolish to have chased it at such expense. But seriously, I can’t think…

Thanks, will have a read :)

Re: Introduction to AT Protocol

#106
post #82

I didn't write this for the HN crowd, but here we go anyway: https://gagliardoni.net/#20250818_battle_of_socials Happy to correct any factual inaccuracies.

I think that your description of ATproto relays is a conflation of the role of an AppView (or backend) in ATproto and a Nostr relay. Relays (by default) are not designed to be a permanent archive of content, and are really meant as content streams for backends to ingest and index appropriately. The storage cost is also overestimated, as people have begun to host third-party variants of the Bluesky AppView (which is partially open-source due to its dependence on internal code for some non-essential to microblogging functionality): https://whtwnd.com/futur.blue/3ls7sbvpsqc2w

The note at the end about Bluesky being able to censor, verify and ban users from the protocol is also largely incorrect, with some asterisks as is for a complex system. The Turkish accounts that were censored were hidden from the platform in Turkey via the app's labeler system, which allows for "composable moderation". You can use this system to implement geoblocking in Bluesky clients based on your IP address when you open the app, which is what they did to ban those accounts from being seen in Turkey. The application of labelers (outside of Bluesky's main moderation service which the Bluesky-hosted AppView follows) is client-side, and any client that doesn't want to respect the default geoblocking behaviour (or implement mod labels at all) can just ignore it.

The Politico columnist that was banned from Bluesky has their account taken down from the whole network because their account was hosted on a Bluesky PDS, which could be (somewhat because, again, the default AppView follows a default labeler for displaying content through the AppView's API) bypassed by moving their account to another PDS that isn't operated by Bluesky. If your account was banned from Bluesky while also being on a non-Bluesky PDS, you would still have access to the ecosystem (and a half-working version of Bluesky that is basically a shadowban due to the default client and AppView conflicting with the labeler's takedown action).

Speaking of PDSes, they also do quite a bit more than just store user data. As an user's identity is dependent on a PDS to exist as a proper account, most user actions have to be routed through it to allow applications to store their data on-protocol and to authenticate the user.

The verification system is implemented through a record type (or "Lexicon") that is stored on an account that basically confirms that the record owner has verified the target. The system is also odd in that there are two types of verified accounts, "trusted verifiers" (think Twitter's business verification system) and regular verified accounts. Trusted verifiers are chosen by the client and can verify their own set of accounts, giving them the regular checkmark. Clients that haven't implemented support for the checkmarks or allow users to choose their own trusted verifiers can basically see whatever checkmarks they want, or just disable the system altogether (which is possible in the default client).

How Bluesky uses DIDs are... complicated. ATproto supports two DID methods for accounts, did:web and did:plc. Web DIDs are used mainly for services on the network, but can also be used for regular accounts. PLC is a more complicated system, which becomes quite obvious when you find out the original acronym meaning was "placeholder". PLC is (in regards to the general protocol) not a decentralized system, as its current iteration is a DID document pastebin with authentication and version history. I do think that the method's current centralized status can be mitigated somewhat (synchronization between various directories, then having a consensus system for establishing the validity of the documents' current states), but the system could always be replaced at any point to either incorporate new features or to choose a new model for how documents are publicized.

Sorry for the long read but as you see I've wasted way too much time into reading through developer posts and documentation, had to unload it somehow.

Re: Introduction to AT Protocol

#109
post #95

One nitpick about ActivityPub actor identity — the username doesn't have to be part of your ID (the URL that points to the JSON object representing your actor). It is in Mastodon, but some other software (Smithereen that I work on, and also Misskey) uses opaque identifiers derived from database row IDs. This allows for cleanly changeable usernames since you can just update your `preferredUsername` and `url` fields.

It still doesn't solve the account migration issue though right? If you move to a different instance your old instance still has to redirect.

How do people find you on mastodon if your instance isn't in your username anyway?

Re: Introduction to AT Protocol

#110
post #109
post #95

One nitpick about ActivityPub actor identity — the username doesn't have to be part of your ID (the URL that points to the JSON object representing your actor). It is in Mastodon, but some other software (Smithereen that I work on, and also Misskey) uses opaque identifiers derived from database row IDs. This allows for cleanly changeable usernames since you can just update your `preferredUsername` and `url` fields.

It still doesn't solve the account migration issue though right? If you move to a different instance your old instance still has to redirect. How do people find you on mastodon if your instance isn't in your username anyway?

Your instance is in your username. The full username is "@grishka@mastodon.social". You use WebFinger (https://mastodon.social/.well-known/webfinger?resource=acct:...) to convert that to the ActivityPub actor ID, which in my case would be "https://mastodon.social/users/grishka".

And yes, that's one weakness of this system — there is no "real" account migration. Most you can do is set up two-way references between your old and new accounts and ask your followers to unfollow the old one and follow the new one. But your past content doesn't carry over.

But then idk, Bluesky's identity service is completely centralized, so the fediverse is better with regard to independence?

Post reply on HN