🐰 chee cherries quiet party

entries tagged “weekly”

thirty of two thousand and twenty five

Something I’ve learned since switching my site from Wordpress to Eleventy and then Astro: If the system feels light, posts feel heavy. If the system feels heavy, posts feel light. Wordpress is heavy, a big dynamic machine. But that meant that an individual post felt like small beans. Nothing would really change; there’d be a new post. There’d be a few cache misses. Any pages (like the home, or feed, or category lists) would be regenerated on the fly. But any page that wasn’t affected would stay as it was. I don’t want to write little microposts anymore, like I did every day on my Wordpress blog. Because doing that will kick off a whole build generating all the HTML for every page, whether they get hit or not. That’s faster for the end user who hits an uncached page for the first time. But it feels so heavy. The time, the build, they weigh on me. To preview a wordpress post, or share a draft in context, I pressed “preview” or shared a link. With Astro I have to run a local Vite dev server. And do a git branch preview build.

I think the insight is right: there are things about blogging platforms that are not as nice as having local files (version control, portability, use any writing tool you want). And so I chose to replace the system with static files, which have those properties. But what they don’t have, is all the properties of a dynamic system. In retrospect this has been a less rewarding path than pulling those file properties up dynamicspace.

I’d like a blogging platform where every post is like an individual web app, contained in a cute little box, each with its own state. Maybe they should be a little guy with a shadowdom and their own stylesheet. <blog-post automergeURL="automerge://galaxy.observer/a2bZz3c4D5e6f7g8h9JK10mN11P#head/html" slug="/hello"></blog-post>.


Hey let me ask you a question… when you said i made you feel like the only person on Earth… did you mean, like, terrified and alone?


this week i’ve been enjoying the two builders out my window talking in thick souf east landan accents about their favourite episodes of only fools and horses. absolute heaven.

HE FINKS YOU LOOKED LIKE LEE ARVEY OSWALD MATE (uproarious laughter) THAT’S MY TOPS, MATE. TOPS FOR ME MATE

going back and forth on what is TOPS for them mate, and what is TOPS for me mate changes each time. i hope they come back on monday and do the rest of the dagenham dialogues.

“THAT’LL DO, DONKEY. THAT’LL DO. What a film.”


I can’t remember a time when I had more fun, or felt more at home or happier, than standing on that door outside the Future of Coding event saying hello to people and pointing them upstairs.

I’ve felt on the verge of tears for a couple weeks now. I’m one “you good?” away from balling all ugly and wet in public.

but i went to the Future of Coding event, and i helped out, and i said WELCOME! and i said second floor and i said lu and max will scan your qr code when you get up there, so that people would take their phones out on the way upstairs, and every time they did i felt a tiny little alleviation in the overall global background noise. And everyone was so nice and so pretty and nice. And my friends came, and it was so nice to see them, and they were so nice and so pretty and nice.

And afterwards I stood outside in the open air of Old Street chatting with Dr Basman until midnight about alchemy and execution and reactivity and javascript (which is to say, about substrates). And now I have so much homework. And I cannot believe that i must wake up and think about things that aren’t this.


Do you ever experience the sensation that you’re in a sinking boat. there are hundreds of little holes in the hull. water is gushing in. you have sponge, board, bonding, epoxy, polymat. a veritable boat hull repair kit, tried and true, in a box labeled “boat hull repair kit”. yet you and the crew are just standing there, water up to your ankles, looking for the hole that’s shaped like chatgpt.


I don’t wanna boast, but my phone is in a mesh right now. My phone is a NODE.

EOT 14:14:14 UTC

Met up with grjte in a pub to be the missing node in a 3 node mesh. A large bear also participated. It was v good.


I can feel something, in the air, in London, in the computer. Like all these disparate webs weaving through the air are being blown and spun, spinning winding twirling together together. Like we’re on a precipice. Do you feel that too? Like it’s going to burst?


And it seems that it would be helpful to capture whatever it is that separates “local-first” from “sync”… and all the not local-first stuff that comes along with it when you do that. Whatever it is that makes “local first” an incantation that can be used to summon the world’s best grjtes and seph gentles and orion reeds and whatnot into a single room. It feels, to me at least, that it would be useful to have a term other than “ink & switch” to conjure those extras with. Berlin Local-First and California Local-First aren’t enough because those only distinguish who or what you’re centering in Local-First. There’s more to it than that.

Maybe this is only my skewed perspective due to my low reading comprehension skills, but it seems like “malleable software” and “local-first” (maybe also “substrate”? still struggling to understand that word) are different technological (and prescriptive) pathways to make “part of the computer you don’t own” vanishingly small. Make everything that the programmer was able to do something that the user can do.

Perhaps i need to get hold of a building, an office, a studio. 24/7 access in central London where people can turn up and do strange things with the computer. And on the door i will paint “USERLAND” in blue and yellow.


ps: sorry post is late again, very busy weekend with the whiteboard and stomping around in circles biting my nails and muttering crazy sounding things like “javascript is real, typescript is fake, surfaces are real, views are imaginary — can i make typescript real? — what if it returns an element. what if it IS an element?”.

pps: i will not let them take my sparkles, i will not let them take my vibes,

end of transmission

twtw5/twtw9

There was a telephone call this week, that started out planning a trip together and ended maybe we’ll never talk to each other again. Well, what’s going on with my gals and in some cases boys? Do you ever lie to yourself? The biggest lie I tell myself is “I’ll remember this”. Or maybe it’s “i don’t care”. Remember that time a dog got into the school? Damn. I’d love a day like that again. The word “astrobleme” still makes my heart skip a beat. Jennifer imagined me beside her on the porch while she back and forth in a rocking chair. I spent the weekend, and I spent some of the evenings too. There was one of the evenings I went out to the bar near the Financial Times office to say hello to some people I used to work with at the Financial Times. It was nice to see them. I think I was annoying but I’m really so very not used to socializing with people who aren’t the computer at the moment. There were a lot of times this week when I wanted to drink tequila but none of them were the time I was at the bar. During the evenings I have been working on Littlebook 3.0. Or, 1, as the case may be. I’ve tried a few different systems for Littlebook3 so far. The first one I tried, (the pic last week), was very much a proof of concept. It was nice, but very rough and I need it to work in a web browser too. The second thing I tried was esoteric and fun, everything in pure js with no build step. Runtime reflection by parsing function.toString() with acorn. Grabbing the place lb.defineCommand() was called from by inspecting (new Error).stack. Doc strings inside the function, like lisp and python, by including a template string as the first line in the function. That was converted on the fly to markdown, and displayed together helpfully (“xyz is an interactive command defined at xyz.js:10:2” then the doc string) just like emacs. Once i started writing with it, i learned that it would feel as though i were operating the computer through a big pool of honey. All heavy, all sticky, all weighed down and slow. The third attempt seems very promising. It’s kind of crazy, you should see my whiteboard. But I think it will be very cool. It took me all weekend to get it working, but I was able to edit the text editor using itself tonight before bed and that’s how you know you’re living. The part I was building this weekend is the bootstrapping system (which i call bookstrap, or littlebootstraps). You see it’s an important design goal that you should be able to completely change the editor if you want, you need access to the code that powers it and the power to change it. That’s in addition to making an explorable system that teaches you while you learn it and change it. Some more rewrites are needed there, and more prototyping (building more custom code in it so i can see how it feels, and improving how it feels over time). Here’s how the bootstrapping works:

  1. You load up Littlebook (in the browser, or the one on your computer)
  2. bookstrap kicks in and detects your “native file system” — that’s opfs:// on the web version and file:// when you’re using Littlebook Desktop
  3. bookstrap creates a library for each of the local filesystem protocols you have available
  4. The install phase grabs all the source code and puts it somewhere you can change it — on the web it puts it in opfs:///littlebook/system/, and on desktop it puts it in ~/.local/share/littlebook/
  5. The install phase makes you a user directory (opfs:///littlebook/user, ~/.config/littlebook/)
  6. The User/early-init.js script is executed (as a non-esm script)
  7. The install phase passes off to the bundleworker, which creates an esbuild worker
  8. The bundleworker is set up to be able to resolve imports in your opfs:/// or file:/// system, using the fs api that bookstraps prepared. As well as importmaps.
  9. The bundleworker loads System/entrypoint.ts, compiles it, bundles it, evals it.
  10. The runtime system initializes the core editor things: events, surfaces, surface layers, views, protocol handlers and their defaults
  11. The system then dynamically imports your User/init.ts file where you can add new events, surfaces, surface layers, protocol handlers and views

I believe that this is a powerful enough system to build an even more powerful system with. All the steps before bundleworker (including early-init.js) are executed as regular scripts, so they can even help build the importmap. Everything about the system (apart from bookstrap and bundleworker) is replaceable, it’s all in the hands of the user.

The “grabs all the source code” from step 4 is entertaining. On desktop mode it’s pretty normal, the source code is embedded in the .app and it’s extracted out to your local share dir. On the web, it’s slightly sillier. The opfs worker fetches a file called /system.json which contains a virtual file tree of the entire system, and it creates a file in opfs for each entry. Surprisingly that takes only about 100ms to do. My plan for the reflection is to analyze the sourcemaps generated by esbuild (they’re made available to the user too), and combine that with some of the error parsing code i threw away from attempt 2 (wednesday). The settings & commands system is important for being able to build UIs and electric help. I’ll be reading my emacs manual.

I have to go.