fig (aka:[phil])'s Avatar

fig (aka:[phil])

@bad-example.com

art and transistors, they/them plant-mom building community infra 🌌 constellation.microcosm.blue πŸš’ relay.fire.hose.cam jetstream.fire.hose.cam πŸ›Έ UFOs.microcosm.blue πŸŽ‡ spacedust.microcosm.blue πŸ“š plc.wtf πŸ›°οΈ slingshot.microcosm.blue

2,504
Followers
495
Following
4,050
Posts
18.12.2023
Joined
Posts Following

Latest posts by fig (aka:[phil]) @bad-example.com

cute!!

07.03.2026 03:11 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

i really gotta fix that date counter!!!

it goes back to end of jan 2025, bit over 13mo

(full backfill cominggggggg but still a lot of steps to get there)

07.03.2026 02:48 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

stickers? no i’ll be bringing googly eyes to atmosphereconf

07.03.2026 02:30 πŸ‘ 23 πŸ” 1 πŸ’¬ 2 πŸ“Œ 0

(got the pi before the last ram-driven price hike, but only just got a 2TB$$$ NVMe to go with it. constellation index is over 500GB!

i now have hardware backups on hand for most critical components, which also means benchmarking hw. no backup modem but i’m looking at a second ISP hookup πŸ‘€)

07.03.2026 02:21 πŸ‘ 7 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
a raspberry pi 5 with active cooling and two different sized googly eyes on a wooden table next to the packaging from an β€œnvme BASE” from pimoroni. you can see screws and the pcie cable from the base installed underneath.

a raspberry pi 5 with active cooling and two different sized googly eyes on a wooden table next to the packaging from an β€œnvme BASE” from pimoroni. you can see screws and the pcie cable from the base installed underneath.

newest member

(at current dram and ssd prices this hardware approach has become actually very expensive 😭)

07.03.2026 02:15 πŸ‘ 55 πŸ” 2 πŸ’¬ 4 πŸ“Œ 0
[cropped] created their first [at://app.bsky.feed.post]!
[cropped] removed their last [at://app.bsky.graph.list, at://app.bsky.graph.listitem]
[cropped] created their first [at://app.bsky.feed.repost]!

[cropped] created their first [at://app.bsky.feed.post]! [cropped] removed their last [at://app.bsky.graph.list, at://app.bsky.graph.listitem] [cropped] created their first [at://app.bsky.feed.repost]!

buuuut it's doing the thing!?!!

*statelessly* detecting peoples first and last records per-collection just from firehose commits muah ha ha

06.03.2026 22:54 πŸ‘ 7 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

every time i check one thing off for finishing lightrail, i also add three more todos.

(realistically this is going fast but ughhh)

06.03.2026 22:17 πŸ‘ 9 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
minimalist ascii art of a light rail vehicle viewed head-on. original text a few messages up thread.

it says
"LIGHT
RAIL"

in the front windshield, and feels like it's really bearing down on you.

minimalist ascii art of a light rail vehicle viewed head-on. original text a few messages up thread. it says "LIGHT RAIL" in the front windshield, and feels like it's really bearing down on you.

oh wow these are both so nice!!

for posterity, Jay's rendered like this for me in monospace

roland thank you for putting the raw ascii in alt text, i'm going to use that. (might need to crop the width a bit). can i credit you on that page?

06.03.2026 19:43 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

yes!

06.03.2026 18:19 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

i sometimes feel like being in one of the "fine" groups makes people over-confident in how much the whole thing can survive The Event. that growing subsets can live past it is real and cool (and often totally discounted by critics), but yeah.

06.03.2026 16:58 πŸ‘ 5 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

yeah absolutely

06.03.2026 16:55 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

i always feel like there are three distinct differently impacted groups in this conversation

1. normie bluesky users: they will get mostly screwed
2. atproto and community microblogers: we'll be fine
3. other apps: honestly, fine

shrinking the "mostly" for group 1 is the long and hard work

06.03.2026 16:53 πŸ‘ 7 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0
A picture of the LA Metro light rail leaving Los Angeles. Note the 3 trains all coupled together

A picture of the LA Metro light rail leaving Los Angeles. Note the 3 trains all coupled together

A picture of the LA Metro light rail on a bridge

A picture of the LA Metro light rail on a bridge

A picture of the LA Metro light rail crossing a street overhead

A picture of the LA Metro light rail crossing a street overhead

so good news and bad news.

bad news: that isn't light rail
good news: it's CLOSE to being light rail

light rail is made up of these little 2-unit trains, all chained together. they look like your locomotive in the image, sliced in half. they don't carry other cars, just themselves

05.03.2026 08:46 πŸ‘ 5 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0

ohhh or did you mean listRepos

06.03.2026 02:22 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

oh yeah and getRepo as a redirect like relays do? should be easy enough! (i expect most times it’ll be beside/behind a relay that would handle that endpoint anyway)

06.03.2026 02:21 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

right yep. well enumerating all accounts is just key scan on the accounts prefix so no prob :)

still thinking through inactive lifecycle: on reactivation of a matching-but-excluded account, is the expectation that apps will catch it on a rescan, like tap? (esp for slow collections like profiles)

06.03.2026 02:19 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

i haven’t decided yet whether to do that just by parallel iterating+merging dids from every matching collection, or by additional indexes per segment prefix.

(multi-collection version will parallel merge anyway)

06.03.2026 02:09 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

inactive like deactivated status?

i think both doable. deactivated state is in there already so it can filter on the way out with a point lookup per id. or drop the account from the index and resync on reactivate.

wildcard i really want to do! or at least nsid prefix by segment

06.03.2026 02:04 πŸ‘ 1 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0
MemCar in repo_stream::mem - Rust A fully loaded in-memory CAR file, ready for MST walking.

very rough still but getting there. we've got CAR-slice helpers for walking a whole repo, a prefix, an explicit range, or a single key, *proving the slice completeness* in the processsss

docs.rs/repo-stream/...

05.03.2026 21:38 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

i think it levels off at 2.1x because the initial CAR loading and validation (all of which can't be skipped) ends up dominating.

but anything that speeds up big working with big CARs is a compounding win for backfill, because releasing resources faster means more available concurrency.

05.03.2026 15:37 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
repo collection set extraction from CAR (table)

results summary: empty and tiny CARs don't benefit using seek but aren't slower, but then there's a big win at the `little` (279K) CAR bench (1.9x speedup) and an even bigger 3.1x speedup for midsize (5.0M). then large and huge CARs (149 and 449M respectively) level off slightly lower again at 2.1x speedup. (i guess the initial load and validation times start to dominate)

full table in ascii:

 bench  | size |  naive  | seeking | speedup
--------+------+---------+---------+---------
 empty  | 329  | 630ns   | 629ns   | 1.0x
 tiny   | 3.4K | 5.18us  | 5.04us  | 1.0x
 little | 279K | 173us   | 91.5us  | 1.9x
 midsize| 5.0M | 6.94ms  | 2.23ms  | 3.1x
 large  | 149M | 437ms   | 208ms   | 2.1x
 huge   | 449M | 1.33s   | 626ms   | 2.1x

repo collection set extraction from CAR (table) results summary: empty and tiny CARs don't benefit using seek but aren't slower, but then there's a big win at the `little` (279K) CAR bench (1.9x speedup) and an even bigger 3.1x speedup for midsize (5.0M). then large and huge CARs (149 and 449M respectively) level off slightly lower again at 2.1x speedup. (i guess the initial load and validation times start to dominate) full table in ascii: bench | size | naive | seeking | speedup --------+------+---------+---------+--------- empty | 329 | 630ns | 629ns | 1.0x tiny | 3.4K | 5.18us | 5.04us | 1.0x little | 279K | 173us | 91.5us | 1.9x midsize| 5.0M | 6.94ms | 2.23ms | 3.1x large | 149M | 437ms | 208ms | 2.1x huge | 449M | 1.33s | 626ms | 2.1x

richer mst-walking apis are coming in the next repo-stream release, like `.seek(key)` for skipping parts of the tree you don't need!

05.03.2026 15:33 πŸ‘ 21 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

<clicks in to profile>: yep, checks out

(thanks!)

04.03.2026 22:55 πŸ‘ 4 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0
ascii art train thing that says "Lightrail": an engine pulling one train car. (is this light rail train?)

"this is an atproto backfill-by-collection assister.

available endpoints:

  - /xrpc/com.atproto.sync.listReposByCollection
  - /xrpc/com.atproto.sync.getRepoStatus

source: https://tangled.org/microcosm.blue/lightrail

ascii art train thing that says "Lightrail": an engine pulling one train car. (is this light rail train?) "this is an atproto backfill-by-collection assister. available endpoints: - /xrpc/com.atproto.sync.listReposByCollection - /xrpc/com.atproto.sync.getRepoStatus source: https://tangled.org/microcosm.blue/lightrail

progress

(if you reply tell me this depicted rail is not light, you are obligated to include alternate more-correct ascii art in your response thank you)

04.03.2026 21:59 πŸ‘ 90 πŸ” 2 πŸ’¬ 5 πŸ“Œ 1

oh yes finally!

03.03.2026 23:50 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
proposals/0013-service-auth-refs at main Β· bluesky-social/proposals Bluesky proposal discussions. Contribute to bluesky-social/proposals development by creating an account on GitHub.

XRPC requests between atproto servers are authenticated using JWTs. There are some inconsistencies in how OAuth permissions, PDS proxy headers, and JWTs all represent the "audience" of these tokens.

This proposal gives background and describes a rough solution.

Looking for rapid feedback!

03.03.2026 23:01 πŸ‘ 108 πŸ” 20 πŸ’¬ 4 πŸ“Œ 2
Post image

finally completed the dashboard redesign to not necessitate anymore scrolling, let me know if things are broken or look weird. I love compact design

03.03.2026 22:24 πŸ‘ 28 πŸ” 4 πŸ’¬ 3 πŸ“Œ 0

hell yeah you're up there, not quite beating the top-content-from-humans repos i think

03.03.2026 19:37 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

i'm considering giving in and using its `collections` array for lightrail backfill (like collectiondir does), but that is unfortunately sketchy

03.03.2026 16:14 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

com.atproto.repo.describeRepo doesn't have the repo's `rev` :sob:

03.03.2026 16:11 πŸ‘ 19 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0
diagram: two large clouds with a thin "compressed firehose" arrow joining them

the top cloud (blue, "the cloud") contains many PDSs with arrows toward a "relay" box labelled "subscribeRepos", which has a thick arrow out to "entangler".

the "compressed firehose" arrow joining the clouds starts from "the cloud"'s entangler box, and lands in the second large "microcosm HQ" cloud on another box labelled "entangler"

microcosm HQ's entangler then has a thick arrow to a large "rainbow" box, with thick arrows flowing out to "constellation", "UFOs", and "spacedust" boxes

diagram: two large clouds with a thin "compressed firehose" arrow joining them the top cloud (blue, "the cloud") contains many PDSs with arrows toward a "relay" box labelled "subscribeRepos", which has a thick arrow out to "entangler". the "compressed firehose" arrow joining the clouds starts from "the cloud"'s entangler box, and lands in the second large "microcosm HQ" cloud on another box labelled "entangler" microcosm HQ's entangler then has a thick arrow to a large "rainbow" box, with thick arrows flowing out to "constellation", "UFOs", and "spacedust" boxes

i think there's a mostly-unexplored design space here between massive client fan-out and point-to-point links.

eg. i want to run my own relay, but not from home, and ideally not with the full weight of multiple full subscribeRepos coming into my home.

03.03.2026 15:36 πŸ‘ 13 πŸ” 3 πŸ’¬ 0 πŸ“Œ 0