about things
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

push up notes

+2163 -4
+2
languages/ziglang/0.15/README.md
··· 25 25 - [modules](./modules.md) - file + directory pattern (foo.zig + foo/) 26 26 - [structs](./structs.md) - copy semantics, internal storage for strings 27 27 - [testing](./testing.md) - zig test vs build test, arena for leaky apis 28 + - [hashmap](./hashmap.md) - StringHashMap, O(1) block index, managed vs unmanaged 29 + - [format](./format.md) - {f} required for format methods, {t} for tag names, signature change
+42
languages/ziglang/0.15/binary.md
··· 43 43 try encode(alloc, list.writer(alloc), value); 44 44 ``` 45 45 46 + **note**: `std.io.fixedBufferStream` is deprecated in 0.15 — the stdlib says to use `std.Io.Writer.fixed` / `std.Io.Reader.fixed` instead. the old API still compiles (zat uses it in 3 files) but new code should prefer the non-deprecated form. the `anytype` writer pattern itself is fine either way — the encoder doesn't care which writer type backs it. 47 + 46 48 see: [zat/cbor.zig](https://tangled.sh/@zzstoatzz.io/zat/tree/main/src/internal/cbor.zig) 47 49 48 50 ## encodeAlloc convenience ··· 133 135 this means the handler's `onEvent` must not hold references to event data past the call. if it needs to, it must copy into its own allocator. 134 136 135 137 see: [zat/firehose.zig](https://tangled.sh/@zzstoatzz.io/zat/tree/main/src/internal/firehose.zig), [zat/jetstream.zig](https://tangled.sh/@zzstoatzz.io/zat/tree/main/src/internal/jetstream.zig) 138 + 139 + ## specialized decoders 140 + 141 + when generic decoding is too expensive, write a purpose-built parser for a known schema. the generic path builds `Value` unions, `MapEntry` arrays, and handles every CBOR type. if you know the exact shape, skip all that. 142 + 143 + example: MST nodes are always `map(2) { "e": array[entries...], "l": CID|null }`. instead of `cbor.decodeAll()` → extract fields from Value unions, parse the CBOR bytes directly: 144 + 145 + ```zig 146 + pub fn decodeMstNode(allocator: Allocator, data: []const u8) MstDecodeError!MstNodeData { 147 + // expect map(2), key "e", array(n) — known byte sequence 148 + // parse entries inline, zero-copy slicing into input buffer 149 + // only allocation: the entries array itself 150 + } 151 + 152 + pub const MstNodeData = struct { 153 + left: ?[]const u8, // raw CID bytes (borrowed from input) 154 + entries: []MstEntryData, // heap-allocated array 155 + }; 156 + 157 + pub const MstEntryData = struct { 158 + prefix_len: usize, 159 + key_suffix: []const u8, // borrowed from input 160 + value_cid: []const u8, // borrowed from input 161 + tree: ?[]const u8, // borrowed from input 162 + }; 163 + ``` 164 + 165 + the result: MST walk went from 45.5ms (generic decode per node) to 39.3ms (specialized decode) on 243k blocks. the bigger win was avoiding the full tree rebuild (218ms → 39ms total) by verifying structure during the walk. 166 + 167 + when to use this pattern: 168 + - you decode the same schema thousands of times (MST nodes, CBOR blocks) 169 + - the schema is stable and well-known 170 + - profiling shows decode time dominates 171 + 172 + when NOT to use it: 173 + - the schema varies or is user-defined 174 + - you only decode a handful of times 175 + - generic decode is fast enough 176 + 177 + see: [zat/mst.zig decodeMstNode](https://tangled.sh/@zzstoatzz.io/zat/tree/main/src/internal/repo/mst.zig) 136 178 137 179 ## deterministic encoding 138 180
+23
languages/ziglang/0.15/build.md
··· 41 41 ``` 42 42 43 43 without this line, `zig build` runs successfully but produces no output. easy to miss. 44 + 45 + ## x86 backend (default in 0.15) 46 + 47 + the self-hosted x86 backend is now the **default** for debug builds. roughly 5x faster compilation than LLVM for most code. threaded codegen adds up to 50% more on top of that. 48 + 49 + if you hit codegen bugs, fall back to LLVM: 50 + 51 + ```bash 52 + zig build -fllvm # use LLVM backend 53 + zig build -Doptimize=ReleaseFast # release modes always use LLVM 54 + ``` 55 + 56 + the x86 backend passes more behavior tests than LLVM (1984 vs 1977) but generates slower machine code. debug builds prioritize compilation speed; release builds prioritize runtime performance. 57 + 58 + ## test-obj 59 + 60 + 0.15 added `zig test-obj` for compiling tests to object files instead of running them. useful when linking test code into external harnesses: 61 + 62 + ```bash 63 + zig test-obj src/foo.zig # produces .o file 64 + ``` 65 + 66 + in build.zig: `addTest(.{ ... }).emit_object = true;`
+23
languages/ziglang/0.15/crypto.md
··· 43 43 44 44 see: [zat/jwt.zig](https://tangled.sh/@zzstoatzz.io/zat/tree/main/src/internal/jwt.zig) 45 45 46 + ## signing 47 + 48 + ```zig 49 + const Scheme = std.crypto.sign.ecdsa.EcdsaSecp256k1Sha256; 50 + 51 + // secret key from raw 32 bytes 52 + const secret_key = try Scheme.SecretKey.fromBytes(key_bytes[0..32].*); 53 + 54 + // sign with RFC 6979 deterministic nonce (null = no additional randomness) 55 + const sig = secret_key.sign(message, null); 56 + 57 + // low-S normalization (required by AT Protocol / Bitcoin) 58 + const Curve = std.crypto.ecc.Secp256k1; 59 + const s_order = Curve.scalar.neg(sig.s, .big); 60 + // if s > half_order, replace with order - s 61 + ``` 62 + 63 + the `null` second arg means RFC 6979 deterministic nonce — no randomness source needed, signature is reproducible from the same key+message. 64 + 65 + low-S normalization ensures `s <= half_order`. some protocols (AT Protocol, Bitcoin) reject high-S signatures. check by comparing the s component against the curve half-order. 66 + 67 + see: [zat/jwt.zig](https://tangled.sh/@zzstoatzz.io/zat/tree/main/src/internal/crypto/jwt.zig), [k256 tests](https://tangled.sh/@zzstoatzz.io/k256) 68 + 46 69 ## sha-256 hashing 47 70 48 71 for content addressing (CIDs, integrity checks). hash data into a fixed-size digest:
+5 -4
languages/ziglang/0.15/database.md
··· 251 251 252 252 ```zig 253 253 fn rewritePlaceholders(alloc: Allocator, sql: []const u8) ![]const u8 { 254 - var result = std.ArrayList(u8).init(alloc); 254 + var result: std.ArrayList(u8) = .empty; 255 + errdefer result.deinit(alloc); 255 256 var param_num: usize = 1; 256 257 257 258 for (sql) |c| { 258 259 if (c == '?') { 259 - try result.writer().print("${d}", .{param_num}); 260 + try result.print(alloc, "${d}", .{param_num}); 260 261 param_num += 1; 261 262 } else { 262 - try result.append(c); 263 + try result.append(alloc, c); 263 264 } 264 265 } 265 - return result.toOwnedSlice(); 266 + return result.toOwnedSlice(alloc); 266 267 } 267 268 ``` 268 269
+61
languages/ziglang/0.15/format.md
··· 1 + # format strings 2 + 3 + 0.15 changed how `std.fmt` works. the big ones: `{f}` is now required for types with format methods, and format method signatures changed. 4 + 5 + ## {f} required for format methods 6 + 7 + in 0.14, `{}` would implicitly call a type's `format` method if it had one. in 0.15, you must use `{f}` explicitly: 8 + 9 + ```zig 10 + const MyType = struct { 11 + value: u32, 12 + 13 + pub fn format(self: @This(), writer: *std.Io.Writer) std.Io.Writer.Error!void { 14 + try writer.print("MyType({d})", .{self.value}); 15 + } 16 + }; 17 + 18 + const x = MyType{ .value = 42 }; 19 + 20 + // 0.14: std.debug.print("{}", .{x}); // called format implicitly 21 + // 0.15: std.debug.print("{f}", .{x}); // must use {f} 22 + // std.debug.print("{any}", .{x}); // skips format method 23 + ``` 24 + 25 + why: prevents silent behavior changes when format methods are added or removed from types. 26 + 27 + ## format method signature change 28 + 29 + ```zig 30 + // 0.14 signature 31 + pub fn format( 32 + self: @This(), 33 + comptime fmt_string: []const u8, 34 + options: std.fmt.FormatOptions, 35 + writer: anytype, 36 + ) !void 37 + 38 + // 0.15 signature 39 + pub fn format( 40 + self: @This(), 41 + writer: *std.Io.Writer, 42 + ) std.Io.Writer.Error!void 43 + ``` 44 + 45 + no more format string or options parameters. if you need different formatting modes, use separate named methods or return a wrapper struct. 46 + 47 + ## new specifiers 48 + 49 + | specifier | meaning | example | 50 + |-----------|---------|---------| 51 + | `{f}` | call type's format method | `std.debug.print("{f}", .{my_obj})` | 52 + | `{t}` | `@tagName()` / `@errorName()` | `std.debug.print("{t}", .{my_enum})` | 53 + | `{b64}` | base64 encoding | `std.debug.print("{b64}", .{bytes})` | 54 + 55 + `{t}` is particularly useful — replaces `@tagName(enum_val)` in format strings. 56 + 57 + ## what still works 58 + 59 + `{s}`, `{d}`, `{x}`, `{any}`, `{?}`, `{}` for basic types are unchanged. our zat code uses these exclusively and doesn't need migration. 60 + 61 + sources: [0.15 release notes](https://ziglang.org/download/0.15.1/release-notes.html)
+79
languages/ziglang/0.15/hashmap.md
··· 1 + # hashmap 2 + 3 + zig's hash maps for key-value lookup. two flavors parallel the arraylist split: `StringHashMap` stores the allocator, `StringHashMapUnmanaged` passes it to each method. 4 + 5 + ## managed vs unmanaged 6 + 7 + ```zig 8 + // managed — stores allocator, slightly more convenient 9 + var map = std.StringHashMap([]const u8).init(allocator); 10 + defer map.deinit(); 11 + 12 + try map.put("key", "value"); 13 + 14 + // unmanaged — pass allocator to each method (like ArrayList) 15 + var map: std.StringHashMapUnmanaged([]const u8) = .empty; 16 + defer map.deinit(allocator); 17 + 18 + try map.put(allocator, "key", "value"); 19 + ``` 20 + 21 + unmanaged is the better default for the same reasons as ArrayList — no stored allocator, statically initializable. use managed when passing as function parameter (avoids threading the allocator alongside it). 22 + 23 + ## O(1) block index 24 + 25 + the pattern that fixed zat's 79-second MST walk: build a lookup table during CAR parse, query it during tree traversal. 26 + 27 + ```zig 28 + pub const Car = struct { 29 + blocks: []const Block, 30 + block_index: std.StringHashMapUnmanaged([]const u8) = .empty, 31 + }; 32 + 33 + // during parse: populate index alongside the block array 34 + var block_index: std.StringHashMapUnmanaged([]const u8) = .empty; 35 + while (pos < data.len) { 36 + // ... parse CID and content ... 37 + try blocks.append(allocator, .{ .cid_raw = cid_bytes, .data = content }); 38 + try block_index.put(allocator, cid_bytes, content); 39 + } 40 + 41 + // during walk: O(1) lookup by CID 42 + const data = block_index.get(cid_bytes) orelse return error.BlockNotFound; 43 + ``` 44 + 45 + the key insight: CID bytes are already unique identifiers and the block data they point to is owned by the CAR buffer (arena-allocated). no copies needed — both key and value are slices into existing memory. 46 + 47 + before this: linear scan through 243k blocks, called once per MST node (~50k nodes). ~12 billion comparisons. after: hash lookup. 48 + 49 + see: [zat/car.zig](https://tangled.sh/@zzstoatzz.io/zat/tree/main/src/internal/repo/car.zig) 50 + 51 + ## key ownership 52 + 53 + from the stdlib: "key memory is managed by the caller. keys and values will not automatically be freed." 54 + 55 + this means: 56 + - keys must outlive the map 57 + - if keys are heap-allocated, you free them — the map won't 58 + - for string keys pointing into a long-lived buffer (like parsed data), this is free — the buffer already owns the memory 59 + 60 + ## HashMap vs ArrayHashMap 61 + 62 + `HashMap` (and `StringHashMap`): hash-table backed. O(1) lookup, unordered iteration. 63 + 64 + `ArrayHashMap` (and `StringArrayHashMap`): array-backed with hash index. O(1) lookup, **insertion-order** iteration, slightly more memory. 65 + 66 + use HashMap when you only care about lookup. use ArrayHashMap when iteration order matters (e.g., rendering parameters in a URL). 67 + 68 + ## generic keys with AutoHashMap 69 + 70 + for non-string keys, `AutoHashMap` generates hash/eql from the key type: 71 + 72 + ```zig 73 + var map = std.AutoHashMap(u64, MyStruct).init(allocator); 74 + defer map.deinit(); 75 + 76 + try map.put(42, my_value); 77 + ``` 78 + 79 + works for integers, enums, and types with `hash` and `eql` methods.
+2
languages/ziglang/README.md
··· 20 20 | [pollz](https://tangled.sh/@zzstoatzz.io/pollz) | bluesky polls (zqlite + transactions) | 21 21 | [zql](https://tangled.sh/@zzstoatzz.io/zql) | comptime sql parsing | 22 22 | [zat](https://tangled.sh/@zzstoatzz.io/zat) | atproto primitives (jwt, crypto, CBOR, firehose) | 23 + | [k256](https://tangled.sh/@zzstoatzz.io/k256) | optimized secp256k1 ECDSA (5×52-bit field, GLV endomorphism) | 24 + | [atproto-bench](https://tangled.sh/@zzstoatzz.io/atproto-bench) | three-way AT Protocol benchmarks (zig vs Go vs Rust) | 23 25 | [logfire-zig](https://tangled.sh/@zzstoatzz.io/logfire-zig) | OTLP observability client | 24 26 | [prefect-zig](https://tangled.sh/@zzstoatzz.io/prefect-zig) | prefect orchestration server | 25 27 | [ghostty](https://github.com/ghostty-org/ghostty) | terminal emulator (build system) |
+1
protocols/atproto/README.md
··· 67 67 - [firehose](./firehose.md) - event streaming, jetstream 68 68 - [auth](./auth.md) - OAuth, scopes, permission sets 69 69 - [labels](./labels.md) - moderation, signed assertions 70 + - [sync-verification](./sync-verification.md) - inductive proof chains, MST inversion, sync 1.1 70 71 71 72 ## sources 72 73
+148
protocols/atproto/dev-chats/02-22-26-writeup.md
··· 1 + ATProtoDevChat part IV (02/22/2026) 2 + 3 + i am human and i err! this was rendered from memory and discord chat, pls comment/DM me if you see mistakes or misrepresentations 4 + 5 + ## Topics Covered 6 + 7 + ### Labelers: Skyware, Ozone & Osprey 8 + 9 + @byarielm opened with "what's the difference between Skyware and Ozone?" — a question many newcomers hit when approaching the moderation stack. 10 + 11 + The short answer: Skyware is a minimal labeler implementation — it issues labels and sends them all to the client (no incremental backfill). Ozone is a full multi-user moderation interface for human review. And Osprey is the newest piece: an automation and data analysis engine for pattern detection at scale. 12 + 13 + @thisismissem.social explained that Osprey "receives the events from a source, e.g., the firehose, and then based on the rules you've stored (a DSL) it can then apply those to data as it comes in — it's very similar in that way to SQRL. Osprey also stores all the events in a big database, which then allows you to write new rules and investigate patterns." 14 + 15 + @byarielm summarized: "Skyware is kinda the base code you need for a labeler, Ozone provides UI and some extra db/moderation stuff, and Osprey is more pattern/rule formatting for labellers?" 16 + 17 + Key resources: 18 + - [Osprey for ATProto](https://github.com/haileyok/osprey-for-atproto) 19 + 20 + ### Signup UX & prompt=create 21 + 22 + @flo.bit raised the signup UX question: should apps let users enter email and password on the app's own page (easier to understand, but worse for password managers — this is what Bluesky does), or redirect them to a PDS with `prompt=create`? 23 + 24 + The problem is that `prompt=create` isn't standard and not all PDSs support it — single-user PDSs and those with registration disabled can't handle it. Updates to both the PDS and the OAuth flow itself are needed. There is reportedly energy on the Bluesky team around this. 25 + 26 + @thisismissem.social shared her OAuth working group proposal, which addresses some of these authorization management concerns. 27 + 28 + Key resources: 29 + - [OAuth Authorization Management URI (draft)](https://github.com/ThisIsMissEm/draft-oauth-authorization-management-uri) 30 + - [Bluesky Cookbook](https://github.com/bluesky-social/cookbook/) 31 + 32 + ### Device Code Grant Flow 33 + 34 + Brief discussion of the device code grant flow pattern: start the flow on one device, poll for completion, and get the token back. The open question is how DPoP works with device code grant flow (still in draft), and what happens for devices without a display. 35 + 36 + @same.supply shared an example implementation from the atcute project. 37 + 38 + Key resources: 39 + - [atcute node-client-public-example](https://github.com/mary-ext/atcute/tree/trunk/packages/oauth/node-client-public-example) 40 + 41 + ### Explaining Credible Exit to Non-Technical Users 42 + 43 + This thread explored the perennial challenge: how do you explain PLC, rotation keys, and credible exit to people who aren't developers? 44 + 45 + @sharpie offered a framing that landed well: "PLC is a cloud thing. It stores the public part of your rotation key, allowing you to move your data home if your house burns down." The group riffed on analogies — @sorryforpartyrock.ing compared rotation keys to 2FA backup keys, @byarielm suggested "it's like lock-and-key matching but more like fingerprints that are actually unique," and @psingletary.com offered the image of BFF heart necklaces — one half yours, one half somewhere else. 46 + 47 + @thisismissem.social took a pragmatic stance: "I'd just say you have a credential that you can use to manage your identity in the cloud, and when you create that credential, you register it with your identity in the cloud." 48 + 49 + The challenge, as @sharpie put it: "getting people to tune in long enough to even understand what the PLC is — is very hard. I can hear people's eyes glazing over." @geesawra noted simply: "asymmetric crypto is hard." 50 + 51 + Discussion also touched on whether rotation keys should be surfaced in Bluesky's settings under an "Advanced" menu. @geesawra argued for it ("otherwise I feel they'll always be reserved for nerds like me"), while @same.supply felt they should live on your PDS host's website, not in any particular app. @dane agreed it shouldn't be a separate thing from the PDS. The secure enclave approach — storing keys in device hardware — was mentioned as the ideal end state. 52 + 53 + @phil shared a post on adversarial PLC directory migration, rounding out the conversation with the question of what happens if the centralized PLC directory itself becomes hostile. 54 + 55 + Key resources: 56 + - [Adversarial PLC directory migration](https://updates.microcosm.blue/3lz7nwvh4zc2u) 57 + - [Sharpie's PDS migration vlog](https://bsky.app/profile/sharpiepls.com/post/3lw3hcuojck2u) 58 + 59 + ### Everything Account 60 + 61 + Brief but fun thread: @geesawra floated the idea of putting dotfiles on your PDS — "ultimate nerd snipe." @quillmatiq.com named the vision: "everything account." @evan.jarrett.net pointed out the real draw would be if the data could be encrypted/private, and @same.supply noted that dotfiles are usually already public on git anyway. The encrypted/private data angle keeps pulling every conversation toward it. 62 + 63 + ### Relays & collectiondir 64 + 65 + Quick pointers to relay infrastructure resources. @thisismissem.social shared the AT Stack guide. @dane linked collectiondir from the Indigo repo — a tool for browsing collections on the relay. @verdverm.com mentioned their atmunge project, which "produces a table with every account and collections — it's very easy to build that index, one request per account." 66 + 67 + Key resources: 68 + - [The AT Stack (guide)](https://atproto.com/guides/the-at-stack) 69 + - [collectiondir (Indigo)](https://github.com/bluesky-social/indigo/tree/main/cmd/collectiondir) 70 + 71 + ### Lexicons 72 + 73 + A pragmatic conversation about when you need a lexicon and when you don't. @flo.bit acknowledged that Blento "still doesn't have a lexicon" and @psingletary.com formalized the vibe: "Not Everything Needs A Lexicon." @quillmatiq.com agreed — "we can also start sans lexicon and move when we're ready, doesn't need to be a blocker." 74 + 75 + That said, when you do use lexicons, the tooling needs work. @geesawra called the deprecated field support "vital." @taurean.bryant.land pointed to Lexicon Garden as the best current resource for browsing existing schemas. 76 + 77 + Key resources: 78 + - [Lexicon Garden](https://lexicon.garden/) 79 + 80 + ### Documentation & Contributions 81 + 82 + The "circle of life" problem: @evan.jarrett.net "tried to write documentation and then it got outdated like 3 commits later." This resonated broadly. 83 + 84 + The aspirational model: @thoth pushed for rustdoc-style generation from source annotations — "I didn't think it was possible for docs generated from source annotations to be good (I mean, have you seen doxygen?) until I saw rustdoc." @geesawra added godoc to the list. 85 + 86 + @byarielm and @chaosgreml.in (Bryan Guffey) found each other over wanting "for babies" / ELI5 docs and volunteered to collaborate. @n8 framed the need as three tiers: "examples/concepts/api-ref, I think we need all 3, some will be app level." @same.supply's pattern from JS libraries: "Getting Started/Quick Start + Important Concepts + API Type specification." @geesawra pointed to Go's docs as a model: "examples/docs/howtos plus reference in a single page." 87 + 88 + On the contribution side, @thisismissem.social pointed to the atproto-website GitHub issues and @n8 noted the team "were pretty responsive on GH, got a little typo thing merged in a couple hours." @byarielm's workflow challenge: "it's hard to read and then pause to write an issue." @thisismissem.social suggested annotating docs with margin.at as a lower-friction way to leave notes while reading. 89 + 90 + Key resources: 91 + - [atproto-website issues](https://github.com/bluesky-social/atproto-website/issues) 92 + 93 + ### Following Feeds 94 + 95 + The following feed is "a stupidly complex data problem at scale" — and according to a post from @why.bsky.team, it represents roughly half of Bluesky's production workload. The basic flow: a post lands, a background task injects it into every follower's feed (a sorted set). Straightforward in concept, crushing at scale. 96 + 97 + @evan.jarrett.net clarified this is specifically about "the non-algorithmic one, because you have to show every post for every follower that everyone has." Mastodon's approach: generate the following feed on demand and suspend it after inactivity. Bluesky uses ScyllaDB and does not suspend feed generation for inactive users — which contributes to the workload. The Postgres-to-Scylla migration reportedly went poorly and touched everything. 98 + 99 + Large accounts may be lossy — if you follow enough people, you might not see everything. @byarielm linked Jaz's post on "imperfection" as relevant background. 100 + 101 + For app developers wanting to build their own following feed without all this infrastructure, there's a cheat: take {bsky follows} minus {those without your app's *.xyz records} — essentially filtering your following list to only people who use your app. 102 + 103 + Key resources: 104 + - [Why on following feed workload](https://witchsky.app/profile/did:plc:vpkhqolt662uhesyj6nxm7ys/post/3m2wsfeab322b) 105 + - [Jaz — Imperfection](https://jazco.dev/2025/02/19/imperfection/) 106 + 107 + ### Blocks Don't Remove Follow Records 108 + 109 + An important gotcha surfaced in the following feed discussion: blocking someone on Bluesky does not delete the follow record from your repo. @geesawra noted that "the good old 'block, unblock to force unfollow' trick doesn't work around here." 110 + 111 + @verdverm.com posed the deeper question: "why should block activity force some unfollow? Or generalized, why does writing a record in one repo force a write in another repo?" — highlighting a fundamental design tension in how repos interact. 112 + 113 + @taurean.bryant.land offered a practical angle: using the followgraph as a follow recommendation system to build a new social graph, rather than trying to force cross-repo writes. 114 + 115 + ### Community Showcase 116 + 117 + **arabica** — @pdewey.com demoed their coffee journaling app built on ATProto (alpha). @tynanpurdy.com couldn't help wondering if coffee tasting notes and fragrance review notes could share a lexicon. 118 + 119 + **drydown** — @taurean.bryant.land shared their fragrance review app built on ATProto. @sharpie expressed interest in discussing creator use cases together. 120 + 121 + **ATmosphereConf** — @psingletary.com ran a poll: 42% virtual, 33% IRL, 17% "what's that?", 8% nah. The conference is in Vancouver, March 26-29, 2026. Several attendees expressed they'd attend virtually due to not feeling comfortable leaving the US right now. 122 + 123 + **atproto table at local events** — @sharpie mentioned hosting an ATProto table at their local event the following week. 124 + 125 + **OG/link preview issues** — @michaelthatsit raised issues with Bluesky's handling of Open Graph previews for dynamically generated images. @sri.xyz pointed to the cardyb endpoint that Bluesky uses for link extraction. @sorryforpartyrock.ing shared gizo, their link card generator service. 126 + 127 + **concord** — @alexwykoff shared that @dollspace-gay built an IRC client that uses ATProto auth. 128 + 129 + Key resources: 130 + - [arabica (alpha)](https://alpha.arabica.social/) 131 + - [arabica on Tangled](https://tangled.org/did:plc:chqc2ockzmyvlrasfb66x64a/arabica) 132 + - [drydown](https://drydown.social/profile/taurean.bryant.land/house/3mcn34apccq2z) 133 + - [ATmosphereConf 2026](https://atmosphereconf.org/) 134 + - [cardyb](https://cardyb.bsky.app/v1/extract?url=https://atproto.com) 135 + - [gizo](https://github.com/espeon/gizo) 136 + - [concord](https://github.com/dollspace-gay/concord) 137 + 138 + ### Legal Obligations for PDS Operators 139 + 140 + In the last stretch of the call, @chaosgreml.in (Bryan Guffey) brought up legal compliance for PDS operators — content licensing, record versioning, and the obligations that come with hosting user-generated content. @tynanpurdy.com asked if this would be the impetus for record versioning and content licensing support. 141 + 142 + @jackvalinsky raised the question of how compliance records should be structured — whether to use site.standard or a dedicated lexicon, given the need for versioning and tombstoning. One approach discussed: using the CID of a record as the rkey when creating it, then linking back on updates, giving you a content-addressed history with a mutable pointer to the current version. 143 + 144 + The motivating concern, as @jackvalinsky put it: "we need to make it simple and straightforward to be informed because we want some random student to host a project and not be scared because of regulations that they are doing it wrong." 145 + 146 + ## All links 147 + 148 + [Osprey for ATProto](https://github.com/haileyok/osprey-for-atproto) ∙ [OAuth Authorization Management URI (draft)](https://github.com/ThisIsMissEm/draft-oauth-authorization-management-uri) ∙ [Bluesky Cookbook](https://github.com/bluesky-social/cookbook/) ∙ [atcute node-client-public-example](https://github.com/mary-ext/atcute/tree/trunk/packages/oauth/node-client-public-example) ∙ [Adversarial PLC directory migration](https://updates.microcosm.blue/3lz7nwvh4zc2u) ∙ [Sharpie's PDS migration vlog](https://bsky.app/profile/sharpiepls.com/post/3lw3hcuojck2u) ∙ [The AT Stack (guide)](https://atproto.com/guides/the-at-stack) ∙ [collectiondir (Indigo)](https://github.com/bluesky-social/indigo/tree/main/cmd/collectiondir) ∙ [Lexicon Garden](https://lexicon.garden/) ∙ [atproto-website issues](https://github.com/bluesky-social/atproto-website/issues) ∙ [Why on following feed workload](https://witchsky.app/profile/did:plc:vpkhqolt662uhesyj6nxm7ys/post/3m2wsfeab322b) ∙ [Jaz — Imperfection](https://jazco.dev/2025/02/19/imperfection/) ∙ [arabica (alpha)](https://alpha.arabica.social/) ∙ [arabica on Tangled](https://tangled.org/did:plc:chqc2ockzmyvlrasfb66x64a/arabica) ∙ [drydown](https://drydown.social/profile/taurean.bryant.land/house/3mcn34apccq2z) ∙ [ATmosphereConf 2026](https://atmosphereconf.org/) ∙ [cardyb](https://cardyb.bsky.app/v1/extract?url=https://atproto.com) ∙ [gizo](https://github.com/espeon/gizo) ∙ [concord](https://github.com/dollspace-gay/concord) ∙ [thisismissem on infra/apps/moderation](https://bsky.app/profile/thisismissem.social/post/3mfg3fc2jwc24)
+1777
protocols/atproto/dev-chats/02-22-26.md
··· 1 + <notes> 2 + # notes 3 + 4 + asjdlfk 5 + 6 + ## labelers 7 + 8 + aggregating 9 + 10 + skyware: SELECT \* labels -> sends out all labels to client (doesnt do incremental backfill) 11 + 12 + "what's the difference between skyware and ozone?" 13 + 14 + - ozone: whole multi-user interface for human moderation 15 + - skyware: minimal labeler thing 16 + 17 + osprey: patterns at scale 18 + 19 + coop: 20 + 21 + *** 22 + 23 + ## UX around prompt create 24 + 25 + prompt=create not standard, not all PDSs support it (e.g. single user PDS, PDS has user-registration disabled) 26 + 27 + > updates to the PDS and the oauth flow itself are needed 28 + 29 + > there is energy on the bsky team around this 30 + 31 + (oauth working group proposal repo on emelia's repo) 32 + 33 + ## device code grant flow 34 + 35 + start flow from one device, poll, token back 36 + 37 + DPoP with device code grant flow, draft: 38 + 39 + > devices without a display?? 40 + 41 + [atcute/packages/oauth/node-client-public-example at trunk · mary-ext/atcute](https://github.com/mary-ext/atcute/tree/trunk/packages/oauth/node-client-public-example) 42 + 43 + ## relays 44 + 45 + <https://atproto.com/guides/the-at-stack> 46 + 47 + ## everything account 48 + 49 + ## how to explain credible exit 50 + 51 + why (plc rotation keys in secure enclave), hard to understand 52 + 53 + sharpie language: "PLC is cloud thing. stores public part of rotation key, allowing you to move your data home if your house burns down" 54 + 55 + "fingerprint for your account" like 2FA backup keys, which you store yourself 56 + 57 + ms boba 58 + 59 + sharpie: partnering with content creators 60 + 61 + Doctor Popular?? 62 + 63 + ## lexicons 64 + 65 + not everything needs to be in lexicons 66 + 67 + deprecated field 68 + 69 + docs pointer 70 + 71 + lexicon garden 72 + 73 + - what's missing? 74 + 75 + ## docs contributions 76 + 77 + circle of life 78 + 79 + ## following feeds 80 + 81 + stupidly complex data problem at scale 82 + 83 + [like half of bskys workload](https://witchsky.app/profile/did:plc:vpkhqolt662uhesyj6nxm7ys/post/3m2wsfeab322b) 84 + 85 + post > bg task > inject into follower feeds (sorted set) 86 + 87 + mastodon gens following feed on demand after inactivity 88 + 89 + postgres -> scylla (went poorly, touched everything) 90 + 91 + bsky: scylla db, don't suspend creating feeds for inactive users 92 + 93 + lrg account -> lossy? might not get it? 94 + 95 + <https://jazco.dev/2025/02/19/imperfection/> 96 + 97 + > has popfeed done this? 98 + 99 + cheat: {bsky follows} - {those w/o \*.xyz records} 100 + 101 + gotcha: blocks DNE removal of follow record 102 + 103 + </notes> 104 + 105 + <discord chat> 106 + thisismissem.social — 2:00 PM 107 + hi ih 108 + n8 — 2:00 PM 109 + heya 110 + Bryan Guffey 111 + 112 + — 2:00 PM 113 + woo woo 114 + sri.xyz — 2:01 PM 115 + 👋 116 + thisismissem.social 117 + is now a speaker. — 2:01 PM 118 + pdewey.com — 2:01 PM 119 + 👋 120 + flo.bit — 2:01 PM 121 + also have some topic suggestions: 122 + 123 + long text format: markdown vs lexicon 124 + signup: sign up on page vs on pds with prompt=create 125 + hi everyone 🙂 126 + n8 — 2:02 PM 127 + hey flo bit!!!! 128 + taking notes: https://leaflet.pub/66b63f56-f335-4d41-8e4a-0eca566cfb22 129 + notes 130 + asjdlfk 131 + notes 132 + evan.jarrett.net 133 + 134 + — 2:07 PM 135 + what no gemini to record this conversation and transcribe it for us? 136 + byarielm — 2:07 PM 137 + What's the difference btwn skyware and ozone? 138 + verdverm.com — 2:07 PM 139 + fyi, the noise level between speakers is large, n8 quiet, em loud 140 + flo.bit — 2:08 PM 141 + i started a transcript 142 + thisismissem.social — 2:08 PM 143 + you can boost individual people's audio 144 + byarielm — 2:08 PM 145 + you can manually adjust audio for each user! 146 + verdverm.com — 2:08 PM 147 + been looking, but not seeing 148 + byarielm — 2:08 PM 149 + click the little three dots after hovering over n8's video 150 + pdewey.com — 2:09 PM 151 + you can also just right click on a profile picture to see that menu 152 + evan.jarrett.net 153 + 154 + — 2:09 PM 155 + or right click 156 + flo.bit — 2:09 PM 157 + also another topic suggestion: 158 + easiest way to build an appview with a following feed 159 + verdverm.com — 2:10 PM 160 + i s permissioned data on the agenda? 161 + n8 — 2:10 PM 162 + yea somewhat, i have an item about "private data use cases" inspired by bryan's post 163 + verdverm.com — 2:10 PM 164 + Bsky is moving over to Osprey? 165 + flo.bit — 2:10 PM 166 + yeah lets see for what we have the time, all only suggestions if we have nothing else to talk about 😉 167 + n8 — 2:11 PM 168 + i like to follow whatever comes up instead of being prescriptive about the topics so im game for it 🙂 169 + flo.bit — 2:12 PM 170 + the signup thing is more a UX flow question: allow users to enter email password on the page (easier to understand maybe, but e.g. bad for password managers) (this is basically what bsky does) or redirect them to a pds and do the signup there with prompt=create 171 + byarielm — 2:13 PM 172 + Thanks! So to summarize and check my knowledge: Skyware is kinda the base code you need for a labeler, Ozone provides UI and some extra db/moderation stuff, and Osprey is more pattern/rule formatting for labellers? Could you use Osprey without Ozone? 173 + verdverm.com — 2:13 PM 174 + If you want to talk perm'd data, I'd be happy to join, I'm deeply involved 175 + 176 + also, best pronunciation of verdverm yet! 177 + flo.bit 178 + is now a speaker. — 2:13 PM 179 + n8 — 2:13 PM 180 + yes i'd love to learn what you're up to! 181 + verdverm.com — 2:14 PM 182 + I can more likely answer other's questions, the ones I have myself are open and as yet unanswered 183 + sorryforpartyrock.ing 184 + 185 + — 2:18 PM 186 + Hi all ! 187 + n8 — 2:18 PM 188 + 👋 189 + byarielm — 2:18 PM 190 + And it's only showing recently active sessions lol 🥲 so not really useful 191 + evan.jarrett.net 192 + 193 + — 2:19 PM 194 + yeah for client confidential long standing oauth, they don't show up all the time 195 + sorryforpartyrock.ing 196 + 197 + — 2:20 PM 198 + oh that's weird 199 + i thought theyd only show valid sessions and those would be valid 200 + byarielm — 2:20 PM 201 + the only one showing in mine rn is smoke signal (just went to the site a few min ago) + a list of device logins 202 + psingletary.com 203 + 204 + — 2:20 PM 205 + hi, i am a patrick 206 + pdewey.com — 2:21 PM 207 + hi i am also a patrick 208 + evan.jarrett.net 209 + 210 + — 2:21 PM 211 + i'm thinking about it instead of app-passwords 212 + thisismissem.social — 2:21 PM 213 + osprey is a automation and data analysis tool — it receives the events from the a source, e.g., the firehose, and then based on the rules your stored (a DSL) it can then apply those to data as it comes in, it's very similar in that way to SQRL. Osprey also stores all the events in a big database, which then allows you to write a new rules and investigate patterns 214 + verdverm.com — 2:21 PM 215 + apikey like thing? 216 + geesawra — 2:21 PM 217 + I am not Patrick sadly 218 + psingletary.com 219 + 220 + — 2:22 PM 221 + with patrick powers combined we are patrick² 222 + verdverm.com — 2:22 PM 223 + My Permissioned PDS POC has most of an APIKey implementation, which is not that much overall 224 + psingletary.com 225 + 226 + — 2:22 PM 227 + you can be an honorary one for this hangout 228 + evan.jarrett.net 229 + 230 + — 2:22 PM 231 + my thought is basically implementing a custom apikey that is just linked to your web logged in oauth session. rather than using app-passwords. its a pain because its basically just app-password but now tied to our oauth. 232 + @quillmatiq.com — 2:23 PM 233 + 👋🏼 234 + verdverm.com — 2:25 PM 235 + apikeys need a table in the db and all the other CRUD/LEX to go with them, but mechanically in the PDS stores (actor notably) logic, the auth method is largely abstracted at that point 236 + same.supply — 2:25 PM 237 + https://github.com/mary-ext/atcute/tree/trunk/packages/oauth/node-client-public-example 238 + thisismissem.social — 2:26 PM 239 + there's examples in bsky cookbook 240 + https://github.com/bluesky-social/cookbook/ 241 + evan.jarrett.net 242 + 243 + — 2:26 PM 244 + @n8 how about your adventures in relays 245 + thisismissem.social — 2:26 PM 246 + the IETF account management draft: https://github.com/ThisIsMissEm/draft-oauth-authorization-management-uri 247 + sharpie — 2:26 PM 248 + hi chat 249 + thisismissem.social — 2:27 PM 250 + yeah, your application could certainly do that for your API 251 + pdewey.com — 2:27 PM 252 + "the nostr guy" is a great way to describe that 253 + psingletary.com 254 + 255 + — 2:28 PM 256 + i thought they were also a svelte person 257 + flo.bit — 2:28 PM 258 + lets not give svelte people a bad rep 😛 259 + same.supply — 2:28 PM 260 + as a svelte person, the nostr guys can claim him 261 + @quillmatiq.com — 2:29 PM 262 + oops 263 + psingletary.com 264 + 265 + — 2:29 PM 266 + he they proclaiied it heavily in their bio... cowshrug 267 + Image 268 + verdverm.com — 2:29 PM 269 + I was in the trenches on HN for "the nostr guy" post, good place to see non-atproto perspectives 270 + @quillmatiq.com — 2:30 PM 271 + always nervous to hit HN -- worth going thru those comments? 272 + thisismissem.social — 2:30 PM 273 + https://atproto.com/guides/the-at-stack 274 + dane 275 + 276 + — 2:30 PM 277 + here's collectiondir for anyone wondering https://github.com/bluesky-social/indigo/tree/main/cmd/collectiondir 278 + evan.jarrett.net 279 + 280 + — 2:30 PM 281 + https://atcr.io/r/zzstoatzz.io/collectiondir 282 + ATCR 283 + zzstoatzz.io/collectiondir - ATCR 284 + collectiondir 285 + zzstoatzz.io/collectiondir - ATCR 286 + verdverm.com — 2:31 PM 287 + yeah, I hang out in the comments, my spicer atproto takes happen over there too (not so much this post) 288 + sorryforpartyrock.ing 289 + 290 + — 2:31 PM 291 + that's so much data 292 + n8 — 2:31 PM 293 + @Bryan Guffey idk if that didn't go thru, i tried to approve your request to speak! 294 + 295 + pls try again maybe? 296 + @quillmatiq.com — 2:32 PM 297 + Image 298 + sharpie — 2:32 PM 299 + i left twitter, you couldn't pay me to read nostr comments 300 + that's where all the crypto apologists went :( 301 + geesawra — 2:32 PM 302 + no we're also on bsky 303 + but we have less extreme views and are cool all around 304 + @quillmatiq.com — 2:32 PM 305 + not yet 🙂 306 + sorryforpartyrock.ing 307 + 308 + — 2:32 PM 309 + i used to look at using farcaster 310 + same.supply — 2:32 PM 311 + dozens! 312 + @quillmatiq.com — 2:32 PM 313 + but i see where you're going with it 314 + verdverm.com — 2:33 PM 315 + I'm probably one of the reasons this meme exists 🙈 🙊 🙉 316 + Bryan Guffey 317 + is now a speaker. — 2:33 PM 318 + sharpie — 2:33 PM 319 + crypto infrastructure isn't bad; the people using it unethically are tho 320 + geesawra — 2:33 PM 321 + agreed 322 + infra also sucks tho 323 + most of the times 324 + sharpie — 2:33 PM 325 + i like the concept 326 + but the implimentation is like everything else in tech 327 + good in an ideal world and not the real one 328 + sorryforpartyrock.ing 329 + 330 + — 2:34 PM 331 + big infrastructure is fun 332 + has real effects tho 🥲 333 + verdverm.com — 2:34 PM 334 + my atmunge project produces a table with every account and collections, it's very easy to build that index, one request per account 335 + geesawra — 2:34 PM 336 + you either end up being slow or centralized, no middle ground 337 + n8 — 2:34 PM 338 + hell yea! 339 + sorryforpartyrock.ing 340 + 341 + — 2:34 PM 342 + centralised 👀 343 + byarielm — 2:35 PM 344 + i'll be there! 🙂 (at the con lol) 345 + dane 346 + 347 + — 2:35 PM 348 + hooray for meetups 349 + sorryforpartyrock.ing 350 + 351 + — 2:35 PM 352 + i wish i was in the eu rn 353 + i'd go 354 + geesawra — 2:35 PM 355 + as a non-native speaker it's so confusing haha 356 + byarielm — 2:35 PM 357 + nobody come to buffalo u might get trapped 358 + psingletary.com 359 + 360 + — 2:35 PM 361 + Attending ATmosphereConf? 362 + IRL 363 + 364 + 4 votes 365 + 33% 366 + Virtual 367 + 368 + 5 votes 369 + 42% 370 + What's that? 371 + 372 + 2 votes 373 + 17% 374 + Nah 375 + 376 + 1 vote 377 + 8% 378 + 379 + 12 votes 380 + Poll closed 381 + sharpie — 2:36 PM 382 + i'm hosting an atproto table at my local event next week 383 + sorryforpartyrock.ing 384 + 385 + — 2:36 PM 386 + what's atmosphereconf? 387 + sharpie — 2:36 PM 388 + i don't think that's news worthy tho lmao 389 + sorryforpartyrock.ing 390 + 391 + — 2:36 PM 392 + for those of us who don't know 393 + geesawra — 2:36 PM 394 + needs a "nah but i wish" 395 + evan.jarrett.net 396 + 397 + — 2:36 PM 398 + https://atmosphereconf.org/ 399 + ATmosphereConf 2026 400 + ATmosphereConf is the global atproto community conference. Join us in Vancouver, Canada, March 26th - 29th, 2026. 401 + Image 402 + psingletary.com 403 + 404 + — 2:36 PM 405 + 2nd 406 + thisismissem.social — 2:36 PM 407 + There's an interesting thread in here about infra, apps, and moderation: https://bsky.app/profile/thisismissem.social/post/3mfg3fc2jwc24 408 + sharpie — 2:36 PM 409 + i'll be attending atmosphere virtually; don't feel comfortable leaving the US rn 410 + have fun tho !! 411 + geesawra — 2:37 PM 412 + atmosphereconf EU when 413 + psingletary.com 414 + 415 + — 2:37 PM 416 + same, if i leave i have to prepare that I can't come back 417 + dane 418 + 419 + — 2:37 PM 420 + next one should be eu 421 + i hope 422 + sorryforpartyrock.ing 423 + 424 + — 2:37 PM 425 + i'll be going up with eli i guess 426 + psingletary.com 427 + 428 + — 2:37 PM 429 + aren't you riding the train? 430 + sharpie — 2:37 PM 431 + yeah, unfortunately i can't take that risk rn. important things i'm working on locally 432 + Bryan Guffey 433 + 434 + — 2:38 PM 435 + run your own hahah 436 + dane 437 + 438 + — 2:38 PM 439 + logical next step i guess, we've had us then canada 440 + sorryforpartyrock.ing 441 + 442 + — 2:38 PM 443 + the train leaves at 6pm 444 + geesawra — 2:38 PM 445 + i want to put dotfiles on pdses 446 + ultimate nerd snipe 447 + @quillmatiq.com — 2:38 PM 448 + ✨ e v e r y t h i n g a c c o u n t ✨ 449 + geesawra — 2:38 PM 450 + counterpoint: do put them in your pds, make security engineers happy 451 + verdverm.com — 2:38 PM 452 + Why atproto over git for dotfiles? 453 + psingletary.com 454 + 455 + — 2:38 PM 456 + <-bitwarden stan 457 + geesawra — 2:38 PM 458 + fun! 459 + sharpie — 2:39 PM 460 + ohhhh i saw that 461 + evan.jarrett.net 462 + 463 + — 2:39 PM 464 + they mean if the dotfiles themselves could be encrypted/private 465 + thisismissem.social — 2:39 PM 466 + https://bsky.app/profile/why.bsky.team/post/3mfhon6ss4k2g 467 + same.supply — 2:39 PM 468 + I mean they're probably public on git (dotfiles) 469 + sorryforpartyrock.ing 470 + 471 + — 2:39 PM 472 + what about people who dont have iphones? 473 + geesawra — 2:39 PM 474 + android could do something like that 475 + sharpie 476 + is now a speaker. — 2:39 PM 477 + sorryforpartyrock.ing 478 + 479 + — 2:39 PM 480 + i have an galaxy s4 i use often 481 + psingletary.com 482 + 483 + — 2:40 PM 484 + S FOUR! 485 + geesawra — 2:40 PM 486 + should rotation keys be offered in bsky's settings? like under an "advance" use 487 + sorryforpartyrock.ing 488 + 489 + — 2:40 PM 490 + it's my main phone 🙉 491 + sorryforpartyrock.ing 492 + 493 + — 2:40 PM 494 + no 495 + well 496 + geesawra — 2:40 PM 497 + huh why? 498 + same.supply — 2:40 PM 499 + imo they should never be on an apps website 500 + dane 501 + 502 + — 2:40 PM 503 + i think so at least, i don't think it should be a separate thing 504 + sorryforpartyrock.ing 505 + 506 + — 2:41 PM 507 + i don't think it would end well, people would lose them quite often 508 + same.supply — 2:41 PM 509 + it should be on your pds host website 510 + sorryforpartyrock.ing 511 + 512 + — 2:41 PM 513 + i've made multiple and then immediately lost them 514 + @quillmatiq.com — 2:41 PM 515 + great explanation 516 + psingletary.com 517 + 518 + — 2:41 PM 519 + forwarding address 520 + sorryforpartyrock.ing 521 + 522 + — 2:41 PM 523 + bailey has mine so we good now 524 + @taurean.bryant.land — 2:41 PM 525 + really good, super useful thanks 526 + geesawra — 2:41 PM 527 + that's why i think it should be under an advanced menu, it's like, if you want to use them you can 528 + otherwise i feel they'll always be reserved for nerds like me 529 + sorryforpartyrock.ing 530 + 531 + — 2:42 PM 532 + i think they'd be too visible and associated with bsky 533 + i get what you mean tho 534 + if they get the secure enclave thing in-app i think that would be nice tho 535 + geesawra — 2:42 PM 536 + yeah exactly 537 + @taurean.bryant.land — 2:42 PM 538 + yeah, thats great too. like showing ID to fill out a change of address form with the post office 539 + sorryforpartyrock.ing 540 + 541 + — 2:42 PM 542 + theyre like 2fa backup keys 543 + geesawra — 2:42 PM 544 + who's building ledgers for plc 545 + sorryforpartyrock.ing 546 + 547 + — 2:42 PM 548 + ID is a little better i think 549 + you can't lose a fingerprint under normal circumstances but you can an ID 550 + psingletary.com 551 + 552 + — 2:43 PM 553 + lol let's not worry about semantics in favor of explaining a concept 554 + sharpie — 2:43 PM 555 + i tried explaining the public v private components and users usually get confused 556 + so i don't explain it 557 + geesawra — 2:44 PM 558 + asymmetric crypto is hard 559 + evan.jarrett.net 560 + 561 + — 2:44 PM 562 + i like the skeleton key concept even though thats also not quite accurate 563 + sorryforpartyrock.ing 564 + 565 + — 2:44 PM 566 + i think streamplace does it well enough 567 + @taurean.bryant.land — 2:44 PM 568 + 100%. maybe the only thing that could be useful is the directory stores the ability to verify your passport or key or whatever. 569 + psingletary.com 570 + 571 + — 2:44 PM 572 + bff heart necklaces 573 + sorryforpartyrock.ing 574 + 575 + — 2:44 PM 576 + a public key is associated with a stream key which is like a password 577 + thisismissem.social — 2:44 PM 578 + yeah, it is a tricky one, I'd just say you have a credential that you can use to manage your identity in the cloud, and when you create that credential, you register it with your identity in the cloud 579 + byarielm — 2:44 PM 580 + it's like lock-and-key matching but...more like fingerprints that are actually unique lol. i like your explanation sharpie, good for non tech users. 581 + psingletary.com 582 + 583 + — 2:44 PM 584 + one person has half of the necklace, you have the other 585 + sharpie — 2:45 PM 586 + yeah honestly, getting people to tune in long enough to even understand what the PLC is; is very hard 587 + i can hear people's eyes glazing over lmao 588 + geesawra — 2:45 PM 589 + what if the necklace was split in n parts and you could reconstruct the full necklace with m parts 👀 590 + @taurean.bryant.land — 2:45 PM 591 + I appreciate you @sharpie! we need more people grounding this to focus on people instead of tech 592 + sorryforpartyrock.ing 593 + 594 + — 2:46 PM 595 + only thing i ever use AI for is to explain big systems i'm not familiar with already 596 + sharpie 597 + is now a speaker. — 2:46 PM 598 + psingletary.com 599 + 600 + — 2:47 PM 601 + fig? 602 + sorryforpartyrock.ing 603 + 604 + — 2:47 PM 605 + code should be maintainable and that includes me either writing or reviewing code, ideally both 606 + @quillmatiq.com — 2:47 PM 607 + "if elon shows up..." 608 + @taurean.bryant.land — 2:47 PM 609 + I was just going to say "Eloned" lol 610 + @quillmatiq.com — 2:47 PM 611 + I ususally say "The Worst Person You Know" but they get the hint 612 + psingletary.com 613 + 614 + — 2:47 PM 615 + @phil fyi /nick fig (aka:[phil]) 616 + phil — 2:47 PM 617 + ❤️ https://updates.microcosm.blue/3lz7nwvh4zc2u 618 + Adversarial PLC directory migration - microcosm 619 + Contingency planning: what's our credible failover for the centralized underpinning of ATProto identities? 620 + Adversarial PLC directory migration - microcosm 621 + @taurean.bryant.land — 2:48 PM 622 + ‼️‼️‼️ 623 + animations would actually be amazing, the video that Sharpie did has already been so valuable, this would be great. 624 + @negritosuave.blacksky.app — 2:48 PM 625 + There’s a video? 626 + sorryforpartyrock.ing 627 + 628 + — 2:49 PM 629 + oh i'm awful with UI 630 + ui/ux i am absolute trash at 631 + geesawra — 2:49 PM 632 + UI is hard 633 + evan.jarrett.net 634 + 635 + — 2:49 PM 636 + I think we need a client facing name for the PDS. just like "atproto account". its not very consumer friendly 637 + @taurean.bryant.land — 2:49 PM 638 + let me try and find it 639 + psingletary.com 640 + 641 + — 2:50 PM 642 + yes let's abandon meta 643 + they can burn for all i care 644 + @quillmatiq.com — 2:50 PM 645 + docpop did a fantastic job 646 + they didn't promote it well enough on the fedi 647 + / outside the fedi 648 + @quillmatiq.com — 2:51 PM 649 + ^ it's not a hope, it's a goal 650 + @taurean.bryant.land — 2:51 PM 651 + https://bsky.app/profile/sharpiepls.com/post/3lw3hcuojck2u 652 + 653 + dapurplesharpie (@sharpiepls.com) 654 + Entry 31 - Migrating from the Bluesky PDS to the #BlackSky PDS with PDS MOOver #SharpieVLOG 655 + Reposts 656 + 147 657 + Likes 658 + 463 659 + Quotes 660 + 273 661 + 662 + Bluesky•8/10/25, 6:39 PM 663 + thisismissem.social — 2:51 PM 664 + https://bsky.app/profile/heika.dog/post/3mbfpu24vac2t 665 + flo.bit — 2:51 PM 666 + we also need a internet-handle website that shows the popular apps you can sign in with your atproto account, etc 667 + sharpie — 2:52 PM 668 + a community needs EVERYBODY 669 + n8 — 2:52 PM 670 + (i have a WIP for this https://waow.tech/ , not even close to all) 671 + flo.bit — 2:52 PM 672 + kinda like https://internethandle.org/ + https://atproto.brussels/atproto-apps but with better ux 673 + psingletary.com 674 + 675 + — 2:52 PM 676 + we might need to figure out how to move away from discord to make this more open, maybe streamplace with vdo.ninja, but audio routing always ends up being the nightmare 677 + geesawra — 2:53 PM 678 + there's a severe lack of specs in atmosphere 679 + sharpie — 2:53 PM 680 + ventrillo or mumble? 681 + thisismissem.social — 2:53 PM 682 + what do you mean by this? at a lexicon level? 683 + geesawra — 2:53 PM 684 + even at lower levels, i feel like there's an adequate amount of documentation but not enough rigorous spec 685 + psingletary.com 686 + 687 + — 2:54 PM 688 + yeah we are up to 12 viewers on @sorryforpartyrock.ing stream 689 + sharpie — 2:54 PM 690 + where are the recordings for the calls stored? 691 + @quillmatiq.com — 2:54 PM 692 + we can also start sans lexicon and move when we're ready, doesn't need to be a blocker 693 + psingletary.com 694 + 695 + — 2:54 PM 696 + we're not unless @n8 is recording 697 + geesawra — 2:54 PM 698 + mind you i might not've looked hard enough! but stuff like a "pds spec" mostly lives in the reference implementation not in writing 699 + sorryforpartyrock.ing 700 + 701 + — 2:54 PM 702 + why would we store this haha 703 + psingletary.com 704 + 705 + — 2:54 PM 706 + having the conversation be ephemeral is probably better though 707 + sorryforpartyrock.ing 708 + 709 + — 2:55 PM 710 + yeah that's my thought 711 + n8 — 2:55 PM 712 + yea im taking notes but haven't explored recording yet (maybe streamplace vods down the road but only if ppl actually want that) 713 + psingletary.com 714 + 715 + — 2:55 PM 716 + we kind of wander all over and that fine for participation but terrible for watchability 717 + geesawra — 2:55 PM 718 + yes I agree 719 + evan.jarrett.net 720 + 721 + — 2:55 PM 722 + i was expecting to see the com.atproto lexicons/xrpc on the new atproto site.... 723 + was kinda disappointed when they weren't there 724 + sorryforpartyrock.ing 725 + 726 + — 2:56 PM 727 + oh we do that 728 + yeah 729 + geesawra — 2:56 PM 730 + i guess my concept of spec is more tied to the conventional "this is a list of endpoints" rather than "here's xrpc and lexicons, go nuts" 731 + sorryforpartyrock.ing 732 + 733 + — 2:56 PM 734 + it's so funny 735 + thoth — 2:56 PM 736 + I'm still super concerned about the blocking repost suppression bug. 737 + geesawra — 2:56 PM 738 + yesss the deprecated tag is vital 739 + verdverm.com — 2:57 PM 740 + I already have a tool to do this, someone just needs to write the templates for markdown or whatever format you want 741 + @taurean.bryant.land — 2:57 PM 742 + Lexicon Garden is great: https://lexicon.garden/ 743 + Lexicon Garden 744 + Lexicon Garden - ATProtocol Lexicon Browser 745 + Browse and discover ATProtocol lexicon schema definitions 746 + Image 747 + for lexicon documentation 748 + sorryforpartyrock.ing 749 + 750 + — 2:57 PM 751 + how do you generate good documentation though? 752 + that's impractical i think 753 + i'm a big fan of self documenting code 754 + psingletary.com 755 + 756 + — 2:58 PM 757 + lol @sorryforpartyrock.ing you should let people know who you are 758 + thoth — 2:58 PM 759 + I mean the process described is "generate a skeleton from the lexicon and fill it in" 760 + sorryforpartyrock.ing 761 + 762 + — 2:58 PM 763 + no why? 764 + thoth — 2:58 PM 765 + But it'd probably be better to have a synthesis thing that generates docs and compiled lexicons from an easier-to-write source code description. 766 + So the docs and code can't get out of sync so easily. 767 + (and you don't have to do a weird dance when the record context changes) 768 + sorryforpartyrock.ing 769 + 770 + — 2:59 PM 771 + https://bsky-docs.pages.dev/ isn't too bad 772 + My Docs 773 + Bluesky & AT Protocol Documentation 774 + Unofficial documentation for Bluesky and the AT Protocol, including auto-generated lexicon references. 775 + oh those are completely different 776 + i think separate doc pages that tell you how to use things/full flow 777 + that's fine 778 + verdverm.com — 3:00 PM 779 + I have a tool that generally, and at scale, allows one to data + templates -> lots of files / dirs. Also allows you to write the extra, and also regen the gen'd parts if they change, without breaking things 780 + sorryforpartyrock.ing 781 + 782 + — 3:00 PM 783 + i love docs.bsky.app 784 + its so bad 785 + n8 — 3:00 PM 786 + examples/concepts/api-ref, i think we need all 3, some will be app level 787 + psingletary.com 788 + 789 + — 3:01 PM 790 + halfway mark 791 + sorryforpartyrock.ing 792 + 793 + — 3:01 PM 794 + yeah this is kind of what i do already 795 + byarielm — 3:01 PM 796 + we also need the "for babies"/"for newbs" docs 🥲 with all the caveats so i can learn more 797 + n8 — 3:01 PM 798 + "Introduction"/"Getting Started" 799 + sorryforpartyrock.ing 800 + 801 + — 3:01 PM 802 + we need more of a concepts thing 803 + geesawra — 3:02 PM 804 + the go documentation does this well, you have examples/docs/howtos plus reference in a single page 805 + Jack Valinsky — 3:02 PM 806 + *taking notes for my own projects wrt. docs 😬 807 + thisismissem.social — 3:02 PM 808 + yeah, this is the same as lexicon.garden really: a html rendering of the lexicon, but it's not prose 809 + evan.jarrett.net 810 + 811 + — 3:02 PM 812 + i tried to write documentation and then it got outdated like 3 commits later. 813 + sorryforpartyrock.ing 814 + 815 + — 3:02 PM 816 + yeah that's fine, it's not trying to be anything more 817 + thoth — 3:02 PM 818 + RustDoc. Make it like RustDoc. This is the way. 819 + sorryforpartyrock.ing 820 + 821 + — 3:02 PM 822 + you get it 823 + Bryan Guffey 824 + 825 + — 3:02 PM 826 + OMG YES ARIEL WE SHOULD DO THIS TOGETHER 827 + sorryforpartyrock.ing 828 + 829 + — 3:02 PM 830 + rustdoc is so goated 831 + Bryan Guffey 832 + 833 + — 3:02 PM 834 + ELI5 835 + Bryan Guffey 836 + 837 + — 3:03 PM 838 + facts 839 + thoth — 3:03 PM 840 + I didn't think it was possible for docs generated from source annotations to be good (I mean, have you seen doxygen?) until I saw rustdoc 841 + sorryforpartyrock.ing 842 + 843 + — 3:03 PM 844 + i have a pretty shitty claude-written mini docs system i have locally 845 + geesawra — 3:03 PM 846 + rustdoc and godoc are the goats 847 + n8 — 3:03 PM 848 + yea they were pretty responsive on gh, got a lil typo thing merged in a couple hours 849 + byarielm — 3:03 PM 850 + thanks miss em! i do have some unanswered q's for what i've read so far, though it is MUCH better than what it was before. 851 + sorryforpartyrock.ing 852 + 853 + — 3:03 PM 854 + like it's pretty poorly written + llmisms but it works for understanding things 855 + thisismissem.social — 3:03 PM 856 + yeah, keep notes on what you're missing 857 + sorryforpartyrock.ing 858 + 859 + — 3:04 PM 860 + packed full of info is nice 861 + byarielm — 3:04 PM 862 + i started this lmao but haven't continued cuz (1) wanted to wait for the atproto example to move to tap, (2) busy. https://leaflet.pub/9ee7a6e8-d4bc-4a83-a794-165de5637222 863 + same.supply — 3:04 PM 864 + What I've seen work from good js libs is Getting Started/Quick Start + Important Concepts + API Type specification 865 + sorryforpartyrock.ing 866 + 867 + — 3:04 PM 868 + why would i? i'm not a docs writer 869 + claude isn't either, really 870 + Jack Valinsky — 3:05 PM 871 + an aside: mfw I realized that markdown files can have comments that are invisible to renderers but if feed to an LLM -> very easy prompt injection... maybe md format for LLMs was a mistake 872 + byarielm — 3:05 PM 873 + thinking i just need to sit down with the docs + margin annotations open. then do issues/PRs later. 874 + thisismissem.social — 3:05 PM 875 + https://github.com/bluesky-social/atproto-website/issues 876 + GitHub 877 + bluesky-social/atproto-website 878 + Contribute to bluesky-social/atproto-website development by creating an account on GitHub. 879 + Contribute to bluesky-social/atproto-website development by creating an account on GitHub. 880 + byarielm — 3:06 PM 881 + cuz it's hard to read and then pause to write an issue lol 882 + n8 — 3:06 PM 883 + can confirm, i find hard to step out my weeds and imagine how people interpret my docs 884 + sorryforpartyrock.ing 885 + 886 + — 3:07 PM 887 + i have to write user facing docs every so often and it's absolutely horrible 888 + Bryan Guffey 889 + 890 + — 3:07 PM 891 + why are you so mean to the user haha 892 + sorryforpartyrock.ing 893 + 894 + — 3:07 PM 895 + condolences to people who do 896 + Bryan Guffey 897 + 898 + — 3:07 PM 899 + we're the best 900 + thisismissem.social — 3:07 PM 901 + it's a certain skill! 902 + n8 — 3:08 PM 903 + https://leaflet.pub/66b63f56-f335-4d41-8e4a-0eca566cfb22 904 + notes 905 + asjdlfk 906 + notes 907 + thisismissem.social — 3:08 PM 908 + ooh! yes! annotate documentation with margin.at!! 909 + sorryforpartyrock.ing 910 + 911 + — 3:08 PM 912 + i'm hoping it's yjs 913 + ueberdosis has a quite nice yjs based sync server 914 + flo.bit 915 + is now a speaker. — 3:09 PM 916 + sorryforpartyrock.ing 917 + 918 + — 3:10 PM 919 + i don't want to build this 🥲 920 + it's usually too slow to do it on demand 921 + so you just have to do it in the background 922 + psingletary.com 923 + 924 + — 3:11 PM 925 + there's a reason why Graze hasn't tackled this yet 926 + geesawra — 3:11 PM 927 + sheesh 928 + sorryforpartyrock.ing 929 + 930 + — 3:11 PM 931 + for everyone 932 + evan.jarrett.net 933 + 934 + — 3:11 PM 935 + the following feed specifically the non-algorithmic one. becuase you have to show every post for every follower that everyone has 936 + sorryforpartyrock.ing 937 + 938 + — 3:11 PM 939 + with nyt i don't think it'll be too bad bc nyt is designed to be closed 940 + verdverm.com — 3:12 PM 941 + I'm working towards a set of those expensive feeds just for me, don't have to do it at scale :] 942 + psingletary.com 943 + 944 + — 3:12 PM 945 + @flo.bit you should reach out to graze team and community to work out a middle ground feed 946 + dane 947 + 948 + — 3:12 PM 949 + https://witchsky.app/profile/did:plc:vpkhqolt662uhesyj6nxm7ys/post/3m2wsfeab322b 🥲 950 + Witchsky 951 + Why (@why.bsky.team) 952 + Running the following feed is like half of our production workload, its kinda silly how much work it is to do that 953 + 954 + ↘️ quoting bryan newbold (@bnewbold.net): 955 + 956 + a great way to break up bsky appview implementation work would be implementing "Following" as a regular feedgen. 957 + 958 + one of the harder pieces in general high-req-rate full-network scale, ... 959 + same.supply — 3:12 PM 960 + is it following feed for posts or events? 961 + geesawra — 3:12 PM 962 + this is a certified "designing data-intensive applications" moment 963 + psingletary.com 964 + 965 + — 3:12 PM 966 + I, for one, am not a fan of following feeds, i feel they re-enforce parasocial relationships and dehumanizes accounts 967 + sorryforpartyrock.ing 968 + 969 + — 3:13 PM 970 + haha that's funny 971 + geesawra — 3:13 PM 972 + oh yeah! i logged in the other day and it said "feed building, come back later" 973 + sorryforpartyrock.ing 974 + 975 + — 3:13 PM 976 + im going to do that 977 + i think they only take like 5k people in account when doing following? 978 + i forget exactly 979 + yeah 980 + byarielm — 3:16 PM 981 + i think it's a post from jaz and it's mind hurting but also funny 982 + geesawra — 3:16 PM 983 + i think there's a post by someone on the team explaining that? 984 + sorryforpartyrock.ing 985 + 986 + — 3:16 PM 987 + i don't want to think about this 988 + geesawra — 3:16 PM 989 + maybe bryan? 990 + sorryforpartyrock.ing 991 + 992 + — 3:16 PM 993 + i'll have to do this eventually 994 + following feed, recommendations 995 + byarielm — 3:16 PM 996 + https://jazco.dev/2025/02/19/imperfection/ 997 + sorryforpartyrock.ing— 3:16 PM 998 + recommended topics 999 + 1000 + geesawra — 3:17 PM 1001 + ahhh yes, jaz 1002 + same.supply — 3:17 PM 1003 + I don't think many of the lexicons other than app.bsky.feed.posts would have those problems yet 1004 + sorryforpartyrock.ing 1005 + 1006 + — 3:18 PM 1007 + backfilling all of that will be a pain 1008 + there's also the option of only taking in people you care about 1009 + yeah 1010 + evan.jarrett.net 1011 + 1012 + — 3:19 PM 1013 + listrecordbycollection entered the chat 1014 + psingletary.com 1015 + 1016 + — 3:19 PM 1017 + this is me erasure! 1018 + 1019 + fortunately we have another patrick 1020 + sorryforpartyrock.ing 1021 + 1022 + — 3:19 PM 1023 + i just do it myself 1024 + it's not hard 1025 + you can just check all your lexicons on the relay to get most of them 1026 + won't get all of them just by the nature of the relay 1027 + geesawra — 3:20 PM 1028 + til 1029 + @taurean.bryant.land — 3:21 PM 1030 + really good point 1031 + Jack Valinsky — 3:21 PM 1032 + huh that's good to know... 1033 + @taurean.bryant.land — 3:22 PM 1034 + a good middle ground is also using the followgraph as a follow recommendation system to build a new social graph. 1035 + geesawra — 3:22 PM 1036 + the good old "block, unblock to force unfollow" trick doesn't work around here! 1037 + Jack Valinsky — 3:22 PM 1038 + this is why we can't have nice things :/ 1039 + geesawra — 3:23 PM 1040 + that's incredibly antisocial 1041 + n8 — 3:23 PM 1042 + yes i am doing something like this at the moment, lots of interesting things to explore here 1043 + verdverm.com — 3:24 PM 1044 + why should block activity force some unfollow? or generalized, why does writing a record in one repo force a write in another repo? 1045 + geesawra — 3:24 PM 1046 + no way lmao 1047 + Bryan Guffey 1048 + 1049 + — 3:25 PM 1050 + yeah, this is the problem. i don't necessarily think ti should, but I do think people should be incontrol of blocking people they don;'t want to engage with. 1051 + @quillmatiq.com — 3:25 PM 1052 + we can 1053 + Jack Valinsky — 3:25 PM 1054 + yes 1055 + same.supply — 3:25 PM 1056 + yes 1057 + psingletary.com 1058 + 1059 + — 3:25 PM 1060 + yes we can hear 1061 + @quillmatiq.com — 3:25 PM 1062 + it says you're muted but you're not lol 1063 + psingletary.com 1064 + 1065 + — 3:25 PM 1066 + just disable video, 1067 + sorryforpartyrock.ing 1068 + 1069 + — 3:25 PM 1070 + uh oh 1071 + Jack Valinsky — 3:25 PM 1072 + I think your video is desynced from audio 1073 + psingletary.com 1074 + 1075 + — 3:25 PM 1076 + LOL 1077 + evan.jarrett.net 1078 + 1079 + — 3:25 PM 1080 + lol 1081 + @quillmatiq.com — 3:25 PM 1082 + oop 1083 + pdewey.com — 3:26 PM 1084 + rip 1085 + psingletary.com 1086 + 1087 + — 3:26 PM 1088 + THAT WASN'T ME 1089 + @taurean.bryant.land — 3:26 PM 1090 + cliffhanger 1091 + geesawra — 3:26 PM 1092 + f 1093 + @quillmatiq.com — 3:26 PM 1094 + cliffhanger 1095 + Jack Valinsky — 3:26 PM 1096 + pds.rip 1097 + byarielm — 3:26 PM 1098 + ded 1099 + sorryforpartyrock.ing 1100 + 1101 + — 3:26 PM 1102 + what did eli talk about 1103 + @taurean.bryant.land — 3:26 PM 1104 + get out of my head 1105 + @quillmatiq.com — 3:26 PM 1106 + TELL ME WHAT ELI SAID 1107 + Jack Valinsky — 3:26 PM 1108 + defederated 1109 + sorryforpartyrock.ing 1110 + 1111 + — 3:26 PM 1112 + it's probably s2pa/muxl 1113 + ¯\_(ツ)_/¯ 1114 + psingletary.com 1115 + 1116 + — 3:26 PM 1117 + you think N8 just got discord age checked? 1118 + geesawra — 3:26 PM 1119 + oof smells like ddos 1120 + psingletary.com 1121 + 1122 + — 3:26 PM 1123 + OH MY 1124 + n8 — 3:27 PM 1125 + lmao 1126 + my ISP blows 1127 + on phone now 1128 + geesawra — 3:27 PM 1129 + f for your isp 1130 + n8 1131 + is now a speaker. — 3:27 PM 1132 + psingletary.com 1133 + 1134 + — 3:28 PM 1135 + plz no inbox 1136 + ffs 1137 + geesawra — 3:28 PM 1138 + the fact that one could engineer a solution like this makes me hopeful for the future of atproto, the design feels infinitely extensible 1139 + Jack Valinsky — 3:28 PM 1140 + quick tl;dr why inbox bad 1141 + geesawra — 3:29 PM 1142 + patrick pick up the mic 1143 + same.supply — 3:29 PM 1144 + intents 👀 1145 + psingletary.com 1146 + 1147 + — 3:29 PM 1148 + notification overload it the biggest problem all electronic communicaitons have 1149 + i only have capacity for bluesky 1150 + the discourse forum is hard 1151 + geesawra — 3:30 PM 1152 + this is protocol level, it wont be necessarily showed to the user 1153 + byarielm — 3:30 PM 1154 + all notifications are muted forever everywhere 🙂 1155 + psingletary.com 1156 + 1157 + — 3:30 PM 1158 + I'm on discord under protest, once i get all th creators i support off of them i'm out 1159 + I'm in 100 and have to rotate 1160 + sorryforpartyrock.ing 1161 + 1162 + — 3:30 PM 1163 + there's only one i'm active in 1164 + geesawra — 3:30 PM 1165 + @thisismissem.social you should bridge everything to matrix 👀 1166 + byarielm — 3:30 PM 1167 + i only have notifs on for tiny groups with low-frequency messages. 1168 + alexwykoff — 3:31 PM 1169 + doll made an irc that uses atproto auth 1170 + Jack Valinsky — 3:31 PM 1171 + zulip feels very academic for me 1172 + psingletary.com 1173 + 1174 + — 3:31 PM 1175 + i don;t think i can tell you how much i want roomy to succeed 1176 + byarielm — 3:31 PM 1177 + learning about discord folders ❤️ 1178 + Image 1179 + geesawra — 3:31 PM 1180 + LMAO shots fired to matrix 1181 + byarielm — 3:31 PM 1182 + the atproto folder takes up the whole damn sidebar lmao 1183 + geesawra — 3:31 PM 1184 + working on it 1185 + Jack Valinsky — 3:32 PM 1186 + I'm reminded of that Beeper project + matric bridges 1187 + same.supply — 3:32 PM 1188 + roomy is a discourse replacement akchually 1189 + (this is not an official statement) 1190 + sorryforpartyrock.ing 1191 + 1192 + — 3:32 PM 1193 + i feel like penny kinda puts me off a lil 1194 + lmao 1195 + alexwykoff — 3:32 PM 1196 + it's here https://github.com/dollspace-gay/concord 1197 + GitHub 1198 + GitHub - dollspace-gay/concord 1199 + Contribute to dollspace-gay/concord development by creating an account on GitHub. 1200 + Contribute to dollspace-gay/concord development by creating an account on GitHub. 1201 + geesawra — 3:33 PM 1202 + straight up fire fr fr 1203 + psingletary.com 1204 + 1205 + — 3:33 PM 1206 + i put all public atproto discord links in the AT Proto : Social Events resources page 1207 + psingletary.com 1208 + 1209 + — 3:33 PM 1210 + where did you get that from? or is this a joke? 1211 + michaelthatsit — 3:33 PM 1212 + excellent usecase 1213 + like the time limit on shorts in youtube 1214 + psingletary.com 1215 + 1216 + — 3:35 PM 1217 + this conversation has officially wandered all over 1218 + same.supply — 3:35 PM 1219 + half-joke... it's a long story 1220 + psingletary.com 1221 + 1222 + — 3:35 PM 1223 + thx for doing that @Bryan Guffey 1224 + michaelthatsit — 3:35 PM 1225 + I'm like super new to ATProto but I'm noticing bluesky handles OG a little differently? 1226 + geesawra — 3:35 PM 1227 + a podcast you can discourse with! 1228 + pdewey.com — 3:35 PM 1229 + lurkers rise up 1230 + michaelthatsit — 3:36 PM 1231 + Open graph 1232 + psingletary.com 1233 + 's poll Attending ATmosphereConf? has closed. — 3:36 PM 1234 + Virtual 1235 + Winning answer • 42% 1236 + 1237 + View Poll 1238 + sorryforpartyrock.ing 1239 + 1240 + — 3:36 PM 1241 + discord is weird 1242 + they have their own OG server for bluesky afaik 1243 + evan.jarrett.net 1244 + 1245 + — 3:36 PM 1246 + they have been working on open graph fixes lately 1247 + they serve 1k x 1k images 1248 + flo.bit — 3:37 PM 1249 + i'll also leave stage for now, so other people can talk 🙂 1250 + michaelthatsit — 3:37 PM 1251 + Oh no like I'm working on an semi-social fitness logger called fitsky.app, and I want them to be able to share their workouts with dynamically generated OG images 1252 + geesawra — 3:37 PM 1253 + soon (tm) 1254 + michaelthatsit — 3:37 PM 1255 + And it works on opengraph.dev but not bluesky 1256 + flo.bit — 3:37 PM 1257 + yeah bluesky og stuff is weird 1258 + tynanpurdy.com — 3:37 PM 1259 + Howdy 1260 + evan.jarrett.net 1261 + 1262 + — 3:37 PM 1263 + tangled has some, i have some for my project 1264 + flo.bit — 3:37 PM 1265 + depends on "solved" 😄 1266 + probably cache ^^ 1267 + geesawra — 3:38 PM 1268 + private data will enable so many strava replacements, i can't wait 1269 + michaelthatsit — 3:38 PM 1270 + this guy 1271 + https://ilo.so/bluesky-link-preview 1272 + ilo.so 1273 + Bluesky Link Previewer 1274 + Preview how your link will look in a Bluesky post. 1275 + Bluesky Link Previewer 1276 + sri.xyz — 3:39 PM 1277 + https://cardyb.bsky.app/v1/extract?url=https://atproto.com 1278 + sorryforpartyrock.ing 1279 + 1280 + — 3:39 PM 1281 + wait 1282 + i have a rewrite of cardyb 1283 + byarielm — 3:39 PM 1284 + @sharpie how do you (if you do) explain the atmosphere/atprotocol to folks who maybe aren't even on bsky? 1285 + michaelthatsit — 3:39 PM 1286 + Lol I noticed that. I thought claude was hallucinating 1287 + tynanpurdy.com — 3:39 PM 1288 + What did you do to cardy A 1289 + geesawra — 3:39 PM 1290 + lol 1291 + pdewey.com — 3:39 PM 1292 + The first time I saw the cardyb user agent in my logs for arabica I was really confused 1293 + sorryforpartyrock.ing 1294 + 1295 + — 3:39 PM 1296 + https://github.com/espeon/gizo 1297 + GitHub 1298 + GitHub - espeon/gizo: A link card generator service 1299 + A link card generator service. Contribute to espeon/gizo development by creating an account on GitHub. 1300 + GitHub - espeon/gizo: A link card generator service 1301 + Jack Valinsky — 3:39 PM 1302 + I don't have anything but just thoughts to throw into the aether: did we talk about admin uis for PDS servers (bailey made a thread) ? 1303 + 1304 + or thinking about atproto based package managers (atpkgs, fair.pm, etc) -> what about a model weight registry for ex: roost.tools to download a model for moderation and audit it 1305 + michaelthatsit — 3:39 PM 1306 + still waiting on cardy c-z 1307 + sharpie — 3:39 PM 1308 + what platforms are they on and what is their familiarity with technology in general 1309 + pdewey.com — 3:39 PM 1310 + yeah I can talk about it, Its my service 1311 + sorryforpartyrock.ing 1312 + 1313 + — 3:39 PM 1314 + coffee? 1315 + OH 1316 + yeah that's epic 1317 + pdewey.com 1318 + is now a speaker. — 3:39 PM 1319 + thisismissem.social — 3:40 PM 1320 + there'll hopefully be news some time soon on things here too 1321 + geesawra — 3:40 PM 1322 + aeropress recipes on atproto??? 1323 + byarielm — 3:40 PM 1324 + perf, thanks. so you usually start with questions not explaining, that right? 1325 + evan.jarrett.net 1326 + 1327 + — 3:40 PM 1328 + https://tangled.org/did:plc:chqc2ockzmyvlrasfb66x64a/arabica 1329 + Tangled 1330 + arabica.social/arabica 1331 + Coffee journaling on ATProto (alpha) 1332 + arabica.social/arabica 1333 + @quillmatiq.com — 3:40 PM 1334 + 1335 + evan.jarrett.net 1336 + 1337 + — 3:40 PM 1338 + https://alpha.arabica.social/ 1339 + Arabica 1340 + Home - Arabica 1341 + Track your coffee brewing journey. Built on AT Protocol, your data stays yours. 1342 + michaelthatsit — 3:40 PM 1343 + lol love it 1344 + geesawra — 3:40 PM 1345 + this is great 1346 + Jack Valinsky — 3:40 PM 1347 + https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/418 🤭 1348 + sharpie — 3:41 PM 1349 + yeah. to understand their familiarity levels and then choosing an explaination based on that. you need to know who you're talking to and how they understand technology. 1350 + n8 — 3:41 PM 1351 + that’s sweet! 1352 + psingletary.com 1353 + 1354 + — 3:41 PM 1355 + https://alpha.arabica.social/ 1356 + @taurean.bryant.land 1357 + is now a speaker. — 3:41 PM 1358 + tynanpurdy.com — 3:41 PM 1359 + My go to is to throw a blento on the root 1360 + sorryforpartyrock.ing 1361 + 1362 + — 3:41 PM 1363 + yeah i have the same thing with nyt.one 1364 + https://nyt.one/ 1365 + flo.bit — 3:41 PM 1366 + 😄 1367 + sorryforpartyrock.ing 1368 + 1369 + — 3:41 PM 1370 + inb4 "tanstack router app" embed 1371 + sharpie — 3:41 PM 1372 + shoutout to techs 1373 + tynanpurdy.com — 3:41 PM 1374 + Yoooo taurean 1375 + byarielm — 3:41 PM 1376 + thought so 🙂 would love to hear some different cases + what you'd say at some point! you are my comm inspo for atproto haha 1377 + geesawra — 3:41 PM 1378 + we need james hoffmann on this 1379 + Jack Valinsky — 3:42 PM 1380 + wafrn has some kind of ama/question mechanism so I mentioned questionable to them @thisismissem.social 1381 + Bryan Guffey 1382 + 1383 + — 3:42 PM 1384 + I'm gonna be that cat and set a weekly time for folks to come teach people atproto concepts 1385 + thisismissem.social — 3:42 PM 1386 + they know, I'm friendly with gabboman — they also know my plans beyond questionable.fyi 1387 + sharpie — 3:42 PM 1388 + this is like the time that someone posted about having username @ domain being their email too and i realized it was the tech 1389 + psingletary.com 1390 + 1391 + — 3:42 PM 1392 + not a coffee person, but fragrences is very interesting 1393 + @taurean.bryant.land — 3:42 PM 1394 + https://drydown.social/profile/taurean.bryant.land/house/3mcn34apccq2z 1395 + Drydown - Fragrance Reviews 1396 + Discover and track fragrances on Drydown. 1397 + Drydown - Fragrance Reviews 1398 + sorryforpartyrock.ing 1399 + 1400 + — 3:42 PM 1401 + i love drydown haha 1402 + has anyone checked out ouais' anki esque thing 1403 + tynanpurdy.com — 3:42 PM 1404 + Can the aromatic notes of a coffee review be the same lex as a fragrance review… 1405 + thisismissem.social — 3:43 PM 1406 + funny thing about mastodon handles: some folks think they can email the handle and nooope. 1407 + sorryforpartyrock.ing 1408 + 1409 + — 3:43 PM 1410 + *owais 1411 + wow 1412 + Jack Valinsky — 3:43 PM 1413 + if not email why email shaped :/ 1414 + thisismissem.social — 3:43 PM 1415 + because webfinger, tagging @blaine.bsky.social 1416 + sorryforpartyrock.ing 1417 + 1418 + — 3:44 PM 1419 + webbed finger 1420 + oh speaking of, i wonder how far that tailscale oauth sign in with bsky thing is going 1421 + Jack Valinsky — 3:44 PM 1422 + haha I vaguely knew that, and webfinger isn't even a part of the original AP spec (didn't define handle spec I think?) mastodon just did it b/c OStatus? 1423 + psingletary.com 1424 + 1425 + — 3:44 PM 1426 + GDIT these projects are already cards on semble 1427 + thisismissem.social — 3:45 PM 1428 + yeah, webfinger is a mastodon-ism which became defacto for the fediverse and the spec binding webfinger and activitypub was only written in the past 4 years 1429 + sharpie — 3:45 PM 1430 + this is actually super cool and i would love to talk about creator usecases @@taurean.bryant.land 1431 + blaine.bsky.social — 3:45 PM 1432 + funny thing about webfinger: google shipped support for it on gmail addresses in ~2009. The original intent was for it to work on email addresses / Thought experiment: maybe mastodon handles should be email addresses, too? 1433 + @taurean.bryant.land — 3:45 PM 1434 + would love to! 1435 + thisismissem.social — 3:45 PM 1436 + From 2024: https://swicg.github.io/activitypub-webfinger/ 1437 + psingletary.com 1438 + 1439 + — 3:45 PM 1440 + i'll get the scoop on @Hilary Baumann or @byarielm one of these days 1441 + byarielm — 3:46 PM 1442 + what's my scoop 1443 + byarielm — 3:46 PM 1444 + why scoop me 1445 + geesawra — 3:46 PM 1446 + are you ice cream 1447 + same.supply — 3:46 PM 1448 + YES 1449 + byarielm — 3:46 PM 1450 + no but i want some 1451 + psingletary.com 1452 + 1453 + — 3:46 PM 1454 + you and hilary finding sites before me 1455 + blaine.bsky.social — 3:46 PM 1456 + Webfinger didn't land in activitypub because standards-wonks-who-shall-not-be-named believe that you can't be "cool" unless you own your own domain name, and that personal identity should be only attached to web addresses. But that's a story for another time. 😉 1457 + sharpie — 3:46 PM 1458 + this becomes a convo about private data 1459 + sorryforpartyrock.ing 1460 + 1461 + — 3:46 PM 1462 + i think lexicon driven development is good but sometimes that's not possible 1463 + flo.bit — 3:46 PM 1464 + blento still doesnt have a lexicon 😅 1465 + sorryforpartyrock.ing 1466 + 1467 + — 3:47 PM 1468 + i think for e.g. providing secret keys 1469 + geesawra — 3:47 PM 1470 + every atproto convo eventually converges to private data 1471 + sorryforpartyrock.ing 1472 + 1473 + — 3:47 PM 1474 + it's not atproto but it's also fine 1475 + evan.jarrett.net 1476 + 1477 + — 3:47 PM 1478 + yeah i'm kinda in the middle of migrating my records and have to wait for everyone to slowly move over 1479 + Jack Valinsky — 3:47 PM 1480 + yeah there are weird semantics around the atproto design where techically you have an account on every possible service now and in the future in a sense depending on how people implement the client... instructions unclear follow Obama on tangled 1481 + psingletary.com 1482 + 1483 + — 3:47 PM 1484 + does it need one though? 1485 + sri.xyz — 3:47 PM 1486 + 🙁 1487 + evan.jarrett.net 1488 + 1489 + — 3:47 PM 1490 + called out oof 1491 + sorryforpartyrock.ing 1492 + 1493 + — 3:48 PM 1494 + thats so funny 1495 + @taurean.bryant.land — 3:48 PM 1496 + would love to show my latest fragrance and coffee reviews on blento btw 👀 1497 + psingletary.com 1498 + 1499 + — 3:48 PM 1500 + Not Everything Needs A Lexicon 1501 + sharpie — 3:48 PM 1502 + what is the fix for that? 1503 + Jack Valinsky — 3:48 PM 1504 + fig could just snipe people watching ufo feed 1505 + flo.bit — 3:48 PM 1506 + well ¯\_(ツ)_/¯ would probably be nice for other people to e.g. show blento cards somewhere else 1507 + sorryforpartyrock.ing 1508 + 1509 + — 3:48 PM 1510 + should i discontinue aktivi 1511 + hrmm 1512 + two minds about this et al 1513 + flo.bit — 3:49 PM 1514 + added to the list, but also feel free to submit a PR 🙂 https://github.com/flo-bit/blento 1515 + Jack Valinsky — 3:49 PM 1516 + @flo.bit tangled card for blento 🥺 👉 👈 1517 + *maybe I should write a pr 🧐 1518 + michaelthatsit — 3:50 PM 1519 + is anyone going to the ATProto conference? 1520 + geesawra — 3:50 PM 1521 + thanks yall for arranging this 1522 + @taurean.bryant.land — 3:50 PM 1523 + Thanks for hosting this as always! 1524 + same.supply 1525 + is now a speaker. — 3:50 PM 1526 + Bryan Guffey 1527 + is now a speaker. — 3:50 PM 1528 + Jack Valinsky — 3:50 PM 1529 + oh right 1530 + yeahhhh just a second 1531 + thisismissem.social — 3:50 PM 1532 + throwing you on the spot there 😂 1533 + psingletary.com 1534 + is now a speaker. — 3:50 PM 1535 + same.supply — 3:50 PM 1536 + https://bsky.app/profile/did:plc:2xau7wbgdq4phuou2ypwuen7/post/3l7esaih44s2s 1537 + 1538 + Tom Sherman (@tom.sherman.is) 1539 + Seriously mild take: ATProto web clients should serve a <link rel="alternate"> containing an at:// URI 1540 + 1541 + I've just opened a PR to do this on Frontpage and atproto-browser. I'd for other clients to follow along with the convention! 1542 + 1543 + github.com/likeandscrib... 1544 + 1545 + Add AT URIs as alternate links by tom-sherman · Pull Request #172 · likeandscribe/frontpage 1546 + I&#39;m trying to start a convention that allows tooling (eg. crawlers, browsers, extensions) to link the web representation of a record to it&#39;s canonical at:// URI. I see no better way to try ... 1547 + Image 1548 + 1549 + Bluesky•10/25/24, 7:09 PM 1550 + Jack Valinsky — 3:50 PM 1551 + I've never used this interface for discord lol 1552 + psingletary.com 1553 + 1554 + — 3:50 PM 1555 + @same.supply it's really hard to hear you 1556 + thisismissem.social — 3:51 PM 1557 + <link rel=alternate> 1558 + michaelthatsit — 3:51 PM 1559 + plz do 1560 + thisismissem.social — 3:51 PM 1561 + that's what's being talked about, because then a web crawler can discover the atprotocol record for that page 1562 + michaelthatsit — 3:51 PM 1563 + ya boi needs office hours lol 1564 + thisismissem.social — 3:51 PM 1565 + there's maybe another microformat-y way to do that too 1566 + thisismissem.social 1567 + is now a speaker. — 3:52 PM 1568 + sorryforpartyrock.ing 1569 + 1570 + — 3:52 PM 1571 + i think you know enough to do this tbh 1572 + more than me 1573 + byarielm — 3:52 PM 1574 + i'm da baby 1575 + geesawra — 3:52 PM 1576 + i love your songs and game consoles 1577 + psingletary.com 1578 + 1579 + — 3:53 PM 1580 + Let's speed round these statements so i can get on 1581 + byarielm — 3:53 PM 1582 + i thrive on chaos miss em lmao 1583 + byarielm — 3:53 PM 1584 + wat 1585 + thisismissem.social — 3:53 PM 1586 + Oh, specifically, the office hours I'd do would be public. i.e., I'm not giving 1:1 help 1587 + If you want 1:1 help, hire me 🙂 1588 + Bryan Guffey 1589 + 1590 + — 3:54 PM 1591 + haha i wish i had the MONEYYYY 1592 + thisismissem.social 1593 + is now a speaker. — 3:54 PM 1594 + thisismissem.social 1595 + is now a speaker. — 3:55 PM 1596 + michaelthatsit — 3:55 PM 1597 + "f*ck you, pay me" - Socrates 1598 + byarielm — 3:55 PM 1599 + is ozone the only option for moderation workflow on labelers rn btw? looks like skyware doesn't and idk if mary plans it for the atcute setup 1600 + n8 — 3:55 PM 1601 + thank you for showing up ❤️ 1602 + psingletary.com 1603 + 1604 + — 3:55 PM 1605 + @thisismissem.social streamt o stream place and invite people with smokesignal 1606 + evan.jarrett.net 1607 + 1608 + — 3:55 PM 1609 + https://github.com/haileyok/osprey-for-atproto 1610 + GitHub 1611 + GitHub - haileyok/osprey-for-atproto: A high-performance safety rul... 1612 + A high-performance safety rules engine for real-time event processing at scale - haileyok/osprey-for-atproto 1613 + GitHub - haileyok/osprey-for-atproto: A high-performance safety rul... 1614 + psingletary.com 1615 + 1616 + — 3:56 PM 1617 + eli regularly gets tons of drive by 1618 + Jack Valinsky — 3:56 PM 1619 + I can try to talk about it, I think mine and @thisismissem.social 's thing is short to talk about if there is time 1620 + geesawra — 3:57 PM 1621 + eternal optimism by patrick 1622 + thisismissem.social — 3:57 PM 1623 + you started it, I just nerd sniped you, lol 1624 + sharpie — 3:57 PM 1625 + :o 1626 + pdewey.com — 3:57 PM 1627 + 👀 1628 + sharpie — 3:57 PM 1629 + WHAT 1630 + HOW I GET IN THIS 1631 + @quillmatiq.com — 3:57 PM 1632 + love it 1633 + thisismissem.social — 3:58 PM 1634 + well, correction @Jack Valinsky you nerd sniped me so I nerd sniped you back 1635 + byarielm — 3:58 PM 1636 + so i shouldn't post the roomy link here? 1637 + cuz i was gonna 1638 + sharpie — 3:58 PM 1639 + @psingletary.com 👀 1640 + evan.jarrett.net 1641 + 1642 + — 3:58 PM 1643 + not our super secret roomy chat 🤫 1644 + sorryforpartyrock.ing 1645 + 1646 + — 3:58 PM 1647 + ok bye 1648 + Jack Valinsky 1649 + is now a speaker. — 3:58 PM 1650 + thisismissem.social 1651 + is now a speaker. — 3:59 PM 1652 + Jack Valinsky — 3:59 PM 1653 + I can't unmute 1654 + :/ 1655 + thisismissem.social 1656 + is now a speaker. — 3:59 PM 1657 + michaelthatsit — 3:59 PM 1658 + Honestly I'd love a youtube series on the ATProto just breaking down how it works. 1659 + @taurean.bryant.land — 3:59 PM 1660 + nailed it 1661 + 🙌 1662 + thisismissem.social — 3:59 PM 1663 + production requires budget 🙁 1664 + zeu — 3:59 PM 1665 + I JUST GOT HEWW 1666 + flo.bit — 3:59 PM 1667 + 🙌 1668 + pdewey.com — 3:59 PM 1669 + thanks for hosting again! 1670 + zeu — 3:59 PM 1671 + NOOOO 1672 + lmfao 1673 + geesawra — 4:00 PM 1674 + g2g to sleep 1675 + bye folks! 1676 + Bryan Guffey 1677 + 1678 + — 4:00 PM 1679 + or do we wanna go to voice chat with no stage? 1680 + Jack Valinsky 1681 + is now a speaker. — 4:00 PM 1682 + Bryan Guffey 1683 + 1684 + — 4:00 PM 1685 + OHHH 1686 + I have a LOT OF INFO FOR THTAT 1687 + Jack Valinsky — 4:00 PM 1688 + firefox :/ 1689 + byarielm — 4:00 PM 1690 + look we wanna hang and zeu is here now let us be 1691 + psingletary.com 1692 + 1693 + — 4:00 PM 1694 + Save it for next time the audience is alreayd kind of leaving 1695 + Jack Valinsky — 4:00 PM 1696 + yeah I just can't unmute 1697 + pdewey.com — 4:00 PM 1698 + also if anyone has feedback/suggestions for arabica feel free to shoot me a message on discord/bsky or file an issue 1699 + byarielm — 4:01 PM 1700 + huh 1701 + Mia (parakeet.at) 1702 + 1703 + — 4:02 PM 1704 + bi-directional nerdsniping 1705 + Jack Valinsky — 4:02 PM 1706 + I can't unmute 1707 + firefox bad 1708 + michaelthatsit — 4:02 PM 1709 + love this platform for that lol 1710 + Jack Valinsky — 4:03 PM 1711 + pds-operator 1712 + tynanpurdy.com — 4:03 PM 1713 + Is this gonna be the impetus for record versioning lol 1714 + Jack Valinsky — 4:03 PM 1715 + ⁠pds-operators⁠ 1716 + tynanpurdy.com — 4:04 PM 1717 + And content licensing! 1718 + Bryan Guffey 1719 + 1720 + — 4:04 PM 1721 + coming to that too tynan 1722 + Jack Valinsky — 4:04 PM 1723 + there was debate about whether it should use site.standard or be strictly its own thing and I think b/c of stuff like versioning and tombstoning it should be its own thing 1724 + n8 — 4:05 PM 1725 + idk about other mod (patrick s) but i have to bounce at 4:15 central, just fyi 1726 + thisismissem.social — 4:05 PM 1727 + I think you'd have a standard.site for viewing but not for managing/publishing/accepting 1728 + Jack Valinsky — 4:06 PM 1729 + Forwarded 1730 + another sensible option i think is to use the CID of the record as rkey whenever you create it and then make links back when you update. that way you get a content addressed history of the document and you just have another mutable record link to the currently active version 1731 + #pds-operators • Friday 1732 + nelind had this insight too 1733 + the pds operator account signs it to so they have a record? 1734 + nichoth — 4:07 PM 1735 + sounds like legal challenge not code 1736 + Jack Valinsky — 4:07 PM 1737 + nick has done stuff on attestation 1738 + thisismissem.social — 4:07 PM 1739 + yeah, you can basically have the app sign the record that they write to your pds for the acceptance 1740 + nichoth — 4:08 PM 1741 + the attestation use case is a big opportunity imo 1742 + Jack Valinsky — 4:09 PM 1743 + idk if the word is "collection" but the the lexicon should have a <nsid>/region/policy 1744 + 1745 + sorry brain not lexiconing rn 1746 + my apologies Bryan what is your at handle in case I have questions about potential legal gotchas with this idea? thanks 1747 + Bryan Guffey 1748 + 1749 + — 4:10 PM 1750 + @chaosgreml.in 1751 + Jack Valinsky — 4:12 PM 1752 + yeah we need to make it simple and straightforward to be informed b/c we want some random student to host a project and not be scared b/c of regulations that they are doing it wrong 1753 + students are doing really cool stuff 1754 + yeah! that'd be cool 1755 + I will remember not to use firefox the next time for this hangout 😛 1756 + flo.bit — 4:14 PM 1757 + bye 🙂 1758 + michaelthatsit — 4:15 PM 1759 + enjoy! 1760 + @taurean.bryant.land — 4:15 PM 1761 + heading out, thanks yall! 1762 + Jack Valinsky — 4:15 PM 1763 + thanks for this 1764 + byarielm — 4:15 PM 1765 + yum 1766 + oh no 1767 + michaelthatsit — 4:15 PM 1768 + enjoy more? 1769 + byarielm — 4:15 PM 1770 + byeee all! 1771 + tynanpurdy.com — 4:15 PM 1772 + Thanks yall! 1773 + byarielm — 4:15 PM 1774 + i'ma go eat too sry bryan 1775 + tynanpurdy.com — 4:15 PM 1776 + Have a good Sunday Bryan 1777 + </discord chat>