Upload
manuel-angel-rubio-jimenez
View
370
Download
1
Embed Size (px)
DESCRIPTION
Charla sobre ChicagoBoss y Erlang/OTP dada en el Betabeers número 10 de Córdoba.
Citation preview
ChicagoBossManuel Ángel Rubio Jiménez
¿Quién soy?
○ Programador desde los 12 años... unos 20 años programando en: Perl, Python, Ruby, PHP, Java, C/C++, JavaScript, Pascal, Modula-2, Basic y Erlang.
○ Administrador de sistemas desde los 22 años... unos 10 años administrando Windows, GNU/Linux y BSD.
○ En definitiva... DevOps.
○ Fundador de Altenwald y Freelance.
○ Contacto:
○ Blog: http://bosqueviejo.net
○ Twitter: @MRonErlang
Desarrollo web
¿Qué es Erlang?
¿Qué es Erlang?
○ Nació en 1986 como una extensión de Prolog en los laboratorios Ericsson.
○ Lenguaje○ ¿Funcional o no? ... mejor híbrido.○ Orientado a la Concurrencia... Modelo Actor
○ Máquina Virtual o Plataforma○ Gestión y Planificador de Procesos (soporta más de 1.000.000 procs)○ Gestor de Memoria○ Intérprete de comandos (shell)○ Interfaz transparente para comunicación entre nodos
○ Características○ Distribuido○ Tolerante a fallos○ Escalable○ Cambio de código en caliente
¿Quién usa Erlang?
Progresión Informática
○ Carrera de los Hertzios vs Cores
Cuando estás en un atasco de tráfico con un Porsche, todo lo que puedes hacer es consumir más combustible que el resto estando parado. La escalabilidad va de construir
carreteras más anchas, no coches más rápidos.-- Steve Swartz
○ Programación Orientada a Objetos se atribuye a Alan Kay (Smalltalk)
○ Modelo Actor se atribuye a Carl Hewitt por un estudio de 1977.
OOP vs Actor Model
OOP vs Actor Model
Apache vs Yaws
Comportamientos - OTP
○ gen_server: servidores genéricos, actores base.
○ gen_fsm: máquinas de estados finitos.
○ gen_event: manejadores de eventos.
○ supervisor: supervisión de procesos.
○ application: estructura de aplicación.
Sup
Sup Srv FSM
Srv
App
-module(ascensor).-behaviour(gen_fsm).-compile([export_all]). % para simplificar, cambiar por -export(). start_link() -> gen_fsm:start_link({local, ?MODULE}, ?MODULE, [], []). init([]) -> {ok, planta_baja, []}. planta_baja(bajar, State) -> io:format("Beeep!, opcion incorrecta~n", []), {next_state, planta_baja, State};planta_baja(subir, State) -> io:format("Subiendo a la planta primera~n", []), {next_state, planta_primera, State}. planta_primera(bajar, State) -> io:format("Bajando a la planta baja~n", []), {next_state, planta_baja, State};planta_primera(subir, State) -> io:format("Subiendo a la planta segunda~n", []), {next_state, planta_segunda, State}. planta_segunda(bajar, State) -> io:format("Bajando a la planta primera~n", []), {next_state, planta_primera, State};planta_segunda(subir, State) -> io:format("Beeep!, opcion incorrecta~n", []), {next_state, planta_segunda, State}. % agregamos funciones para facilitar las llamadas% estas son opcionales: boton_subir() -> gen_fsm:send_event(?MODULE, subir). boton_bajar() -> gen_fsm:send_event(?MODULE, bajar).
EjemploFiniteStateMachine
Modelos
○ Soporte base de datos SQL y NoSQL:○
❖ Riak❖ DynamoDB❖ Mnesia❖ MongoDB❖ Tokyo Tyrant❖ MySQL❖ PostgreSQL
○ Código muy simple:
-module(users,[Id,Name,Password,Email]).-compile([export_all]).
Rutas
➔ Basado en Rails y Django:
% Front page{“/”, [{controller, “users”}, {action, “index”}]}.
% Error pages{404, [{controller, “error”}, {action, “err404”}]}.
% Other examples:{“/login”, [{controller, “users”}, {action, “login”}]}.
{“/reset/(?<code>[0-9a-f]+)”, [ {controller, “user”}, {action, “reset”}]}.
Controlador
➔ Basado en REST
➔ Salidas disponibles
◆ Template (vista)◆ JSON◆ JSONP◆ Plain Text◆ Stream
➔ Código
-module(myapp_users_controller,[Req,SessionID]).-compile([export_all]).
index(‘GET’, []) -> {ok, []}.
Vista
➔ Basado en DTL (Django Template Library) Compatible al 99%
<html><head> <title>{{ webtitle }}</title></head><body> <table> {% for user in users %} <tr> <td>{{ user.name }}</td> <td>{{ user.email }}</td> </tr> {% endfor %}</body></html>
Rendimiento
➔ 10 veces más rápido que PHP
➔ PHP renderiza a 150-600ms
➔ ChicagoBoss renderiza a 10ms o menos
Libros en inglés
Libro en castellano
Descarga PDF gratuita
http://erlang.bosqueviejo.net
Compra en Papel
¿Preguntas?
Agradecimientos
○ Organización de BetaBeers Córdoba
○ ¡A todos vosotros por asistir!