chicago boss - altenwald - betabeers x córdoba

21
ChicagoBoss Manuel Ángel Rubio Jiménez

Upload: manuel-angel-rubio-jimenez

Post on 09-Jul-2015

370 views

Category:

Technology


1 download

DESCRIPTION

Charla sobre ChicagoBoss y Erlang/OTP dada en el Betabeers número 10 de Córdoba.

TRANSCRIPT

Page 1: Chicago boss - Altenwald - Betabeers X Córdoba

ChicagoBossManuel Ángel Rubio Jiménez

Page 2: Chicago boss - Altenwald - Betabeers X Córdoba

¿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

Page 3: Chicago boss - Altenwald - Betabeers X Córdoba

Desarrollo web

Page 4: Chicago boss - Altenwald - Betabeers X Córdoba

¿Qué es Erlang?

Page 5: Chicago boss - Altenwald - Betabeers X Córdoba

¿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

Page 6: Chicago boss - Altenwald - Betabeers X Córdoba

¿Quién usa Erlang?

Page 7: Chicago boss - Altenwald - Betabeers X Córdoba

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.

Page 8: Chicago boss - Altenwald - Betabeers X Córdoba

OOP vs Actor Model

Page 9: Chicago boss - Altenwald - Betabeers X Córdoba

OOP vs Actor Model

Page 10: Chicago boss - Altenwald - Betabeers X Córdoba

Apache vs Yaws

Page 11: Chicago boss - Altenwald - Betabeers X Córdoba

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

Page 12: Chicago boss - Altenwald - Betabeers X Córdoba

-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

Page 13: Chicago boss - Altenwald - Betabeers X Córdoba

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]).

Page 14: Chicago boss - Altenwald - Betabeers X Córdoba

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”}]}.

Page 15: Chicago boss - Altenwald - Betabeers X Córdoba

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, []}.

Page 16: Chicago boss - Altenwald - Betabeers X Córdoba

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>

Page 17: Chicago boss - Altenwald - Betabeers X Córdoba

Rendimiento

➔ 10 veces más rápido que PHP

➔ PHP renderiza a 150-600ms

➔ ChicagoBoss renderiza a 10ms o menos

Page 18: Chicago boss - Altenwald - Betabeers X Córdoba

Libros en inglés

Page 19: Chicago boss - Altenwald - Betabeers X Córdoba

Libro en castellano

Descarga PDF gratuita

http://erlang.bosqueviejo.net

Compra en Papel

Page 20: Chicago boss - Altenwald - Betabeers X Córdoba

¿Preguntas?

Page 21: Chicago boss - Altenwald - Betabeers X Córdoba

Agradecimientos

○ Organización de BetaBeers Córdoba

○ ¡A todos vosotros por asistir!