worm-blossom

worm-blossom

2026Week 3314 Aug

“sufficiently human”

A drawing of Aljoscha, fingers interlaced, with short hair!

This week I have a gazillion things to share; I blame the fact that I took a proper vacation for the first time in ages.

After planning for a long time, we stripped out all generics from our Rust Willow implementation. This makes things, well, less generic, but also provides a tangible and honestly rather necessary reduction in complexity. The pull request ends up reducing our lines-of-code by about 15000. We have published the new code as willow25 0.7.0, and we have deprecated the old, generic willow_data_model and meadowcap crates.

On the WTP side of things, I realised that there is little reason to keep the protocol asymmetric. If both peers are allowed to request entries, that might even be another way of removing RequestPut messages from the protocol. But this decision is sufficiently fundamental that I have postponed working on the WTP until Sammy has enough time on her hands again to have her say as well.

So instead I turned back to my media file format designs. I have now specified exactly how to encode samples. All that is left now are the boring details of format-specific metadata. With the exception of settling on the sample predictor for audio, all the hard work is now done.

And as part of that work, I nerd-sniped myself into thinking about the role of magic numbers in file systems. So I wrote down a half-specification half-rant document that overthinks the topic quite a bit. Turns out I harbour strong feelings about magic numbers (who doesn't, right? Right?), to the point where Emmy and Miaourt had to make me tone down the polemics. Thank you folks =S

Speaking of overthinking things in a good way, I'd like to draw attention to this sneakerweb PR about presenting a sneakerweb collection in a random order. Somehow that premise escalated into a discussion of social dynamics, non-uniform sampling, and time complexity of various algorithm choices. In a good way.

There's been some other progress on the sneakerweb as well, with Emmy spearheading the modestly-named WIP: fix-all-the-things pull request. At the end of that PR will be the release of version 1.2.0, bringing some new features and making the sneakerweb work in Chrome and Edge. Thank you, Emmy (and sorry that I have somewhat dropped out of the loop regarding the state of the sneakerweb implementation)!

~Aljoscha

The Invisible Library

I am happy to announce the grand opening of the Invisible Library.


A while ago, a friend gifted me a book on the condition that all readers should gift it on. These instructions were only verbal, but otherwise that's the idea of the invisible library. The same has certainly been done a bunch of times elsewhere too. At p2pbasel, Trav championed the practice of adding one's name to books one has read, and circulating them.


When I searched the web for Decentralised Library, the AI summary I didn't ask for told me all about how a decentralised library is a p2p system that uses blockchain, smart contracts, and ipfs. That... seems a bit excessive. I tried to figure out how to get away with as little technology as possible, and the end result was the invisible library.


Classic libraries are pull-based. The invisible library is push-based. Is it even accurate to call it a library? Especially considering that the basic operation is gifting rather than lending? Although, in some sense, the book always stays property of the invisible library, which is how libraries work after all. In any case, I quite like the connotations of the name.


At Dweb Camp, somebody told me they basically stopped discovering new music because algorithmic discovery is too repulsive a concept. That is an example of push-instead-of-pull going wrong. But with recommendations by friends, I feel less worried. Perhaps passing on a book from the invisible library should be accompanied by passing on a mixtape? And zines, of course. And a sneakerweb collection.


A pull-based distributed library would easily escalate into a more general resource-sharing framework. The p2panda crew is living proof, having gone from planning festivals to implementing Hoffnung3000, spinning off p2panda, and later coming full circle with Toolkitty.

With the invisible library, I deliberately wanted to keep the scope limited to books. The push-based nature helps with that. So does the gifting-instead-of-lending approach; books are almost uniquely suited to this — an unread book is so much more valuable than a book you already read.


The invisible library works just as well without the final sentence about adding other books by copying the instructions to new books. And I would like to think that it would grow even without that explicit nudge. But still, there is something fascinating about deliberately designing viral systems. Especially to spread practices that inherently challenge neoliberal assumptions.


When I merely lend out a book to a friend, I will eventually get it back and then I can lend it out again. With the invisible library in contrast, I relinquish the opportunity and responsibility for finding a new reader. I trust the receiver that they will do just as good a job finding the next reader as I would.


Unlike a traditional library, the invisible library emphasises adding annotations, drawings, or inserting extra pages. The readers leave something of themselves in the books, the books acquire personality. It is always nice to leave a trace, and it is always good to be reminded that you are not alone in a soulless world.

A drawing of Sammy, with a bandana and sunglasses on, and a swollen chin.

This week I’ve been with the kids. It’s summer holidays and a lot of their friends are away, so we’ve spent pretty much the whole week together. I didn’t even try to work, it wouldn’t have been any good.

The kids have a vague notion of what I do. It involves computers, they know that much. My older kid knows it involves ‘networks’. Mostly they know that I have a blog with fun music by Aljoscha, and comics which they like (their favourite is this one), and that my work means I bring home lots of stickers.

“I made this for you, mum!”

Several years ago I was a consultant working with commercial clients. After my son was born and started to become a little more conscious of the world, I started to get this sense of “I want my kid to think I’m cool” (I know, I’m doomed to failure, but I’m going to try). And I just couldn’t imagine my kids thinking it was cool that I made React apps for shoe stores (which back then was really pretty lucrative).

So I gave up doing the safe thing.

~sammy

We're listening to...

The Crash

This week, I collected all music I remember that I have deliberately listened to multiple times. In the process, I relistened to a bunch of material. And for some reason, this Finnish pop-rock track from 2001 stood out. Sami had shared this years ago on Scuttlebutt (this was the opener of the Consonance 3 (?) mixtape, I think). The good old days of beaker-browser-powered music piracy. And now all these songs are on youtube for free...

Meditations

After reading this interview with Milo Fitzpatrick of Vega Trails, I turned to the keyboard and recorded a series of somewhat minimalistic improvisations. Here is one of them:

The full set turned out surprisingly coherent, and I’ve added it to the sneakerweb site with my own music. This is a lot less stressful than uploading the whole thing on the www, which honestly sounds a bit scary to do.

In an odd sense, the full improvisations remind me of Bismuth’s The Slow Dying of the Great Barrier Reef (a recommendation from Emmy). But anyway, I should stop writing about music that I didn’t actually upload =S.

2026Week 3207 Aug

“the high-risk high-reward approach to improving the world”

A two panel comic.
    
In the first panel, Aljoscha is looking at Sammy in her bandana and shades, as she appears in every editorial. Aljoscha says "Sammy how long are you going to wear this bandana"

In the second panel, it is shown that Sammy was just a cutout and falls onto the desk, and Aljoscha says "oh my god".
A drawing of Aljoscha, fingers interlaced, with short hair!

The day before I headed to my vacation, I had an idea for a blog post that I started feverishly drafting. And now that I returned, the first thing I did was to complete it. It starts from a simple idea: what happens if you structure a programming language design around the broadcasting of information rather than calling methods on specific objects? This starting point has some interesting implications, from abandoning the notion of object identity, to spatial computing based on active broadcast rather than passive sensing. Read the full post on Broadcast-Based Programming here =).

I am slowly returning to more practical worm-blossom concerns now, in particular I want to start fleshing out the WTP into a full specification.

The WTP has three types of requests: RequestGet (analogous to HTTP GET), RequestGetMany (for requesting areas or 3d ranges), and RequestPut (analogoues to HTTP PUT). For a while, I was seriously considering to remove RequestPut, turning the WTP into a purely pull-based, read-only protocol. But while this has a certain elegance, it would force application developers to use a separate protocol (such as dripdrop) to write any (new) entries to a peer. In that world, you would either need to multiplex connections or to open multiple physical connections. And that would add complexity that outweighs the minimalism and orthogonality we would have achieved by trimming down the WTP.

With this decision made, here are the next steps toward a completed WTP:

  • Rework the start-of-connection message flow. The current definitions assume that the very first thing every client has to do is to prove that they have the secret for the public key they will use in their read capabilities. But RequestPut messages do not involve read capabilities at all, and I can easily imagine write-only clients that never work with any read capabilities. And such clients shouldn’t be forced to do useless signature computations, nor should they have to wait for a server challenge before they can start issuing requests.
  • Remove non-Bab usage. Partial verification is such a good feature that I do not want to encourage implementations that skip it. So no raw indexing into payloads by byte offset without Bab verification metadata.
  • Define the responses to GetMany requests.
  • Define encodings for everything. Surely this will be quick.
  • Sketch Rust types for all request and response types. Use this to guide the way the spec defines things; currently the spec describes many optional fields together with rules for when they have to be present based on the values of other fields, and this would be much nicer to define in terms of enums.
  • Pester Sammy to design a logotype.

And with that, we would have a completely specified and half-implemented WTP already. And we are already brainstorming applications we would like to implement that would be enabled by this.

~Aljoscha

A drawing of Sammy, with a bandana and sunglasses on, and a swollen chin.

Multiple people* have now confronted us about how confusing it is to navigate the family of worm-blossom websites. That there should be some kind of unified navigation between the worm-blossom, Willow, Bab, and sneakerweb sites. And being between projects, that seems like the perfect thing to do.

This is the kind of design work only I am qualified to do at worm-blossom.

We'll see when it gets done. It's summer holidays and I'm with the kids next week. Many things simmering but nothing to report.

* Christine, and Aljoscha's dad

~sammy

A friendly computer waving his mouse, beckoning you to come contribute!!!

Contributions Welcome: Recipes Wanted

After internal discussion, we at worm-blossom concluded that the underlying idea is sound nevertheless. So if anyone has tips for making satay sauce with fruit work, please reach out.

Also, I have no idea why Miaourt requested to pose this vital question in improvised song form, but who am I to deny them.

2026Week 3131 Jul

“I'm going to be deeply unhappy if it isn't pure”

A drawing of Aljoscha, fingers interlaced, with short hair!

I am still on vacation. But you know how zoologists determine whether an animal is kept in a way appropriate for its species by observing whether it retreats into passivity or whether it is active, exploratory, and playful? By that same metric, I am having a great vacation.

~Aljoscha

A drawing of Sammy, with a bandana and sunglasses on, and a swollen chin.

I'm not on vacation. But I'm not really on top of it yet. So this week, part eight of “Why is it called worm-blossom?”.

~sammy

Why is it called worm-blossom?!

← Previous instalment

why is this website called ‘worm-blossom’? In this series we will explain why in a concise manner.

Part 8: Twodays Crossing

“I made an app with earthstar! and the thing in the corner is internet time” beams Sammy, a new regular on the Earthstar discord.

Cinnamon eyes the number in the corner of the screen. It is @876, apparently.

The app is cute. It’s a little thing for microblogging in small groups. There are thoughtful touches, like icons generated from public keys to mitigate impersonation. The layout is tasteful. There’s UI for managing your workspaces. But that clock…

“I just wouldn’t want anyone to get confused and think this internet time thing is an Earthstar thing, you know? It's a bit corporate, I don't like the connection with Swatch.”

Sammy hadn’t really thought where this thing had come from. It was just something fun she remembered from her days playing Phantasy Star Online. But Cinnamon thinks about these kinds of things a lot, and Sammy admires that.

Sammy’s next Earthstar app, Twodays Crossing, is a roleplaying chatroom where messages gradually fade away over 48 hours. There are no timestamps on the messages, and the idea of a ‘low res timestamp’ comes up. Sammy asks what it’d be like if each fraction of the day “wouldn’t be a number but a symbol of some kind - a seed, a leaf, a tree, a shell”. Cinnamon seizes upon the idea, and pretty soon there’s a spreadsheet. This new system is built into Twodays Crossing.

At the beginning of 2021, Cinnamon has pulled out the system into its own Seasonal Clock app. There is a kind of golden era for the Earthstar community, people having fun building whimsical things together with an unassuming peer-to-peer core at the heart of it.

But by around the same time next year, things have changed a lot.

2026Week 3024 Jul

“we are firmly on the hedonic treadmill of development”

A drawing of Sammy, with a bandana and sunglasses on, and a swollen chin.

Readers, this week Aljoscha and I are on holiday. So I've done what I can this week to evoke the feeling of my holiday, a summer break in a family home full of old paintings and photographs of times long past. Aljoscha's buggered off for this week's update, and good for him.

Last week I promised a truckload of impressions from Dweb camp, but to be honest most of those remaining reflections are about presentations I saw and the speakers I met, and I would like to share accompanying recordings of them, and I'm waiting for those to become available.

Instead I've been enjoying the intellectual slack you get from being on holiday. First there is just collapse, catching of breath, recuperation. But then after a few days you pick up the thread again, start laying out little patterns on the floor, experimenting with interesting knots. And before you know it, you're 'just doing a little bit of research'.

The next phase of Willow will be about exploring what sits just above the extreme latency of the Willow Drop Format and sneakerweb. So: networked communication. My plan is to use the sneakerweb itself to find the limits of comfort, the point where you say "this is fun, but I really don't want to do this with USB keys anymore". I think it will be really nice to use our own tools to do research in this way (I think this is what people call “drinking your own champagne”).

~sammy

Sketchy ink studies of some paintings in frames.
Sketchy ink studies of some paintings in frames.

We're listening to...

CCFX

The One To Wait is the song I'll put on for driving with the windows rolled down on a too-hot day, the shadows of trees flickering over my face.

Sketchy ink studies of some paintings in frames.
guest articleA mushroom-person named Emmy, looking cheery, holding an ice-cream. This image is cropped from the piece Sammy created to introduce the Summer'26 Edition of worm-blossom.com.

I did threaten to return, didn't I? Well, with Sammy and Aljoscha taking some well-earned R&R (and, apparently, starting to percolate all kinds of fun new ideas!), now seemed like a grand time.

Around this time last year, I attended a lino printing workshop organised by the lovely Imidak. I've never had much of a talent for visual art. I'm learning, slowly, that a part of what I struggle with is hesitance, and reticence, and with tools like brushes and pens it felt like those tendencies were transferred onto the page directly. Digital tools made it feel too easy to undo, redo, start over.

Aside from being enamoured with the vaguely punky aesthetic that comes naturally with lino printing, I found myself taken with the confidence the medium... has? Inspires? Something in the way that once the lino has been cut, it doesn't matter how confidently you were holding the knife. The ink shows up uniformly, there is no turning back, and the reward is images which feel like they celebrate themselves exactly as they are.

Surely there's no more general lesson I should be taking away from this, right?

Shameless pontificating aside, perhaps I ought to re-introduce myself:

async fn an_update() {
    let mut person = Person::new();

    let dan = &mut person;
    dan.live().await;
    
    drop(dan);

    let emmy = &mut person;
    emmy.live().await;
}

Once again, it's wonderful to meet you.

~Emmy

Sketchy ink studies of some paintings in frames.

2026Week 2917 Jul

“surprisingly not broken”

A drawing of Sammy, with a bandana and sunglasses on, and a swollen chin.

Reader I am shattered. Knackered. Demolished. But home and with enough experiences for several weeks' worth of worm-blossom updates. So let’s start unloading the truck.

Sneakerweb was very much at the heart of worm-blossom’s presence at DWeb camp this year. We had a table at the ‘demo night market’, in which we had to beckon passers-by with nothing but our charms. The only problem: our neighbour was the inimitable Christine Lemmer-Webber of the Spritely Institute, who not only had prepared an incredible multi-screen, multimedia experience, but also has the overpowering voice of a lady who sells onions at the market. We did our humble best, I developed my patter (“you publish websites to your computer — no web hosts, no domain registrars, no credit cards!”) and spread the good word. And someone even came to our table with a .snk file.

We also held a sneakerweb workshop in which we installed the sneakerweb CLI, claimed some domains, exported some .snk files, and sent our participants off to the four corners of the earth with the seeds of the euro sneakerweb. I had that fantastic moment where you see how other people use something you made unprompted, and you go ohhhhh this is what this thing really is? We are learning a lot about the sneakerweb and folding it back in as quickly as we can. For starters: Aljoscha added a wonderful new getting started section to sneakerweb.org.

During the confererence Aljoscha would often walk by me with a USB key in hand, and say something like “and this one is going to New Zealand”. He was the star of coordinating the physical distribution of our corner of the sneakerweb, so thank you Aljoscha.

It feels like we’ve got a project that has a life of its own.

~sammy

A drawing of Aljoscha, fingers interlaced, with short hair!

Sneeeeeeeaaaaaaaakerwebbbbbbbb! At the very least, the sneakerwebsites we brought made it to Canada, the US, Argentina, New Zealand, Switzerland, the Netherlands, the UK, Denmark, and Germany.

Also, there have been quite a few contributors over in our repo and issue tracker. We are going to release a new version with a whole bunch of improvements fairly soon I hope. And if anyone out there has expertise in setting up cross-compilation for creating Windows and MacOS builds from a linux machine, please reach out!

DWeb Camp was a lot more than only sneakerweb distribution, of course. Meeting old and new friends, electro-acoustic jam sessions, stumbling into people who know what certificate transparency (my phd topic, I guess) is, interesting presentations and discussions, learning to set up a tent, overcoming crippling social anxiety, all that good stuff.

But, somewhat surprisingly to myself, the biggest effect camp had on me is a renewed sense of how political this space is. Not only the need for decentralised tools over centralised tools, but also the nuances within the decentralised world itself. I am interested in software that minimises hierarchy and power-over, and that is definitely not the case for all decentralised technology. Blockchains tend to reinforce the notion that some participants have more rights and value than others. AI tooling has its own baggage when it comes to autonomy and agency. Even something as innocent as requiring a working internet connection to function forces a dependency on users that could perhaps be avoided.

This has given me quite a bit of energy. Both to work on our projects, and to perhaps attempt to be more vocal about those values that — for me — make the differences between distributed systems, decentralised systems, and truly peer-to-peer systems. The introduction to p2p systems I started drafting a while ago is going to be far from a neutral technical document. But more on that when the time is right...

Finally, I want to thank Christine for her guest comic again, and also Dan and Miaourt for their respective editorials last week. A decade ago, I thought about how cool it was that so many webcomics ran guest updates when the authors took a break. And a decade later, I can finally confirm that being in a position to give the stage to friends is just as cool. Much love!

~Aljoscha

Shout-outs!

Maya started innocently enough by simply adding missing license files to the sneakerweb repo, but then she went ahead and implemented two really nice features: more robust URL resolution, and warning when publishing incomplete sites. Thank you =)

Lark implemented listing the domains of your collection, and improved the sneakerweb export command.

And they started an alternate-reality game based on the sneakerweb. This is so cool! Thank you both for contributing and for immediately bursting open the possibility space of what the sneakerweb can do.

2026Week 2810 Jul

“I see the vision and I want it”

A comic drawn by Christine Lemmer-Webber. Aljoscha, Sammy, and Christine stand together. Aljoscha says "but is she a bit... too enthusiastic?". Sammy says "It's nice to have a fan...". Christine says "HAVE YOU HEARD ABOUT WORM-BLOSSOM?"

Thank you to Christine Lemmer-Webber for contributing this week's comic.

guest articleA mushroom-person named Dan, looking cheery, holding an ice-cream. This image is cropped from the piece Sammy created to introduce the Summer'26 Edition of worm-blossom.com.

Lil ol' me, writing for worm-blossom.org? The internet's premier art-music-data-structures-adventure-webcomic-devblog? How did this happen? I should probably introduce myself. Hi! I'm Dan. Nice to meet you. I've been quietly hanging out here for a little while now, slowly morphing into the ufotofu sicko I was perhaps always meant to be.

DWeb Camp means Sammy and Aljoscha are away, and when they asked if I would like to contribute something here, I found there were too many things I wanted to write about. So, let me commit now to someday spilling some pixels about eldritch-spaghetti-Ufotofu, burnout, and the virtues of lino printing. Probably not all at once.

Fortunately, for now, we are spared my writing on these topics, because while Sammy and Aljoscha have been talking with their fellow campers about Willow and sneakerweb, I have spent this evening sharing our experiment in slow, communal, permissionless web publishing with friends at my local hackerspace.

I had expected to spend at most an hour and a half explaining and demonstrating sneakerweb, and having folks in attendance swap and collect .snk files from my own collection of sneakerwebsites.

The session instead ran for three hours.

By the end, I had a small trove of new sites, including personal sites, photography, a cocktail recipe, and (inevitably) a tiny script for brute-forcing vanity prefixes for sneakerweb domains. A successful sneakmeet!

I am left feeling very fortunate - to be in community with folks who immediately grasp the appeal of protocols like sneakerweb, and to be able to have such a good time with my friends in bringing an implementation to life.

Oh, and on the off-chance that anyone reading this will be at Electromagnetic Field next week and fancies swapping some .snk files, look out for the Glasgow Hackerspace village there.

~Dan

Aljoscha at our table at DWeb Camp's 'demo night market'.
Christine Lemmer-Webber demos her work in Blender to the almost lifelike audience of Aljoscha, Adz, Tommi, and Wakest.
Sammy and Aljoscha.
guest articleA pink cat face peeking out of a blue cup with a strawberry on it

Hiiii, hello worm blossomy world, I've been invited like Dan by your two hosts Aljoscha and Sammy to write some words here while they are busy camping or something.
I'm Miaourt, longtime lurker of the Earthstar project and once-in-a-millennium contributor to Willow, and I have a bunch of half-assed opinions that I like to share!!

If I told you there was a technology that allowed yall smartphones to advertise services in the physical world, that other smartphone can almost passively pick them up and open a bidirectional connexion directly to your smartphone, opening an high bandwidth link between them without any intermediary, and in addition, you could have multiple other smartphones or devices joining this creating a mesh, all self synchronizing their poll frequencies for minimal power consumption, and everything pretty privacy preserving and... and... it's nice ??

Well, wouldn't it be nifty to have this for Willow powered stuff ? (And many other stuff, to be honest), being able to share what you like passively when meeting strangers in the street ? Being able to have a sneakerweb that kinda share itself by walking around? All of this without routers, servers, centralized and nosy infrastructures? And that this is available since Android 17 and i(pad)OS 26??

Well, I'll stop the teasing and present to you Wi-Fi Aware™! I will redirect yall to this nice article that do a good job narrating the history and how private capital can't do good things unless forced by some political will, and I'm pretty sure yall excited already to play with it, but there's a thing...

Google and Apple, in their monopolistic tendencies infinite wisdom, believed that for security the user couldn't allow applications to accept other peers blindly: you have to manually be prompted with a system screen to "pair" with another device, share some unique codes between them, and then both will be paired up. That's fine when you're sharing a file or pairing a headset, but it kinda make our dreamed p2p wireless internet useless...

Even more infuriating, Google and Apple allow themselves to do it, for their own Find My Device, Airtag, Airdrop, they go past their own authorization process to allow them to build such nice features! Per the Wi-Fi Aware's own specs, the security/consent is purely application level, the protocol itself doesn't rely on it at all, so both Apple and Google could totally allow applications to ask users for the permission to run in the background, and to trust peers, but we kinda know that it's not really the direction taken...

~Miaourt

2026Week 2703 Jul

“almost spiritual”

An illustration of a fictional hardware device, the 'Willow Pocket'. This stylish, pocket-sized device can sync Willow data over cable or with an antenna. You can configure it by connecting it to a PC, but then it can autonomously store and sync Willow data. It features blinky lights to indicate syncing state, a switch to toggle automatic syncing, and a retractable antenna for extended range.
A teeny megaphone blaring out noise

Sneakerweb Released!

We have been teasing the sneakerweb for weeks, a small application for storing, browsing, and sharing static websites without relying on the internet at all. And now we have finally released it. Head over to sneakerweb.org, where you can install the (command line) app.

We will be bringing some cool sneakerweb-exclusive sites to DWeb camp, and are looking forward to sharing them. The only thing we are looking forward to even more is to receive sneakerwebsites that others have built.

And also for everyone who does not happen to be in Berlin next week, why not craft a small html zine and have it ready in a .snk file? One of the most exciting aspects of Willow-based applications such as the sneakerweb is that there is no need for a single, global seed from which everything grows. You can create your own little island of cool stuff to share. One day it might find its way to a worm-blossom person, and that would be pretty exciting. Or maybe it never will — which, in its own way is perhaps even more exciting. Because that is the decentralisation we are all working to enable.

A drawing of Aljoscha, fingers interlaced, with short hair!

The calm of this week’s background track belies how hectic a week this has been — hence only a short update. Sammy has already travelled to DWeb camp and is busy setting things up. My preparations for DWeb camp have also entered the final phase. As have the exams I’m inflicting on my poor students. But basically all of my time not spent on teaching has been going into the sneakerweb.

Thanks to Dan’s tireless contributions, we have running software. I have been crafting sneakerwebsites. We have exchanged and ingested the first Willow Drop Format data. I am storing and reading a site that Sammy created. And it all runs on our own protocols and software. Willow feel so very real all of sudden!

And I can’t wait to share the neatness (neatidy? neatle?) with others at camp =)

~Aljoscha

We're listening to...

Torbjørn Dyrud

Not only is DWeb camp happening and exam season taking its tribute, but I am also busy memorising pieces for some upcoming choir concerts. And how unreasonably cool is this piece?! (also, an absolute pain to learn, but well worth it)

So, if you are in Berlin on the 18th or 19th of July and don't have any plans yet...

~Aljoscha

Chicken Picnic

Well, I’m still listening to this. Instead of listening to the music I need to memorise.

Shout-out!

I want to thank Vivicat for spotting and helping to debug issues in our Rust implementation of WILLIAM3. Væ spotted and fixed several bugs that would have taken me ages to discover on my own.

Now, our WILLIAM3 implementation produces the same digests as a BLAKE3 implementation when undoing exactly the bits that differ between the two specs. This gives me high confidence that the newly released version 0.8.0 of bab_rs provides a WILLIAM3 implementation free of bugs. Yay!

2026Week 2626 Jun

“even though it's weird it's not wrong”

An illustration of a tall island with a forest atop it. The forest is labelled "sneakerweb". The bulk of the island is labelled "willow". As we go under the sea, we sea an area teeming with fish labelled "Bab". And as we descend into the depths and the water darkens, we see most of the island's mass is a giant cavernous complex with a sea serpent wrapped around it labelled 'ufotofu'.
A drawing of Sammy, with a bandana and sunglasses on, and a swollen chin.

Dear reader, it is hot. I write this editorial next to four strategically opened windows. This week’s heatwave prevented my ageing laptop from joining any video calls this week. What does our future look like? It’s going to be one where we use less energy, by choice or by force majeure.

Fortunately it seems things will cool down before I need to spend a week in a tent at DWeb camp. The schedule’s been announced, and worm-blossom has three events: The Willow Skill Tree, a Sneakerweb workshop, and Sneakerweb at the ‘demo night market’.

Sneakerweb has been the most prep. It needs some sites on it to give people an idea of what’s possible, so I’ve created sammy’s guide to the sneakerweb. My plan is to never publish this website on the world wide web. If you want to see it you’ll need to get it from me, or one of my friends, or one of my friend’s friends (etc), and import it into your sneakerweb collection. Aljoscha has also been preparing a few things for the sneakerweb, things which I have made drawings for that I will let Aljoscha choose whether to share or not (how firmly does he believe in the law of the sneakerweb?).

I’ve also been doing some grant proposal writing for the sneakerweb. Although this kind of writing is very annoying to do, at least it sort of forces you to express your stupid ideas as clearly as possible. Some of that writing I folded back into the upcoming sneakerweb site for the www, which is ready to go but for the downloads page. My funding ideas revolve around the question of whether we can harden the sneakerweb enough that it becomes useful in adversarial environments. I think there’s some obvious things we could try in this direction.

Anyway, this time next week I’ll be in Germany, writing an update from my tent. I need a palette cleanser.

~sammy

We're listening to...

Chicken Picnic

Sometimes you compliment someone's t-shirt, and it turns out that it is a band shirt, specifically a t-shirt of the band they used to play in, and then the band has an excellent name, and then you listen to their music, and the music is excellent as well.

Andres Martin

First Aljoscha gets a bass guitar, and a week later he listens to a suite for piano and double bass? Probably just a coincidence. Completely unrelated, why is it so difficult to find solid foundational material like fingerings for scales for bass guitar? Searching the web for “practice routine violin” yields pretty good results, whereas “practice routine bass” yields a whole bunch of videos with clickbaity titles and SEO-stuffed blog posts that are mostly devoid of substance. Thankfully, searching for double bass resources yielded more helpful material. And this cool piece!

A drawing of Aljoscha, fingers interlaced, with short hair!

A couple things I want to report. First, the folks implementing Bab in Zig found a bug in our own implementation that resulted in incorrect WILLIAM3 digests. And then I found some more bugs. I've managed to fix everything I could identify, but our implementation still appears to diverge from BLAKE3 in ways that it shouldn’t. So no complete fixes published yet.

Second, Dan and I went on a fun spiritual journey to discover the true meaning of Ufotofu. Okay, maybe it was slightly less grand. But we did learn something about when to treat producers as being equal (or, more technically correct, as being equivalent in the finest sensible way).

The obvious approach is to consider two producers as equal if they exhibit the same observable behaviour in terms of yielded items, final values, and error values. Given that bulk production must be equivalent to item-by-item production and given that slurping is a transparent optimisation detail, this observable behaviour should be independent on which method calls are being used. Or so we thought. At the end of a long debugging session, we realised that actually slurping is not completely transparent. If it was, it would have to return the unit type after all, but it is allowed to report errors instead. And this can be relevant: we encountered a situation where it was absolutely sensible for slurping to yield a different error than the error that would be yielded when attempting to produce an item from the exact same state.

This left us with two choices: either allow observable side-effects when slurping (and, dually, flushing) and remove the check for error equality from ProducerExt::equals, or change the return type of slurp and flush to (). The latter is the cleaner solution mathematically, and would arguably be appropriate in a lazy language such as Haskell. And for slurping, infallibility is easy difficult to justify: producers already have to buffer any error they encounter if they encounter some items first. But the part that is difficult to justify is infallible flushing. A flush method that fails silently and delays reporting any encountered error until when you try to write the next item (or the final value, i.e., you close the consumer) feels, uhm, difficult to justify, to put it mildly. Flushing corresponds to fsync in the UNIX world after all, and a silently failing fsync is utterly absurd.

So we left the API unchanged and adjusted the mental model of producer equality instead. Because we are nothing if not pragmatic here at worm-blossom, especially when it comes to ufotofu.

And third and finally, I can reveal the secret side project I briefly mentioned a while ago: using the same tool as I use for the weekly background music, I made an album. For now, Commputer Has No Feelings will be distributed via sneakerweb only, and it features catchy titles such as Your deductions are only as good as your initial assumptions and Sometimes you need to wait a while before you can think about flowers again, but seeing flowers speeds up the process. Sammy drew the lovely cover artwork you can see to the right.

And around May, I accidentally finished a second album. Circumference has longer songs with shorter titles. And will also be available only via sneakernet for a while.

It is so enjoyable to go beyond short looping background music, and to devote more time to polishing the tracks. And despite the restrictive songwriting tool and the occasional goofy song title, making these albums was actually a form of emotional processing. So I hope that some of that music will resonate with others. I am excited to finally have the custom software that was 100% necessary to share these.

~Aljoscha