SlideShare uma empresa Scribd logo
Construindo e Distribuindo
CLIs com Elixir
Hello!
Amadeu Cavalcante
@amadeucavalcant
Hello!
Weverton Timoteo
@wevtimoteo
O que é um CLI?
(Command Line Interface)
● Ideia de formar um grupo de estudos
replicável na comunidade
● Interesse em fomentar a prática de
programação em par
● Comparar a construção de um CLI em
Elixir com outras linguagens
● Conhecer melhor a linguagem
Como a ideia surgiu?
Programação em Par
● Prática adotada no Extreme
Programming (Kent Beck)
● Ótimo para processos de Onboarding
● Melhora Code Review
● Funciona remotamente?
● Como atribuir o trabalho realizado em
par?
Co-autores de commits?
● Anotações nos commits através de convenções nas mensagens de
commit
Outras convenções
● [Linux Kernel]
○ Acked-by:
○ CC: $PERSON <$MAIL>
○ Reported-by:
○ Tested-by:
● [Mediawiki Guidelines] Bug: $NUMBER
● [git-buildpack] Thanks: msg
● [openstack] DocImpact
OptionParser
● Funções de parsing para argumentos da command line
● Disponível na standard library
● Não segue todas as recomendações de convenções de command line
options do POSIX
OptionParser: Switches and Aliases
Escript (Erlang Script)
● Ferramenta para escrever e executar scripts usando Erlang
● Você pode embedar OTP e dependências dentro do seu escript
● Pode ser interpretado, compilado para byte code, ou para código
nativo
Suporte através do mix
Rebar3
● Basicamente o "Mix" para ambientes Erlang
● Mix utiliza Rebar3 para compilar dependências que usem Erlang
● Com Rebar3 podemos compilar o escript do erlang
Mix Release
● Lançado no Elixir v1.9
● Distillery?
● Gera um release auto-contido para realizar deploy/empacotamento em
alguma instância
● Opções include_erts e strip_beams
Bakeware
● Sem dependências de runtime
● Único binário (e só?)
● Cross-compilation?
● Integra com o mix release
Bakeware: Setup
Bakeware: Assemble
Bakeware: Entrypoint
Zstandard (ztd)
● Comprime o binário
● Sem ztd: 29 Mb
● Com ztd: 11 Mb (no MacOS 9 Mb)
[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir
Running binary
Distribuindo o binário
Alternativas?
Próximos passos
● Melhorar documentação (hexdocs)
● Adotar o Bakeware para disponibilizar
binários nos releases
● Identificar source provider (GitHub ou GitLab,
etc) ao executar git pair add
● Impedir duplicações do `Co-authored-by`
nos amends
● Melhorar output com cores e emojis 🤩
○ Incentivado pelo Convetional Commits
Obrigado!
Vamos criar um grupo estudos no
seu meetup group local?
Referências
● Projeto `git-pair`
● Commit Message Conventions
● Elixir: OptionParser
● GNU extensions to the POSIX recommendations for command-line options
● Mix.Tasks.Release
● Rebar3: escriptize
● Erlang: escript
Mais Referências
● makeself - Make self-extractable archives on Unix
● Zstandard, or zstd as short version, is a fast lossless compression
algorithm
● [Question] How to make a "escript" file to a binary executable?
● Elixir 1.9 Release notes - Releases
● Geoff Cant - Escript changes the game
● Bakeware
● Spawnfest

Mais conteúdo relacionado

PDF
Troubleshooting docker
PDF
TDC 2016 Floripa - Workshop docker
PDF
Workshop Docker
PPTX
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
PDF
Precisamos falar sobre Testes de infraestrutura
KEY
Programação Orientada a Testes
PDF
Docker como super comando
PDF
Testes com xUnit + Coding Dojo
Troubleshooting docker
TDC 2016 Floripa - Workshop docker
Workshop Docker
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Precisamos falar sobre Testes de infraestrutura
Programação Orientada a Testes
Docker como super comando
Testes com xUnit + Coding Dojo

Mais procurados (20)

PDF
#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos
PDF
Linguagem c
PDF
Source-to-container no mundo real
PPTX
Docker e Kubernetes: Dicas e Truques - Dezembro-2019
PPTX
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
PDF
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
ODP
Botando o Jenkins para rodar seus testes
PPTX
TDC2016POA | Trilha .NET - O que esperar do C# 7
PDF
Javascript por debaixo dos panos
PDF
Composer dependency manager
PPTX
Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
PPTX
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
PPTX
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
PPTX
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
PPTX
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
PPTX
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
PDF
Composer dependency manager - TDC - POA 2017
PDF
Testadores 2015 - O Fantástico Mundo de Docker
PDF
PPTX
Desvendando o Docker
#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos
Linguagem c
Source-to-container no mundo real
Docker e Kubernetes: Dicas e Truques - Dezembro-2019
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
Botando o Jenkins para rodar seus testes
TDC2016POA | Trilha .NET - O que esperar do C# 7
Javascript por debaixo dos panos
Composer dependency manager
Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
Composer dependency manager - TDC - POA 2017
Testadores 2015 - O Fantástico Mundo de Docker
Desvendando o Docker
Anúncio

Semelhante a [CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir (20)

PPTX
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...
PDF
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
PDF
Introdução ao Docker - Linux Dev Br 2018
PDF
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
PDF
ESLPE 2008 - Desenvolvendo aplicações no Linux
PPTX
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...
PDF
Apostila de C# & Asp.Net
PDF
Linguagem assembly
PDF
Jogos pe logica_aplicada_apostila_c_sharp
PDF
Jogos pe logica_aplicada_apostila_c_sharp
PDF
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
PPTX
DotNet Framework e Orientação a Objetos 1 - Introdução
PDF
Iniciando com kubernetes
PPTX
Docker: visão geral, possibilidades e primeiros passos - UNIVAG - Junho-2020
PDF
Programando Software Livre em C
PDF
Apostila de Introdução ao C#.net
PDF
Docker para quem tem preguica
PDF
Iniciando com docker
PDF
Vagrant vs docker? Melhor vagrant + docker
KEY
Como colaborar com projetos opensource com o GitHub
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Introdução ao Docker - Linux Dev Br 2018
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
ESLPE 2008 - Desenvolvendo aplicações no Linux
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...
Apostila de C# & Asp.Net
Linguagem assembly
Jogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharp
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
DotNet Framework e Orientação a Objetos 1 - Introdução
Iniciando com kubernetes
Docker: visão geral, possibilidades e primeiros passos - UNIVAG - Junho-2020
Programando Software Livre em C
Apostila de Introdução ao C#.net
Docker para quem tem preguica
Iniciando com docker
Vagrant vs docker? Melhor vagrant + docker
Como colaborar com projetos opensource com o GitHub
Anúncio

Último (7)

DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
Evolução em código: algoritmos genéticos com PHP
PPTX
Mapeamento de Objeto para Tabela Relacional
PDF
Dos requisitos ao código: como criar código rastreável em PHP
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PDF
apresentacao introducao computacao ead.pdf
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Curso de Windows 11 resumido na prática.pptx
Evolução em código: algoritmos genéticos com PHP
Mapeamento de Objeto para Tabela Relacional
Dos requisitos ao código: como criar código rastreável em PHP
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
apresentacao introducao computacao ead.pdf

[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir