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

Mais de Weverton Timoteo (18)

PDF
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
PDF
[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?
PDF
Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
PDF
[Gophercon 2019] Analysing code quality with linters and static analysis
PDF
Elixir Brasil 2019 - Quality: A Panacéia para seu código Elixir
PDF
Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)
PPTX
21o. RubyFloripa - Maintaining legacy Rails app and introducing Elixir
PDF
How to use Ruby code inside Elixir
PPTX
17º RubyFloripa - Coding Dojo
PDF
How to draw a map - What is projections?
PDF
Gerenciando dependências front-end no Rails
PDF
Definindo a quantidade de workers para sua app
PDF
Introdução ao Chef Ops
PDF
Brincando com FFI no Ruby
PDF
Como definir a quantidade de workers para sua aplicação
PDF
Swift language - A fast overview of some features
PDF
Vim Registers
PDF
Developing an Universal iOS app
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?
Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
[Gophercon 2019] Analysing code quality with linters and static analysis
Elixir Brasil 2019 - Quality: A Panacéia para seu código Elixir
Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)
21o. RubyFloripa - Maintaining legacy Rails app and introducing Elixir
How to use Ruby code inside Elixir
17º RubyFloripa - Coding Dojo
How to draw a map - What is projections?
Gerenciando dependências front-end no Rails
Definindo a quantidade de workers para sua app
Introdução ao Chef Ops
Brincando com FFI no Ruby
Como definir a quantidade de workers para sua aplicação
Swift language - A fast overview of some features
Vim Registers
Developing an Universal iOS app

Último (7)

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

[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir