Una gota de Elixir
Rafael Gutiérrez, @abaddon_gtz, Tunatech, SLP 2017
rgutierrez@nearsoft.com
Un vistazo al ecosistema Erlang y Elixir.
About me
● Nearsoft
● IPN
● 16 Muchos años de experiencia
● Java, Groovy, C/C++
● Spring Core/Web Certified Developer
● Gusto por diseñar aplicaciones robustas
● Programación OO y funcional
Por qué esta plática?
● Aprender programación funcional
● Clojure
○ Demasiados paréntesis
● Aprender Erlang
○ Perdi el interes
● Elixir!
Erlang, la plataforma
● Creado en Ericsson en 1986.
● Liberado como open source en 1988.
● Programación funcional.
● Diseñado para crear aplicaciones escalables, tolerante a
fallos, distribuido, non-stop y soft-realtime.
● Concurrencia ligera.
● Distribucion transparente.
Concurrencia ligera y distribuida
● Procesos ligeros
● Independientes del sistema operativo
● Comunicación entre procesos sólo por mensajería
asíncrona.
○ No comparten datos (memoria)
● Cada proceso tiene su buzón de mensajes independiente
● Modelo de Actores
● Filosofia: Let it crash!
Elixir, el lenguaje
● Creado por Jose Valim.
● Primera aparición 2011, versión 1.0 en 2014.
● Influencia de Erlang, Ruby & Clojure.
● Compila para la Erlang VM (BEAM).
● Bibliotecas de Erlang pueden ser usadas en Elixir.
○ Y viceversa.
● Programación Funcional ( |> )
● Extensible via meta-programación (DSL’s)
● Ecosistema creciendo
A week with Elixir
https://joearms.github.io/2013/05/31/a-week-with-elixir.html
OTP, mas que un framework
● Open Telecom Platform
○ Ya no es sobre telecomunicaciones
● Biblioteca
● Framework
● Abstracción de procesos comunes
● Buenas prácticas
● Ambiente de desarrollo para programación concurrente
OTP
OTP Behaviours (comportamientos)
● Procesos ++
● Servidor Generico: GenServer
● Supervisor de Procesos: Supervisor
GenServer
● Servidor en una relación cliente-servidor
● Proceso que mantiene estado
● Ejecución síncrona y asíncrona
● El programador solo implementa callbacks
Supervisor
● Supervisor de procesos (GenServers)
● Árbol de procesos
● Provee tolerancia a fallos
● Estrategias de Supervision
○ Uno por uno
○ Uno por todos
○ El resto por uno
○ Simple uno por uno
Phoenix, el framework web
● Rapido y confiable
● Cada petición es un proceso
● Pipelines
● Interactivo
○ Comandos para controladores, modelos, etc.
● Channels (websockets)
○ Web, iOS, Android
● Productividad de Rails (Ruby)
● Facil de usar
Capas de Phoenix
connection
|> endpoint
|> router
|> pipeline
|> controller
Pipelines con Plug
● Especificación para módulos “armables”
● Plug especifica la conexión
● Plug esta en todo Phoenix
Ecto, persistencia a lo funcional
● Lenguaje de consulta integrado a Elixir
● Escribir consultas SQL
○ No busca abstraer SQL del usuario
● Migraciones de base de datos
● Se compone de
○ Repo
○ Model
○ Query
○ Changesets
Esquemas de Ecto
● Mapean valores de Elixir a la base de datos
Consultas de Ecto
● Validación de sintaxis y tipos
● Seguridad
● Composición
Changesets
● Filtro de datos, tipos, validación y reglas/restricciones de
datos.
● changeset.valid?, changeset.data, changeset.errors
Migraciones
● Modificar la estructura de la base
● Versionamento
Rafael Gutiérrez
abaddon_gtz
rgutierrez@nearsoft.com

Una gota de elixir 2017

  • 1.
    Una gota deElixir Rafael Gutiérrez, @abaddon_gtz, Tunatech, SLP 2017 rgutierrez@nearsoft.com Un vistazo al ecosistema Erlang y Elixir.
  • 2.
    About me ● Nearsoft ●IPN ● 16 Muchos años de experiencia ● Java, Groovy, C/C++ ● Spring Core/Web Certified Developer ● Gusto por diseñar aplicaciones robustas ● Programación OO y funcional
  • 3.
    Por qué estaplática? ● Aprender programación funcional ● Clojure ○ Demasiados paréntesis ● Aprender Erlang ○ Perdi el interes ● Elixir!
  • 4.
    Erlang, la plataforma ●Creado en Ericsson en 1986. ● Liberado como open source en 1988. ● Programación funcional. ● Diseñado para crear aplicaciones escalables, tolerante a fallos, distribuido, non-stop y soft-realtime. ● Concurrencia ligera. ● Distribucion transparente.
  • 6.
    Concurrencia ligera ydistribuida ● Procesos ligeros ● Independientes del sistema operativo ● Comunicación entre procesos sólo por mensajería asíncrona. ○ No comparten datos (memoria) ● Cada proceso tiene su buzón de mensajes independiente ● Modelo de Actores ● Filosofia: Let it crash!
  • 8.
    Elixir, el lenguaje ●Creado por Jose Valim. ● Primera aparición 2011, versión 1.0 en 2014. ● Influencia de Erlang, Ruby & Clojure. ● Compila para la Erlang VM (BEAM). ● Bibliotecas de Erlang pueden ser usadas en Elixir. ○ Y viceversa. ● Programación Funcional ( |> ) ● Extensible via meta-programación (DSL’s) ● Ecosistema creciendo
  • 11.
    A week withElixir https://joearms.github.io/2013/05/31/a-week-with-elixir.html
  • 12.
    OTP, mas queun framework ● Open Telecom Platform ○ Ya no es sobre telecomunicaciones ● Biblioteca ● Framework ● Abstracción de procesos comunes ● Buenas prácticas ● Ambiente de desarrollo para programación concurrente
  • 13.
  • 14.
    OTP Behaviours (comportamientos) ●Procesos ++ ● Servidor Generico: GenServer ● Supervisor de Procesos: Supervisor
  • 15.
    GenServer ● Servidor enuna relación cliente-servidor ● Proceso que mantiene estado ● Ejecución síncrona y asíncrona ● El programador solo implementa callbacks
  • 16.
    Supervisor ● Supervisor deprocesos (GenServers) ● Árbol de procesos ● Provee tolerancia a fallos ● Estrategias de Supervision ○ Uno por uno ○ Uno por todos ○ El resto por uno ○ Simple uno por uno
  • 17.
    Phoenix, el frameworkweb ● Rapido y confiable ● Cada petición es un proceso ● Pipelines ● Interactivo ○ Comandos para controladores, modelos, etc. ● Channels (websockets) ○ Web, iOS, Android ● Productividad de Rails (Ruby) ● Facil de usar
  • 18.
    Capas de Phoenix connection |>endpoint |> router |> pipeline |> controller
  • 19.
    Pipelines con Plug ●Especificación para módulos “armables” ● Plug especifica la conexión ● Plug esta en todo Phoenix
  • 20.
    Ecto, persistencia alo funcional ● Lenguaje de consulta integrado a Elixir ● Escribir consultas SQL ○ No busca abstraer SQL del usuario ● Migraciones de base de datos ● Se compone de ○ Repo ○ Model ○ Query ○ Changesets
  • 21.
    Esquemas de Ecto ●Mapean valores de Elixir a la base de datos
  • 22.
    Consultas de Ecto ●Validación de sintaxis y tipos ● Seguridad ● Composición
  • 23.
    Changesets ● Filtro dedatos, tipos, validación y reglas/restricciones de datos. ● changeset.valid?, changeset.data, changeset.errors
  • 24.
    Migraciones ● Modificar laestructura de la base ● Versionamento
  • 25.