Posts by José Valim

Small data with Elixir

This is the first article in a series of articles about “small data” (in contrast to “big data”) in Elixir. We will start by defining what is “small data”, why it matters and then briefly describe the Flow tool and what to expect in the next articles of the series. How small is small? We … »

Many to many and upserts

Note: This is a sample chapter of the upcoming beta version of our “What’s new in Ecto 2.0” free book. Reserve Download your copy now if you want to receive the next beta and be notified of future versions. In the previous chapter we have learned about many_to_many associations and how to map external data … »

Replacing GenEvent by a Supervisor + GenServer

The downsides of GenEvent have been extensively documented. For those reasons, the Elixir team has a long term plan of deprecating GenEvent. Meanwhile, we are introducing tools, such as Registry (upcoming on Elixir v1.4) and GenStage, which better address domains developers would consider using GenEvent for. However, there is a very minimal replacement for GenEvent … »

Dynamic forms with Phoenix

Today we will learn how to build forms in Phoenix that use our schema information to dynamically show the proper input fields with validations, errors and so on. We aim to support the following API in our templates: <%= input f, :name %> <%= input f, :address %> <%= input f, :date_of_birth %> <%= input … »

Beyond Functional Programming with Elixir and Erlang

I would like to add a slightly different perspective to functional programming in the Erlang VM: functional programming is not a goal in the Erlang VM. It is a means to an end. When designing the Erlang language and the Erlang VM, Joe, Mike and Robert did not aim to implement a functional programming language, … »

Ecto’s insert_all and schemaless queries

One of the functions added to Ecto 2.0 is Ecto.Repo.insert_all/3. insert_all allows developers to insert multiple entries at once into a repository: MyApp.Repo.insert_all(Post, [[title: “hello”, body: “world”], [title: “another”, body: “post”]]) Although insert_all is just a regular Elixir function, it plays an important role in Ecto 2.0 goals. To understand more about these goals, let’s … »