Learn about Elixir, the exotic concurrent language which may take over the world in a few years
First impressions, feature summary and many resources to get started.
Recursively iterating in the wild with Elixir
Here is the quick blog post on recursion in Elixir and when to use it:
Building Phoenix Battleship (pt. 3)
The third part of the Building Phoenix Battleship series where I cover the game setup phase, including joining a game and creating player boards.
http://codeloveandboards.com/blog/2016/05/21/building-phoenix-battleship-pt-3/
Merkle Trees in Elixir
The Merkle hash tree is an incredibly useful data structure used in a wide range of modern applications. Merkle trees are used in the IPFS file system, BitTorrent protocol, Git, Bitcoin, Ethereum, and a number of NoSQL systems like Apache Cassandra and Riak.
Read more about Merkle Trees in Elixir
ElixirConfEU 2016 videos have started going up on Youtube
As the title really, thanks to the Erlang Solutions channel.
Simple Markov Chains using Elixir
As a toy project to learn Elixir, I ported a Markov Chain written in Ruby to Elixir.
It generates funny tweets, like:
iex(1)> ExChain.create_filtered_sentence
{:ok, "I'm not a Food Social Network?", 0.4668037713169559, 4}
iex(2)> ExChain.create_filtered_sentence
{:ok, "I am in churros.", 0.30839889769910056, 2}
Suggestions are welcome.
The source code and instructions on how to use it are on github.com/eljojo/ex_chain
How to config environment variables with Elixir and Exrm
A useful technique to config an Elixir (Exrm) release with environment variables.
How to config environment variables with Elixir and Exrm « Plataformatec Blog
Family Ties part 4, discussing variable scoping in Erlang and Elixir
Posted the fourth of a continuing series of articles on similarities and differences between Erlang and Elixir. This article covers variable scoping in the two languages, comparing Elixir’s caret operator with Erlang’s single assignment, and exploring a few surprises in the scoping rules.
http://daniel-azuma.com/blog/2016/05/17/family-ties-4-scoping-out-the-scene
Index of previous articles in the series: http://daniel-azuma.com/articles/family-ties/
Strip feature in #EDIB (Elixir Docker Image Builder) makes images even smaller!
edib-tool 1.3.0 now includes a tiny but awesome tool which helps to minimize the image size even further: ExStripZip.
With mix-edib v0.7.0 you can utilize it pretty easily:
$ mix edib --strip
and your images will become up to 40 - 45 % smaller. (If you can squeeze out more, tell me about your success.)
Chris’ Phoenix Chat Example App (with Ecto stuff removed):
The lower barrier is around 10 MB (empty app without any hex dependencies) for stripped releases (unstripped: ~ 18 MB).
Furthermore there is also the option –zip, but you should use it only if you know that there are no NIFs in your app or its dependencies. (The savings of this compression are pretty small and not really worth the effort, as docker images are compressed anyway.)
Happy (tiny) image building!
Fluxter v0.3.1—an InfluxDB writer for Elixir—has been released
New version supports “batching”: a batch is a metric aggregator designed to locally aggregate an numeric value and flush the aggregated value only once to the storage, as a single metric.
This is very useful when you have the need to write a high number of metrics in a very short amount of time. Doing so can have a negative impact on the speed of your code and can also cause network packet drops.
Elixir's Behaviours vs Protocols
I often see people ask about the difference between Behaviours & Protocols. They exist in the same topic space of bringing polymorphic attributes to Elixir, but they do so by working with different parts of the language.
If you’d like to read more: Behaviours vs Protocols: what’s the difference anyway?
Creating Elixir libraries as OTP applications
I wrote a blog post about the topic https://www.amberbit.com/blog/2016/5/10/creating-elixir-libraries-as-otp-applications/
Chronic 1.1.0 released
Chronic is a natural language date time parser written in Pure Elixir. It’s a re-implementation of the Chronic gem from Ruby-land.
You can use it to parse times like:
Chronic.parse("Tuesday 9am")
Into their Calendar.NaiveDateTime versions.
tqdm 0.0.2 released
Hi everyone!
I have just released tqdm, a (partial) Elixir port of the popular Python library of the same name.
tqdm allows you to add CLI progress bars to your long running processes in a second. Just wrap your enumerables (that is, Lists, Maps, Streams, Ranges, and anything else that has an Enumerable implementation) in Tqdm.tqdm, and it will look something like this:
Check out the docs and start adding progress bars to your CLI apps today!
ex_cli 0.1.0 released
I just released ex_cli 0.1.0, a library to build user friendly CLI applications.
It provides a nice DSL to define a CLI app, takes care of parsing arguments, displaying meaningful error messages and formatting usage. More cool stuff, such as per-command help and man page generation, is coming. See the roadmap for more info.
Here is a small screencast of the generated CLI app.
which is generated by writing a module like this:
defmodule MyApp.xCLI do
use ExCLI.DSL, escript: true
name "mycli"
command :hello do
description "Greets the user"
argument :name
option :from
run context do
if from = context[:from] do
IO.write("#{from} says")
end
IO.puts("Hello #{context.name}!")
end
end
end
For more info, checkout the repository:
couchdb_connector 0.3.0 released
Just one day after ElixirConf.EU, here comes a new release of couchdb_connector \o/
Version 0.3.0 sports basic authentication as its biggest new feature, plus some small improvements and enhancements.
Family Ties part 3 posted - conventions and tricks around names in Erlang and Elixir
Posted the third of a continuing series of articles on similarities and differences between Erlang and Elixir. This article covers naming rules and conventions in the two languages, and some tricks for getting around their differences.
http://daniel-azuma.com/blog/2016/05/12/family-ties-3-its-all-in-a-name
Let's Build Something: Elixir, Part 5b - Testing Our Data Validation and Logging
Finishing up Part 5 with some more tests, particularly around capturing log events. http://tech.strofcon.org/2016/05/lets-build-something-elixir-part-5b.html
