{
"path": "/3m4tabv2zg22u",
"site": "at://did:plc:xg2vq45muivyy3xwatcehspu/site.standard.publication/3m3zpxhfl3c2s",
"$type": "site.standard.document",
"title": "Dev Log 8: 2025-11-04",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreia5mvw4gjrpk4xi2chr7cnah3rsja66g6xjs2arojcyjskamfgpwa"
},
"mimeType": "image/png",
"size": 528662
},
"aspectRatio": {
"width": 631,
"height": 512
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "What I Learned"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 229,
"byteStart": 222
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
},
{
"index": {
"byteEnd": 250,
"byteStart": 243
},
"features": [
{
"uri": "https://tangled.org/@desertthunder.dev/storm",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 283,
"byteStart": 273
},
"features": [
{
"uri": "https://github.com/changesets/changesets",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 295,
"byteStart": 286
},
"features": [
{
"uri": "https://keepachangelog.com/en/1.1.0/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "Yesterday I learned about diffing algorithms, specifically the Myers Difference algorithm used by unix diff. I even implemented it in Golang last night. It relates to this absurd Squirtle squad meme I've posted. I started another silly little project, this time to produce changesets & CHANGELOGs using a pure golang implementation of git porcelain."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "What I'm Working On"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [],
"plaintext": "Noteleaf"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 34,
"byteStart": 26
},
"features": [
{
"uri": "https://tangled.org/@desertthunder.dev/noteleaf",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "My focus today is to have noteleaf in a more usable state and even release it on homebrew (very ambitious given its state). I plan to start with an implementation of some of the heuristics/patterns that mozilla used in Readability.js to supplement the five-filter parser XPath parser rules noteleaf uses to extract article text. This should be pretty fun. I've enjoyed learning about named algorithms. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 127,
"byteStart": 110
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
}
],
"plaintext": "I've had this idea about producing weekly \"digests\" out of my leaflet posts so the goal today is to make sure noteleaf pub pull handles images & highlights, and is QA'd. I'll probably push a bunch of test posts today as well. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [],
"plaintext": "Wildcard"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 7,
"byteStart": 0
},
"features": [
{
"uri": "https://tangled.org/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "Tangled is a lot of fun! I like seeing what people star on the platform and what they start. It's wild what a single star on a git host will do for a person's self esteem. I'm the person in question and noteleaf has three stars! "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "What I've seen on tangled is two (among many) inspiring projects:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 10,
"byteStart": 3
},
"features": [
{
"uri": "https://tangled.org/@rocksky.app/rocksky",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "1. RockSky - an AT Proto music discovery platform"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 10,
"byteStart": 3
},
"features": [
{
"uri": "http://teal.fm/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 42,
"byteStart": 35
},
"features": [
{
"uri": "https://Last.fm",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "2. Teal.fm - the next evolution of Last.fm "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I want to make a similar-ish project that serves a similar purpose so I'll probably brainstorm about it a bit today. Music would be cool, as I made something to copy Spotify playlists to YouTube music a few weeks ago. I guess we'll see. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.horizontalRule"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Anyways, enjoy your Tuesday!"
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreig6lxhxlh44umj52fiojuv5lyhjuhorvep4tnb3liquzwpvolo7su",
"uri": "at://did:plc:xg2vq45muivyy3xwatcehspu/app.bsky.feed.post/3m4tacffsvs2u",
"commit": {
"cid": "bafyreig5yifituoasqytiqtcdeqlcgc6mkqegd7nkscvnalosc75z5ab2i",
"rev": "3m4tacfigsk2b"
},
"validationStatus": "valid"
},
"description": "It's possible I'm logging my insanity",
"publishedAt": "2025-11-04T19:08:46.832Z"
}