quinta-feira, 22 de outubro de 2009

Como ter um host privado de Git gratuitamente

Hoje vim aqui pra contar meio que um "truque" para repositórios online privados grátis com Git.

Pra quem não conhece, o Git é um DVCS (Distributed Version Control System), está fora do escopo desse post falar muito sobre ele, mas pra quem não conhece é uma ótima pedida ;)

Pra quem já conhece o git, é bem provavel que também conheça o github, que é uma rede social de código para git, se faz muito útil para projetos open-source, e você pode pagar por planos para ter repositórios privados. Mas também é fato que com o tempo você vai querer repositórios privados para alguns projetos (fazendo freelas por exemplo), e você não tem verba para arcar com os custos do repositório privado.

Bom, hoje eu venho apresentar uma solução meio gambiarral, mas que tem funcionado muito bem para mim :)

Para isso você vai precisar criar uma conta no dropbox, e instalar o mesmo na sua máquina. O Dropbox é um serviço de disco virtual muito legal, com conta free você começa com 2GB de espaço no servidor deles, que podem ser gratuitamente espandidos para 5GB (é só ir convidando seus amigos, a cada um que se registrar você ganha 250mb adicionais). O programa instala na sua maquina, e ele cria uma pasta especial, onde tudo que é jogado nessa pasta é automaticamente enviado para o servidor deles.

Então vamos começar, crie uma conta no Dropbox e instale o mesmo na sua máquina. Com ele instalado, apenas por questão de organização, crie uma pasta chamada git dentro do dropbox (esse passo é opcional), dentro dessa pasta iremos gravar nossos repositórios.

Vamos iniciar agora um novo repositório no seu pc, apenas para fins demonstrativos (faça isso fora da pasta do dropbox, em qualquer outro lugar do seu pc):


mkdir git_privado
cd git_privado
git init
touch README
git add README
git commit -m 'initial commit'


com isso temos um repositório bem simples iniciado na sua maquina, agora vamos para a pasta do dropbox dentro do seu pc, siga os seguintes passos:


cd git
mkdir git_privado.git
cd git_privado.git
git init --bare


Oque nós fizemos agora foi criar um repositório vazio dentro do dropbox, assim como qualquer outra coisa, o dropbox vai enviar automaticamente os arquivos para o seu servidor, também notem que o repositório foi criado com a opção "--bare", dessa forma ele inicia apenas os arquivos do repositório em si, sem a árvore de arquivos do projeto (é como ter apenas a pasta .git do repositório).

Estamos quase prontos, agora vamos configurar nosso repositório inicial para enviar as alterações para o Dropbox (navegue pelo command até a pasta do projeto criado na primeira etapa):


git remote add origin ~/Dropbox/git/git_privado.git
git push origin master


nota: onde eu coloquei "~/Dropbox/git/git_privado.git", mude para a pasta correta do dropbox de acordo com o seu sistema operacional.

Na primeira linha nós apontamos para o repositório remoto (que nesse caso está na pasta do dropbox), e depois nós enviamos as alterações para o mesmo. Com isso o dropbox já vai enviar as alterações automaticamente :)

Quando você estiver em outro PC, basta instalar o dropbox novamente, e dar um clone na pasta do repositório, assim você pode manter tudo sincronizado. E o mais legal é que no dropbox você pode compartilhar pastas, então quando você quizer autorizar alguem a mexer no repositório, basta pedir ao mesmo para criar uma conta no dropbox, e então você compartilha a pasta do repositório com ele, assim os dois (ou quantas pessoas você quizer) podem estar dando push para o repositório :)

É meio gambiarra, mas tem funcionado muito bem para os meus projetos, espero que sirva para alguns de vocês também ;)

Fuiii

sexta-feira, 9 de outubro de 2009

Calendar Iterator, criando calendários para Rails

Eu estava aqui trabalhando num projeto em Rails, e surgiu a nescessidade de usar um calendário no site. Bom, como tudo no Rails eu decidi procurar algum plugin para isso, e encontrei o Calendar Helper, foi uma surpresa pois esse foi o único que eu encontrei, tentei utiliza-lo, precisei fazer algumas modificações no mesmo, mas fui precisando de mais e mais modificações, até eu decidir que esse plugin não era o correto pra mim, eu precisava de algo mais customizavel e simples. Então decidi criar o meu próprio, o Calendar Iterator.

A idéia é bastante simples, no lugar gerar o calendário inteiro (tabela, headers...) eu decidi simplesmente gerar os dias pertinentes ao calendário do mês atual, dessa forma o resto é facilmente customizável.

Veja alguns exemplos de uso:

# criando um calendário simples
<table>
<tbody>
<% calendar_iterate do |d| %>
<%= d %>
<% end %>
</tbody>
</table>

# usando links nos dias do calendário
<table>
<tbody>
<% calendar_iterate do |d| %>
<%= link_to d, events_path(:day => d.mday) %>
<% end %>
</tbody>
</table>

# trocando a data do calendário (se você não preencher algum parâmetro, o ano/mês atual serão utilizados)
<table>
<tbody>
<% calendar_iterate :month => 6, :year => 2009 do |d| %>
<%= d %>
<% end %>
</tbody>
</table>

# usando uma versão totalmente customizada das tags <tr> e <td>
<table>
<tbody>
<% calendar_iterate.each_week do |w| %>
<tr class="some_class">
<% w.each do |d| %>
<td class="cell_class"><%= d %></td>
<% end %>
</tr>
<% end %>
</tbody>
</table>


Então é isso, o código do projeto está no Github, e pode ser visto aqui.

Para instalar o Calendar Iterator na sua aplicação execute o seguinte comando:

script/plugin install git://github.com/wilkerlucio/calendar_iterator.git