This week I have released my two first contributions to the elixir open source community in hex : Galena and Conejo . Galena is a library based on GenStage that will help you to create your topic producer-consumer data pipelines. Conejo is an OTP application/library that facilitate the creation of publishers and consumers of RabbitMQ or AMQP servers.
Currently I am working in a project where I have to integrate many real-time data sources and show the results to the users as soon as possible. As you can imagine Elixir + PhoenixFramework are my chosen tools. This kind of projects always imply a lot of challenges that we have to solved (check my fork of Floki ). But the tedious one has not been directly related with the particular case of this project, it has been dealing with Brunch .
I like a lot RabbitMQ . It is a really good system when you have to work with events and build your systems with asynchrony in mind. Although silver bullets do not exist in the SW world, when you require a complex routing, scalability and reliability, RabbitMQ is your system. I usually work in a polyglot environment, but when one of the systems has to deal with a lot of connections (i.
Scala is a general purpose programming language that compiles to Java bytecode, therefore, it will run on the JVM . You can code is Scala using an object-oriented approach or a functional approach but almost everybody who codes in Scala tries to do it using the second one. But, why? You only need to search on Google and you will find the benefits that are told for many people about immutability like: Thread Safe, Concurrency, Scalability, Maintainability, Performance and many more.
Since I discovered the couple Mesos - Marathon , I always try to use them to put my projects on production. They provide web interfaces where you can check your apps, a very easy REST API in order to interact with the apps, an easy way of managing the resources of your cluster and the most important part for me, High Availability. Marathon provides support for Docker containers what is a wonderful piece of news.
Elixir is a really awesome language which runs in the Erlang Virtual Machine ( BEAM ). So it takes advantage of all the concurrent and distribution features of Erlang by free. In order to demonstrate it I have decided to develop a proof of concept (PoC) of a Publisher-Subscriber system only using Elixir. Coding I will begin building a Publisher.
After the Facebook F8 of this year the new buzzword is ChatBot and I decided to build one using Telegram Bot API . My ChatBot's name is Monkey Note Bot and it is a Telegram Bot which will take care of your lists of notes. Typing a command like "Addnotes shopping bread. milk. eggs" (Dots are easier in the mobile than commas) MonkeyNoteBot will add to the list "
Currently all systems try to be real time systems, or at least soft-real-time systems. In order to get it, most of the systems abuse of pulling methodology. This approach provokes a lot of useless requests that cause overloading. Why are they useless? Because this approach tries to catch the changes requesting and requesting over and over, but it will always have a delay. The new data has to be there when the request is done.
Who have not heard about microservices ? Microservices is a software architecture approach which tries to decouple functionalities which will be served by very focused and small systems. When I say small I mean smaller. These systems will provide their functionalities through a known API . Therefore this approach will help us to scale up our software systems by breaking them up (good bye to monolithic system problems !
This week I had to identify from where the users are connecting to one of our platforms in Palmtree Statistics. The http request always provides the IP of the client, and that was enough, but I wanted to get something else. Torip is an open source project based on Tornado Networking Library . Torip will provide you information like city, country or the url of google maps which will point to the client.