{
"path": "/3m4ielzb6sk2l",
"site": "at://did:plc:xg2vq45muivyy3xwatcehspu/site.standard.publication/3m3zpxhfl3c2s",
"$type": "site.standard.document",
"title": "Dev Log 5: 2025-10-31",
"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": "This is neat! "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreidonasl5dkha3m2gy3tybfw76ywaujfpnsmrf3vfir3fzrz2srmti"
},
"mimeType": "image/png",
"size": 77171
},
"aspectRatio": {
"width": 1532,
"height": 414
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Yesterday"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I missed writing one of these yesterday."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [
{
"index": {
"byteEnd": 12,
"byteStart": 8
},
"features": [
{
"uri": "https://tangled.org/@desertthunder.dev/lithos",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "Lithos (link)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 185,
"byteStart": 179
},
"features": [
{
"uri": "https://github.com/boltdb/bolt",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "Spending time on BlueSky and working on a type checker has reignited my desire to use more functional languages and paradigms, so I started a toy project where I try to replicate BoltDb in OCaml. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [
{
"index": {
"byteEnd": 14,
"byteStart": 10
},
"features": [
{
"uri": "https://github.com/stormlightlabs/SkyPanel",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 30,
"byteStart": 26
},
"features": [
{
"uri": "https://tangled.org/@desertthunder.dev/skycli",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "SkyPanel (link) / SkyCLI (link)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I made a few follower views in my BlueSky/ATProto CLI just to get some stats and unfollow inactive followers. There are a lot of people that jumped on the BlueSky bandwagon this time last year that don't seem to post anymore. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "The AT Protocol is really neat and I have a TON to learn about it."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [
{
"index": {
"byteEnd": 12,
"byteStart": 8
},
"features": [
{
"uri": "https://github.com/stormlightlabs/beacon",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "Beacon (link)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I had a ton of fun with this project yesterday. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "In order to setup workspace level completions, I implemented fuzzy matching & ranking: "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.unorderedList",
"children": [
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Matching & String Similarity: Levenshtein Distance, Sorensen Dice Coefficient, and (unused) a simple prefix matcher"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Ranking: Rocchio algorithm"
},
"children": []
}
]
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Today"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [],
"plaintext": "Beacon"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I have a lot of QA to do and to identify bugs in the LSP. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Observability is also lacking, so I'd like to at least add error & debug logging. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [],
"plaintext": "Personal Website"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 64,
"byteStart": 57
},
"features": [
{
"uri": "https://desertthunder.dev",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 174,
"byteStart": 163
},
"features": [
{
"uri": "https://github.com/cocopon/iceberg.vim",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "I've been working on a hand made refactor of my personal website! I think it looks pretty cool so far, albeit still a little rough around the edges. I'm using the iceberg.vim color scheme as inspiration."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreibzo234dcae2e2ll2zbatopfxf4l4xcqh4z3hyhbucevtx4bj4ctq"
},
"mimeType": "image/png",
"size": 450882
},
"aspectRatio": {
"width": 2098,
"height": 3366
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [
{
"index": {
"byteEnd": 11,
"byteStart": 7
},
"features": [
{
"uri": "https://github.com/stormlightlabs/volt",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "VoltX (link)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Back to this one! I mirrored this one on tangled.org and am admittedly a teeny bit nervous. Repos are very public on that platform but it's pretty cool!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "More concretely, I fixed some tests to release v0.5.1 (now on npm & jsr) which adds unified error handling & error boundaries. "
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreidnyd4tmdqqbwbddxzx4buh2boa43tlornca6t5ybh5b6zjpmxu2i",
"uri": "at://did:plc:xg2vq45muivyy3xwatcehspu/app.bsky.feed.post/3m4iem6b6wc2l",
"commit": {
"cid": "bafyreigpllbg2zbucpq7vnxohjj4dak7s2fpozkwgom7nsebpbsbrntgc4",
"rev": "3m4iem6dnen2q"
},
"validationStatus": "valid"
},
"description": "Happy Halloween!",
"publishedAt": "2025-10-31T11:26:44.618Z"
}