Hello there. I have been working for the past year on a new service, that I launched in February 2023. It’s called Code Code Ship, and we are helping library authors profit from their work by making it easy to sell a pro version. I have written about
It’s not every day that you get to contribute a PR to a well-used library that improves its performance under common circumstances by 100% to 300+%. This week it was my turn! This blog post will cover these recent improvements.
This week I released the latest version of Horde, 0.8.0. This version has been a long time coming, with the last minor release (0.7.1) having been released 10 and a half months ago. 0.8.0 brings with it some fairly large changes, so let’s dive right in! If you don’t know what Horde is,
How can I start a globally unique process in my Erlang cluster? It is one of the questions I see the most often: how can I start a globally unique process in my Erlang cluster? A lot of people end up using Horde for this purpose, but Horde was not really meant for
Today I want to talk about a pattern that I hear about a lot. It begins with the question “where do I put this code that needs to run when I start up my Elixir application?” It turns out that we have a lot of options at our disposal. I want to enumerate the popular ones and discuss why you
If you have seen Guardians of the Galaxy, you might remember the scenes where Chris Pratt has his Walkman on, shutting him off from the surrounding chaos. This is what Walkman does, for your test suite. A new testing library Elixir already has some good t
I’ve been to a couple of conferences already this year, including Lambda Days 2019, where I saw a whole bunch of good talks. Two talks in particular stick out in my mind: Diving into Merkle Trees, by Pedro Tavares, and
Horde 0.5.0 has just been released, and there are a bunch of changes, so let’s take a look at some of the highlights! If you are new to Horde, read Introducing Horde — a distributed Supervisor in Elixir
If you’ve been around in the Elixir / Erlang community long enough, you’ll begin to hear the same wisdom being passed around time after time. Let it crash; don’t use GenServers to separate business logic; and the topic of this blog post: Every process should be supervised.
This is a problem that many of us are familiar with. We would like to deploy our programs, and deploying a new version requires turning off the old version (unless you are using hot code swapping, but that’s another kettle of fish). So you send a SIGTERM to your server
As powerful as Elixir/Erlang’s OTP is, it’s also easy to nuke your performance by accidentally introducing a bottleneck into the system. Here are 2 ways you can turn a Supervisor into a bottleneck and how to fix them. Doing time consuming work in init/1
I have been working hard these last couple of weeks on Horde and DeltaCrdt. I already hinted at the changes that are coming on Twitter, but now
Earlier this year I published my new library, Horde. Horde provides two things: a distributed supervisor, and a distributed registry, and you can read about it in the introductory blog post I wrote at the time
If you’ve ever looked at the GenServer documentation, you might have noticed something strange. At least, this looked very strange to me at first. Why, I wondered, would you ever want
Note: This guide has fallen out of date. There is an up to date version in the official documentation: https://hexdocs.pm/horde/getting_started.html Introduction If you’re new to Horde, you might want to start by
The last few weeks I’ve been toiling away at Horde. Horde is a distributed supervisor and a distributed registry, built using the magic of delta-CRDTs. Horde was inspired very heavily by Swarm