SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
Erlang/OTP
Un Mundo Concurrente
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
¿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?
Caso
○

En 2005, sistemas C++ y MySQL
○
○

○

Máx. 80 usuarios concurrentes
Crashes son muy frecuentes

En 2006, sistemas C++, Python y MySQL
○

Máx. 1.000 usuarios concurrentes

○

Requiere reinicios, el código es difícil de mantener... muchos errores
Caso
○

En 2005, sistemas C++ y MySQL
○
○

○

Máx. 80 usuarios concurrentes
Crashes son muy frecuentes

En 2006, sistemas C++, Python y MySQL
○
○

○

Máx. 1.000 usuarios concurrentes
Requiere reinicios, el código es difícil de mantener... muchos errores

En 2007, sistemas Erlang, Python y MySQL
○
○
○

De 20.000 a 1.000.000 de usuarios concurrentes en
De 500 a 50.000 peticiones por segundo
De 50 a 1.850 servidores
Caso
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
Sintaxis de Erlang
Solo hay dos tipos de lenguajes:
aquellos de los que la gente se queja y
aquellos que nadie usa.
-- Bjarne Stroustrup

Ejemplo típico del factorial
Sintaxis de Erlang
Solo hay dos tipos de lenguajes:
aquellos de los que la gente se queja y
aquellos que nadie usa.
-- Bjarne Stroustrup

Ejemplo típico del factorial (C)

factorial(int f) {
int i;
for (i=f-1; i>1; i--) {
f *= i;
}
return f;
}
Sintaxis de Erlang
Solo hay dos tipos de lenguajes:
aquellos de los que la gente se queja y
aquellos que nadie usa.
-- Bjarne Stroustrup

Ejemplo típico del factorial (C recursivo)

factorial(int f) {
if (f <= 1) {
return f;
}
return f * factorial(f-1);
}
Sintaxis de Erlang
Sintaxis de Erlang
Solo hay dos tipos de lenguajes:
aquellos de los que la gente se queja y
aquellos que nadie usa.
-- Bjarne Stroustrup

Ejemplo típico del factorial (Erlang)

factorial(0) -> 0;
factorial(1) -> 1;
factorial(N) -> N * factorial(N-1).
Características del Lenguaje
○

Asignaciones únicas
> A = 1.
1
> A = 2.
** exception error: no match of right hand side value 2

○

Lenguaje simple: case, if, try...catch y receive.
case Value of
12 when is_integer(Value) -> "OK";
_ -> "FAIL";
end.

○

Paso de mensajes
Pid = spawn(fun micode/0),
Pid ! "hola mundo!",
receive
Any -> io:format("OK")
end.
Características del Lenguaje
○

Capacidad numérica

1> fact:fact(128).
3856204823625804217356770659234636406174931095902235902788284032763734025751655435606
8616858850736153403005183305891634759217293226249885776611495524503935776003464470927
9247692495585280000000000000000000000000000000
2> fact:fact(1024).
5418528796058857283076921944683854738001553963538013444482870270683210612073376603733
1409841362145867190791884570898075393199416577018736826045413333372193910836752801276
4993769768292516937891165755680659663747947314518404886677672556125188694335251213677
2745219634307701337132057962484331288700884361716546902375183904529447322778084029321
5872206185380616280606392543531082218684823928713026169091421136225114468471388858788
1629252104046295315949943900357882410243934315037444113890806181406210863953275235375
8850185984515822295996545585412427891309024869442986109231533075791316757451464363040
2489082044290773456182736903050225279692655307296737099075874779312763510470246988966
7961462133026237158973227857814631807156427767644064591085076564783456324457736853810
3369817760804987077670463942726053414167791256977333745680374751866762659616656158846
8145026333704252266414186215704682568477336094432673749367667491509895376811294583162
6643856479027816385730291542667725665642276826058264393884514911976419675509290208592
7131563629832909894410527321251872495275013140716764055169361907818212367019122957673
6311705412658992991648200851578175195546691090283872923222450990638863814777125522778
2631322385756948819393658889908993670874516860653098...
Características del Lenguaje
○

Matching
> "Hola " ++ Quien = "Hola mundo!".
"Hola mundo!"
> Quien.
"mundo!"

○

Conjuntos
> A = [1,2,3,4,5], B = [2,4,6], A -- B.
[1,3,5]
> (A -- B) ++ (B -- A).
[1,3,5,6]

○

Binarios
{ok, PNG} = file:open("debian-logo.png", [read,binary]),
{ok, <<137,"PNG",13,10,26,10,Length:32,"IHDR">>} = file:read(PNG, 16),
{ok, <<Width:32, Height:32, Depth:8, Color:8>>} = file:read(PNG, 10),
{ok, <<Compression:8, Filter:8, Interlace:8>>} = file:read(PNG, 3),
file:close(PNG).
Características del Lenguaje
○

Listas de Comprensión
> [ X || X <- lists:seq(1,10), X rem 2 =:= 0 ].
[2,4,6,8,10]
> [ {X,2,X*2} || X <- lists:seq(1,10) ].
[{1,2,2},
{2,2,4},
{3,2,6},
{4,2,8},
{5,2,10},
{6,2,12},
{7,2,14},
{8,2,16},
{9,2,18},
{10,2,20}]
> [ X || X <- [1,5,9,3,2,6,5,4], X >= 5 ].
[5,9,6,5]
Recursividad
2

-module(mergesort).

5

1

3

4

0

-export([ordena/1]).

2

ordena([]) -> [];

5

1

3

5

1

4

0

3

ordena([H]) -> [H];
ordena(L) ->
{L1,L2} = separa(L),

2

4

0

mezcla(ordena(L1), ordena(L2)).

separa(L) ->

5

1

4

0

lists:split(length(L) div 2, L).

1

mezcla([], L) -> L;

0

5

4

mezcla(L, []) -> L;
mezcla([H1|T1], [H2|_]=L2) when H1 =< H2 ->
[H1|mezcla(T1,L2)];

1

2

5

0

3

4

5

mezcla(L1, [H2|T2]) ->
[H2|mezcla(L1,T2)].

0

1

2

3

4
Recursividad
2

-module(quicksort).

5

1

3

4

0

-export([ordena/1]).

1

ordena([]) -> [];

0

2

5

3

4

3

4

5

ordena([H]) -> [H];
ordena(L) ->
{L1, [Pivote], L2} = separa(L),

0

1

2

mezcla(ordena(L1) ++ [Pivote], ordena(L2)).

separa([]) -> {[], [], []};

0

1

3

4

5

separa([H]) -> {[H], [], []};
separa([Pivote|T]) ->

4

ListaMenores = [ X || X <- T, X =< Pivote ],
ListaMayores = [ X || X <- T, X > Pivote ],
{ListaMenores, [Pivote], ListaMayores}.

mezcla(L1, L2) -> L1 ++ L2.

0

1

2

3

4

5

5
Distribución
○

Conectando nodos
$ erl -sname bosqueviejo
Erlang R15B02 (erts-5.9.2) [64-bit] [smp:8:8] [async-threads:0] [hipe]
Eshell V5.9.2 (abort with ^G)
(bosqueviejo@bosque)1>

$ erl -sname bosquenegro
Erlang R15B02 (erts-5.9.2) [64-bit] [smp:8:8] [async-threads:0] [hipe]
Eshell V5.9.2 (abort with ^G)
(bosquenegro@bosque)1> net_kernel:connect_node(bosqueviejo@bosque).
true
(bosquenegro@bosque)2> nodes().
[bosqueviejo@bosque]

(bosqueviejo@bosque)1> nodes().
[bosquenegro@bosque]
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).
Libros en inglés
Libro en castellano
Descarga PDF gratuita

Compra en Papel

http://erlang.bosqueviejo.net
¿Preguntas?
Agradecimientos

○ Organización de CodeMotion
○ Universidad Politécnica de Madrid
○ ¡A todos vosotros por asistir!

Mais conteúdo relacionado

Semelhante a Erlang/OTP - Altenwald - CodeMotion Madrid 2013

Introducción a Google Go
Introducción a Google GoIntroducción a Google Go
Introducción a Google GoScalia
 
Lo que las empresas piden
Lo que las empresas pidenLo que las empresas piden
Lo que las empresas pidenSvet Ivantchev
 
Esos Raros Lenguajes Nuevos
Esos Raros Lenguajes NuevosEsos Raros Lenguajes Nuevos
Esos Raros Lenguajes NuevosEduardo Diaz
 
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfSesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfMarxx4
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de stringyimfer1
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de stringcyberleon95
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de stringJuan Camilo
 
Rust Hour Of Code 2017 - Valladolid
Rust Hour Of Code 2017 - ValladolidRust Hour Of Code 2017 - Valladolid
Rust Hour Of Code 2017 - ValladolidAdrián Arroyo Calle
 
Chuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesChuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesAbrirllave
 
9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES
9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES
9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUESEMERSON EDUARDO RODRIGUES
 

Semelhante a Erlang/OTP - Altenwald - CodeMotion Madrid 2013 (20)

Introducción a Google Go
Introducción a Google GoIntroducción a Google Go
Introducción a Google Go
 
Lo que las empresas piden
Lo que las empresas pidenLo que las empresas piden
Lo que las empresas piden
 
Esos Raros Lenguajes Nuevos
Esos Raros Lenguajes NuevosEsos Raros Lenguajes Nuevos
Esos Raros Lenguajes Nuevos
 
El Lenguaje de Programacipon java.
El Lenguaje de Programacipon java.El Lenguaje de Programacipon java.
El Lenguaje de Programacipon java.
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfSesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
 
codigos
codigoscodigos
codigos
 
Rust Hour Of Code 2017 - Valladolid
Rust Hour Of Code 2017 - ValladolidRust Hour Of Code 2017 - Valladolid
Rust Hour Of Code 2017 - Valladolid
 
Introduccion a Python. Clase 1
Introduccion a Python. Clase 1Introduccion a Python. Clase 1
Introduccion a Python. Clase 1
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 
(1) Curso sobre el software estadístico R. Introducción al entorno R
(1) Curso sobre el software estadístico R. Introducción al entorno R(1) Curso sobre el software estadístico R. Introducción al entorno R
(1) Curso sobre el software estadístico R. Introducción al entorno R
 
Chuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesChuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantes
 
Bt haskell-1
Bt haskell-1Bt haskell-1
Bt haskell-1
 
9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES
9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES
9. LIBRO SISTEMAS SECUENCIALES PROGRAMABLES - AUTOMATI EMERSON EDUARDO RODRIGUES
 
Introducción a dr racket
Introducción a dr racketIntroducción a dr racket
Introducción a dr racket
 
Introduccion clips
Introduccion clipsIntroduccion clips
Introduccion clips
 
Programación de código
Programación de códigoProgramación de código
Programación de código
 

Último

El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 

Último (20)

El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 

Erlang/OTP - Altenwald - CodeMotion Madrid 2013

  • 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
  • 4. ¿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
  • 6. Caso ○ En 2005, sistemas C++ y MySQL ○ ○ ○ Máx. 80 usuarios concurrentes Crashes son muy frecuentes En 2006, sistemas C++, Python y MySQL ○ Máx. 1.000 usuarios concurrentes ○ Requiere reinicios, el código es difícil de mantener... muchos errores
  • 7. Caso ○ En 2005, sistemas C++ y MySQL ○ ○ ○ Máx. 80 usuarios concurrentes Crashes son muy frecuentes En 2006, sistemas C++, Python y MySQL ○ ○ ○ Máx. 1.000 usuarios concurrentes Requiere reinicios, el código es difícil de mantener... muchos errores En 2007, sistemas Erlang, Python y MySQL ○ ○ ○ De 20.000 a 1.000.000 de usuarios concurrentes en De 500 a 50.000 peticiones por segundo De 50 a 1.850 servidores
  • 9. 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.
  • 10. OOP vs Actor Model
  • 11. OOP vs Actor Model
  • 13. Sintaxis de Erlang Solo hay dos tipos de lenguajes: aquellos de los que la gente se queja y aquellos que nadie usa. -- Bjarne Stroustrup Ejemplo típico del factorial
  • 14. Sintaxis de Erlang Solo hay dos tipos de lenguajes: aquellos de los que la gente se queja y aquellos que nadie usa. -- Bjarne Stroustrup Ejemplo típico del factorial (C) factorial(int f) { int i; for (i=f-1; i>1; i--) { f *= i; } return f; }
  • 15. Sintaxis de Erlang Solo hay dos tipos de lenguajes: aquellos de los que la gente se queja y aquellos que nadie usa. -- Bjarne Stroustrup Ejemplo típico del factorial (C recursivo) factorial(int f) { if (f <= 1) { return f; } return f * factorial(f-1); }
  • 17. Sintaxis de Erlang Solo hay dos tipos de lenguajes: aquellos de los que la gente se queja y aquellos que nadie usa. -- Bjarne Stroustrup Ejemplo típico del factorial (Erlang) factorial(0) -> 0; factorial(1) -> 1; factorial(N) -> N * factorial(N-1).
  • 18. Características del Lenguaje ○ Asignaciones únicas > A = 1. 1 > A = 2. ** exception error: no match of right hand side value 2 ○ Lenguaje simple: case, if, try...catch y receive. case Value of 12 when is_integer(Value) -> "OK"; _ -> "FAIL"; end. ○ Paso de mensajes Pid = spawn(fun micode/0), Pid ! "hola mundo!", receive Any -> io:format("OK") end.
  • 19. Características del Lenguaje ○ Capacidad numérica 1> fact:fact(128). 3856204823625804217356770659234636406174931095902235902788284032763734025751655435606 8616858850736153403005183305891634759217293226249885776611495524503935776003464470927 9247692495585280000000000000000000000000000000 2> fact:fact(1024). 5418528796058857283076921944683854738001553963538013444482870270683210612073376603733 1409841362145867190791884570898075393199416577018736826045413333372193910836752801276 4993769768292516937891165755680659663747947314518404886677672556125188694335251213677 2745219634307701337132057962484331288700884361716546902375183904529447322778084029321 5872206185380616280606392543531082218684823928713026169091421136225114468471388858788 1629252104046295315949943900357882410243934315037444113890806181406210863953275235375 8850185984515822295996545585412427891309024869442986109231533075791316757451464363040 2489082044290773456182736903050225279692655307296737099075874779312763510470246988966 7961462133026237158973227857814631807156427767644064591085076564783456324457736853810 3369817760804987077670463942726053414167791256977333745680374751866762659616656158846 8145026333704252266414186215704682568477336094432673749367667491509895376811294583162 6643856479027816385730291542667725665642276826058264393884514911976419675509290208592 7131563629832909894410527321251872495275013140716764055169361907818212367019122957673 6311705412658992991648200851578175195546691090283872923222450990638863814777125522778 2631322385756948819393658889908993670874516860653098...
  • 20. Características del Lenguaje ○ Matching > "Hola " ++ Quien = "Hola mundo!". "Hola mundo!" > Quien. "mundo!" ○ Conjuntos > A = [1,2,3,4,5], B = [2,4,6], A -- B. [1,3,5] > (A -- B) ++ (B -- A). [1,3,5,6] ○ Binarios {ok, PNG} = file:open("debian-logo.png", [read,binary]), {ok, <<137,"PNG",13,10,26,10,Length:32,"IHDR">>} = file:read(PNG, 16), {ok, <<Width:32, Height:32, Depth:8, Color:8>>} = file:read(PNG, 10), {ok, <<Compression:8, Filter:8, Interlace:8>>} = file:read(PNG, 3), file:close(PNG).
  • 21. Características del Lenguaje ○ Listas de Comprensión > [ X || X <- lists:seq(1,10), X rem 2 =:= 0 ]. [2,4,6,8,10] > [ {X,2,X*2} || X <- lists:seq(1,10) ]. [{1,2,2}, {2,2,4}, {3,2,6}, {4,2,8}, {5,2,10}, {6,2,12}, {7,2,14}, {8,2,16}, {9,2,18}, {10,2,20}] > [ X || X <- [1,5,9,3,2,6,5,4], X >= 5 ]. [5,9,6,5]
  • 22. Recursividad 2 -module(mergesort). 5 1 3 4 0 -export([ordena/1]). 2 ordena([]) -> []; 5 1 3 5 1 4 0 3 ordena([H]) -> [H]; ordena(L) -> {L1,L2} = separa(L), 2 4 0 mezcla(ordena(L1), ordena(L2)). separa(L) -> 5 1 4 0 lists:split(length(L) div 2, L). 1 mezcla([], L) -> L; 0 5 4 mezcla(L, []) -> L; mezcla([H1|T1], [H2|_]=L2) when H1 =< H2 -> [H1|mezcla(T1,L2)]; 1 2 5 0 3 4 5 mezcla(L1, [H2|T2]) -> [H2|mezcla(L1,T2)]. 0 1 2 3 4
  • 23. Recursividad 2 -module(quicksort). 5 1 3 4 0 -export([ordena/1]). 1 ordena([]) -> []; 0 2 5 3 4 3 4 5 ordena([H]) -> [H]; ordena(L) -> {L1, [Pivote], L2} = separa(L), 0 1 2 mezcla(ordena(L1) ++ [Pivote], ordena(L2)). separa([]) -> {[], [], []}; 0 1 3 4 5 separa([H]) -> {[H], [], []}; separa([Pivote|T]) -> 4 ListaMenores = [ X || X <- T, X =< Pivote ], ListaMayores = [ X || X <- T, X > Pivote ], {ListaMenores, [Pivote], ListaMayores}. mezcla(L1, L2) -> L1 ++ L2. 0 1 2 3 4 5 5
  • 24. Distribución ○ Conectando nodos $ erl -sname bosqueviejo Erlang R15B02 (erts-5.9.2) [64-bit] [smp:8:8] [async-threads:0] [hipe] Eshell V5.9.2 (abort with ^G) (bosqueviejo@bosque)1> $ erl -sname bosquenegro Erlang R15B02 (erts-5.9.2) [64-bit] [smp:8:8] [async-threads:0] [hipe] Eshell V5.9.2 (abort with ^G) (bosquenegro@bosque)1> net_kernel:connect_node(bosqueviejo@bosque). true (bosquenegro@bosque)2> nodes(). [bosqueviejo@bosque] (bosqueviejo@bosque)1> nodes(). [bosquenegro@bosque]
  • 25. 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
  • 26. -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).
  • 28. Libro en castellano Descarga PDF gratuita Compra en Papel http://erlang.bosqueviejo.net
  • 30. Agradecimientos ○ Organización de CodeMotion ○ Universidad Politécnica de Madrid ○ ¡A todos vosotros por asistir!