SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
ChicagoBoss
Manuel Á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
App

○

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

Srv

FSM
-module(ascensor).
-behaviour(gen_fsm).
-compile([export_all]). % para simplificar, cambiar por -export().

Ejemplo
Finite
State
Machine

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

Compra en Papel

http://erlang.bosqueviejo.net
¿Preguntas?
Agradecimientos
○ Organización de BetaBeers Córdoba

○ ¡A todos vosotros por asistir!

Más contenido relacionado

Similar a Chicago boss - Altenwald - Betabeers X Córdoba

Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación Vladimir Pomares
 
MuleSoft Buenos Aires Meetup Introducción Dataweave
MuleSoft Buenos Aires Meetup Introducción DataweaveMuleSoft Buenos Aires Meetup Introducción Dataweave
MuleSoft Buenos Aires Meetup Introducción DataweaveFlorenciaCattelani
 
00 introducción a Python
00 introducción a Python00 introducción a Python
00 introducción a PythonJuan Rodríguez
 
Programando con Python
Programando con PythonProgramando con Python
Programando con PythonMario IC
 
Tema 2 - Programación básica en C (III)
Tema 2  - Programación básica en C (III)Tema 2  - Programación básica en C (III)
Tema 2 - Programación básica en C (III)Pablo Haya
 
Openmeetings+En+Xp
Openmeetings+En+XpOpenmeetings+En+Xp
Openmeetings+En+Xpguestad4dd2f
 
Python - Programación para machos
Python - Programación para machosPython - Programación para machos
Python - Programación para machosJorge Hernandez
 
Practica integradora1 identifica los sistemas operativos para instalar y conf...
Practica integradora1 identifica los sistemas operativos para instalar y conf...Practica integradora1 identifica los sistemas operativos para instalar y conf...
Practica integradora1 identifica los sistemas operativos para instalar y conf...Noemi Jara
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosaFco Javier Núñez Berrocoso
 
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez.NET UY Meetup
 
Programación modular estructurada.ppt
Programación modular estructurada.pptProgramación modular estructurada.ppt
Programación modular estructurada.pptLeydi Hernandez
 

Similar a Chicago boss - Altenwald - Betabeers X Córdoba (20)

Programacion
ProgramacionProgramacion
Programacion
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de Programacion
 
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
 
MuleSoft Buenos Aires Meetup Introducción Dataweave
MuleSoft Buenos Aires Meetup Introducción DataweaveMuleSoft Buenos Aires Meetup Introducción Dataweave
MuleSoft Buenos Aires Meetup Introducción Dataweave
 
Principios de Programacion
Principios de ProgramacionPrincipios de Programacion
Principios de Programacion
 
00 introducción a Python
00 introducción a Python00 introducción a Python
00 introducción a Python
 
Introducción
IntroducciónIntroducción
Introducción
 
Programando con Python
Programando con PythonProgramando con Python
Programando con Python
 
Acmar trucos de visual basic(2)
Acmar   trucos de visual basic(2)Acmar   trucos de visual basic(2)
Acmar trucos de visual basic(2)
 
Tema 2 - Programación básica en C (III)
Tema 2  - Programación básica en C (III)Tema 2  - Programación básica en C (III)
Tema 2 - Programación básica en C (III)
 
Openmeetings+En+Xp
Openmeetings+En+XpOpenmeetings+En+Xp
Openmeetings+En+Xp
 
Parte i curso c
Parte i curso cParte i curso c
Parte i curso c
 
Unidad 2 curso c
Unidad 2 curso cUnidad 2 curso c
Unidad 2 curso c
 
Python - Programación para machos
Python - Programación para machosPython - Programación para machos
Python - Programación para machos
 
Practica integradora1 identifica los sistemas operativos para instalar y conf...
Practica integradora1 identifica los sistemas operativos para instalar y conf...Practica integradora1 identifica los sistemas operativos para instalar y conf...
Practica integradora1 identifica los sistemas operativos para instalar y conf...
 
NIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓN
NIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓNNIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓN
NIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓN
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
 
Programación modular estructurada.ppt
Programación modular estructurada.pptProgramación modular estructurada.ppt
Programación modular estructurada.ppt
 
Vim python-mode
Vim python-modeVim python-mode
Vim python-mode
 

Último

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 

Último (12)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 

Chicago boss - Altenwald - Betabeers X Córdoba

  • 2. ¿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
  • 5. ¿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
  • 7. 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.
  • 8. OOP vs Actor Model
  • 9. OOP vs Actor Model
  • 11. Comportamientos - OTP App ○ 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 Srv FSM
  • 12. -module(ascensor). -behaviour(gen_fsm). -compile([export_all]). % para simplificar, cambiar por -export(). Ejemplo Finite State Machine 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).
  • 13. 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]).
  • 14. 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”} ]}.
  • 15. 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, []}.
  • 16. 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>
  • 17. Rendimiento ➔ 10 veces más rápido que PHP ➔ PHP renderiza a 150-600ms ➔ ChicagoBoss renderiza a 10ms o menos
  • 19. Libro en castellano Descarga PDF gratuita Compra en Papel http://erlang.bosqueviejo.net
  • 21. Agradecimientos ○ Organización de BetaBeers Córdoba ○ ¡A todos vosotros por asistir!