Você foi contratado
Vai conhecer seus colegas
Aprender sobre a empresa
e seus produtos
E começar o onboarding no
seu projeto
E finalmente começar a
trabalhar.
E assim começa sua
primeira missão...
Configurar o
ambiente de dev!
Não é fácil
Melhor caso
Máquinas já configuradas
Um script que instala tudo
Um README bem escrito
A realidade
Máquinas não configuradas
O script não funciona
O último commit no
README foi há 84 anos
E ai?
Aí tu pergunta para os devs
Ninguém lembra
Não é rotina
Vão gastar algumas horas
Dependências e
configurações
diferentes
It's fine.
Ambiente de
desenvolvimento
virtual
Kewerson Hugo
@KewersonHugo
Máquinas virtuais
Só ligar e começar a
trabalhar
Para todos SOs
Totalmente customizável
Mas...
Imagens gigantes
Ficam desatualizadas
Stateful
Virtualização de hardware é
lento
Consome muitos recursos
Desconhece as
dependências
Desconhece as
dependências
Vagrant
Outra alternativa
Containers
O que é?
Virtualização mínima
do sistema operacional
Stateless
E o docker?
Gerar imagens
Reproduzíveis
Tamanho mínimo
Gerenciar containers
Para simplificar...
Imagine que é uma distro.
Qual nosso objetivo?
Host Container
Como funciona normalmente?
Host Container
Como funciona normalmente?
source_code
Host Container
Como funciona normalmente?
source_code
python
nodejs v???
yarn
graphviz
Host Container
source_code
python
nodejs v???
yarn
graphviz
Host Container
source_code
python
nodejs v???
yarn
graphviz
Host Container
source_code
python
nodejs v???
yarn
graphviz
source_code
Host Container
source_code
python
nodejs v12
yarn
graphviz
source_code
Vai funcionar, porém...
Dificulta edição de código
Host Container
source_code
python
nodejs v12
yarn
graphviz
source_code
Edições aqui
Host Container
source_code
python
nodejs v12
yarn
graphviz
source_code
Não refletem
aqui
Host Container
source_code
python
nodejs v12
yarn
graphviz
Conexão
source_code
Com VSCode
Dockerfile mínimo
Ambiente de dev
com containers
Rápido
Fácil
Stateless
Reproduzível
Dependências declarativas
(Dockerfile)
Porém...
Nem todo mundo usa
VSCode
Nem toda IDE tem
integração
Pouco customizável
(zsh ou fish)
Outras alternativas?
Nix
O que é?
Gerenciador de pacotes
Com superpoderes
nix-env
nix-shell
Arquivos *.nix
A configuração
cabe em um tweet
Digitar nix-shell é chato
direnv
Mais de 80 mil pacotes
Rápido
Fácil
Flexibilidade para
customizações
(zsh e fish)
Ambiente reproduzível
Ambiente para testes
Dependências declarativas
Funciona muito com
editores de texto
(VSCode, Atom, Sublime)
Algumas desvantagens
Limitado aos unix
O default.nix pode ficar
desatualizado
Pouco conhecido
Pouca integração com IDEs
(Eclipse, NetBeans)
Para concluir
Máquina Virtual
● Altamente customizável
● Funciona para qualquer SO
● Muito pesada
● Sem dependências
declarativas
● Stateful
Containers
● Fácil de configurar
● Mais rápido
● Ambientes reproduzíveis
● Stateless
● Dependências declarativas
● Funciona para qualquer SO
● Pouca customização
● Pouco suporte para IDEs
● Fácil de configurar
● Muito mais rápido
● Ambientes reproduzíveis
● Não limita customizações
● Stateless
● Dependências declarativas
● Apenas para unix
● Pouco suporte para IDEs
● Pouco conhecido
● Stateful por default
● default.nix pode ficar
desatualizado
Nix
direnv para nix stateless
Perguntas?

Ambiente de desenvolvimento virtual