Marshall Bowers

Conjurer of code. Devourer of art. Pursuer of æsthetics.

A Tale of Two Decentralized Protocols

Monday, April 13, 2020
734 words
4 minute read

Greetings, travelers.

This past weekend I got the chance to play with two different decentralized pieces of software. Consider the following some preliminary user reports on two technologies that I think have a lot of potential.


The first is Tailscale, a program/service that enables you to easily create a private network using WireGuard.

Installing Tailscale was a breeze. Since I'm running NixOS, I was able to just tweak two lines in my configuration.nix to get it up and running. I imagine it is just as easy on other operating systems, although I have yet to try this.

A private network isn't very much fun with just one device, so I decided I'd throw my iPhone into the mix. Getting Tailscale installed on my iPhone was just as easy. All it took was installing the Tailscale app from the App Store and signing in, and now my iPhone was on the same private network as my desktop.

As a quick test I took my phone off the home WiFi and tried pinging it from my desktop. And sure enough, the pings go through!

Great, so now I can ping my phone from my desktop. Big whoop. I tried to do something more interesting, like accessing a local webserver running on my desktop from my phone's browser. Sadly, I couldn't get this to work. I'm not sure if it's an issue with localhost specifically (although I did try running it on instead of, or if something else is the culprit.

Suffice to say, I haven't yet found an immediate use for Tailscale, but I am still excited by it nonetheless.

One thing that I think would be awesome is bringing back the era of LAN parties by getting a bunch of friends on a Tailscale network together. Maybe play some Warcraft 3 custom maps?

There's a great blog post on how Tailscale works that I would encourage you to check out if you're interested in learning more.

Matrix / Riot

The other program I started playing with is Matrix. Well, Matrix is more of a protocol than a program, so I didn't really play with it directly. Instead, I used Riot—a chat app built on the Matrix protocol—as a means of interacting with Matrix.

The main feature of Matrix that I was interested in trying out was its ability to bridge to IRC networks. One of the main benefits of doing this is that Matrix acts as an IRC bouncer. So you can close your Matrix client, restart your computer, or even switch to Matrix client on another device and still stay connected to IRC.

I was able to bridge Matrix to Freenode and join some channels, but I ran into troubles when trying to get myself authorized with my Freenode account. It turns out I ran into a bug in the Matrix IRC bridge that halted my plans in their tracks. A fix is supposed to go out on Tuesday, at which point I'll attempt to get IRC hooked up again.

New Blog Posts

About a month ago I published "A Primer on Polymorphism", in which I showcase a number of different approaches to polymorphism and talk about the pros and cons of each.

The past week or two I've been emailing a lot more than usual, which prompted me to write a short post about "The Good Side of Email".

Internet Findings

Discovering Python

This week I watched David Beazley's talk from PyCon 2014, "Discovering Python", in which we find our hero trapped in a vault with 1.5TB of C++ code and nought but a Python interpreter with which to analyze it. I found this talk to be highly interesting, amusing, and thought-provoking.

The Danger of "Simplicity"

I believe that simplicity is something that we developers should strive for in our work. However, there's a lot of misconceptions floating around about what "simple" really means. "The Danger of 'Simplicity'" explores this and seeks to bring to light the dangers of chasing "simplicity" rather than true simplicity.

That's all for now, folks!

Until next time,