{
  "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"
}