Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Un traguito de Elixir
Search
Fernando Perales
January 10, 2018
Programming
0
300
Un traguito de Elixir
Introduction to Elixir
Talk given at Unotalks meetup on January10th 2018
Fernando Perales
January 10, 2018
Tweet
Share
More Decks by Fernando Perales
See All by Fernando Perales
Anonimización de bases de datos con PostgreSQL - nerdearla
ferperales
0
75
Let's give REST a rest: exploring the state of gRPC in Ruby
ferperales
0
160
Guía Práctica para Convertirse en Contribuidor de Open Source en 10 Años (o más)
ferperales
0
75
¿Es convertirte en manager tan malo como todo mundo dice?
ferperales
0
75
Guía práctica para convertirse en contribuidor de open source en 10 años o más
ferperales
0
62
Anonimización de bases de datos con PostgreSQL
ferperales
0
80
Guía Práctica para Convertirse en Contribuidor de Open Source en 10 Años (o más)
ferperales
0
79
Guía práctica para convertirse en Senior Engineer en 10 años
ferperales
0
140
Consultoría y Open Source: buscando el balance entre beneficio y la diversión
ferperales
0
89
Other Decks in Programming
See All in Programming
組織で育むオブザーバビリティ
ryota_hnk
0
160
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
420
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
140
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
180
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
940
Patterns of Patterns
denyspoltorak
0
1.3k
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
200
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
140
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
2.4k
Package Management Learnings from Homebrew
mikemcquaid
0
160
AI時代の認知負荷との向き合い方
optfit
0
120
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
67
Everyday Curiosity
cassininazir
0
120
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
100
Building Adaptive Systems
keathley
44
2.9k
Faster Mobile Websites
deanohume
310
31k
Facilitating Awesome Meetings
lara
57
6.7k
Context Engineering - Making Every Token Count
addyosmani
9
640
Rails Girls Zürich Keynote
gr2m
96
14k
Evolving SEO for Evolving Search Engines
ryanjones
0
110
Amusing Abliteration
ianozsvald
0
91
Docker and Python
trallard
47
3.7k
Transcript
Un traguito de Elixir Fernando Perales @FerPeralesM
<me>
Fernando Perales Senior Software Engineer @ michelada.io Ing. En Computación
@ UdeG (CUCEI) Anfitrión @ RubyGDL Co-fundador @ RailsBridge México Instructor de Ruby on Rails @ Platzi Estudiante de Alemán y Bajo Eléctrico Fan de Gregory Sallust
</me>
¿Qué es Erlang? Lenguaje de programación funcional, concurrente, de propósito
general
¿Qué es Erlang? Creado en 1986 por la compañía Ericsson
Para realizar aplicaciones distribuidas, tolerantes a fallos, soft-real-time y de funcionamiento ininterrumpido
Erlang en números La máquina virtual de Erlang (BEAM) es
desarrollada por Joe Armstrong, Robert Virding y Mike Williams en 1985
Erlang en números El primer sistema en producción fue el
Switch AXD301 con 1 MLOC y disponibilidad de 9 nueves
Erlang en números
Erlang en números
Erlang en números Se libera como Open Source en 1998
Erlang en números Más del 50% del tráfico de Internet
pasa por sistemas construídos con Erlang
Erlang en números WhatsApp usa Erlang para manejar 2 millones
de conexiones por servidos
Erlang en números WhatsApp maneja 30 billones de mensajes diariamente
(347,222 msg/seg)
Erlang <> Elixir ¿Por qué mencionar Erlang cuando hablamos de
Elixir?
¿Qué es Elixir? Lenguaje de programación funcional, concurrente, de propósito
general que se ejecuta sobre la máquina virtual de Erlang (BEAM)
¿Qué es Elixir? Elixir fue creado en el 2011 por
José Valim. Un contribuidor de Ruby por bastantes años que buscaba cómo mejorar el desempeño del lenguaje para aprovechar múltiples CPUs
¿Qué es Elixir? Al investigar cómo otras tecnologías manejaban concurrencia,
encontró a Erlang
¿Qué es Elixir? Mientras la BEAM resolvía era perfecta para
el tipo de problemas que buscaba resolver, sentía que al lenguaje le faltaban características que otros lenguajes sí tenian
¿Qué es Elixir? Los programas creados en Elixir compilan a
bytecode de BEAM
¿Qué es Elixir? https://www.codeschool.com/blog/2017/02/22/why-elixir/
Ventajas heredadas de Erlang Usa una tecnología ampliamente probada por
más de 30 años
Ventajas heredadas de Erlang Facilidad de distribución de datos entre
procesos mediante GenServer
Ventajas heredadas de Erlang Auto-curación mediante Supervisors
Ventajas heredadas de Erlang Fácilmente escalable para cubrir las demandas
del futuro
Ventajas heredadas de Erlang Pattern-matching
Ventajas que Elixir aporta Sintaxis limpia y familiar
Ventajas que Elixir aporta Herramientas maduras
Ventajas que Elixir aporta Framework de pruebas unitarias integrado
Ventajas que Elixir aporta Meta-programación
Ventajas que Elixir aporta Documentación integrada
Ventajas que Elixir aporta Pipes
Ventajas que Elixir aporta Phoenix
Ventajas que Elixir aporta No hay costo de conversión al
usar código de Erlang en Elixir y viceversa
Lo que Elixir busca Distributed fault-tolerant applications with hot-code swapping
Ejemplos
Hello world iex> IO.puts "hello world" hello world :ok jeregrine.github.io/elixir-by-example
Tipos básicos: enteros iex> decimal = 1000 1000 iex> -5
-5 iex> hex = 0xabcd 43981 iex> bin = 0b1100 12 jeregrine.github.io/elixir-by-example
Tipos básicos: flotantes iex> 4.0 4.0 iex> 0.567 0.567 iex>
0.567e2 56.7 iex> 0.567e-2 0.00567 jeregrine.github.io/elixir-by-example
Tipos básicos: booleanos iex> true true iex> true == true
true iex> true == false false jeregrine.github.io/elixir-by-example
Tipos básicos: átomos iex> :stuff :stuff iex> :stuff == :stuff
true iex> :+ :+ jeregrine.github.io/elixir-by-example
Tipos básicos: átomos iex> :"Hello World!" :"Hello World!" jeregrine.github.io/elixir-by-example
Tipos básicos: binarios iex> <<1, 2, 3>> <<1, 2, 3>>
iex> size <<1, 2, 3>> 3 jeregrine.github.io/elixir-by-example
Cadenas y listas de caracteres iex> is_binary "hello" true jeregrine.github.io/elixir-by-example
Cadenas y listas de caracteres iex> name = "Paul" "Paul"
iex> "Hello #{name}!" "Hello Paul!" jeregrine.github.io/elixir-by-example
Cadenas y listas de caracteres iex> 'hello' 'hello' iex> is_binary
'hello' false iex> is_list 'hello' true jeregrine.github.io/elixir-by-example
Rangos iex> 1..3 1..3 iex> Enum.map 1..3, fn num ->
num * 2 end [2, 4, 6] jeregrine.github.io/elixir-by-example
Tuplas iex> {:stuff, 1, "things"} {:stuff, 1, "things"} jeregrine.github.io/elixir-by-example
Tuplas iex> {stuff, num, _} = {:stuff, 1, "things"} {:stuff,
1, "things"} iex> stuff :stuff iex> num 1 jeregrine.github.io/elixir-by-example
Tuplas i e x > { s t a t
u s , h a n d l e } = File.open("example.txt") {:ok, #PID<0.43.0>} jeregrine.github.io/elixir-by-example
Tuplas iex> {:ok, handle} = File.open("doesntexist.txt") ** (MatchError) no match
of right hand side value: {:error, :enoent} jeregrine.github.io/elixir-by-example
Listas iex> [1, 2, 3] [1, 2, 3] iex> [:stuff,
1, "things"] [:stuff, 2, "things"] jeregrine.github.io/elixir-by-example
Listas iex> [_, two, _] = [1, 2, 3] [1,
2, 3] iex> two 2 iex> [head | tail] = [1, 2, 3, 4] [1, 2, 3, 4] iex> head 1 iex> tail [2, 3, 4] jeregrine.github.io/elixir-by-example
Listas iex> List.flatten [1, [2, 3], 4] [1, 2, 3,
4] iex> List.zip [[1, 2, 3], [4, 5, 6]] [{1, 4}, {2, 5}, {3, 6}] iex> List.foldl [1, 2, 3], 0, fn num, acc -> num + acc end 6 jeregrine.github.io/elixir-by-example
Keyword list iex> [head | tail] = [a: 1, b:
2] [a: 1, b: 2] iex> head {:a, 1} iex> Keywords.get [a: 1, b: 2], :a 1 iex> Keywords.get_values [a: 1, b: 2] [1, 2] jeregrine.github.io/elixir-by-example
Demo
FerPerales/exercises_for_programmers_elixir
Exercises for Programmers 57 Challenges to Develop Your Coding Skills
Brian P. Hogan
¿Preguntas?
¡Gracias! @FerPeralesM
[email protected]