It's been a while since I posted one of these. This is more like a retrospective on the past week or so. I've been working on a lot of different stuff. Most recently some fun AT Protocol work. I'm learning a lot about conventions and how it operates. It's given me a new appreciation for what the community has been doing.
ATProto
PDSharp
This is heavily inspired by the OCaml PDS implementation on Tangled. I've decided to write this in the sibling/cousin language in F#.
There were concepts that I had to learn more deeply even though I'd worked through some of them in the Leaflet integration I added to Noteleaf earlier this year.
Most of what I learned revolved around CAR & CBOR, and MSTs.
CBOR is the data serialization format of the AT Protocol (DAG-CBOR is a strict subset of it).
Data objects are stored in CAR files (a header followed by data blocks, i.e. sequences of bytes)
Merkle Search Trees combine Merkle (hash) Trees with Binary Search trees for determinism, verifiability, and efficiency. This allows state to be reduced to a single root hash when storing data.
As far as implementing the actual server, its amazing how much the .NET ecosystem provides. For xrpc endpoints (NSID based routing), Giraffe has been really easy to use. DAG-CBOR can be encoded/decoded with writer and reader classes exposed by System.Formats.Cbor. The most complex portion of it was the MST implementation, but in general, I find recursive algorithms to have less cognitive overhead in functional languages than in others. Lower overhead or not, the Mst module is the largest in the codebase.
I have some idea about what I want the domain to look like for the reference PDS I make, but like most of my other projects, I don't have a VPS to host it (so I'll probably use my NUC) and experiment accordingly.
Malfestio
This project is a social learning app made with a SolidJS frontend & a Rust (Axum) backend. Solid's eslint plugin has been a godsend, otherwise I think the impulse to use its reactivity system in a React-style (and thus break reactivity) would take over.
The impetus to add this sort of app to the Atmosphere comes from my mom bugging me to make some educational app a few years ago, and me feeling a little bit of fomo scrolling through the Tangled feed and now my For You (which, btw, did you know this feed is hosted at some guy's house???. How cool is that?)
I'm aiming for a sort of Anki+-ish experience with it. There's lots of cool learning tools on the internet. My personal ecosystem is:
Articles & highlights stored in hypothes.is (chrome extension)
If you want to see this in action, Cornell's OCaml book/course website has hypothesis baked in.
Some Anki cards I make through a chrome extension when I find cool stuff to remember
Neovim for writing markdown & a silly organizational CLI for notes.
I store notes in machine specific folders with filenames like
topic1.topic2.topicN.yyyy.mm.dd.mdorjournal.yyyy.mm.dd.mdfor easy parsing and tree construction.The notes then land in my garden if I remember to put them there (the concepts I talked about above are waiting to be added).
Between all of those things and my desire to spread the gospel of Readability to everyone parsing articles with ChatGPT, I want to share all of these resources and build a community.
Without Svelte's animation and transition API, I've been using solid-motionone and I love it so much. Most things just fade or slide, but I have some floating cards on the home page. Took a long time but was fun.