Rambo. Run your command. Send EOF. Get output.
Ever stumped trying to get output from a port?
Rambo has one mission. Start your program, pipe standard input, send EOF and return with output.
Rambo.run("ls") |> Rambo.run("sort") |> Rambo.run("head")
Pachyderm - Virtual actor framework for durable, globally unique processes
Pachyderm is built to allow developers to work with “effectively” unique processes
Testing your Phoenix + Postgres app with GitHub CI
GitHub recently released their own CI. solution recently. Its documentation is kind of overwhelming, so I wrote a step-by-step guide for testing a phoenix + postgres app in GitHub CI.
Portfolio returns with Elixir, React and Redux
I created a simple tool using Elixir, React and Redux which shows the returns of a financial portfolio over time. It enables users to change a set of parameters (e.g. region, monthly deposits, rebalancing strategy), and compare the results.
Grapevine Updates for June - August 2019
Grapevine is a community site for text based games (MUDs). It’s an open source application so you can see how it all works! The latest updates are better stats and a web chat that was rebuilt with React.
Beware of Tests et Fudicia Ferentes
Extremely biased and exaggerated writing on why I personally think the tests are overrated and in some cases bring more harm than profit.
http://rocket-science.ru/hacking/2019/08/28/beware-of-tests-et-fiducia-ferentes
ElixirMix Podcast 066 - Going with the Flow with John Mertens
In this episode of ElixirMix, we talk with John Mertens about how Change.org Elixir to deliver huge numbers of messages. We discuss Flow vs Broadway, how Plataformatec was involved, the importance of observability, and much more!
Domain holding with Elixir, Nerves, and LiveView
Use Elixir and Phoenix to host the landing pages for all of your pending projects!
erlang-rocksdb version 1.3 a binding of RocksDB for applications based on Erlang has been released.
This release brings the support of windows, the new version 6.2.2 of rocksdb and some other fixes.
Mor info about the release on Gitlab: https://gitlab.com/barrel-db/erlang-rocksdb
To get started: https://gitlab.com/barrel-db/erlang-rocksdb
Enjoy!
Benoît
Financial Portfolio rebalancing with Elixir
In this post I cover about the “Permanent Portfolio”, and how to use Elixir and real-time pricing information to rebalance the portfolio and profit from that.
https://elviovicosa.com/2019/08/25/financial-portfolio-rebalancing-with-elixir/
Scaffolds Backed Up By Behaviours
How to learn from Broadway architecture to build internal packages simplifying business logic encapsulation.
http://rocket-science.ru/hacking/2019/08/26/behaviour-backed-scaffolds
Ecto Embedded Schemas — Quick search through a JSONB array in PostgreSQL
How to create embedded schemas in Ecto to save a JSON data structure on your database + how to implement a direct database search on this same field.
Read more on Coletiv Blog
Writing your first Elixir code check
Learn how to analyze and validate Elixir code by taking a mind-blowing journey through string scanning, AST traversal and code compilation.
Read more on Cloudless Studio blog.
Avrora – convenient encoding/decoding messages with Avro
I would like to present a new library for convenient work with Avro serialization – Avrora.
It supports encoding/decoding:
- Avro Object Container Files format
- Confluent Schema Registry format
- Plain messages format (when you just want a message body)
In the case of the schema registry, it will also a register new schema. Here is an example with Object Container Files.
Let’s say you have this Payment schema stored in a file priv/schemas/io/confluent/Payment.avsc
{
"type": "record",
"name": "Payment",
"namespace": "io.confluent",
"fields": [
{
"name": "id",
"type": "string"
},
{
"name": "amount",
"type": "double"
}
]
}
To encode payment message with Payment.avsc schema
iex> {:ok, pid} = Avrora.start_link()
iex> message = %{"id" => "tx-1", "amount" => 15.99}
iex> {:ok, encoded} = Avrora.encode(message, schema_name: "io.confluent.Payment")
<<79, 98, 106, 1, 3, 204, 2, 20, 97, 118, 114, 111, 46, 99, 111,
100, 101, 99, 8, 110, 117, 108, 108, 22, 97, 118, 114, 111, 46,
115, 99, 104, 101, 109, 97, 144, 2, 123, 34, 110, 97, 109, 101,
115, 112, 97, 99, 101, 34, 58, 34, 105, 111, 46, 99, 111, 110,
102, 108, 117, 101, 110, 116, 34, 44, 34, 110, 97, 109, 101, 34,
58, 34, 80, 97, 121, 109, 101, 110, 116, 34, 44, 34, 116, 121,
112, 101, 34, 58, 34, 114, 101, 99, 111, 114, 100, 34, 44, 34,
102, 105, 101, 108, 100, 115, 34, 58, 91, 123, 34, 110, 97, 109,
101, 34, 58, 34, 105, 100, 34, 44, 34, 116, 121, 112, 101, 34, 58,
34, 115, 116, 114, 105, 110, 103, 34, 125, 44, 123, 34, 110, 97,
109, 101, 34, 58, 34, 97, 109, 111, 117, 110, 116, 34, 44, 34,
116, 121, 112, 101, 34, 58, 34, 100, 111, 117, 98, 108, 101, 34,
125, 93, 125, 0, 138, 124, 66, 49, 157, 51, 242, 3, 33, 52, 161,
147, 221, 174, 114, 48, 2, 26, 8, 116, 120, 45, 49, 123, 20, 174,
71, 225, 250, 47, 64, 138, 124, 66, 49, 157, 51, 242, 3, 33, 52,
161, 147, 221, 174, 114, 48>>
iex> {:ok, decoded} = Avrora.decode(message, schema_name: "io.confluent.Payment")
%{"id" => "tx-1", "amount" => 15.99}
Easy as it should be! Yaw ❤️
TIL How to Select Merge with Ecto.Query
In this post, you’ll learn why and when you might want to use Ecto.Query#select_merge/3 when querying data from unassociated tables: https://medium.com/flatiron-labs/til-how-to-select-merge-with-ecto-query-679d03204b9d
10 Common Code Refactoring Experiences|Elixir
https://medium.com/blackode/elixir-code-refactoring-techniques-33589ac56231
This article comprises of common Elixir coding techniques that you may or may not know.
A Jist of the Article
We usually encounter a situation like we expect a map has certain key and if not we need to send some default value.
Immediately, we will end up using Map.has_key? like in the following way
currency =
if(Map.has_key? price, "currency") do
price["currency"]
else
"USD"
If you see any such lines in your code then it is time to refactor them as
currency = Map.get(price, "currency", "USD")
However, you can also take this to the next level like
currency = price["currency"] || "USD"
How to Use Elixir's Compiler to Avoid Typos
In this article, I want to describe how you can use elixir metaprogramming to avoid some runtime errors caused by typos. If you’re passing around some handcrafted messages ex. %{name: “app_one_hello”, payload: “payload”} you can easily introduce errors. Sending app_one_hello and listening for app_ane_hello will not make your system works correctly. Imagine you have thousands of messages. It’s really hard to manage them like that. To make things better, you can create a list of all messages and generate functions to send and receive them. Now when you will create a typo, elixir’s compiler will tell you!
Full article here: https://puddleofcode.com/story/how-to-use-elixir-s-compiler-to-avoid-typos
“mix release” and missing dependencies
I have stumbled upon a problem where some of my dependencies were missing in the releases and <a href=”https://www.amberbit.com/blog/2019/8/23/mix-release-and-missing-dependencies/“>wrote a blog post about it</a>.
SmartSoftware S2E7 - Todd Resudek on Hex // Elixir Internals
We talked with Todd about Hex, the Erlang ecosystem package manager, including its top five underground features and what’s in the pipeline for upcoming features.
