Dev env as code: Vagrant up

Quem trabalha com muitas tecnologias em diferentes projetos, ou mantém diversos projetos para plataformas diferentes com certeza já passou por isso: Como manter diversos ambientes de desenvolvimento na mesma maquina? Ou mesmo como reconstruir “aquele” projeto mais antigo? Para isso e para o clássico do garoto novo na empresa ter que configurar um ambiente novo ou quando você mesmo troca de maquina, temos o Vagrant!

Vagrant é uma camada de abstração para o ambiente de desenvolvimento. Ele permite definir o ambiente de dev do projeto através de um arquivo de configuração, o Vagrantfile, que passa a ser parte do código da aplicação, logo entrando para o controle de versão, distribuição e tudo mais. A partir desse arquivo o vagrant é capaz de criar uma maquina virtual com todo o ambiente pronto.

Algumas vantagens de usar essa abordagem:

  • Ambiente faz parte do código do projeto
  • Ambiente fica documentado
  • Portabilidade (mesma VM no linux, windows e mac)
  • Maior proximidade do ambiente de produção/homologação
  • Maior isolamento entre os ambientes de diversos projetos
  • Testar projetos distribuídos

Meus dois principais use-cases foram para permitir a quem entrar novo no time ter o ambiente pronto rapidamente, e de manter os ambientes isolados (tenho apps em php, clojure, ruby 1.9, ruby 2.1, etc…) sem afetar uma a outra.

Para usar o vagrant é simples:

Primeiro instale um virtualizador (como o virtualbox) e o vagrant no seu sistema.

Em seguida, no projeto, rode o comando “vagrant init”, ele vai criar um arquivo Vagrantfile de exemplo com comentários sobre como configurar sua maquina virtual. Tendo um Vagrantfile no projeto basta executar o “Vagrant up” para subir e configurar a maquina virtual. Com a maquina no ar você pode então executar “vagrant ssh” para ter acesso a ela e ir a pasta /vagrant, a qual é compartilhada com o projeto em si.

Resumindo:

$ vagrant init # cria um vagrantfile
$ vagrant up # inicia uma maquina virtual
$ vagrant ssh # acessa a maquina virtual
$ vagrant halt # desliga a maquina virtual

Algumas configurações importantes:

Deve-se definir a máquina base usando, por exemplo:

config.vm.box = "ubuntu/trusty32"

Além disso você pode buscar no vagrant cloud por várias máquinas já prontas, pode ser que a você precisa já esteja lá.

Usando a diretiva de rede no Vagrantfile a maquina virtual fica disponível nesse IP, assim como ganha uma rede interna para todas as vms poderem se acessar:

config.vm.network "private_network", ip: "192.168.10.10"

O mais importante do vagrant é a capacidade de provisionamento do ambiente, ou seja, instalar e configurar as dependências da sua aplicação de forma simples e automatizada, usando as ferramentas mais comuns de devops:

Pode até combinar eles, exemplo:

config.vm.provision "puppet" do |puppet|
 puppet.manifests_path = "manifests"
 puppet.manifest_file = "default.pp"
end

config.vm.provision "shell", :inline "apt-get install apache2 php5"
config.vm.provision "shell", :path "config.sh"

Temos também alguns plugins interessantes.

Concluindo, com um Vagrantfile no projeto você garante que o ambiente desse projeto está a um “vagrant up” de distância. Embora o tempo para instalar e configurar a maquina inicialmente demore um pouco (afinal está configurando uma maquina totalmente nova), o isolamento e a certeza de ter um ambiente uniforme valem a pena.

Em um próximo texto faço também alguns exemplos de configurações para os ambientes mais comuns.

Manifesto de volta, e com wordpress agora!

Long time no see!

Faz muito tempo que não dou atenção a este blog, mas pretendo voltar agora, sem promessas apenas vontade.

A novidade é que migrei do joomla(já muito desatualizado que estava, mesmo para um joomla) para o wordpress, migração tranquila com um pouco de sql e todo o conteúdo estava portado, e junto com um 301 na antiga pasta está tudo ok! (eu acho…)

E para quem acompanhava: meu feed antigo está morto :/ é preciso assinar o novo, se o conteúdo ainda interessar.

Aproveitei e atualizei tudo que tinha nesse servidor, que era outro wordpress e outro joomla e uns aplicativos perdidos. Os aplicativos eu removi, ficou apenas o que era estático (documentações, uns hotsites…) e o wordpress eu atualizei.

O outro joomla que roda aqui é um problema, antigo e meio complicado de dar manutenção. Tenho que ver o que fazer com ele, não pode ficar assim.

De resto, I am back!

Meu ambiente de Trabalho em 7 itens

Ae, o @gserrano descreveu seu ambiente de trabalho em 7 itens e me convidou para o meme, estão vou descrever meu ambiente de trabalho em 7 itens também:

0. Mesão
É, eu gosto de uma mesa grande, com espaço, com papel e caneta para rabiscar ideias. Espaço, espaço eu preciso de espaço! É o zero porque o meme fala sobre o ambiente virtual apenas :)

1. Opera e Firefox
Para navegação cotidiana, testes, e-mails e etc eu uso Opera. Acho o navegador muito ágil e o sincronismo de tudo desde de bookmarks até histórico e notas bem ajuda. O firefox só quando mexo com Javascript mesmo, ai entra o Firebug.

2. Rhythmbox/celular
Rhythmbox é o player de música no Ubuntu, quando não estou em casa uso o celular mesmo. Música é essencial! Do Punk ao Metal! Oh Yeah \o/

3. Git
Controle de versão é com Git sempre, e se for possível no Github.

4. VI
Meu editor de escolha, seus atalhos no teclado “rulez”.

5. Terminal
Vários utilitários, buscas em arquivos, testes e scripts sempre úteis!

6. SSH/screen/servidores e mais vi
Sempre tem um par de servidores remotos para testar as aplicações e fazer homologações também, além de brincadeiras de qualquer tipo e quando uma banda descente vem a ser necessária.

Agora convidar outros, certo? Vou chamar um pessoal variado também: O #dev companheiro de trabalho @pedromenezes, o #dev companheiro de #cparty @shdo, o designer @richardbarros (para reviver seu blog!) e o sysadmin @ebastos.

Valeu galera!

Livros e e-books

Ultimamente tenho lido muitos e-books sobre programação, pelo simples fato da grande oferta de material em inglês, mais barato e de acesso instantâneo, como alguns são muito bons resolvi compartilhar alguns dos títulos:

Seven Languages in Seven Weeks – Apesar do nome sugestivo o autor declara logo no começo que você não vai aprender sete linguagens em sete semanas. É um livro para programadores com alguma experiência que querem principalmente conhecer linguagens em outros paradigmas, assim ele vai gradativamente apresentando sete linguagens que vão cada vez mais se diferenciando das mais comuns hoje em dia e apresentando o ponto forte de cada uma e o que aproveitar delas. Um dos melhores livros que já li, recomendo muito! As linaguagens são: Ruby, IO (awesome!), prolog, Scala, Erlang, Clojure e Haskell.

Web design for developers– Programadores não entendem design (no sentido de arte) então esse livro passa os conceitos básicos para pelo menos seu projeto não ser feito e ser usado. É um bom livro.

Programming Clojure – O livro mais básico de clojure, bom para quem quer começar.

Clojure in Action – O livro mais “real” de clojure, o estudo é profundo e os exemplos são bem reais e muito uteis. Trata de MySql, Hbase, redis, http (compojure, ring e hiccup), messaging com rabbitmq e distribuição de trabalhos entre maquinas, Map/reduce entre ooutros. O mais completo eu acho sobre clojure.

The Joy of Clojure – O livro mais clojure de clojure, é o que melhor entende a ideia da linguagem e como melhor aproveita-la, meu favorito nessa área.

CouchDB The Definitive Guide – Aborda tudo que deve saber para fazer uma aplicação com CouchDB. Boa leitura.

ExtJS in Action – Achei meio fraco.

Pois é, bastante clojure. Alguns ainda na prateleira para ler (sem ordem):

  • Pragmatic Guide to Git
  • Pragmatic Guide to Javascript
  • Erlang and OTP in Action
  • Programing Erlang
  • EventSourcing in Action
  • Real-World Functional Programing
  • Secrets of the JavaScript Ninja
  • Hadoop in Action
  • Jquery Novice to Ninja
  • Lucene in Action
  • On Lisp

Realmente estou precisando ler os de Javascript.

Em novo servidor

É isso ae, esse post é apenas para registrar que o Manifesto está rodando em novo servidor, um vps na DreamHost. Ia ser Linode, mas meu chefe evangelizou a DreamHost bem demais para eu ignorar.

O VPS roda apenas LAMP mesmo, com alguns Joomla!s e um Drupal. A migração foi indolor, nada que tar + scp + mysqldump + mysql não resolva e aparentemente está tudo ok. Meus e-mails agora são todos do google (não estou exatamente satisfeito mas não farei nada por enquanto), e o google apps for your domain é “tri-legal”.

No mais peguei meu domínio: diogok.net e só falta uma página.

É isso ae!

O Shouter e o TwitterFlow2

Como disse, o importante é programar. Então como bom nerd e tentando manter o ânimo com projetos pessoais, estou sempre com projetinhos.

Semana passada consegui licenciar com o SHOUTCast(tm) Radio para (re)lançar o Shouter. O Shouter é um player que permite navegar entre as estações de radio online do SHOUTCast(tm) Radio , salvar suas favoritas e ouvi-la, é claro.

Foi um projeto curto, em 2 dias já estava funcional, mais 2 dias estava redondo. Mas demorou quase um mês para licenciar, fora encher de coisas a interface. Mas, enfim, saiu.

E têm também o TwitterFlow, já havia feito o cliente para twitter, mas estava muito insatisfeito com o resultado. Então depois de um tempo resolvi fazer um do zero, ai começou na quinta-feira 3 de setembro o TwitterFlow2, do zero, com o grande diferencial de usar OAuth.

Também já esta online, apesar de estar propenso a muitos erros ainda, e têm bastante o que acertar, mas estou satisfeito com o resultado.

Enfim, é isso. Estou precisando voltar mais ao PHP…

Opera Unite, take the web back.

O pessoal do Opera pode não ter reinventado a web como anunciaram, mas como sempre lançaram um recurso muito interessante.

 

Opera Unite

 

 

Tudo isso trata-se do Opera Unite, uma especie de recurso de compartilhamento e servidor direto do seu Opera, funcionando de forma semelhante a uma rede P2P (o que é legal) ele permite rodar serviço como compartilhamento, streaming de musica, salas de chat, compartilhar fotos entre outros muitos por vir (documentos, jogos, mais media…). A idéia é oferecer toda essa gama de serviços Web 2.0 sem depender de terceiros (mas tem o Opera) e sem sair da sua maquina, com o já funcional sincronismo do opera.

Obviamente para que o serviço esteja no ar você precisa estar conectado, pode-se controlar o acesso aos serviços por senha ou ainda apenas à você, para por exemplo ouvir suas músicas em outro computador, ou acessar seus arquivos em outros perfis.

Para usar o serviço você precisa, obviamente, do Opera, atualmente apenas com build especifico do Unite, para Linux, Mac ou até mesmo Windows. Depois basta criar ou usar sua conta no My Opera (o mesmo do Opera Link, de sincronismo), e ativar os serviços desejados.

Também é possível desenvolver seus próprios Opera Unite Services, estendo a capacidade do serviço. Alguem duvida que logo entre os primeiros vai ter algo para o twitter?

O serviço é beta e vai dar error qualquer hora, o media player por exemplo não rodou no meu firefox, mas só isso que eu vi até agora. O serviço parece legal, mas esta começando agora, vamos ver aonde isso vai parar. No minimo já conseguiram ser Trending Topic no twitter :)

Para quem quiser dar uma olhada, entre no meu Opera Unite, e se eu ainda estiver online, ouça uma musica legal.

Meu novo blog, mais pessoal.

Decidi tentar criar um novo blog, com conteúdo mais variado e pessoal, contando mais história. O Manifesto vai continuar como sempre, com os posts falando mais mão-na-massa com desenvolvimente e linux (posts em falta…), enquanto meu novo blog vai ser assuntos mais aleatório mas ainda nerd, já que no manifesto tenho um bloqueio pessoal :)

Visitem o Hello Nerd, para ler sobre a vida de um nerd atribulado no rio. Vamos ver se da certo ;)