SlideShare una empresa de Scribd logo
Erlang/OTP
Un Mundo Concurrente
¿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.
○ En Yuilop: Senior Core Server Developer.
○ Contacto:
○ Blog: http://bosqueviejo.net
○ Twitter: @MRonErlang
¿Qué es Yuilop?
○ Mensajería Instantánea entre usuarios
○ SMS a los que no son usuarios
○ VoIP entre usuarios
○ Llamadas a los que no son usuarios
○ Chat de grupo entre usuarios
○ Número yuilop para ser llamado por cualquier otro teléfono
○ Más info:
¿Qué es Yuilop?
¿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
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.
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 Call of Duty 4
○ De 500 a 50.000 peticiones por segundo
○ De 50 a 1.850 servidores
Caso
¿Quién usa Erlang?
...
El camino de Yuilop
○ Android y PHP (vía HTTP)
○ Falta de instantaneidad en los mensajes
○ Hace falta una gran infraestructura además de ayudas:
■ Memcache
■ APC
■ FPM, FastCGI, Ngnix, ...
○ Android, iOS y Java (vía XMPP)
○ OpenFire no sirve para una cantidad alta de usuarios concurrentes
○ Los deadlocks de Java hacen que todo caiga
○ Android, iOS, BlackBerry, Windows Phone y Erlang (vía XMPP)
○ Escalabilidad asegurada
○ Más de 2 millones de usuarios con alto grado de concurrencia
OOP vs Actor Model
OOP vs Actor Model
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 = 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
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).
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.
FSM
-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).
Apache vs Yaws
Libros en inglés
Libro en castellano
http://erlang.bosqueviejo.net
¿Preguntas?
Agradecimientos
○ IEEE sección España
○ Universidad Miguel Hernández
○ Yuilop

Más contenido relacionado

Similar a Erlang otp yuilop - ieee developer days 2013

Python - Programación para machos
Python - Programación para machosPython - Programación para machos
Python - Programación para machos
Jorge Hernandez
 
Presentación Taller ROS - Robotic Operating System
Presentación Taller ROS - Robotic Operating SystemPresentación Taller ROS - Robotic Operating System
Presentación Taller ROS - Robotic Operating System
Bruno Faúndez
 
Una gota de elixir 2017
Una gota de elixir   2017Una gota de elixir   2017
Una gota de elixir 2017
Rafael Antonio Gutiérrez Turullols
 
Rust basico.pdf
Rust basico.pdfRust basico.pdf
Rust basico.pdf
ssuser1512e9
 
Tema 1. elementos básicos de pascal #ipg2murjc
Tema 1. elementos básicos de pascal #ipg2murjcTema 1. elementos básicos de pascal #ipg2murjc
Tema 1. elementos básicos de pascal #ipg2murjc
Oriol Borras Gene
 
Programador Jr. para Python Primera Parte
Programador Jr. para Python Primera ParteProgramador Jr. para Python Primera Parte
Programador Jr. para Python Primera Parte
José Luis Chiquete Valdivieso
 
El Lenguaje de Programacipon java.
El Lenguaje de Programacipon java.El Lenguaje de Programacipon java.
El Lenguaje de Programacipon java.
Vilma Analí Pardo Suárez
 
Aprenda ansi-c-como-si-estuviera-en-primero
Aprenda ansi-c-como-si-estuviera-en-primeroAprenda ansi-c-como-si-estuviera-en-primero
Aprenda ansi-c-como-si-estuviera-en-primero
Duban Garces
 
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdfAprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Pablo Narvaez
 
Network.Penetration.CGSOL
Network.Penetration.CGSOLNetwork.Penetration.CGSOL
Network.Penetration.CGSOL
ykro
 
PROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓN PROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓN
Karol Moreno
 
Universidad tecnológica del estado de zacatecas trabajo de lucy estimación
Universidad tecnológica del estado de zacatecas trabajo de lucy estimaciónUniversidad tecnológica del estado de zacatecas trabajo de lucy estimación
Universidad tecnológica del estado de zacatecas trabajo de lucy estimación
clauddiaa
 
ARQUITECTURA INTERNA DE UNA MÁQUINA RUDIMENTARIA
ARQUITECTURA INTERNA DE UNA MÁQUINA RUDIMENTARIAARQUITECTURA INTERNA DE UNA MÁQUINA RUDIMENTARIA
ARQUITECTURA INTERNA DE UNA MÁQUINA RUDIMENTARIA
Isaias Castro
 
Pcasm book-spanish
Pcasm book-spanishPcasm book-spanish
Pcasm book-spanish
Brivé Soluciones
 
Charla invitada en oviedo: Evolución del soporte de persistencia
Charla invitada en oviedo: Evolución del soporte de persistenciaCharla invitada en oviedo: Evolución del soporte de persistencia
Charla invitada en oviedo: Evolución del soporte de persistencia
Baltasar García Perez-Schofield
 
Python - Programando fácil, rápido y gratis
Python - Programando fácil, rápido y gratisPython - Programando fácil, rápido y gratis
Python - Programando fácil, rápido y gratis
Juan Percy Rojas Cruz
 
Sistemas digitales 1
Sistemas digitales 1Sistemas digitales 1
Sistemas digitales 1
Andy Haro
 
Universidad central del ecuador
Universidad central del ecuadorUniversidad central del ecuador
Universidad central del ecuador
oswaldoandres24
 
Introducción Software Libre (AsturLiNUX 2005)
Introducción Software Libre (AsturLiNUX 2005)Introducción Software Libre (AsturLiNUX 2005)
Introducción Software Libre (AsturLiNUX 2005)
Manrique Lopez
 
ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.
Uriel Cambrón Hernández
 

Similar a Erlang otp yuilop - ieee developer days 2013 (20)

Python - Programación para machos
Python - Programación para machosPython - Programación para machos
Python - Programación para machos
 
Presentación Taller ROS - Robotic Operating System
Presentación Taller ROS - Robotic Operating SystemPresentación Taller ROS - Robotic Operating System
Presentación Taller ROS - Robotic Operating System
 
Una gota de elixir 2017
Una gota de elixir   2017Una gota de elixir   2017
Una gota de elixir 2017
 
Rust basico.pdf
Rust basico.pdfRust basico.pdf
Rust basico.pdf
 
Tema 1. elementos básicos de pascal #ipg2murjc
Tema 1. elementos básicos de pascal #ipg2murjcTema 1. elementos básicos de pascal #ipg2murjc
Tema 1. elementos básicos de pascal #ipg2murjc
 
Programador Jr. para Python Primera Parte
Programador Jr. para Python Primera ParteProgramador Jr. para Python Primera Parte
Programador Jr. para Python Primera Parte
 
El Lenguaje de Programacipon java.
El Lenguaje de Programacipon java.El Lenguaje de Programacipon java.
El Lenguaje de Programacipon java.
 
Aprenda ansi-c-como-si-estuviera-en-primero
Aprenda ansi-c-como-si-estuviera-en-primeroAprenda ansi-c-como-si-estuviera-en-primero
Aprenda ansi-c-como-si-estuviera-en-primero
 
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdfAprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
 
Network.Penetration.CGSOL
Network.Penetration.CGSOLNetwork.Penetration.CGSOL
Network.Penetration.CGSOL
 
PROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓN PROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓN
 
Universidad tecnológica del estado de zacatecas trabajo de lucy estimación
Universidad tecnológica del estado de zacatecas trabajo de lucy estimaciónUniversidad tecnológica del estado de zacatecas trabajo de lucy estimación
Universidad tecnológica del estado de zacatecas trabajo de lucy estimación
 
ARQUITECTURA INTERNA DE UNA MÁQUINA RUDIMENTARIA
ARQUITECTURA INTERNA DE UNA MÁQUINA RUDIMENTARIAARQUITECTURA INTERNA DE UNA MÁQUINA RUDIMENTARIA
ARQUITECTURA INTERNA DE UNA MÁQUINA RUDIMENTARIA
 
Pcasm book-spanish
Pcasm book-spanishPcasm book-spanish
Pcasm book-spanish
 
Charla invitada en oviedo: Evolución del soporte de persistencia
Charla invitada en oviedo: Evolución del soporte de persistenciaCharla invitada en oviedo: Evolución del soporte de persistencia
Charla invitada en oviedo: Evolución del soporte de persistencia
 
Python - Programando fácil, rápido y gratis
Python - Programando fácil, rápido y gratisPython - Programando fácil, rápido y gratis
Python - Programando fácil, rápido y gratis
 
Sistemas digitales 1
Sistemas digitales 1Sistemas digitales 1
Sistemas digitales 1
 
Universidad central del ecuador
Universidad central del ecuadorUniversidad central del ecuador
Universidad central del ecuador
 
Introducción Software Libre (AsturLiNUX 2005)
Introducción Software Libre (AsturLiNUX 2005)Introducción Software Libre (AsturLiNUX 2005)
Introducción Software Libre (AsturLiNUX 2005)
 
ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.
 

Último

edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
luiscohailatenazoa0
 
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdktrabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
KukiiSanchez
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
renzocruz180310
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
gisellearanguren1
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
jgvanessa23
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
al050121024
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
leia ereni
 
El uso de las TIC's en la vida cotidiana
El uso de las TIC's en la vida cotidianaEl uso de las TIC's en la vida cotidiana
El uso de las TIC's en la vida cotidiana
231458066
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
AbrahamCastillo42
 
LA GLOBALIZACIÓN RELACIONADA CON EL USO DE HERRAMIENTAS.pptx
LA GLOBALIZACIÓN RELACIONADA CON EL USO DE HERRAMIENTAS.pptxLA GLOBALIZACIÓN RELACIONADA CON EL USO DE HERRAMIENTAS.pptx
LA GLOBALIZACIÓN RELACIONADA CON EL USO DE HERRAMIENTAS.pptx
pauca1501alvar
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
yuberpalma
 
El uso de las TIC por Cecilia Pozos S..pptx
El uso de las TIC  por Cecilia Pozos S..pptxEl uso de las TIC  por Cecilia Pozos S..pptx
El uso de las TIC por Cecilia Pozos S..pptx
cecypozos703
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajasSlideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
AdrianaRengifo14
 
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdfCURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
LagsSolucSoporteTecn
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
YashiraPaye
 
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
giampierdiaz5
 

Último (20)

edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
 
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdktrabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
 
El uso de las TIC's en la vida cotidiana
El uso de las TIC's en la vida cotidianaEl uso de las TIC's en la vida cotidiana
El uso de las TIC's en la vida cotidiana
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
 
LA GLOBALIZACIÓN RELACIONADA CON EL USO DE HERRAMIENTAS.pptx
LA GLOBALIZACIÓN RELACIONADA CON EL USO DE HERRAMIENTAS.pptxLA GLOBALIZACIÓN RELACIONADA CON EL USO DE HERRAMIENTAS.pptx
LA GLOBALIZACIÓN RELACIONADA CON EL USO DE HERRAMIENTAS.pptx
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
 
El uso de las TIC por Cecilia Pozos S..pptx
El uso de las TIC  por Cecilia Pozos S..pptxEl uso de las TIC  por Cecilia Pozos S..pptx
El uso de las TIC por Cecilia Pozos S..pptx
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajasSlideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
 
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdfCURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
 
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
 

Erlang otp yuilop - ieee developer days 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. ○ En Yuilop: Senior Core Server Developer. ○ Contacto: ○ Blog: http://bosqueviejo.net ○ Twitter: @MRonErlang
  • 3. ¿Qué es Yuilop? ○ Mensajería Instantánea entre usuarios ○ SMS a los que no son usuarios ○ VoIP entre usuarios ○ Llamadas a los que no son usuarios ○ Chat de grupo entre usuarios ○ Número yuilop para ser llamado por cualquier otro teléfono ○ Más info:
  • 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
  • 6. 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.
  • 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 Call of Duty 4 ○ De 500 a 50.000 peticiones por segundo ○ De 50 a 1.850 servidores
  • 10. El camino de Yuilop ○ Android y PHP (vía HTTP) ○ Falta de instantaneidad en los mensajes ○ Hace falta una gran infraestructura además de ayudas: ■ Memcache ■ APC ■ FPM, FastCGI, Ngnix, ... ○ Android, iOS y Java (vía XMPP) ○ OpenFire no sirve para una cantidad alta de usuarios concurrentes ○ Los deadlocks de Java hacen que todo caiga ○ Android, iOS, BlackBerry, Windows Phone y Erlang (vía XMPP) ○ Escalabilidad asegurada ○ Más de 2 millones de usuarios con alto grado de concurrencia
  • 11. OOP vs Actor Model
  • 12. 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 = 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); }
  • 16. 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).
  • 17. 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.
  • 18. 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...
  • 19. 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).
  • 20. 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.
  • 21. FSM -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).
  • 26. Agradecimientos ○ IEEE sección España ○ Universidad Miguel Hernández ○ Yuilop