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.
I suppose it helps with mitigating seasonal depression, but I do miss not getting stunlocked every morning...
Pickigus packagus, your registry is full of packages
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.
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.
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:
Yeah, oof. Sample your data correctly, folks. In Seb's words:
the lesson is that uniformally sampling from nonuniform data results in nonuniform data
Cistern lives!
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.
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!
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.
Client-side server-side
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.
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.
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.
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.
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.
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!