Street coffee in Bulgaria

In Germany it’s very common for people to buy coffee in bakeries, where the person behind the counter will put the paper cup in a “fully” automated coffee machine and press the right button, then hand it out in exchange for money. In terms of potential automation and self-service, it’s a silly process.

In contrast, in Varna in Bulgaria I’ve seen many street coffee vending machines. Sometimes they feature brands like Lavazza, but mostly they’re unbranded and give you different types or mixes of coffee for very little money. Like a double espresso of reasonable taste, surely no worse than the machines in German bakeries, for 60 stotinki – 30 Euro cents!

Coffee vending machine with it’s owner

This one is maintained by Stefan (Стефан), from whom my father in law bought some kilograms of coffee for the mountain vacation. He operates 70 of these around Varna. I didn’t see any other of his, probably because there’s hundreds of them all around the city.

I didn’t learn where Stefan gets his coffee, but he’s got about 16 tons of it stored in the room behind the machine above.

Two tons of coffee
Parts of the coffee machines

A few days later we were in Vinarsko, a little village south of Aytos, around Burgas. There was no coffee in the house, so the need for coffee had to get satisfied by the vending machine in the village centre, located in front of the only store.

The coffee machine next to the store entrance (closed on Sunday)

This machine has so many stories to tell! Look at all the scratches:

The machine in all it’s glory

I guess an important part of coin-fed vending machines is “reading” the coins. Part of that experience is inserting the correct amount, but the machine then rejects it immediately. Another attempt might be accepted, or not. A countermeasure, whatever the mechanics are, seems to be to rub the side of the coin against the metal of the machine – as can be seen here, that has been done excessively!

The main panel

Note the new metal plate on the right. It says търкай тук, “rub here”. I’m not sure if it’s really new, or has been there and ignored for a long time.

When coins get rejected or change gets returned, you get to pick them up a little below – if you dare touch this little hole from hell:

The coin return, half burned away

Since these machines sell something, they also need to pay taxes. For this machine, that’s the most recent looking part. I didn’t understand if it only keeps track of purchases or actually reports them remotely immediately. Given Bulgaria has very good mobile network coverage, I wouldn’t be surprised if this contains a mobile connection:

I don’t know what the 2nd row means, but it seems tax related

That’s all for now about Bulgarian street coffee.

Next up on this trip is Chepelare, in the Rhodope mountains. I’ll keep an eye out for more of these machines.

New music in 2021

Inspired by Martin Fowler’s My favorite musical discoveries of 2021, I wanted to list my discoveries, too. Since I’ve only discovered 4 new bands in 2021, I’m also listing a few other albums I bought.

Links go to Bandcamp (allows you to listen to the full album before buying) and Amazon (has only ~30s samples).

Meat Mallet by A Formal Horse

This was a new discovery! A Formal Horse is prog rock with weird/strange/funny vocals, that stand out quite a lot. Like “I’m a lasagne, you’re the big cheese”. Or how in “You’ve got a billion and I’ve got a half” near the end “billion” gets repeated a lot, until it gradually turns into “oblivion”.

Cavalcade by black midi

My friend Marcus recommended Black Midi quite a lot – since 2019! I didn’t get hooked until last year, when I listened to this podcast episode with a conversation between Morgan Simpson (drummer in Black Midi) and Bill Bruford (King Crimson, Yes, among many other). Hearing them talk about the similarities between Black Midi and King Crimson got me interested and beyond the hurdle of “John L” (not an easy opener).

Etemen Ænka by DVNE

A new release from a prog/post metal band I already knew. Good stuff.

Summerland by Dool
Here Now, There Then by Dool

A new discovery! They tag it as “dark rock” on Bandcamp, I’ve also seen it as “doom rock”. I’ve listened to both albums a lot. I remember watching some live show with this intermission of them playing live at Wacken: “We’re hot, and horny. [pause] And you’re sexy! [mostly awkward silence]”.

Dodge and Burn by The Dead Weather

This was already released in 2015, but I missed it at the time. One of the bands I discovered while playing Guitar Hero. One of many bands Jack White is involved in (Wikipedia lists eight associated acts).

Aphelion by Leprous

Since seeing Leprous live late in 2019 (phew, lucky!) they moved from ‘band I like’ to ‘one of the best bands I know’. This new release didn’t blow me away, but I’m still hoping to see them live again sometime soon.

Moving Backwards by Wheel
Resident Human by Wheel

The final new discovery of 2021. A direct recommendation from Marcus for me. Worked really well, would buy again.

App idea: Game of QR

Imagine this: You’re outside, standing in line of your favorite bakery, and spot a QR code in the window of the store. You don’t care about the code itself, but pull out your phone anyway, open the Game of QR app and point your phone’s camera at the QR code. On the screen, it switches from the camera view to a 2D/flat version of the code, which starts animating using the rules of Conway’s Game of Life

  1. Any live cell with fewer than two live neighbours dies, as if by underpopulation.
  2. Any live cell with two or three live neighbours lives on to the next generation.
  3. Any live cell with more than three live neighbours dies, as if by overpopulation.
  4. Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.

If you’re not familiar with this zero-player game, here’s a sample from Wikipedia:

By Lucas Vieira – Own work, CC BY-SA 3.0,

And a screenshot of my own implementation from 2020, which I called “Game of Ghosts”:

Two still lifes, two oscillators, one glider (bottom right)

Now imagine the AR (augmented reality) version: Still pointing the camera at the QR code, but now the animation happens in place, with the same perspective, instead of a reproduced 2D copy.

To make it more interesting, QR codes and their Game of Life states are collected in a gallery with geolocation. That way users of the app can collect QR codes, sharing the ones with interesting lifeforms.

Technical considerations

Wikipedia has a nice overview of QR codes, including all 7 variants. I had no idea so many exist – some even have color.

I’m still interested in learning more about React Native, so that’s where I’d start. The camera access should be possible with Expo, which would allow for a very low barrier to get started with development and testing. That also makes it easy to do beta testing, since there’s no need to upload and install apk files.

Implementing Game of Life itself is rather easy, which is probably why its a popular programming exercise. My CLI version implemented with node.js runs on

I expect the difficult part to implement for Game of QR is to read the raw QR code as a 2D data structure, without decoding it. I assume QR code scanner libraries will include the decoding. At least the documentation for doesn’t show how to access the raw data. Maybe the decoded data can be turned into a new QR code, which is then used to seed the Game of Life.

Let me know if you’re interested in collaborating with me on this idea!

Tools for playing D&D 5e online

My groups have used the following tools for playing D&D 5e, AD&D 2e and Maze Rats online.


This is it! If we had known about Owlbear in April 2020, our early attempts at playing online would’ve been a lot smoother. This is the perfect virtual tabletop for us. It works really well and does what we need (about 80% of all its features), and its free. It doesn’t embed any RPG systems or character management (unlike Roll20, see below), and this helps a lot in keeping it light and focused on the virtual table. All the improvements they made since we started using it were welcome and useful, and didn’t disturb anything we gotten used to.

To give you an idea how Owlbear works for the game master, I’ll show an example from one of my Maze Rats sessions. For that session I planned a scene with the player characters visiting a shady tavern. I sketched that tavern in Excalidraw (a bit more on that tool at the end):

From Excalidraw I exported the sketch as a PNG file and uploaded that as a map in Owlbear. There I adjusted the Columns and Rows and Grid Scale to roughly match the desired scale of this building. This affects how large the tokens will be shown by default (more on tokens below).

I did that for two other maps as well, one a map of the Dock District, another for a warehouse that the player characters had to explore.

For the tavern, I wanted to initially hide the back room, so I used Owlbear’s fog tool (the cloud icon) to draw a rectangular fog over the whole room. For players joining the session, they’d only see the main room, with a black rectangle hiding the rest. So other characters (as tokens) could hide back there. I didn’t really use it for this session, but its great when exploring dungeons, where you can use the eraser during the session to gradually reveal the full map.

To turn this from a static map into a virtual tabletop, add some tokens and name them:

Here I placed some of the default tokens that Owlbear provides. Players should create a custom token for their characters and upload them. As a game master, important non-player characters (NPCs) also deserve their own token.

To create custom tokens, Token Stamp is a neat little tool. My usual workflow there looks like this: Click on “Choose Image” to upload an image; scale it up and move it so that the person’s face is well visible in the preview on the right, then click on “Download” and save the token as “[name]_token.png”. Then upload that token in Owlbear: First the “plus” icon at the bottom right (disable fullscreen if this is hidden), then the “Import tokens” plus icon in the “Edit or import a token” modal.

With custom maps and custom tokens you’re ready to play your custom campaign. Which brings us to the last important feature of Owlbear: Rolling dice! For that, Owlbear provides a dice tray via the tiny icon at the top left, next to the party list. The palette icon let’s you choose from different style of dice. The next group of buttons are all for rolling dice. For example, to roll 2d6, click twice on the [6]. The rolls are somewhat physical, so sometimes you’ll end up with a perfect throw that turns to a failure in the last millisecond, as the dice topples over. Adding more dice to the tray might even change the result of dice that you threw earlier.

The last two buttons allow you to increase the size of the tray and to share your dice throws with the rest of the party (the globe icon). This last setting should be on for all players! For game masters, it depends if you prefer to hide (and fudge) your rolls or not.

There’s a few more features worth exploring, but these I consider the essentials.

Before Owlbear, we tried Roll20, but that didn’t really work for us. It has a loooooot of features and the virtual tabletop isn’t nearly as polished and accessible as in Owlbear. It might still be interesting if you prefer an integrated setup with the game system (like D&D 5e) and the virtual tabletop in one tool.

A battle scene in Roll20 from a past D&D 5e campaign

Zoom Pro

For the video call we use Zoom, with a paid account since our sessions are longer than the free plan’s 40 minute limit.

We’ve tried out various options like Discord, Jitsi and Google Meet. Zoom has the most consistent and reliable performance across operating systems, with the lowest processor load. In contrast, when we tried it, Discord’s performance on macOS was horrible, generating 100% CPU load non-stop, with crashes and freezes in every session for one participant.

Zoom generally works with “meetings” that you schedule or start ad-hoc. When playing with a fixed group, it can be useful to set up a permanent “room” instead.

Here’s how (at least in December 2021 this works, Zoom is likely changing their UI again in the future): Schedule a new meeting, give it a Topic, then set it to “Recurring meeting” with “No Fixed Time”. Use a Generated ID and Passcode, both should be set by default. Finally under Options (expand first) enable “Allow participants to join anytime”, that way you (as host) don’t have to be there before the others. The screenshots should help find each UI element:

Then Save that new meeting and share the meeting URL with your group. As long as the URL contains the Passcode, they don’t need to enter it.

We also use Zoom to share audio, usually atmospheric background music. I’ve never done that myself, but in this case Zoom has a decent explanation.

If Zoom isn’t an option, I recommend testing Discord. By creating your own server, you also get text chat rooms and you can have multiple video rooms (e.g. to have quick private chat between GM and a player). With the Dice Maiden bot you can also throw dice, especially useful for dice-based character creation or generating dungeons for Maze Rats (for which you need unsorted rolls, like !roll ul 6 2d6). Discord also used to have a nice audio sharing option via the Rythmbot, but that got shut down in September 2021.

D&D Beyond

Specifically for playing Dungeons and Dragons 5th edition (D&D 5e), D&D Beyond is great. Creating a character can be pretty quick, but will still take a lot of time if you pay for extra source books with access to all kinds of extra races, classes, backgrounds and whatnot. Here’s a Human Fighter character I created:

If D&D Beyond isn’t an option, an alternative editable character sheet for D&D 5e could be this Google Docs spreadsheet. You’ll have to copy it, then fill it out with your character. Its more fragile than D&D Beyond and won’t help you with character creation. But once created, it works well for leveling up and maintaining your inventory. Here’s my level 5 Barbarian from a past campaign:

Bonus: Artbreeder

Custom avatars as Owlbear tokens or on character sheets are pretty nice, but sometimes its hard to find the right image. When you need a custom picture, but suck at drawing, Artbreeder might be an option. You can upload a (limited) number of images, then change “genes” or “breed” multiple images to create something new. That’s how “Finn” was born:

There’s also an angry Finn:

And a happy Finn:

Changing one setting often heavily influences others, like angry Finn’s hair, beard and jawline changing a lot. Its still pretty impressive what you can create.

What else?

I’ve mentioned Excalidraw above for sketching custom maps. Before our groups started using Owlbear, we also used Excalidraw for shared scribbles, using their “Live collaboration” feature. We’d then draw maps, notes or memes together – something like this:

I have to mention DriveThruRPG here. That’s where I bought Maze Rats and Knave, as well as The Alchemist’s Repose and The Waking of Willowby Hall (yes, I’m into OSR this year). I’d go back there anytime if I need maps for a campaign.

Perchance is a great tool to create text-based random generators for anything. I’ve used this to create generators for Maze Rats magic items and NPCs. With some custom HTML and CSS, generators can also look much better, like this Maze Rats Spell Generator.

Another tool worth mentioning, but never actively used in our campaigns: Miro. This could work as a virtual tabletop where you can also look at pages from PDF rulebooks together. I’ve only used it at work – it works great as a virtual whiteboard for remote retrospectives.

From when we tried out Miro as an alternative to Excalidraw


Special thanks to Marcus, who did most of the research and testing for these tools. Lars was running a D&D 5e campaign since April 2020 for 18 months, where we had to and got to experiment a lot. Hermann introduced us to the invaluable Owlbear.