Gdansk itself caught me off guard. Walking through the old town, brand new buildings sit right next to houses that look centuries old. Not all of it is old, and not all of it was destroyed and rebuilt - it's a mix, with some streets and buildings historically reconstructed after the war and plenty of genuinely new construction alongside them.
Being there as a German added its own layer of interest, digging a bit into the city's history. This was Danzig, a free city under League of Nations oversight between the world wars, and the war itself started right there in its harbor, at Westerplatte, on September 1st, 1939. Afterwards the city became Gdansk, part of Poland, its German population expelled and replaced largely by Poles who had themselves been displaced from the eastern territories the country lost to the Soviet Union. Standing in the old town, that history feels a lot closer than it does from a school textbook.
The boat trip out to the social event was its own highlight, and on the train back to Frankfurt (Oder) I got a last few hours of watching Poland go by the window.
ESUG 2025, the 30th edition, was held in Gdansk at the start of July, and recordings are already showing up on the esugboard Youtube channel.
I gave two talks. The first, "Rhizome: distributions in soil" (slides), is about taking Soil beyond a single machine. The obvious objection to a database that serializes clusters to a file on disk is that it only runs on one box, so the talk works through distributing it without a central component: replicating each transaction log to a set of nodes over HTTP on commit, and using rendezvous hashing instead of a directory service to find which nodes hold a given id - hash every node/key pair, sort, take the first `r`, the replication factor. Nodes track each other via a gossip protocol, the same peer-to-peer, epidemic-style dissemination that spreads a virus efficiently, with heartbeating to notice a node going quiet. Testing this against a real network is expensive and flaky, so the demo runs on a DEVS-based simulation instead (a Smalltalk port of SmallDEVS), injecting the classic fallacies of distributed computing - reliable network, zero latency, and so on - without needing five actual machines in the room.
The second, "Soil: Tutorial and Q&A" (slides), with Marcus Denker, is the hands-on counterpart: install via Metacello, create/open/close a database, set an object as the transaction root and commit, mark it dirty for later changes, and use `#soilTransientInstVars` to keep parts of a graph out of storage on purpose. We worked through the Heroes-and-Powers example from the old Voyage tutorial - partitioning the graph into lazily-loaded roots, indexing hero powers with a `SoilSkipListDictionary`, looking values back up, taking a backup, and renaming a class without losing data. One slide was worth repeating: Soil is still small, around 130 classes and under 8k lines for core plus serializer, small enough that "just read the source" stays viable. It closes with an honest list of what's missing: duplicate keys in indexes, multiple indexes per collection, a real query planner, and getting rid of the manual `markDirty:` step.
Full program of ESUG 2025 is here.