“as long as at least one of us thinks we're a genius we should be okay”


willow25 Store tutorial
Two months ago we released willow25 with its new storage APIs (the same APIs we use to power sneakerweb). This week we added a new Store tutorial to willowprotocol.org, so you can try them for yourself!
The tutorial is straightforward enough: you instantiate a store, insert an entry, get it back out, append a payload, query some areas — a typical Friday night.

A little written field recording: the sound of my son sniffing behind me as I work, the chirps and beeps of a Popular Monster Collecting Game. School's back in and so are the colds.
One of the things I did this week was write the new Store tutorial. The workflow for these has solidified (and uh, expanded) since we first started publishing these. A month ago I pushed up a willow-tutorials repo with all of the tutorials in a single workspace. This repo acts as a space for drafting the tutorial code and also ensuring the things actually run. Then I generate a JSON dump of the willow25 APIs using rustdoc, and commit that to the willowprotocol.org repo, which has a macro for turning rustdoc output into definitions we can refer to on different pages (so that I can turn a reference of rs-willow25-storage-Store into a link that points directly to its corresponding documentation). Then I write up the steps of the tutorial itself, with code samples and output! It's a lot of rigamarole but I think these things come out pretty nice.

I've also started my work on support nodes for the new Pillow project. These support nodes are going to be configurable Willow peers which can communicate with any other peer which understands WTP. You'll be able to configure them with capabilities (so that they know what to sync), set storage limits (so that your Pi with 4gb of storage can pitch in), and configure if it should sync with other support nodes too. So it's got to be a little TCP server which can field WTP requests, and a HTTP server which serves up a web UI for administration.
In true 'I'm doing research for my project!!!' fashion, I've been looking at different Rust HTTP frameworks, and how they handle things like routing, validation, templating, etc. I quite like the look of Rocket, and I can easily imagine how to structure the routes I have planned using it. But I'd like to get some practice in with it before that. So here's my idea: I think I'm going to refactor sneakerweb to use Rocket for its web server. This will be very useful as sneakerweb's current HTTP server is single-threaded, and handles requests at a very relaxed pace, while Rocket's is multi-threaded. It will also make it much easier for us to add new pages to the sneakerweb server, and we'd like to make it possible to do pretty much everything you can through the CLI via a web UI as well. And with that, I'll feel confident enough using Rocket to use it for the Pillow project.
Speaking of sneakerweb, I have a lot of sneaky in-person events on the horizon, and this is lighting a fire under me to update sammy's guide to the sneakerweb, which to date has only been distributed in person. The first edition was a single page, the second edition has many pages and is set to be a real guide which teaches you how to do everything. Maybe it'll make sense to make a .snk containing this site available on the world wide web? I will confer with my colleagues.
~sammy
links of the week
- Radicle nodes send private repositories in cleartext - every p2p protocol implementors's nightmare come alive, a critical vulnerability which was only found when someone else tried to re-implement the protocol. Sympathy for everyone involved.
- drawafish.com - draw a fish in the browser, watch it swim about with other user-contributed fishes. :]

This week I began work on the new WTP specificiation. That’s it, nothing online to show for it yet.
But also, I had some thoughts that got me more excited to work on some important Macromania macros again. And those thoughts in turn are related to the sneakerweb. How so? About two years ago I was thinking a lot about scientific publishing, both in terms of the underlying incentive structures and logistics (they suck) and about the purely technical level of how PDF-based knowledge exchange has its drawbacks. I wrote the Cardboard specification as an alternative for PDFs: instead papers would be written as static websites, and bundled in archives that would allow shipping all (transitively) cited papers together with the paper itself. But then I never implemented software support for this specification or wrote any actual Cardboards. (The G-tree paper was a fruitful exploration of web-based scientific writing though.)
Last Saturday, out of nowhere, I remembered the Cardboard spec, and realised that the sneakerweb enables pretty much the same thing. And we already have running software. The minimal additional featureset I’d envision is a way for sneakerwebsites to specify other sneakerwebsites they depend on (i.e., link to). Perhaps as a simple /sneakerdeps.json file storing a json array of sneakerweb domains. This file would enable two key features: first, it would be possible to take a sneakerweb collection and extract from that everything required to fully and transitively browse a single starting website (or set of starting websites). And second, it would be possible to implement partial downloads of large “papers”: instead of downloading a .snk file containing all transitive dependencies, you’d download a .snk file containing only the starting website, and then you could recursively download its dependencies on demand (and whether you’d download eagerly or lazily, you could skip sneakerwebsites you already had available locally).
The sneakerdep mechanism could be useful for a whole bunch of things beyond scientific writing, in fact all sneakerwebsites that link to other sneakerwebsites would benefit from it. You could have nice software support where user agents could issue helpful warnings: both when a link to a dependency cannot be resolved because that dependency is unavailable, and when linking to a sneakerwebsite that is not listed as a dependency yet (to help authors keep their depencies up to date).
~Aljoscha
We're listening to...

Last week I got a new mp3 player, one with enough storage space for my whole mp3 collection. So I've been listening to a lot of old favourites while on my bike commute. Man With A Movie Camera is a soundtrack which honestly shaped me, and watching it with the 1929 movie this soundtrack was commissioned for is an occasional grounding ritual for me. ~sammy



















