2. Ander, quem é você na
fila do pão?
Coordenador ELUG-RS
Desenvolvedor na
Eng. de Computação /99
@anderkonzen
anderkonzen.com
3. Aviso
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent blandit sem at sollicitudin efficitur. Nunc malesuada
ligula quam, a pharetra tortor efficitur id. Phasellus tempus viverra metus, nec ultrices risus ornare ut. Fusce ac dapibus
augue. Vestibulum vestibulum elit non dapibus hendrerit. Proin in molestie nisi. In maximus mattis nulla eget
venenatis. Aliquam eget risus et magna scelerisque auctor eget in massa.
Duis et feugiat justo, eget auctor dolor. Suspendisse sed enim leo. Sed ac erat vehicula, tempus sem sit amet, posuere
orci. Proin mi mauris, convallis ac aliquet ac, interdum ut turpis. Etiam tincidunt tellus turpis, nec imperdiet elit molestie
ut. Vivamus aliquam pulvinar nisi, vitae mollis orci euismod in. Proin fermentum semper eros, et convallis sapien
suscipit eu. Proin eleifend velit vitae nulla porttitor condimentum. Suspendisse sed aliquet urna, sit amet feugiat purus.
In nec vulputate ligula. Morbi justo magna, rhoncus at rutrum sed, imperdiet tempus velit. Pellentesque convallis
sapien justo, sit amet aliquet dui egestas ac. Morbi tincidunt massa ut nulla tincidunt volutpat.
Ut vel felis non mauris rhoncus hendrerit. Integer rhoncus quam egestas aliquet condimentum. Donec interdum eros
lectus, non facilisis lorem efficitur sit amet. Curabitur eget placerat libero, nec sollicitudin urna. Quisque maximus
viverra neque vel lacinia. Proin ultrices sem nec mi dignissim, a pulvinar tellus volutpat. Nulla congue ultrices dui, ut
tempor eros mattis et. Suspendisse vulputate interdum orci, et gravida sapien ullamcorper in. Nulla dictum ipsum at
aliquam cursus.
elixir
elixir
elixir
elixir
elixir
elixir
4. Aviso (2)
A esta altura vocês já devem saber a resposta
para a vida, o universo e tudo mais, certo?
5. Aviso (2)
A esta altura vocês já devem saber a resposta
para a vida, o universo e tudo mais, certo?
Resposta:
10. Pré-processamento Calcula Notifica e Armazena
Input Output
State A State B
Para mim faz mais sentido pensar em
estruturas de dados mais simples, e
que estes dados sofrem mudanças ao
longo do pipeline…
… do que usar objetos complexos
(classes), que podem ter seu estado
alterado em qualquer parte.
11. Pré-processamento Calcula Notifica e Armazena
Input Output
State A State B
Para mim faz mais sentido pensar em
estruturas de dados mais simples, e
que estes dados sofrem mudanças ao
longo do pipeline…
… do que usar objetos complexos
(classes), que podem ter seu estado
alterado em qualquer parte.
funções
imutabilidade
13. Incomodações
Um aspecto que me incomodava era
saber onde o estado de um objeto foi
modificado.
Da mesma forma, em uma classe
grande (sistema legado), quantos
estados internos podemos ter?
16. Imutabilidade + processos leves + memória
não compartilhada + otimizações
=
E perf? Qual o ganho?
https://phoenixframework.org/blog/the-road-to-2-million-websocket-connections
17. Imutabilidade + processos leves + memória
não compartilhada + otimizações
=
E perf? Qual o ganho?
https://phoenixframework.org/blog/the-road-to-2-million-websocket-connections
MASNÃOSEILUDA!
19. Por quê Elixir?
public static void detectText(String filePath, PrintStream out) throws Exception, IOException {
List<AnnotateImageRequest> requests = new ArrayList<>();
ByteString imgBytes = ByteString.readFrom(new FileInputStream(filePath));
Image img = Image.newBuilder().setContent(imgBytes).build();
Feature feat = Feature.newBuilder().setType(Type.TEXT_DETECTION).build();
AnnotateImageRequest request =
AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build();
requests.add(request);
try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
List<AnnotateImageResponse> responses = response.getResponsesList();
for (AnnotateImageResponse res : responses) {
if (res.hasError()) {
out.printf("Error: %sn", res.getError().getMessage());
return;
}
// For full list of available annotations, see http://g.co/cloud/vision/docs
for (EntityAnnotation annotation : res.getTextAnnotationsList()) {
out.printf("Text: %sn", annotation.getDescription());
out.printf("Position : %sn", annotation.getBoundingPoly());
}
}
}
}
https://cloud.google.com/vision/docs/ocr
20. Por quê Elixir?
https://cloud.google.com/vision/docs/ocr
# image_path = "Path to local image file, eg. './image.png'"
require "google/cloud/vision"
image_annotator = Google::Cloud::Vision::ImageAnnotator.new
response = image_annotator.text_detection(
image: image_path,
max_results: 1 # optional, defaults to 10
)
response.responses.each do |res|
res.text_annotations.each do |text|
puts text.description
end
end
21. Por quê Elixir?
😔 🥰
Assim como ruby, é
dinâmica, pragmática e
sua sintaxe é clean
22. Por quê Elixir?
À medida que fui estudando a
linguagem, me deparei com:
Erlang, OTP, BEAMλ
23. Por quê Elixir?
À medida que fui estudando a
linguagem, me deparei com:
Erlang, OTP, BEAMλ
Linguagem de programação
24. Por quê Elixir?
À medida que fui estudando a
linguagem, me deparei com:
Erlang, OTP, BEAMλ
Open Telecom Platform: standard library + design
principles
25. Por quê Elixir?
À medida que fui estudando a
linguagem, me deparei com:
Erlang, OTP, BEAMλ
BEAM: virtual machine
26. Por quê Elixir?
À medida que fui estudando a
linguagem, me deparei com:
Erlang, OTP, BEAM
Pattern Matching
λ
λ
27. Por quê Elixir?
À medida que fui estudando a
linguagem, me deparei com:
Erlang, OTP, BEAM
Pattern Matching
Pipe operator |>
λ
λ
λ
28. Por quê Elixir?
À medida que fui estudando a
linguagem, me deparei com:
Comunidade incrívelλ
29. Por quê Elixir?
À medida que fui estudando a
linguagem, me deparei com:
Comunidade incrívelλ
30 anos de VMλ
30. Por quê Elixir?
À medida que fui estudando a
linguagem, me deparei com:
Comunidade incrívelλ
30 anos de VMλ
Tooling (mix, observer, etc)λ
31. Aviso Final
Ainda resta alguma dúvida quanto à resposta
para a vida, o universo e tudo mais?
33. Sugestões
The Soul of Erlang and Elixir • Saša Jurić
https://youtu.be/JvBT4XBdoUE
Elixir: A Mini-Documentary
https://doc.honeypot.io/elixir-documentary-2018/