Backup com Git no Amazon S3
Depois de cogitar várias maneiras de realizar backup diário de banco de dados e arquivos que foram subidos por usuários, como imagens e documentos, resolvi experimentar o Git e ver se ele resolve esse tipo de problema, apesar de ser um software de controle de versão. Mas antes disso, vou apresentar os problemas do método mais comum de backup.
O método mais comum de backup utilizado entre os sysadmins é gerar um arquivo compactado contendo a data atual no nome do arquivo. A desvantagem é que esse método não escala, principalmente, quando há a preocupação com espaço disponível em disco ou cota de armazenamento em servidores externos. O problema de espaço em disco pode ser contornado excluindo os últimos X arquivos compactados, porém essa solução gera outro problema: o histórico dos arquivos deixam de existir.
No meu caso, estou utilizando o Amazon S3 para armazenar os arquivos de backup. Entretanto o Amazon S3 não oferece suporte para repositórios Git e eu precisava de alguma solução pra esse problema. Uma dessas soluções seria simular um disco rígido através do JungleDisk, mas acabei optando pelo método mais simples, que é sincronizar os arquivos que ficam dentro da pasta git com minha conta no Amazon.
Como eu precisava exportar o banco de dados MySQL também, acabei criando um script que faz tudo isso. Vale ressalvar que esse script requer o comando s3cmd instalado na sua máquina.
O Codeplane foi desenvolvido por um brasileiro!
Recentemente o brasileiro Nando Vieira lançou o Codeplane, um serviço de hospedagem de repositórios Git por apenas 9 doláres. Diferente do GitHub, o Codeplane oferece apenas um único plano e ainda sem limites de repositórios privados, mas desde que não ultrapasse o limite de 2GB de armazenamento. Acredito que seja espaço suficiente para equipes menores e freelancers. Os diferenciais do Codeplane são o preço, repositórios ilimitados e a simplicidade de uso. Outra grande característica desse serviço é que tudo pode ser feito por um terminal de texto, ou seja, não é necessário acessar o site para utilizá-lo a não ser que você realmente queira.
Não se preocupe com procedimentos de backup, pois duas copias dos seus repositórios serão armazenadas no Amazon S3 e também no RackSpace Cloud Files. Pra quem não conhece, esses dois últimos serviços oferecem armazenamento e foram projetados para serem escaláveis, com alta disponibilidade e baixa latência. Eles cuidam de toda a infraestrutura dos servidores, incluindo backups, sistema de arquivos e dentre outros aspectos.
Colaboração. Convidar pessoas para colaborarem em um repositório é meramente uma questão de digitar um e-mail e clicar em adicionar. Não há limites de colaboradores e não é necessário ter uma conta paga. Incrível, não acha?
É por atitudes como essa que eu me orgulho de ser brasileiro, sério. O cara fez tudo sozinho, não esperou colher de chá de ninguém, quero dizer, “investimentos”. Simplesmente sentou na frente do computador em uma tarde de um domingo e desenhou as telas, apresentou a ideia para alguns amigos e depois começou com a parte de programação. Depois de finalizado, postou no HackerNews e conseguiu mais de 200 assinantes sem gastar um tostão com links patrocinados ou coisas do tipo.
O Codeplane acabou de surgir e já causou bastante repercussão e tenho certeza que mais coisas boas estão por virem. Parabéns pelo grande trabalho, Nando. Além do mais ele merece porque o karma digital dele é excelente!
Experimentando o Tmux
Essa semana estive experimentando o Tmux e depois de usá-lo diariamente, acredito que deveria ser um item obrigatório na caixa de ferramentas de qualquer desenvolvedor que utiliza o Terminal na maior parte do tempo.
O Tmux é um terminal multiplexer, traduzindo, ele permite abrir vários terminais (ou janelas) e executar programas separadamente em buffers (semelhante ao Vim) e abas, mas tudo sendo controlado por uma única tela. Além disso, ele permite que você salve o estado de cada janela aberta em uma sessão, podendo ser reaberta em um segundo momento, inclusive, por múltiplos clientes. É isso mesmo, essa ferramenta utiliza o modelo cliente/servidor possibilitando, por exemplo, pareamento durante a programação.
Outro caso de uso para utilização seria se você estivesse trabalhando em um projeto, com uma conexão aberta com o servidor, editando alguns arquivos no Vim e ainda executando paralelamente a suíte de testes. Mas de repente seu chefe pede para resolver um problema de outro cliente. Todo aquele trabalho preparando o ambiente perfeito para finalizar as tarefas relacionadas com o primeiro projeto foram por água abaixo.
Acredito que os desenvolvedores devem ser preguiçosos, no aspecto de não executarem as mesmas tarefas sempre. Se houver algo que possa ser automatizado ou até mesmo a utilização de uma determinada ferramenta que possa resultar em produtividade, use-a imediatamente.
Saia da zona de conforto e experimente coisas novas.
Para instalar o Tmux no Ubuntu, basta abrir o Terminal e digitar:
$ sudo apt-get install tmux
Ou no Mac OS X através do Homebrew:
$ brew install tmux
Recomendo que assistam um vídeo que o Bryan Liles gravou sobre o Tmux. E não deixem de acessar o site oficial para maiores informações.
Meu ambiente de trabalho em 7 itens
Ainda bem que ninguém me convidou pra essa corrente, mesmo porque sou contra esse tipo de coisa. Mas o texto que escrevi abaixo até que é pertinente para compartilhar com vocês. Vou parar de trollar e ir direto ao ponto:
Ubuntu ou Mac OS X
No trabalho eu uso o Ubuntu e em casa o Snow Leopard da Apple (meu predileto). Ambos sistemas operacionais são Unix-like, ou seja, algumas funcionalidades são bastante similares, como a estrutura de diretórios, o modelo de permissão de arquivos e principalmente o interpretador de comandos.
Esses dois sistemas operacionais me atendem muito bem. Eu consigo gerenciar os processos que estão sendo executados através do Terminal, e ainda posso escrever scripts que automatizam as tarefas repetitivas do meu cotidiano sem nenhum tipo de burocracia. Nada contra o tio Ballmer.
Vim
Vim é um editor de texto extremamente produtivo e eficiente. Não vou dizer que é um editor de texto fácil de aprender porque eu estaria mentindo. Alguns desistem na primeira tentativa e outros desistem porque não conseguem abandonar o mouse. Aprender de verdade essa maravilha pode levar algumas semanas ou meses. Eu recomendo que comecem assistindo os vídeos do Vimcasts.
Git e GitHub
Ainda lembro quando não utilizava um sistema de controle de versão, era literalmente uma merda, tinha que criar cópias dos arquivos do projeto e snippets de código constantemente, o que causava certa confusão no final. Sem contar que as vezes eu apagava arquivos sem querer e para piorar eu tenho a mania de ficar limpando a lixeira sempre que apago um arquivo.
Entrando nas definições, Git é um sistema de controle de versão distribuído desenvolvido por Linus Torlvads, feito para resolver todos os problemas citados acima. Já o GitHub é um serviço de compatilhamento de código com alguns recursos de redes sociais, parecido com o Google Code, porém melhorado. No GitHub você pode hospedar repositórios públicos ou privados (no plano comercial, claro).
Google Public DNS
Sem brincadeira, depois que eu começei a usar esse provedor de DNS minha navegação agilizou bastante.
Grooveshark
O Grooveshark acabou com esse negócio de HD externo lotado de música. Eu posso ouvir qualquer música de qualquer lugar. O mundo poderia estar acabando, as pessoas virando zombies, e mesmo assim não haveria nada que distraísse um programador com um fone de ouvido.
Shell Script
Como eu disse anteriormente, me ajuda bastante no meu dia-a-dia.
Terminal
Como eu passo a maior parte do tempo na frente do Terminal, realizo a maioria das tarefas por meio dele. Operações de exclusão e procura de arquivos, finalização de processos e acesso remoto são uma dessas tarefas.
Por isso que eu sempre digo: nunca subestimem a tela preta.
Git e GitHub, a dupla perfeita
Linus Torvals revoluciona novamente o mundo do software livre, dessa vez com o sistema de controle de versão chamado Git. Ele desenvolveu esse sistema inicialmente para gerenciar a base de código do núcleo do GNU/Linux, que também foi desenvolvido por ele.
O Git se caracteriza por ser um sistema de controle de versão distribuído, ou seja, ele não depende de um servidor central. Uma das vantagens desta abordagem é que os desenvolvedores podem codificar localmente em suas máquinas. Várias empresas e start-ups do mercado, como o Twitter, Facebook e Yahoo! utilizam o Git como controle de versão.
Depois do lançamento do GitHub em 2008, serviço de compartilhamento de código, vários projetos de código aberto começaram a migrar para o GitHub, como o Ruby on Rails, por exemplo. O GitHub é um serviço extraordinário que “simplesmente funciona”. Eles oferecem planos comerciais, sendo possível manter repositórios privados.
Quem quiser aprender mais sobre o Git, recomendo que dêem uma olhada no screencast que o Fabio Akita gravou, chamado “Github Colaborativo”.
Outro recurso importante de aprendizado é o livro Pro Git (em inglês), escrito por Scott Chacon.
Plataforma como serviço
Estou fazendo um trabalho de faculdade sobre computação em nuvem, acredito que esta seja uma boa oportunidade para compartilhar algumas conclusões sobre o tema.
Essencialmente, computação em nuvem é um conjunto de servidores interligados com alta capacidade de armazenamento e processamento, que realizam determinadas tarefas por meio da Internet.
Segundo Larry Ellisson da Oracle Corporation, “a computação em nuvem é tudo o que já fazemos”. Ele quis dizer que é apenas uma campanha publicitária para popularizar os serviços que as empresas oferecem na “nuvem”.
Como essa tecnologia realmente funciona na “prática”?
A Heroku, por exemplo, oferece Platform as a Service (ou plataforma como serviço), ou seja, uma plataforma de computação dentro de uma infra-estrutura maior, evitando custos altissímos com compra e gerenciamento de camadas de softwares e hardware complexas.
A Heroku oferece um ambiente Ruby para deployment de aplicações web, e essa empresa desenvolveu um software privado que comanda, distribui e direciona as aplicações para um servidor especifico, de acordo com as necessidades de processamento do cliente.
Uma das principais características de um serviço em nuvem é a utilização de uma camada de software que controla e distruibui outros softwares em outros servidores.
Conclusão: Os tempos evoluiriam. As aplicações não são desenvolvidas da mesma maneira que há 20 anos atrás. Os desenvolvedores devem focar na construção de suas aplicações, e não em configurar e dar manutenção de servidores como antigamente.
Release do Symphony 2.2
A versão 2.2 traz grandes melhorias para o núcleo do sistema, algumas partes foram reescritas e praticamente todos os arquivos foram documentados, facilitando bastante a vida do desenvolvedor.
Um dos grandes benefícios dessa versão foram os novos delegates (ou delegados em português) adicionados, abrindo um leque enorme de possibilidades para os desenvolvedores. Foram cerca de 42 delegates ao todo.
Cada versão, o Symphony fica mais robusto e rápido. E nessa versão não é diferente, conseguimos reduzir o consumo de memória e também diminuir o número de consultas no banco de dados, graças ao novo suporte de caching ganho no núcleo.
Outro ponto importantíssimo foi a colaboração dos membros do grupo de trabalho do Symphony (Working Groups).
Enfim, sugiro que dê uma olhada por conta própria no Change Log dessa versão.
Os iniciantes (ou veteranos) podem começar com o pé direito com a nova documentação agora mesmo.
Um convite para a comunidade
A palestra do Fábio Akita no RubyConf Brasil foi muito inspiradora e bem realista. Quando o palestrante citou sobre o início de sua trajetória no mundo Rails fiquei um pouco surpreso, pois a situação do Symphony é quase a mesma hoje. Ainda temos poucos brasileiros envolvidos na comunidade e quase nenhum conteúdo escrito em português.
Poucas pessoas conhecem o Symphony, mas isso está para mudar em breve. A agência Movida Comunicação vem apoiando a comunidade brasileira de Symphony através da realização de eventos, palestras e cursos.
Se você faz parte da comunidade ou está interessado em conhecer mais sobre a ferramenta, deixe um comentário para que possamos discutir sobre como podemos fazer com que mais ideias se tornem realidade, e, principalmente fazer com que mais pessoas aprendam e usem essa ferramenta extraordinária.
Desafios do curso de Symphony CMS
Estou bastante satisfeito com os resultados e feedbacks que obtive dos últimos cursos que lecionei na agência Movida Comunicação. Gostaria de agradecer, novamente, aos alunos: Priscila Oliveira e Pedro Aredes, e dizer que foi uma experiência única.
O objetivo desse curso de curta duração (10h aula) foi ensinar a ferramenta Symphony CMS e seus principais conceitos em cima de um projeto real. O curso foi realizado ao longo de uma semana, sendo duas horas por dia e a cada dia um conceito novo era aprendido e praticado. E sempre nos finais de aula acontecia um tipo de “retrospectiva”, para que no dia seguinte possamos ser mais produtivos.
Como professor, posso dizer que ao mesmo tempo estava aprendendo bastante coisa também. Desde as mínimas coisas a maneira de me comunicar e como abordar com relevância algumas partes do conteúdo do curso.
O curso se resumiu em transmitir mais o conhecimento know-why e menos know-how, mas ao mesmo tempo mantendo a meta de finalizar o projeto ao final do curso.
Todas as expectativas e metas envolvidas foram alcanças com sucesso. Uma das minhas expectativas daqui pra frente é ver projetos sendo desenvolvidos por esses alunos utilizando o Symphony.
Até a próxima pessoal, abraços.