{
"path": "/3m5twyks37c2p",
"site": "at://did:plc:57od6g2ic3e3b3kauctjmo3k/site.standard.publication/3m5c6gbf36k2w",
"$type": "site.standard.document",
"title": "Week of 2025-11-10",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Late fall and winter are a strange time of year. Despite the shorter days, my house actually gets more light. We have a north-facing window that's blocked by a tree for most of the year, but when the leaves fall, there's nothing left to stop the indirect sun."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I suppose it helps with mitigating seasonal depression, but I do miss not getting stunlocked every morning..."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Pickigus packagus, your registry is full of packages"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 134,
"byteStart": 122
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "This last week has been a bit of a packaging frenzy. Not gifts—yet—just stuff I've pushed to JSR because they make it so damn easy. It's been a healing experience to me, in a way."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 52,
"byteStart": 24
},
"features": [
{
"uri": "https://jsr.io/@puregarlic/randimal",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 127,
"byteStart": 94
},
"features": [
{
"uri": "https://jsr.io/@cistern",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "I pushed up a fix to my random animal name generator, and I pushed up several versions of the packages I've written for Cistern. For Randimal, turns out I did random selection badly. Don't let anybody tell you can't implement randomness badly."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 30,
"byteStart": 25
},
"features": [
{
"uri": "https://julialang.org/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 79,
"byteStart": 65
},
"features": [
{
"uri": "https://plutojl.org/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "I have a friend learning Julia, so I asked him to put together a Pluto notebook to visualize just how bad it was. Here's the graph of how often animal names were selected over 1,000,000 samples:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreibk7es5dityrrxldkcyjyujxiqol7cw4fa2ljddiwhbsmfr2o6hza"
},
"mimeType": "image/png",
"size": 24540
},
"aspectRatio": {
"width": 500,
"height": 500
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Yeah, oof. Sample your data correctly, folks. In Seb's words:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.blockquote",
"facets": [],
"plaintext": "the lesson is that uniformally sampling from nonuniform data results in nonuniform data"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Cistern lives!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Like I mentioned, I got a bunch of Cistern packages pushed up—but more importantly, I got an end-to-end test passing! That means that the general concept works, and I'm pleasantly surprised to say the records aren't unreasonably large."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "The next step is to build practical implementations of consumers and producers. So far, I've written an MCP server to act as a consumer, which handles keypair generation and provides tools to your LLM to iterate your stored memos. Now, I just need a way to create memos!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 150,
"byteStart": 143
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "Since my primary use case for Cistern is for quick capture, that means that I need to write a mobile app. Yippee! I've dabbled—and I do mean dabbled—in React Native before, but this will be the first time I have full control of the project. Hopefully it'll be a good learning experience, because I've got a project idea a couple lines down the list that would work best as a React Native app."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Client-side server-side"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"src": "https://pfrazee.leaflet.pub/3m5hwua4sh22v",
"$type": "pub.leaflet.blocks.website",
"title": "The politics of purely client-side apps - Paul's Leaflets",
"description": "There's a surprisingly nuanced discussion in development about the political economy of clients and servers in the Atmosphere",
"previewImage": {
"$type": "blob",
"ref": {
"$link": "bafkreibldlquwh3lqht6mrkfa6fsakvaeybzgdltruku5zh24nzje6xvd4"
},
"mimeType": "image/png",
"size": 26827
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Paul Frazee put out a blog post about client-side vs server-side atproto apps this week, and it's been weighing on my mind. I understand I'm just another \"why not both?\" reply in the list of replies, but it's further convinced me there's a possibility of adding server-side processing whilst having clients talk directly to the PDS."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 150,
"byteStart": 133
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "That seems counter-intuitive, but it's motivated by the idea of having the PDS act not only as a store for a user's social data, but also as a gateway to a user's social services—and I think XRPC is uniquely positioned to make it work."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "At a high level, what I propose is to have the PDS proxy unknown XRPC requests to other AppView servers, using a lookup algorithm. I won't get too into it here, since these are weekly notes, but I'm writing up a standalone blog post to detail what that algorithm would look like, and the upsides/downsides of such."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I wouldn't say I have a complete picture of the ramifications of such a feature, as I'm not an atproto expert. However, it's something I've been mulling over for a few months now, and at the very least, maybe it could get some other folks thinking."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "If you're interested in what I'm talking about and I don't have the post out by next week, by all means poke me on Bluesky."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "At any rate, that was my week—and even a bit of the incoming one. Thanks for reading this far, and here's hoping you have a fantastic week as well!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreigoy2ob7gpkn6grv4bdnynfpehb5et27n5c27orr3chehpsq4o3gm",
"uri": "at://did:plc:57od6g2ic3e3b3kauctjmo3k/app.bsky.feed.post/3m5twypyldc2p",
"commit": {
"cid": "bafyreib3lfdktkzmk6otidjf7ug737cq7c2wy6ivwudkweaimprnk7ztja",
"rev": "3m5twyq3hiu2q"
},
"validationStatus": "valid"
},
"description": "Featuring packages, more Cistern and some XRPC thoughts",
"publishedAt": "2025-11-17T19:20:21.753Z"
}