I really feel for the author. We had once decided to participate in Stripe's Identity Verification beta. After submitting the form to request participation, Stripe's system locked our account pending verification.
We were fortunate in that we had a backup payment gateway integration "just in case", because otherwise we would have been completely unable to accept any payments at all for a full week.
That week was still extremely stressful. They offered no explanation or reason for putting our entire business on hold.
> In particular, I was itching to learn more about handling concurrency in Elixir. This, of course, led me to GenServers.
Might be a nitpicking here, but GenServers aren't useful for concurrency. They just manage state, and only process one message at a time. If you're using this as a cache, your reads will be bottlenecked by however quickly the GenServer can handle the read requests.
You don't see much of this in the media, but Iraq is a stunningly beautiful country. There's a lot that you can learn from the people there (and certainly much they could learn from you), and the Arabic language is nothing short of remarkable.
Diving head-first into another culture is one of the few educations that the Internet and college cannot fully convey via text. You won't regret it.
As an avid FreeBSD user, I must say that the article didn't really provide an unbiased comparison of Linux to FreeBSD. It didn't offer any of the advantages Linux may have over BSD.
Linux has an amazing community with better application support. Linux also has an optimized C library. For example, you should take a look at BSD's strlen() versus GNU's strlen().
ETS is built into OTP, so how is using ETS not "OTP-first"? What's wrong with using ETS? It's just an in-memory store.
I looked through the code and didn't find it to be anywhere close to procedural in style.