Git Branch no GEdit
Tenho usado o GEdit para desenvolver em Rails. Ele é leve, rápido e eficiente. Não preciso mais do que isto.
O grande problema era que eu estava me perdendo, e lá pelas tantas, depois de alguns commit's, não sabia em qual branch eu me encontrava. Para resolver isto, voltei a usar python e fiz um plugin que informa qual o branch atual na barra de status.
Para usar é só fazer o checkout do código fonte no GitHub e copiar os arquivos para:
~/.gnome2/gedit/plugins |
Reinicie o GEdit, vá em Edit\Preferences\plugins e ative o plugin "Git Branch". Para usa-lo basta pressionar "Ctrl + Alt + B" ou em "Tools/Git Branch" e acompanhar na barra de status o branch atual.
Pretendo agora fazer um outro plugin para executar comandos do Git no próprio GEdit.
Para quem for usar o GEdit para desenvolver em Rails recomendo instalar também:
Se o plugin estiver sendo útil para você, não esqueça de me recomendar no working with rails.
JSMask - Máscara em campo texto
Como anunciei no twitter, hoje a tarde criei um plugin para resolver alguns problemas que tínhamos com datas. Basicamente, precisávamos que os campos de datas do sistema tivessem uma máscara.
Já vinha utilizando, em um outro projeto, alguns javascripts. O grande problema que eles são "gordos" e tem muita coisa implementada de forma "estranha".
Então resolvi criar um javascript para resolver o problema. Então surgiu o JSMask 0.1, baseado no LowPro e no Xaprb.InputMask.
Em partes resolvia meu problema, mais não era integrado com Rails. Então mais alguns códigos e surgiu o Plugin JSMask 0.1.
Para demonstrar as funcionalidades do plugin, fiz um pequeno tutorial. Vamos testar ?
Preparando o ambiente
Este tutorial foi baseado no Rails 2.0, então a primeira coisa é verificar se você está utilizando a versão correta:
1 2 |
rails -v Rails 2.0.2 |
Tudo certo então vamos criar nossa aplicação para demonstração:
rails jsmask_demo |
As configurações de banco de dados ficam por conta de vocês. Vamos criar o banco:
rake db:create:all |
Vamos gerar nosso scaffold:
script/generate scaffold Schedule begin:date end:date |
Isto vai gerar os Controller, Helper, Model, Migration e os testes. Agora é só executar os migrations:
rake db:migrate |
Já temos nossa aplicação, com a inserção de datas no padrão do rails:
![]()
Instalando o plugin
O plugin está no github e para instalar:
git clone git://github.com/ozeias/js_mask.git vendor/plugins |
Para o Edge Rails (>= 2.1)
script/plugin install git://github.com/ozeias/js_mask.git |
Utilizando o Plugin
Agora é simples, vamos alterar nossas views geradas pelo scaffold e testar o plugin:
1 2 3 4 5 6 |
<!-- app/views/layouts/schedules.html.erb --> ... <title>Schedules: <%= controller.action_name %></title> <%= stylesheet_link_tag 'scaffold' %> <%= javascript_include_tag :defaults, :jsmask %> ... |
1 2 3 4 5 6 7 8 |
<h1>New schedule</h1><!-- app/views/schedules/new.html.erb --> <%= error_messages_for :schedule %> <%= render :partial => @schedule, :locals => { :button_name => "Create"} %> <%= link_to 'Back', schedules_path %> |
1 2 3 4 5 6 7 8 9 10 |
<!-- app/views/schedules/edit.html.erb --> <h1>Editing schedule</h1> <%= error_messages_for :schedule %> <%= render :partial => @schedule, :locals => { :button_name => "Update"} %> <%= link_to 'Show', @schedule %> | <%= link_to 'Back', schedules_path %> |
Vamos criar um partial para ficar DRY e nele inserir a funcionalidade do plugin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!-- app/views/schedules/_schedule.html.erb --> <%- form_for(@schedule) do -%> <p> <b>Begin</b><br /> <%= text_field_with_js_mask :schedule, :begin, :class => 'mask_date_iso' -%> </p> <p> <b>End</b><br /> <%= text_field_with_js_mask :schedule, :end, :class => 'mask_date_iso' -%> </p> <p> <%= submit_tag button_name -%> </p> <%- end -%> |
E o resultado:
![]()
Os formatos de máscara suportados são:
- date_iso: 2008-05-23
- date_br: 21/05/2008
- time: 10:46:55
- phone: (00)0000-0000
- ssn: 000-00-0000
- visa: 0000-0000-0000-0000
A primeira versão é muito básica, vou fazer alguns ajustes e adicionar novas funcionalidades em breve. Sugestões, dicas e críticas são bem-vindas.
Source code: http://github.com/ozeias/js_mask/tree/master
Exemplo: jsmask_demo.tar.gz
Se o plugin estiver sendo útil para você, não se esqueça de me recomendar no working with rails.
Novo endereço do feed
Resolvi dar mais uma arrumada na casa e alterar meus feed's para o FeedBurner. Com isto terei mais controle sobre os assinantes e se trocar o endereço do site, a galera que assina não vai ter problemas.
Para assinar:
Todos: http://feeds.feedburner.com/osantana
Comentários: http://feeds.feedburner.com/osantana-comments
Para os atuais assinantes deixarei o antigo ativo por mais um tempo.
Em breve mais novidades!!!
Removendo o Firefox 3 do Ubuntu
O novo ubuntu 8.04 LTS vem com muitas modificações interessantes e alguns programas que ainda são betas. Um deles é o Firefox, na versão 3.0 b5, que ainda está muito longe de ficar estável. Eu uso browser o dia inteiro, meu trabalho é web e, por isto, preciso que funcione. Não quero dizer que o novo Firefox é ruim, apenas não esta pronto para produção.
O grande problema é que os caras da Canonical deixaram como navegador principal esta versão beta. Até tem a 2.0.14, mais pra fazer funcionar meu deu dor de cabeça.
A primeira coisa a se fazer é instalar a versão 2.0.14:
sudo apt-get install firefox-2
O problema agora é que os Add-ons e os themes estão desativados, e você não consegue utiliza-los. Podemos resolver de duas maneiras:
A primeira
firefox-2 - P
E agora é só criar um novo perfil, instalar todos os add-ons e themas novamente. Como é um perfil novo, você perdeu também suas configurações, histórico, etc...
A segunda opção:
rm -f ~/.mozilla/firefox/teu-profile.default/extensions.rdf
Pronto, resolvido o problema. Para chamar o Firefox sem ser via console, altere os atalhos para:
firefox-2 |
Vale lembrar que se for aberto o Firefox 3 novamente ele cria o arquivo e você terá que apaga-lo.
Mini Curso de Rails
Ontem foi realizado o segundo mini - curso de Rails aqui em Toledo. No ano passado dei uma introdução a linguagem Ruby, mais este ano foquei no framework, e foi interessante. Tivemos um bom número de participantes e o mais importante foi saber que a galera gostou.
Foi um curso nos moldes de um blog em 15 minutos, falamos um pouco sobre o que é o Rails, desenvolvemos um mini blog e falamos sobre a melhor comunidade que já encontrei, a comunidade Rails.
Assim que tiver as fotos do evento vou postar aqui. Abaixo segue os slides da curso e o mini blog para download. Obrigado a todos que participaram.
Agora vamos tentar organizar um Paraná On Rails, já conversei com o Fábio Akita e com o Carlos Brando. O Júlio Monteiro já se dispôs a dar uma palestra e também ofereceu o Treina Tom para o evento. Tem tudo para ser um sucesso.
Agradecimentos:
- Fábio Akita - Pelos slides e pelo blog.
- James D. Davidson - Pelos fotos usadas nos slides.
Rails 2.1 RC1
O DHH acabou de fazer um pequeno anúncio no twitter sobre o lançamento do Rails 2.1 RC1. Segundo ele as gems já estão no servidor beta.
DHH: "Rails 2.1 RC1 has been tagged, the gems are on the beta server, official announcement shortly. But no need holding you back from trying it".
Para acompanhar as novidades acessem o blog do Calos Brando e sua série Edge Rails. Boas novidades estão chegado, vamos testar.
UPDATE:
Para instalar o Rails 2.1 RC1 do servidor beta, basta executar:
sudo gem install rails –source http://gems.rubyonrails.com/ |
Ou:
1 2 3 4 5 6 |
git clone git://github.com/rails/rails.git git pull git checkout v2.1.0_RC1 git checkout master rake rails:update script/dbconsole |
Hoje de manhã saiu um novo episódio do Railscast com o procedimento de atualização.
TweetWheel - Descubra a sua rede de amigos
![]()
Estou começando a usar o twitter, mais por curiosidade e, pra ser sincero, também não entendi muito para que serve. Andei dando uma olhada em addons para o firefox e widget/badge em gerais.
Uma das coisas que eu achei foi o TweetWheel, uma aplicação que gera um gráfico com os teus contatos. Me parece um mapeamento dos teus contatos e contatos em comum.
Dicas ?
Rails escala?
A duas semanas voltou a tona a discussão de que Rails não escala. Tudo porque alguém ouviu falar que não sei quem tinha falada que o Twitter iriá mudar de Rails para qualquer outra coisa que tenha escalabilidade.
Mais que diabo é escalabilidade? O que torna uma linguagem escalável? Por que de tanto bafafá por causa de um framework?
Eu trabalho quase que 100% em Rails hoje e gosto disto. Apanhei muito das macacas de auditório e ainda hoje escuto muito, mais nada me deixa tão indignado quando falam de escalabilidade. Meu professor de Engenharia de Software, muito competente por sinal, sempre enfatizou que tudo pode escalar, depende somente de como você irá fazê-lo.
Quase sempre será possível adicionar mais hardware ou mais servidores web. A questão então não é se Rails escala, mais sim quantos servidores você irá precisar para um sistema de grande porte, quanto você vai precisar de arquitetura de rede e quantos analista cuidará de tudo isto. Pronto, você acabou de escalar.
Na entrevista (ou besteirol) do Alex Payne, ele salienta o seguinte:
"The problem is that more instances of Rails (running as part of a Mongrel cluster, in our case) means more requests to your database. At this point in time there’s no facility in Rails to talk to more than one database at a time."Na realidade o grande problema são os desenvolvedores deles, os Twitter’s estão mais ligados em publicidade e marketing do que em tecnologia. Uma boa pesquisada no Google e vão ver que é possível fazer com que um cluster conecte ao mais de banco. O resto é balela.
Portanto, o grande problema é que tem muita gente que só quer falar mal, não só de Ruby, mais de tudo que é novo e tem um futuro promissor. Um bando de incompetentes que se escondem atrás de certificações e diplomas comprados.
Assim, Ruby ou qualquer outra linguagem escala basta ser competente.
update:
Acabei de colocar a foto do Akita dando uma palestra no FISL 2008. Detalhe: juro que não sabia desta foto quando escrevi este post. A foto original está aqui e a dica foi dada pelo Leonardo Torres.
ImageScience e suas dependências
Final de semana aproveitei para atualizar meu blog para o mephisto 0.8, e dar uma 'arrumada na casa'. Segui os procedimentos de instalação e tudo ocorria muito bem quando ele reclamou a não existia da biblioteca do 'FreeImage.h'.
O problema não é só para quem vai atualizar o mephisto, mais para todos que usam o gem ImageScience, uma alternativa muito rápida ao RMagick. Vale lembrar que não é um problema do mesmo, a biblioteca freeimage é uma dependência dele, e não é exigida na instalação.
Mais vamos a resolução:
Para distros derivados do Debian
sudo gem install libfreeimage3 libfreeimage-dev |
Para demais distros
1 2 3 4 5 6 |
cd /usr/local/src sudo wget http://ftp.cica.es/ubuntu/ubuntu/pool/universe/f/freeimage/freeimage_3.9.3.orig.tar.gz sudo tar -xvf freeimage_3.9.3.orig.tar.gz cd freeimage-3.9.3.repacked/FreeImage make sudo make install |
Depois é só instalar os gems:
1 2 |
sudo gem install rubyinline sudo gem install image_science |
Simples não ?!
Gerando PDF com o RTeX no Rails
RTeX é uma biblioteca ruby usado para gerar documentos pdf usando LaTeX.
Instalação
Instalando o LaTeX
O processo de instalação é muito básico, mais para quem está começando pode complicar com um pouco. Para inicio de conversa precisamos instalar a biblioteca LaTeX no seu sistema. Em sistemas linux (testei no ubuntu):
sudo apt-get install tetex-base tetex-bin texlive-base-bin |
Instalando o RTeX
A maneira mais fácil de instalar o RTeX é usando o Rubygems:
sudo gem install rtex |
Instalando o Plugin na sua aplicação
Para usar o RTeX na sua aplicação Rails basta executar o seguinte comando:
rtex --install /caminho/da/sua/aplicação |
Este comando instalará o plugin na sua aplicação (aplicação/vendor/plugins/rtex).
Usando o RTeX
Vamos criar os arquivos:
- app/views/layouts/application.pdf.rtex
- controllers/index.pdf.rtex
- controllers/_seller.pdf.rtex
Nos arquivos:
app/controllers/reports_controller.rb
1 2 3 |
def index @sellers = Seller.find(:all) end |
app/views/layouts/application.pdf.rtex
1 2 3 4 |
\documentclass[12pt]{article}
\begin{document}
<%= yield %>
\end{document}
|
app/views/sellers/index.pdf.rtex
1 2 3 4 |
\section*{Sellers}
\begin{seller}
<%= render :partial => @sellers -%>
\end{seller}
|
app/views/sellers/_seller.pdf.rtex
\seller <%= seller.name -%> \\ |
UPDATE 24/05/2008:
Precisei fazer um novo projeto usando o rtex e me retornou o seguinte erro:
1 2 |
Template is missing Missing layout layouts/application.pdf.erb in view path /home/ozeias/workspace/ror/meuapp/app/views |
Acontece que neste tutorial eu esqueci de instalar o rtex no projeto, então basta usar o comando:
rtex -i . |
Fonte:




