quinta-feira, 23 de dezembro de 2010

Versionando Seus Dados: Boas Práticas e Dicas

Existe inúmeros servidores de controle de versão, como o CVS e o Subversion (SVN). Este artigo visa sugerir boas práticas para que estes servidores sejam utilizados da melhor e mais confiável maneira. É um artigo abrangente, direcionado tanto para desenvolvedores de programas quanto para usuários domésticos que nada sabem de programação.


  • Por Que Versionar Meus Dados??

O versionamento foi criado inicialmente para que equipes de programadores pudessem compartilhar de maneira segura e flexível códigos elaborados na construção de componentes de um mesmo programa. Com o versionamento, tornou-se possível e seguro não só o compartilhamento, como também a recuperação de versões anteriores dos arquivos versionados, ou mesmo a comparação entre as versões de um mesmo arquivo (o chamado diff).
Hoje em dia, com a evolução das tecnologias, como o aumento dos discos rígidos e a facilidade de criação de repositórios na rede (online), tornou-se viável e realmente útil realizar versionamento de qualquer coisa, desde documentos do Open Office, como textos e planilhas eletrônicas, até figuras e códigos de programas. Assim, realmente vale a pena (e recomendo!!) que você versione sua planilha com os endereços e telefones de seus contatos, seus dados de controle de gastos domésticos, sua tese de doutorado, suas fotos da câmera, suas músicas, seus históricos de programas de mensagens instantâneas, os documentos do trabalho, seu livro que vai sair um dia, suas poesias, etc, etc...
O versionamento é capaz de te lhe trazer muitos benefícios, dos quais destaco os seguintes:

1- Cópia de segurança de seus dados (o chamado backup);
2- Organização de seus dados: criação apropriada da estrutura de pastas e melhor escolha dos nomes de arquivos;
3- Armazenamento das versões anteriores dos arquivos, permitindo a recuperação das mesmas ou de parte destas;
4- Comparação entre duas ou mais versões diferentes dos arquivos a partir de programas de diff, presentes hoje na maioria dos grandes aplicativos, como a suíte do Open Office;
5- Edição e manutenção coletiva dos arquivos: várias pessoas mexendo neles ao mesmo tempo não será mais sinônimo de bagunça e perda de dados!!
6- Ferramentas para mesclar dados;
7- Fácil sincronização entre os dados que você produziu e mantém em seus diversos computadores: laptop, máquina do trabalho, máquina de casa, celular, etc..., evitando perdas de arquivos ou perigosas regressões de seus trabalhos devido à acidental sobrescrita de uma versão mais nova por uma mais antiga (que lance a primeira pedra quem nunca cometeu esse equívoco...).


  • Como Versionar Tudo Isso??

Existem milhares de controladores de versão. Eu recomendo o Subversion (abreviadamente denominado de SVN), que é bem mais seguro e inteligente que o CVS, além de existir para a grande maioria as plataformas, ser gratuito e livre, extremamente leve, vastamente testado e retestado e ter plugins e clientes das mais diferentes formas e condições.
Existem tutoriais que ensinam como fazer a sua pasta home do Linux ficar automaticamente versionada pelo SVN, de forma que qualquer coisa que você simplesmente salve ali irá automaticamente ser enviada para o servidor. Apesar de ser imensamente prático, eu não recomendo que você faça isto... mas, por quê?? Porque este procedimento gera muitos commits (efetivações) desnecessários no banco de dados do seu repositório versionado, além de tender a que todos eles sejam feitos sem qualquer mensagem descritiva, o que torna difícil a identificação da versão que você quer recuperar, caso seja necessária.
Este tutorial não ensina a instalar o servidor de controle de versão nem a criar repositórios (se é isso que você quer, navegue aqui mesmo, nesse meu ao lado direito, e veja os outros artigos do Pajé que ensinam detalhadamente muitos dos rudimentos destas técnicas, voltados para o SVN), mas sim ensina boas práticas e como explorar melhor o "poder" do versionamento.


  • Dicas Para um Bom Versionamento

Seguem abaixo várias dicas que podem ser utilizadas tanto por desenvolvedores de softwares quanto por usuários domésticos, em busca de proteção e compartilhamento de seus dados.

1- Sempre faça commits (efetivações) com mensagens. Embora muitos controladores de versões permitam subir dados sem dizer qualquer coisa a respeito, não se furte ao comentário. Somente assim será possível identificar o conteúdo novo de cada revisão criada. Nem preciso dizer que isto é essencial nas buscas e pesquisas, como comparações, das versões antigas.
1.1- Se seu repositório é compartilhado por pessoas de vários países, somente escreva as mensagens em inglês.

2- Não saia fazendo muitos commits alopradamente!!!! Suba apenas aquilo que está funcionando (ou seja, um código completo, sem erros, ou um documento com uma seção inteira adicionada ou revisada). Faça valer o gesto da criação de uma nova revisão do arquivo!!

3- Se algo ficou pendente no arquivo e você considera que possa ser feito mais tarde, não interferindo diretamente na seção onde você está trabalhando, inclua comentários sobre o mesmo. Em código de programa, normalmente se inclui blocos "TODO", para clamar por código extra (que normalmente serão providenciados em outras seções do programa) ou "FIXME" (normalmente indicando trechos hard coded). Em documentos do Open Office, coloque comentários mesmo (menu Inserir, opção Anotação), aquelas caixas de texto amarelas que guardam uma informação extra sobre um trecho do documento, sem interferir no conteúdo (não inclua os comentários como se fossem parte do documento, por favor!!! Eles usualmente lhe escapam e vão acabar sobrando no texto final, o que fica muito feio para o autor!!).

4- Nunca, mas nunca nunquinha da Silva, comece diretamente a trabalhar em seus arquivos locais!!! Antes de fazer qualquer coisa, sincronize sua base de dados local com o repositório, buscando comparar o que você tem com as versões mais novas dos arquivos e atualizando tudo o que você tem.

5- Evite armazenar o seu repositório no mesmo local onde você sempre trabalha!!!! Se ele está na mesma partição de seu disco rígido (ou até se o repositório fica no mesmo disco rígido onde você trabalha), num momento em que o disco entre em pane ou queime, você perderá tudo do mesmo jeito, seus dados locais e o precioso repositório. Vide soluções para este caso, em ordem de segurança, do menos seguro para o mais seguro:
5.1- Você pode armazenar seu repositório em um outro disco rígido de sua máquina, voltado só para isso (ainda assim, pouco seguro);
5.2- Você pode armazenar seu repositório em um dispositivo externo, como um disco externo ou pendrive (segurança média);
5.3- Você pode armazenar seu repositório em uma área de rede, que fica em um servidor de arquivos, ou seja, uma máquina na sua empresa ou na sua casa com um bom espaço ligada 24 horas por dia e com acesso compartilhado (segurança média);
5.4- Você pode armazenar seu repositório em uma área acessível via SSH (ou outro protocolo qualquer) de um storage, com vários discos rígidos compartilhados com alguma técnica de redundância e/ou espelhamento (altamente seguro, porém é mais uma solução corporativa do que doméstica!!);
5.5- Você pode armazenar seu repositório em uma área virtual fornecida por algum compartilhador, como o Dropbox, que mantém severas rotinas de backup e sela o compromisso de altíssima disponibilidade (altamente seguro, porém é mais uma solução doméstica do que corporativa!!);

6- Evidentemente, faça backups freqüentes de seu repositório!!! Nada adiantará ter toda essa tecnologia e um dia acontecer uma fatalidade... faça backups em meios seguros, como CD, DVD, outros Discos Rígidos, etc, conforme o volume e fluxo de seus dados. Agende seu backup em períodos razoáveis, de acordo com a sua produção.
6.1- PELAMORDEDEUS: teste seus backups com freqüência!!! Mais uma vez insisto: de nada adiantará ter toda essa tecnologia, inclusive o backup, se uma fatalidade ocorrer, você perder tudo, ter de voltar ao backup, e justamente aí descobrir que, por algum motivo, você não consegue recuperar o backup, pois: ou ele foi feito de maneira incorreta, ou ele estava acontecendo de maneira parcial e você nunca notou, ou qualquer outra péssima eventualidade.... teste, e teste periodicamente!!

7- Sempre que terminar ou concluir uma parte completa de seu trabalho, envie para o servidor. Programe sua rotina de trabalho para que, no final do expediente (ou de uma seção de trabalho), você tenha concluído o que você iniciou e esteja apto a subir para o servidor. Como não recomendo que suba nada com erros, com código incompleto, com seções de documento incompletas ou inconclusas e sem anotações, então programe direitinho sua seção de trabalho. Claro que imprevistos acontecem, mas tente minimizar isto e deixar o mínimo possível de novidades locais, para garantir a segurança de seus dados e evitar conflitos nas próximas sincronizações, caso ou outros membros da sua equipe trabalhem nos mesmos arquivos que você durante o intervalo entre uma seção e outra de seu trabalho.

8- Por questões de zelo e cuidado, sempre suba documentos e códigos bem formatados e ajustados. Melhora a compreensão, especialmente se você não trabalha sozinho...


Bom, pessoal... em linhas gerais, é isto que quero dizer. Espero ter ajudado!! Qualquer coisa: COMENTEM!!!

4 comentários:

vallades disse...

Muito bom o post! ;-)

O Pajé disse...

Muito obrigado, amigo!! Espero poder ajudar sempre com bons artigos e valorosas dicas!!

Daniel Manenti disse...

Pajé, em 2010 e você já estava "direcionando" o pessoal para as boas práticas.
Blog que visito há pouco, mas foi um achado precioso, que virou fonte de muito aprendizado!
Muito obrigado por compartilhar!
Grande abraço

O Pajé disse...

Muito obrigado, Daniel!!
Fico honrado com seus elogios!! Fico também muito feliz por meus artigos estarem sendo úteis!!

Abraços!!
Pajé.