twitter.com/elaine_nw
speakerdeck.com/elainenaomi
Elaine Naomi Watanabe
Desenvolvedora de Software (Plataformatec)
Mestrado em Ciência da Computação (USP)
Slide 3
Slide 3 text
num passado não tão distante
Python ~ 6 meses
Java ~ 1 ano
C++ ~ 1 ano
PHP ~ 3 anos
Slide 4
Slide 4 text
no momento
Elixir 2 meses
Ruby 3,5 anos
Slide 5
Slide 5 text
1996
Slide 6
Slide 6 text
Sistemas distribuídos
Concorrência e paralelismo
Aplicações intensivas em dados
no meio tempo
Slide 7
Slide 7 text
no meio tempo
Modelagem de domínio
Modelos transacionais
Bancos de dados distribuídos
NoSQL
Slide 8
Slide 8 text
no momento
Elixir 2 meses
Ruby 3,5 anos
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
Compartilhar minha jornada
em uma nova linguagem
Slide 11
Slide 11 text
Parte I Conhecendo Elixir
Parte II Migrando para Elixir
Parte III Entregando valor com Elixir
Slide 12
Slide 12 text
vamos nessa?
Slide 13
Slide 13 text
PARTE I
Slide 14
Slide 14 text
Conhecendo Elixir
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
...
Slide 18
Slide 18 text
Linguagem nova
Paradigma funcional
Slide 19
Slide 19 text
Linguagem nova
Paradigma funcional
Muitas pessoas de Ruby comentando
Slide 20
Slide 20 text
José Valim
Co-fundador da Plataformatec
Criador do Elixir
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
criadora das gems:
Slide 23
Slide 23 text
ELIXIR BRASIL 2018
Slide 24
Slide 24 text
...
Slide 25
Slide 25 text
No content
Slide 26
Slide 26 text
Erlang
Erlang/OTP
Processos
Macros
Slide 27
Slide 27 text
Erlang
Erlang/OTP
Processos
Macros
Slide 28
Slide 28 text
Erlang
Erlang/OTP
Processos
Macros
Slide 29
Slide 29 text
Erlang
Erlang/OTP
Processos
Supervisors
Slide 30
Slide 30 text
No content
Slide 31
Slide 31 text
...
Slide 32
Slide 32 text
TERMOS MÁGICOS
Slide 33
Slide 33 text
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
Slide 34
Slide 34 text
No content
Slide 35
Slide 35 text
+30 anos
Slide 36
Slide 36 text
telefonia
Slide 37
Slide 37 text
Concorrência e distribuição
Alta disponibilidade
Hot code swapping
Slide 38
Slide 38 text
Erlang: linguagem
Erlang: máquina virtual
Erlang: plataforma
Slide 39
Slide 39 text
Erlang: linguagem
Erlang: máquina virtual
Erlang: plataforma
Slide 40
Slide 40 text
Erlang: linguagem
Erlang: máquina virtual
Erlang: plataforma
Slide 41
Slide 41 text
erlang BEAM
bytecode
Slide 42
Slide 42 text
BEAM:
Björn's Erlang Abstract Machine
Slide 43
Slide 43 text
BEAM
BEAM
bytecode
processes
scheduler
CPU Core
processes
scheduler
CPU Core
Slide 44
Slide 44 text
Erlang/OTP:
Erlang/Open Telecom Platform
Slide 45
Slide 45 text
erlang
BEAM
process
scheduler
core
process
scheduler
core
Erlang/OTP
Slide 46
Slide 46 text
erlang
BEAM
process
scheduler
core
process
scheduler
core
Erlang/OTP
+ Bibliotecas
+ Princípios de design
Slide 47
Slide 47 text
ElixirConf 2018 - Erlang OTP What's in the Box - João Britto
youtube.com/watch?v=CozSfI-Zepw
Slide 48
Slide 48 text
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
Slide 49
Slide 49 text
BEAM
process
process process
process
process
process
process
process
process
Slide 50
Slide 50 text
No content
Slide 51
Slide 51 text
No content
Slide 52
Slide 52 text
BEAM
process
process process
process
process
process
process
process
process
Slide 53
Slide 53 text
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
Slide 54
Slide 54 text
BEAM
process
process process
process
process
process
process
process
process
Slide 55
Slide 55 text
BEAM
process
process process
process
process
process
process
process
process CPU 2
CPU 1
Slide 56
Slide 56 text
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
Slide 57
Slide 57 text
BEAM
process
process process
process
process
process
process
process
process 10.0.1.2
10.0.1.1
BEAM
Slide 58
Slide 58 text
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
Slide 59
Slide 59 text
BEAM
process
process process
process
process
process
process
process
process
Slide 60
Slide 60 text
supervisor
BEAM
process
process process
process
process
process
process
process
process
supervisor
Slide 61
Slide 61 text
supervisor
BEAM
process
process process
process
process
process
process
process
process
supervisor
Slide 62
Slide 62 text
supervisor
BEAM
process
process process
process
process
process
process
process
supervisor
Slide 63
Slide 63 text
supervisor
BEAM
process
process process
process
process
process
process
process
process
supervisor
Slide 64
Slide 64 text
...
Slide 65
Slide 65 text
web
Slide 66
Slide 66 text
No content
Slide 67
Slide 67 text
No content
Slide 68
Slide 68 text
No content
Slide 69
Slide 69 text
No content
Slide 70
Slide 70 text
No content
Slide 71
Slide 71 text
ERLANG
Slide 72
Slide 72 text
ERLANG
Slide 73
Slide 73 text
Por que não juntar os dois mundos?
Slide 74
Slide 74 text
...
Slide 75
Slide 75 text
O MUNDO CONCORRENTE
Slide 76
Slide 76 text
gotw.ca/publications/concurrency-ddj.htm
2005
Slide 77
Slide 77 text
Lei de Moore
O número de transistores em
um processador dobrava a
cada 2 anos
1975
Slide 78
Slide 78 text
Free lunch
O software ficava mais rápido
com o avanço das CPUs
Não era necessário fazer nada
além de atualizar o hardware
Slide 79
Slide 79 text
Free lunch is over
A partir de ~2003, o clock
speed parou de crescer como
antes. Se continuasse, seria
comum ter CPUs com 10GHz,
por ex.
Em 2005, surgiu o primeiro
processador dual-core
Slide 80
Slide 80 text
multi-cores
threads
concorrência
paralelismo
etc
Slide 81
Slide 81 text
multi-cores
threads
concorrência
paralelismo
etc
nem sempre é fácil
Slide 82
Slide 82 text
Erlang foi criado para ser
distribuído e tolerante a falhas
Slide 83
Slide 83 text
Erlang foi criado para ser
distribuído e tolerante a falhas
esse foi o objetivo desde o início
Slide 84
Slide 84 text
blog.whatsapp.com/196/1-million-is-so-2011
ERLANG
2 milhões de conexões
em um único nó
defmacro unless(expr, opts) do
quote do
if(!unquote(expr), unquote(opts))
end
end
unless(is_number(x), do: raise("oops")
ELIXIR
Slide 108
Slide 108 text
Representar domínios diferentes
Slide 109
Slide 109 text
defmodule MathTest do
use ExUnit.Case
test "basic operations" do
assert 1 + 1 == 2
end
end
ELIXIR
Slide 110
Slide 110 text
No content
Slide 111
Slide 111 text
blog.whatsapp.com/196/1-million-is-so-2011
ERLANG
2 milhões de conexões
em um único nó
Slide 112
Slide 112 text
2 milhões de conexões
em um único nó
phoenixframework.org/blog/the-road-to-2-million-websocket-connections
ELIXIR
Slide 113
Slide 113 text
Sintaxe parecida com Ruby
Focado em tolerância a falhas
Paralelismo
Documentação
Slide 114
Slide 114 text
Até seu relógio tem mais de um processador.
concorrência não é mais a exceção, é regra.
blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/
2017
Slide 115
Slide 115 text
Até seu relógio tem mais de um processador.
Concorrência não é mais a exceção, é regra.
blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/
2017
Slide 116
Slide 116 text
Programação funcional é um meio para
conseguir distribuir sua aplicação
The RealReal - Elixir adoption story
youtube.com/watch?v=sTs_4T1ufLY
ELIXIR
Slide 207
Slide 207 text
Desempenho
Tolerância a Falhas
Produtividade
ELIXIR
Slide 208
Slide 208 text
PARTE IV: BONUS
Slide 209
Slide 209 text
No content
Slide 210
Slide 210 text
Real Time Web
Slide 211
Slide 211 text
ELIXIR
Slide 212
Slide 212 text
Exemplo do LiveView
Slide 213
Slide 213 text
Internet das Coisas
Slide 214
Slide 214 text
Sistemas embarcados
ELIXIR
Slide 215
Slide 215 text
...
Slide 216
Slide 216 text
Mas faz sentido usar elixir pra tudo?
Slide 217
Slide 217 text
Equipe
Sistemas Legados
Distribuição
Integração
Deploy
Métricas
Slide 218
Slide 218 text
Depende :p
Slide 219
Slide 219 text
como começar?
Slide 220
Slide 220 text
elixir-lang.org
Slide 221
Slide 221 text
elixirschool.com
Slide 222
Slide 222 text
No content
Slide 223
Slide 223 text
No content
Slide 224
Slide 224 text
Como uma empresa brasileira criou uma linguagem que é usada no
mundo inteiro. O case da Plataformatec com o Elixir - Hugo Baraúna
infoq.com/br/presentations/como-uma-empresa-brasileira-criou-uma-linguagem-que-e-usada-
no-mundo-inteiro/
RubyElixirConfTaiwan 2018: Idioms for building distributed
fault-tolerant applications with Elixir- José Valim
youtube.com/watch?v=01UB1DaX1Uc
Como concorrência funciona em Elixir? - Amanda Sposito
en.eventials.com/locaweb/como-concorrencia-funciona-em-elixir-com-amanda-sposito/
Slide 225
Slide 225 text
Software Verification - José Valim
en.eventials.com/locaweb/software-verification-com-jose-valim/
GOTO 2018 - SOLID Elixir - Georgina McFadyen
youtube.com/watch?v=rmftOs2BzgU
GOTO 2018 - The Do's and Don'ts of Error Handling - Joe Armstrong
youtube.com/watch?v=TTM_b7EJg5E
RailsConf 2014 - All the Little Things by Sandi Metz
youtube.com/watch?v=8bZh5LMaSmE
Slide 226
Slide 226 text
Mocks and explicit contracts - José Valim
blog.plataformatec.com.br/2015/10/mocks-and-explicit-contracts/
Elixir, processos e esse tal de OTP - Amanda Sposito
blog.plataformatec.com.br/2018/04/elixir-processos-e-esse-tal-de-otp/
Starting with Elixir, the Study Guide - Rafael Rocha
blog.plataformatec.com.br/2018/11/starting-with-elixir-the-study-guide/
Tail Call Optimization: The Musical!! - Anjana Vakil & Natalia Margolis
youtube.com/watch?v=-PX0BV9hGZY