Elixir Blog Posts



I’ve shared 2 short posts on my first Nerves project on the nerves Slack channel and @ConnorRigby reminded me that it could be shared here as well. So here we go:



Being one of Erlang’s most amazing features, hot code reloading is sometimes compared to replacing the wheels on a driving car…

Nice way to put it :lol:


This is pretty cool. The rate limiter & circuit breaker use cases is something I didn’t think about before.


Not to take away from this library which looks pretty reasonable on its own, but I don’t think you actually want to do either of those things. In a large enough cluster different servers may have different views of the external service. You don’t want to blow circuits for otherwise healthy nodes just because one unhealthy node says that their circuit is blown. Along with those reasons I would be very hesitant to add that much complexity into the critical path of the request. Rate limiting is much better done by leveraging Little’s Law and increasing or decreasing the number of outbound “connections” dynamically.

Another minor quibble with the post but this statement is inaccurate and I think potentially misleading:

Conflict-resolution is the central feature of CRDTs. In fact, CRDTs are guaranteed to converge globally , meaning that the data will (eventually) be the same at every replica.

CRDTs don’t actually guarantee this. This is a guarantee that the replication protocol has to provide. Even if you assume that there’s a replication protocol underneath your CRDT that manages this correctly it’s only a valid statement if you add the sentence, “as long as there are no network partitions”. The cold hard reality of “eventually consistent systems” (meaning inconsistent systems) is that “eventually” is only theoretical. There’s always a likelihood that your system never converges. Not stating this explicitly has the potential to grossly mislead people.


Introducing GenBrowser


Elixir (and erlang) are built on processes, which makes concurrency and distribution simpler. What if the processes model extended beyond the server, to the clients of a web application?

GenBrowser enables browsers to send and receive messages like an Elixir process. This simplifies communication and allows the actor model to be applied to reasoning about the whole client-server system.


Hi @keathley, I thought the word “eventually” was enough to cover network partitions, but I’ve adjusted the wording to make it more explicit. I’ve also added some text about anti-entropy algorithms for completeness.

No comment on whether it’s actually a good idea to build some of these things, the goal of this blog post is mostly to get people thinking about different ways they might be able to use the library. Feel free to post in the comments on the blog post itself though.



I read Erlang/Elixir between the lines, Alan Kay’s OOP:

reminds me of: Joe Armstrong interviews Alan Kay


We’ve just published a guide on how to use Planga in your Elixir/Phoenix-application: