SmilingKenshi

@smilingkenshi.bsky.social

I make software. I write. I train. I fast. // Sharing what I’ve learned along the way.

Today we’re launching Bluesky Protocol Services, a new brand and website for the infrastructure Bluesky operates. And Jetstream v2, the best way for developers to use atproto at scale, now with network replay. atproto.com/blog/introdu...

Introducing Bluesky Protocol Services

A new home for the infrastructure Bluesky runs on the open network — including Jetstream v2 with network replay, a new Jetstream SDK, and a lex-based TypeScript SDK

atproto.com

After more than a year of labor, my book 𝘏𝘪𝘥𝘥𝘦𝘯 𝘔𝘶𝘭𝘵𝘪𝘱𝘭𝘪𝘦𝘳𝘴 has launched! It's all my best ideas -- and best writing -- on how to grow your company with your existing budget and team. And yes, I read the audiobook myself. :-) (1/5)

I'm starting a new blog post series, with some more practical tutorials about ATProto things, using Ruby and my Ruby gems :] Episode 1 - resolving handles & DIDs and plc.directory:

ATProto in Practice #1: Identity

I’m starting a new blog post series that I’ve named “ATProto in Practice”. I want to go through some practical tasks that you’re likely to need when working with the protocol, using Ruby and my Ruby gems for the examples. These will (hopefully) be a bit shorter than my standard book-length blog posts here 🫠 If you’re new to the AT Protocol and you haven’t read my long Introduction to AT Protocol post that goes through the whole architecture and defines the various pieces of it, I recommend you read that one first, because I won’t be explaining everything from scratch again here. Let’s start with something pretty fundamental: user identity. DIDs & handles Every account has an immutable identifier called a DID (Decentralized Identifier), e.g. did:plc:z72i7hdynmk6r22z27h6tvur. This ID serves a similar role as an UUID might in an SQL database – it’s used everywhere behind the scenes in the protocol for any references between accounts and records, in URIs and so on. But generally every account also has a human-readable handle assigned to it, which can be changed at any time, and this handle is normally what you see in the UI, often in user-facing URLs, what you use to log in with, etc. The handle is a domain name, e.g. @python.org, and any existing domain name you own and use for your website can be used as your handle. As you start building on ATProto, one of the first things you might need to do is convert between these two identifiers. For example, a user logs in to your app using a handle and you need to first “resolve” it to a DID, or a URI or other reference in a record points to a DID, but you want to show the corresponding user’s handle in the UI, and the handle is not included in the data you got. A useful UI tool for quickly looking this up is internect.info. If you look up e.g. “firefox.com” there, you will get a page showing details of Firefox’s ATProto account: the DID (did:plc:m424cqoxwhxgjutbta7jmrur), when it was created, assigned PDS hostname, and so on. Now, how to do the same thing in code? Every DID has a so called DID Document, a JSON file storing some basic info about that identity, and among other things, that document includes the alsoKnownAs field, which lists the assigned handles, in the form of at:// URIs with only the first segment. Almost every account will have exactly one handle assigned, but it might happen that one will have zero or more than one. It might also happen that the array will contain some invalid strings which aren’t proper handles – e.g. don’t include the at:// prefix, or only contain one word and no periods. You need to filter only the valid ones. The assignment is bi-directional – a DID has one (usually) handle assigned in its document, and a handle resolves to a DID. You should ideally check the assignment in both directions, because it could happen that the other sign of the assignment is no longer valid, or worse – has never been real. That is, when you resolve a handle to a DID, check if th…

mackuba.eu

Physical books. You own them. They don't require updates. They don't surveil you or collect and sell your data. They are a genuinely safe hallucinogen that leaves you smarter and more empathetic and with a longer attention span the more you use them. Free from the library. What's not to like?

The tech world has a strange inversion of values. We put so much value in tiny improvements to our simplest needs (getting a little more done a little bit faster), and yet so little in addressing our deepest needs of fulfillment, inspiration, & transformation.

When reality surpasses fiction! Top: fictional forecast for August 2050, broadcast by French TV in 2014 to warn about the consequences of global warming. Bottom: Real French forecast for yesterday, June 22, 2026.

Bild

IT'S A WRAP! kirby.pika.page/posts/swiftu... Thank you SO MUCH to everyone in the #SwiftUI community who reached out to join and share their thoughts- anywhere from frustrated at missing features to deeply comitted to staying hopeful, I think we all love what SwiftUI promises- and want more from it.

SwiftUI Promiseth, and SwiftUI... - Swift Blog Carnival Roundup - Quibbletown by Keren

The month of May comes to a very busy end for me personally1, and with it closes our May edition of the Swift Blog Carnival, which I once again thank Christian Tietze greatly for offering me to host f...

kirby.pika.page

The idea that the US & UK militaries are lobby that same technology that tells me “I’m absolutely right” on an almost daily basis as I point out its inability to follow instructions should be allowed to kill people’s without human oversight is nuts to me. This is biggest ethical crisis of our lives

Bild