Llevo algún tiempo trabajando con Erlang/OTP y con sus facilidades a la hora de realizar prácticamente cualquier cosa. En lo que respecta al desarrollo de servicios concurrentes, de alta disponibilidad y sistemas críticos, es ideal.

Lo único que ha sido una piedra en el camino, es la curva de aprendizaje y la cantidad de código a modo de plantilla que hace falta para poder programar de forma rápida.

Por todo esto, decidí hacer un sistema de scripts (para Mac OS X y GNU/Linux, en principio, aunque en sistemas Solaris, HPUX, AIX, BSD, y demás sabores de Unix pueda funcionar sin cambios, e incluso en Windows a través de Cygwin), que faciliten la creación de proyectos y módulos de tipo OTP dentro del proyecto que se quiera desarrollar.

ACTUALIZACIÓN (11/05/2016): Este proyecto ha sido abandonado en favor del uso de rebar3 que integra relx y hex para facilitar la generación de liberaciones y la instalación de dependencias.

Trabajando con Erlang/OTP

En principio, cuando se realiza un proyecto de tipo Erlang/OTP, es normal tener un entorno que pueda compilar y ejecutar el código de forma adecuada. Una vez se quiere pasar eso a producción, tal y como funcionan estos elementos que son de tipo servidor, se debe de realizar la ejecución de forma que cargue la aplicación y la lance junto con todas sus dependencias.

En este aspecto, los procedimientos para realizar estas tareas son algo tediosos y muy repetitivos, ya que por cada aplicación hay que generar un fichero de tipo app que describa y configure el entorno en el que se va a ejecutar la aplicación, un fichero de tipo rel que especifique las dependencias y el código en sí que se debe de poner en producción, además del código en sí, un módulo que debe obtener el comportamiento específico de la aplicación (behaviour application).

Una vez realizado todo esto, tenemos la base para la instalación. Pero el sistema debe de poder construirse, por lo que hace falta algo como make (erlang tiene un sistema make integrado que puede usarse fácilmente), que permita compilar y limpiar el entorno de trabajo, así como instalar el resultado.

La creación de este entorno, ya sabiendo lo que había que ir poniendo y tratando de no olvidar nada, me llevaba mucho tiempo, por lo que me decanté por construir un sistema genérico que pudiese realizar estas tareas de forma automática.

ErlDev

El sistema ErlDev consiste en una serie de scripts que se encargan de realizar las tareas básicas, pero más costosas y propensas a error, que se originan al principio del proyecto.

Este sistema fue desarrollado con la principal idea en mente de: ser sencillo, fácil y flexible. Poco a poco a ido evolucionando la idea hasta llegar a lo que, en su versión 1.0, ha llegado a ser: un sistema completo y robusto para desarrollar aplicaciones Erlang/OTP.

Las herramientas de que dispone el sistema son:

  • elrmk: es la herramienta que nos creará el proyecto base. Se encarga de crear el esqueleto al que después se puede ir agregando el código, directamente, de la aplicación y los módulos que se requiera/necesiten.
  • erlmod: dentro de un proyecto, se encarga de crear un módulo de tipo: gen_server, gen_fsm, gen_event, supervisor o application. Estos son los comportamientos básicos de OTP. Poco a poco se irán incluyendo más plantillas.
  • erlget: como la reutilización de código es una realidad innegable, hemos acumulado en un repositorio mucho software libre útil para Erlang, dando la posibilidad de instalar dentro del propio proyecto cualquiera de los paquetes y utilizarlo directamente.

¿Más cosas?

Creo que ya lo mejor es que, si ya sabes algo de Erlang y OTP, te lances a comenzar a usar el sistema. Lee un poco la documentación y si tienes alguna sugerencia o mejora... ¡me encantaría oirla!