sexta-feira, 5 de março de 2010

wilker-dev migrando para o Posterous

Olá galera, gostaria de dizer que esse blog está migrando para o Posterous, não haverão novos aqui, e os posts antigos já foram migrados, para continuar acompanhando o site continue em http://wilker-dev.posterous.com

quinta-feira, 5 de novembro de 2009

Template para Rails

Bom, como eu comecei a desenvolver mais com rails ultimamente eu decidi criar um template de inicialização para minhas apps.

Os templates do Rails podem fazer para você várias configurações iniciais para sua aplicação (configurar gems, iniciar repositório git...).

Abaixo segue o template que eu criei:



Para quem quizer utilizar para testar basta executar o seguinte comando:

rails NOME_APP -m http://gist.github.com/raw/227656/f64ca46032c6e83f92000c9c33ce078b65beafdd/rails_template.rb

terça-feira, 3 de novembro de 2009

Rails no Ubuntu 9.10 (usando o mysql do xampp)

Bom, estive tendo alguns problemas para instalar as coisas aqui no Ubuntu, mas consegui resolver, segue o passo a passo de comandos para ter tudo instalado e pegando:

1. Instalar o XAMPP e o XAMPP development package (instrucoes no site do xampp)
2. Instalar o Ruby com Development Package:
sudo apt-get install ruby1.8 ruby1.8-dev rubygems1.8 irb rake libopenssl-ruby1.8

3. instalar o rails
sudo gem install rails

4. rodar o xampp
sudo /opt/lampp/lampp start

5. instalar o mysql
sudo gem install mysql -- --with-mysql-dir=/opt/lampp/ --with-mysql-lib=/opt/lampp/lib/mysql --with-mysql-include=/opt/lampp/include/mysql

6. configurar link para socket
sudo mkdir /var/run/mysqld
sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock


É isso, com isso rolo tudo certo aqui :)

UPDATE:

Eu percebi que o link do mysqlsock é perdido sempre que o sistema é reiniciado.
Então eu criei um script para iniciar o xampp e criar o link automaticamente na inicialização:

crie o arquivo abaixo:

/usr/bin/lamppstart
#! /bin/bash

/opt/lampp/lampp start
mkdir /var/run/mysqld
ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock


após criar o script é nescessário incluí-lo na inicialização do sistema, para isso adicione a linha para executa-lo dentro do arquivo /etc/rc.local, o meu arquivo ficou assim:

/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/bin/lamppstart

exit 0

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

quinta-feira, 16 de abril de 2009

Dica rápida, tiny-url api

Só uma postagem rapidinha some como criar tiny-urls facilmente (para usar com programação).

Apenas faça um acesso http na url:

http://tinyurl.com/api-create.php?url=http://URL_PARA_REDUZIR

Ele retorna apenas a tiny-url gerada, sem html nem nada, mais simples impossível ;)

quarta-feira, 8 de abril de 2009

Cores no console do windows

Olá galera,

Atualmente eu estou criando uma biblioteca para Specs em PHP.

Como toda boa biblioteca do gênero, eu decidi que os testes iriam rodar atravéz da tela de comando.

Para o caso de testes, eu considero bastante importante que se tenha uma saída colorida para identificar de forma mais rápida os resultados. Pesquisando na net achei muita coisa sobre comandos ANSI que permitem fazer várias coisas legais, como por exemplo mover cursor, mudar a cor... Tudo muito bonito, até chegar no console do windows...

A desgraça não queria pegar cores de jeito nenhum, até achei em vários tutoriais na net para abilitar o ANSI no windows, mas no meu Vista (eca...) não funcionou... Então fui pro lado prático da coisa, fui ver onde funcionava. Eu utilizo o Cucumber para testes do Ruby aqui, e ele consegue fazer a saída colorida, então decidi ir por esse ponto. Depois de alguns testes eu vi que incluindo certas bibliotecas na hora de rodar o ruby, ele consegue automaticamente converter os ANSI para o console do windows, oque foi lindo, então eu meio que usei o ruby de proxy para a execução do programa em PHP, assim ele iria ler a saída, converter e exibir. Funcionou :D

Resultado:



Como podem ver, bastante colorido e legal :)

O código Ruby que eu usei para o proxy está aqui:


#!ruby

require 'rubygems'

gem 'win32console', '>= 1.2.0'
require 'Win32/Console/ANSI'

puts `/xampp/php/php5.3.0beta2/php.exe #{$*.join ' '}`


Claro que para uma futura versão de release isso ai vai mudar muito (adaptar pra verificar se está em windows, tratamento de erros e etc...)

Enquanto isso a Limber Spec já está dando os primeiros passos e deve ter algo funcionando de verdade em breve :)

Só pra finalizar, uma referência esperta pra quem quizer dar uma olhada sobre comandos ANSI: http://academic.evergreen.edu/projects/biophysics/technotes/program/ansi_esc.htm