Rails Magazine Issue #3 – Free Download
julho 3rd, 2009
Rails Magazine Issue #3 is now available as a free pdf (52 pages) at http://railsmagazine.com/issues/3
Our best edition so far, this is packed with great technical content, interviews and photography. In this issue:
- Create a code snippet app
- Working on a typical Open Source Rails project
- Theme Support
- Observer and Singleton design patterns
- JRuby monitoring with JMX
- Ruby Web Frameworks: A Dive into Waves
- How to Implement Automated Testing
- Ruby on Rails & Flex
- Workflow solutions with AASM
Chris Wanstrath (founder of Github) shares his learnings in building a successful business with Open Source.Interviews with Carl Mercier, Ilya Grigorik and Ryan Singer. Illustrated by DHH.
If you’d like to support this effort, please contribute an article.
Join us on Facebook or follow us on Twitter.
Thank you,
Olimpiu Metiu
Editor-in-Chief | Rails Magazine
Preparativos CearáOnRails 2009, Parte I
julho 1st, 2009

Pessoal já começamos a pensar no CearáOnRails09, ano passado foi muito bacana, mas este ano pode ser melhor. Tudo anda muito complicado pois a galera anda atolada de trabalho e estudo, mas já começamos a nos reunir e decidir como vai ser a versão 2009 do CearáOnRails, uma coisa vou adiantando, que vamos ter nova logo, novo site, e muitas novidades para a galera.
Acima a primeira versão da nova logo da comunidade CearáOnRails V2009, por mim já ficava esta, mas a galera ainda vai trabalhar um pouco nestes detalhes.
Abraços e até a proxima.
Gráficos estatísticos no RubyOnRails utilizando Gruff
maio 24th, 2009
Olá pessoal,
Hoje vou mostrar como criar um gráfico para seus relatórios com o GRUFF(http://nubyonrails.com/pages/gruff), lembrado que temos que ter o ImageMagick instalado.
O primeiro passo é criar o projeto:
1 | rails --database=postgresql loja |
Depois ir em config/database.yml e coloar o nome e usuário do banco de dados:

Agora vamos criar um CRUD chamado venda com um campo vendedor do tipo string que vai ser o nome do meu Vendedor e um campo valor do tipo float que vai ser o valor total em reais vendido por aquele vendedor.
1 | script/genarate scaffold Venda vendedor:string valor:float |
Vou instalar a gem do gruff:
1 | sudo gem install gruff |
Vos ter como dependência rmagick:
1 | gem install rmagick |
Vamos entrar no arquivo config/environment.rb e antes do end vamos colocar:
1 | require "gruff" |

Pronto já podemos utilizar o gruff em nosso projeto, vamos agora criar o database e as tabelas do crud venda:
1 2 | rake db:create rake db:migrate |
Agora vamos testar a aplicação e criar alguns dados:
1 | script/server |

Agora vamos criar nossos gráficos, no controller temos que ter uma nova action, vou chamar esta action de grafico_index
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | def grafico_index # Criei um novo gráfico do tipo pizza g = Gruff::Pie.new # Coloquei um titulo para a imagem g.title = "Relatório de vendas" # Escolhi um tema para o gráfico g.theme_pastel #Estou correndo toda a tabela venda para pegar os dados Venda.all.each do |v| #Estou inserindo os dados da tabela no gráfico g.data("#{v.vendedor}", v.valor) end #fim do loop #Estou renderizando a imagem, sem criar nenhum arquivo send_data(g.to_blob,:type=> 'img/png') end |

Nosso gráfico é do tipo pizza(Pie – o meu preferido) mas podemos ter os tipos:
Line Graph
Wide Graph
Pie
Net
Crazy
Spider
Side Stacked
Stacked
Bar
Area
Nas cores podemos ter os temas:
theme_37signals
theme_greyscale
theme_keynote
theme_odeo
theme_rails_keynote
theme_pastel
Voltando ao código temos que adicionar uma rota para o novo método criado no controller vendas para que possamos utilizar ele
Vamos trocar a linha:
1 | map.resources :vendas |
por:
1 | map.resources :vendas, :collection => {:grafico_index => :get} |

Pronto agora para vermos o nosso gráfico na view index vamos abrir o arquivo app/views/vendas/index.html.erb e adicionar a seguinte linha:
1 2 3 4 5 | <br /> <img src="vendas/grafico_index" /> <br /> |

Tharannnnnnnnnnnn, temos nosso super gráfico, agora é só iniciar o servidor e ir para página
http://localhost:3000/vendas, como resultado vamos ver:

Coitado do Cascão só vendeu 1% do total, depois desta vou ficando por aqui.
Até a próxima pessoal.
Palestra Faculdade Lourenço Filho
maio 16th, 2009
Olá pessoal,
Hoje a convite do Markus Dias e do professor Leandro Toledo fui ministrar uma palestra na faculdadeLourenço filho, passamos a manhã inteira brincando com rails, intalamos o linux, o ruby, o rails e o mysql, como a palestra foi meio que ultima hora improvisamos muito mas foi bem bacana, a galera que compareceu ficou super animada. Para a galera que não foi vou colocar abaixo os slides:
Ruby em celulares com Symbian S60
maio 14th, 2009
Ruby em celulares com Symbian S60
Olá pessoal,
Hoje vamos fazer outra loucura interessante com Ruby, desta vez vamos interpretar a linguagem Ruby em um celular com um sistema Symbian. Utilizei como exemplo um celular de marca nokia referencia e50, também já consegui utilizar em um nokia Classic 6120 e em um celular nokia n-gage. Estarei utilizando o Ubuntu linux 9.04, porem vamos poder utilizar qualquer sistema operacional. Para transferir os arquivos para celular vou utilizar Bluetooth.
O RubyS60 é uma linguagem ainda muito restrita e em fase inicial. Acredito que com o atual sucesso da linguagem Ruby o RubyS60 vai melhorar muito suas funcionalidades.
Vamos acessar o site e baixar o pacote ruby_S60.zip:
http://developer.symbian.com/main/community/open_source_projects/ruby/index.jsp

Agora vamos descompactar o arquivo, e assim teremos dentro do diretório:

Ruby_S60_3.sisx – O core do Ruby
RubyFrontend_S60_3.sisx – O frontend do Ruby, onde os scripts vão ser interpretados
pips_s60_1_2_SS.sis – Utiliza bibliotecas POSIX para Symbian
ReadMe.txt – Notas sobre o pacote.
Tech_ReadMe.txt – Instruções técnicas do pacote.
Agora vamos instalar o conteúdo do pacote, o primeiro passo é instalar o pips_s60_1_2_SS, então vou clicar com o botão direito do mouse no arquivo, escolher a opção enviar para, escolher enviar como: Bluetooth e depois apertar o botão enviar.

Agora no aparelho celular vamos aceitar o arquivo e instalar o mesmo:









O próximo passo será instalar o Ruby_S60_3.sisx, como no passo anterior vamos enviar o arquivo, abrir e instalar:









O próximo e ultimo passo vai ser instalar o RubyFrontend_S60_3.sisx, como no passo anterior vamos enviar o arquivo, abrir e instalar:








Pronto agora temos tudo instalado, precisamos apenas testar se funcionou, vou criar um script para testar Ruby em meu celular, vou abrir um terminal e criar um diretório de trabalho:

1 | mkdir -p workspace/ruby660 |
Acima criei a arvore de diretório para meus scripts.
1 | cd workspace/ruby660 |
Acima entrei no diretório criado
1 | vim primeiro.rb |
Acima criei o script que vai ser executado no celular.

Agora vou montar o celular via no terminal:
bluetooth-browse


Depois vou navegar no diretório onde salvei meu script, copiar o script criado e colar dentro do diretório others que encontra-se no celular.


O próximo passo vai ser executar o arquivo criado, no celular vamos abrir o interpretador apertando no botão que vai para o menu, depois acessar a opção instalação, logo após escolher a opção RubyS60


Agora estamos dentro do interpretador Ruby para S60

Para executar nosso script temos que ir em opções, selecionar a opção open script, navegar no diretório DATA, entrar no Diretório outros e escolher o script chamado primeiro



O Resultado é:

Pronto!!! Já vimos que podemos Utilizar ruby em celulares, apenas dei um simples exemplo de funcionamento, mas no site onde baixamos o pacote de ruby também podemos baixar exemplos de scripts. O RubyS60 ainda não é uma ferramenta poderosa, mas como dito anteriormente acredito que em um futuro próximo poderemos ter uma ótima ferramenta de desenvolvimento para celulares utilizando minha linguagem favorita: Ruby.
Gerando QRcode com Ruby
maio 11th, 2009
Olá pessoal,

Hoje vamos falar sobre QRcode, o QR code é um código de barras bi-dimensional criado por japoneses em 1994. A sigla QR vem de Quick response(resposta rápida) porque o código gerado é rapidamente e facilmente interpretado. Há quem diga que o código QR é a nova geração dos códigos de barras. O que mais me atraiu no QR foi sua capacidade de armazenamento de dados, segundo o wikipedia(http://pt.wikipedia.org/wiki/QR_Code) conseguimos com QR armazenar:
- Numérica – Max. 7.089 caracteres
- Alfanumérica – Max. 4.296 caracteres
- Binário (8 bits) – Max. 2.953 bytes
- Kanji/Kana – Max. 1.817 caracteres
Outra fator interessante no QR é que pode ser interpretado por celulares, basta apenas utilizar um software gentilmente fornecido pelo site http://reader.kaywa.com/ e depois fotografar a imagem gerada para obter a interpretação do simbolo.
Neste artigo vou mostrar como gerar um simples QRcode com a linguagem Ruby e utilizar o mesmo no aparelho celular. Ao final do artigo você sera capaz de instalar ruby , rubygems, KAYWA reader(no celular), RQRCode(biblioteca Ruby) e gerar seus códigos QR. Neste artigo vou utilizar o Ubuntu Linux 9.04, Ruby 1.8.7, RubyGems 1.3.2 e para interpretar as imagens utilizarei um aparelho nokia E50.
Para poder começar vamos instalar o ruby 1.8.7 e o RbyGems(gerenciador de pacotes para ruby), vamos abrir um terminal, logar como root e entrar no diretório /usr/local/scr
1 2 3 4 5 6 7 8 9 10 11 12 13 | su - cd /usr/local/src/ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p22.tar.bz2 tar -jxvf ruby-1.8.7-p22.tar.bz2 cd ruby-1.8.7-p22 ./configure make make install cd .. wget http://rubyforge.org/frs/download.php/55066/rubygems-1.3.2.tgz tar -xvf rubygems-1.3.2.tgz rubygems-1.3.2 ruby setup.rb |
Pronto tudo instalado, como instalação foge do foco do tutorial não entrarei em detalhes. Vamos testar se tudo está realmente instalado:
1 2 3 4 | ruby -v #ruby 1.8.7 (2008-06-20 patchlevel 22) [i686-linux] gem -v #1.3.2 |
O próximo passo é instalar a gem QRcode:
1 | gem install rqrcode |
Pronto com o rqrcode instalado vamos começar a brincadeira, vou sair do usuário root, criar um diretório no raiz do meu usuário chamado workspace/qrcode/ :
1 2 3 4 | exit cd ~ mkdir -p workspace/qrcode cd workspace/qrcode/ |
Agora vamos criar um script chamado gerar_qr.rb para testar o qrcode, o script é bem simples, vamos gerar um html onde vamos ter uma imagem que vai ser interpretada por nosso aparelho celular:
1 | vim gerar_qr.rb |
Deste ponto em diante vou colocar os pedaços do script e comentar abaixo o que cada parte faz:
1 2 | require 'rubygems' require 'rqrcode' |
Acima fizemos a importação das bibliotecas necessárias
1 | texto = "Gerando QRCode com Ruby cearaonrails.org por Rafael Cruz Rubert" |
Acima criei uma variável chamada texto com o conteúdo a ser impresso em QRcode
1 | codigo = RQRCode::QRCode.new(texto, :level => "l" ) |
Acima vem a parte principal, estou criando um novo objeto QRCode com o texto predefinido na variável texto e com level l, o level é configurado de acordo com sua capacidade de correção de erros e armazenamento, podemos utilizar um dos citados abaixo:
level L 7% de correção de erros
level M 15% de correção de erros
level Q 25% de correção de erros
level H 30% de correção de correção de erros
Vale salientar que quanto menor o nível de correção de erros, maior a capacidade de armazenamento.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cabecalho = <<CABECALHO <html> <head> <title>Criando QR code com Ruby por Rafael Cruz Rubert</title> </head> <style type="text/css"> table {align:center; border: 0; border-collapse: collapse; margin: 0 auto; } td { border: 0; border-collapse: collapse; padding: 0; margin: 0; width: 10px; height: 10px; } td.preto { background-color: #000000; } td.branco { background-color: #fffffff; } </style> <body> <br /><br /><br /><br /><br /><br /> <table> CABECALHO |
Acima criei uma variável chamada cabecalho que recebe uma string necessária para montar o cabeçalho da minha pagina html a ser criada.
1 2 3 4 | rodape = <<RODAPE </table> </body> </html> |
RODAPE
Acima criei uma variável chamada rodape que recebe uma string necessária para montar o rodapé da minha pagina html a ser criada.
1 | html = File.new("index.html","w") |
Acima estou criando um novo arquivo chamado index.html e dou direito de escrita nele para gerar meu arquivo html com a imagem do QRcode.
1 | html.puts cabecalho |
Estou colocando dentro do meu arquivo index.html a variável cabeçalho.
1 2 3 4 5 6 7 8 9 10 11 | codigo.modules.each_index do |x| html.puts "<tr>" codigo.modules.each_index do |y| if codigo.is_dark(x,y) html.puts "<td class=preto></td>" else html.puts "<td class=branco></td>" end end html.puts "</tr>" end |
Esta é a parte mais complicada do script, com ela vou correr todos as linhas do QRcode criado, logo após crio uma linha(tr) na na tabela do meu arquivo index.html,vou correr todas as colunas daquela linha do meu QRcode e verifico se aquele ponto do loop é um ponto preto, caso seja ele imprime uma celula preta(td) na tabela do meu arquivo index.html, caso não imprime uma celula branca(td) na tabela do meu arquivo index.html. Depois de correr todos os pontos do meu QRcode fecho a linha da minha tabela(/tr).
1 | html.puts rodape |
Estou colocando dentro do meu arquivo index.html a variável rodape.
1 | html.close |
Estou finalizando a escrita no meu arquivo index.html e fechando o mesmo.
Bem, agora temos nosso script de criação de QRcode, já podemos testar:
1 | ruby gerar_qr.rb |
Agora vamos abrir o arquivos index.html criado com o script no navegador:
1 | firefox index.html |
Vamos ver o resultado:

Agora vamos conferir o que foi gerado em nosso QRcode, temos que instalar no aparelho celular o software KAYWA reader para poder interpretar no celular o código gerado.
O primeiro passo é baixar o software, podemos ir na pagina http://reader.kaywa.com/getit, la temos um link para baixar o programa, antes é necessário cadastro e selecionar o tipo do aparelho onde vai ser instalado o software, depois de seguir todos os passos vamos baixar o arquivo Kaywabcd_signed.sisx, com tudo feito vamos enviar ao aparelho celular:


No aparelho celular vamos aceitar


Agora no aparelho vamos instalar:






Depois de tudo pronto vamos utilizar o KAYWA reader para ler nosso QR code, vamos apertar o botão menu, depois instalação e escolher o programa KAYWA reader:


Ao abrir vai exibir notas sobre o software e logo após a câmera do celular é ativada com uma especie de mira, depois só apontar a mira para o nosso QRcode:


Pronto!!! Imediatamente vemos no software a frase guardada em nosso QRcode.

Hoje vimos como gerar e utilizar um QRcode, o uso de QRcode é muito interessante e altamente adaptável em diversas situações, acredito que logo o uso de QRcode vai ser uma tendencia em pequenas, medias e grandes industrias, como também na TI. Hoje ficamos por aqui e até o próximo artigo.
PostgreSQL + Ruby = Pl/Ruby (Parte 2)
maio 8th, 2009
Olá pessoal,
Quando comecei a escrever este artigo vi que seria algo bem legal e diferente, já que Ruby hoje não é um universo tão desconhecido e analisando as minhas possibilidades resolvi escrever algo sobre um assunto bastante interessante, e que pouco é abordado, vou falar sobre Pl/Ruby, isso mesmo vou utilizar Ruby dentro do PostgreSQL com a Pl/Ruby, com intuito de utilizar toda a regra de negócios dentro do banco de dados. Não vou criar projetos Ruby nem utilizar uma interface gráfica, ou frameworks, vou utilizar apenas o psql. Neste artigo estou usando o Ubuntu Linux 9.04, PostgreSQL 8.3.7, e a linguagem procedural Pl/Ruby para PostgreSQL. Depois de ler o artigo você conseguira utilizar Pl/Ruby e fazer um pequeno sistema de autenticação com a regra de negócios dentro do banco de dados.
Parto do pressuposto que você tenha visto a primeira parte do artigo(http://www.cearaonrails.org/2009/05/08/postgresql-ruby-plruby-parte-1/) no qual deveria ser este mas como vi a necessidade de instalação do PostgreSQL antes de entrar em um assunto tão complexo.
Para começar a diversão vou instalar o Ruby, a escolha foi a versão 1.8.7 que é a mais estável, apesar de existir a versão 1.9.1. Vamos abrir um terminal e logar como root:
1 | su - |
Vamos entrar no diretório /usr/local/src/
1 | cd /usr/local/src/ |
Agora baixar o Ruby:
1 | wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p22.tar.bz2 |

Vamos descompactar o arquivo baixado com o comando:
1 | tar -jxvf ruby-1.8.7-p22.tar.bz2 |
Depois vamos entrar no diretório criado:
1 | cd ruby-1.8.7-p22 |
Agora executar o arquivo configure:
1 | ./configure |
O próximo passo vai ser executar o comando make:
1 | make |
E para terminar a instalação do ruby, make install:
1 | make install |

Não resisti e brinquei um pouco com o Ruby:

Agora depois de brincar com ruby e ver que ele foi devidamente instalado vamos entrar no psql e criar um banco de dados para trabalho, com o terminal aberto entre com o usuário postgres:
1 | su - postgres |
Agora digitaremos o comando psql para logar no psql como usuário Postgres, ou passando o parâmetro -U para indicar o usuário, no meu caso vou logar como postgres:
1 | psql |

O próximo passo é criar um database de trabalho, vou cria-lo com o nome Ruby. Criei o database e aproveitei para logar nele com o comando c ruby:
1 2 | CREATE DATABASE ruby; c ruby |
No próximo passo vamos listar as linguagens existentes no PostgreSQL, podemos fazer isto com o comando:
1 | SELECT * FROM pg_language; |
Teremos o resultado:

Agora vamos sair do psql com o comando q:
1 | q |
Lembrando que estamos logados como usuário postgres, então é necessário voltar para o usuário root:
1 | exit |
Vamos baixar o pacote do pl/Ruby:
1 | wget http://ftp.iasi.roedu.net/mirrors/rubyforge.org/files/ruby-dbi/plruby.tar.gz |
O próximo passo é extrair o conteúdo do pacote:
1 | tar -zxvf plruby.tar.gz |
Vamos entrar no diretório criado:
1 | cd plruby-0.5.3/ |
Agora vamos configurar o pl/ruby
1 | ruby extconf.rb --with-pgsql-dir=/usr/local/pgsql/ --with-safe-level=0 --with-suffix=u |
O parâmetro –with-pgsql-dir=/usr/local/pgsql/ me diz onde vou encontrar os arquivos de configuração do postgreSQL. No parâmetro –with-safe-level=0 eu vou setar a variável global($SAFE) de segurança para 0. $SAFE=0 equivale a segurança padrão do Ruby. No parâmetro –with-suffix=u vou colocar um sufixo u para lembrar que posso utilizar ruby como untrusted . Vamos rodar o comando make:
1 | make |
Após make install:
1 | make install |
Pronto a Pl/Ruby já está instalada. Para a maioria dos casos poderíamos instalar o pacote através de um gerenciador como o apt(apt-get postgresql-8.3-plruby), mas neste caso vou utilizar o Pl/Ruby no seu modo Untrusted(Não confiável), a principal diferença entre o Untrusted e o modo Trusted(Confiável) é que no modo untrusted vou poder ser um pouco mais invasivo nas funções. Agora chega de papo e vamos utilizar nossa Pl/Ruby recém instalada.
Nos próximos passos vamos preparar um script para chamar minha pl/ruby sempre que necessario. Vamos criar um diretório dentro de /home/postgres chamado scripts:
1 | mkdir /home/postgres/scripts |
Dentro do diretório anterior vamos criar um arquivo chamado plruby.sql onde vamos ter a chamada para minha linguagem:
1 | vi /home/postgres/scripts/plruby.sql |
No arquivo vou ter o seguinte conteúdo:
1 2 3 | CREATE FUNCTION plruby_call_handler() RETURNS language_handler AS '/usr/local/lib/ruby/site_ruby/1.8/i686-linux/plruby.so' LANGUAGE 'C'; |
CREATE LANGUAGE ‘plruby’
handler plruby_call_handler
LANCOMPILER ‘PL/Ruby’;
Com o script criado vamos dar permissões de execução a ele:
1 | chmod a+x /home/postgres/scripts/plruby.sql |
Vamos reiniciar o postgreSQL por garantia:
1 | /etc/init.d/postgreSQL restart |
Agora vamos voltar ao usuário postgres, e abrir o psql e conectar ao Banco ruby:
1 2 3 | su - postgres psql c ruby |

Vamos agora executar o arquivo que criamos anteriormente para chamar a pl/ruby em nosso banco de dados:
1 | i /home/postgres/scripts/plruby.sql |

Acima o i serve para executar o que criamos anteriormente..
Agora vamos conferir novamente:
1 | SELECT * FROM pg_language; |
O resultado é:

Agora com tudo pronto só nos falta a criar nossas funções utilizando o Pl/Ruby, só para testar vamos tentar criar uma função chamada ruby_fibonacci(criada anteriormente apenas com Ruby):
1 2 3 4 | CREATE OR REPLACE FUNCTION fibonacci(int4) RETURNS VARCHAR AS $$ fibonacci = (0.."#{args[0]}".to_i).inject([1,1]) {|a,b| a << a[b] + a[b+1]} return fibonacci.join("n") $$ LANGUAGE 'plruby'; |
1 | SELECT fibonacci(7); |

Agora que sabemos que podemos utilizar o ruby dentro do PostgreSQL, vamos criar uma tabelinha onde teremos nome e senha de um usuário para depois poder criar duas novas functions. O objetivo disto é criar um usuário e uma senha, e outra é consultar este usuário e sua respectiva senha com finalidade de utilizar em um sistema de login, para um site por exemplo, antes disto vamos criar uma nova tabela:
1 | CREATE TABLE usuario(nome varchar(30), senha varchar(100)); |
Agora com nossa tabela usuário criada vamos fazer a function que inclui o camarada no banco de dados:
1 2 3 | CREATE OR REPLACE FUNCTION cadastrar_usuario(VARCHAR, VARCHAR) RETURNS VOID AS $$ PL.exec("INSERT INTO usuario(nome, senha) VALUES('#{args[0]}','#{args[1]}')") $$ LANGUAGE 'plruby'; |
Vamos cadastrar alguns usuários:
1 2 3 4 5 | SELECT cadastrar_usuario('Mônica', '123'); SELECT cadastrar_usuario('Cebolinha', '123'); SELECT cadastrar_usuario('Magali', '123'); SELECT cadastrar_usuario('Cascão', '123'); SELECT cadastrar_usuario('Chico Bento', '123'); |
Depois de nossos usuários devidamente criados vamos fazer o nosso sistema de login, com finalidade de testar o pl/ruby, os passos são muito simples, vamos correr a tabela usuário e verificar seus valores, caso identifique os valores passados por parâmetros com alguma linha da tabela usuario vamos ter retorno um boleano true, caso contrario o retorno boleano false:
1 2 3 4 5 6 7 8 9 10 11 | CREATE OR REPLACE FUNCTION login_usuario(VARCHAR,VARCHAR) RETURNS BOOLEAN AS $$ bol = false res = PL.exec("SELECT * FROM usuario") res.each do |u| if u["nome"] == args[0] and u["senha"] == args[1] bol = true break end end return bol $$ LANGUAGE 'plruby'; |
Vamos testar:
1 2 3 | SELECT login_usuario('Mônica', '123'); SELECT login_usuario('Cebolinha', '123'); SELECT login_usuario('Rafael', '123'); |

Bem pessoal agora vamos ficando por aqui, vimos como podemos colocar nossa regra de negócios dentro do PostgreSQL com a linguagem procedural Pl/Ruby, a partir daí já temos capacidade de criar novas funções em Pl/Ruby, espero que tenham gostado do artigo. Um bom desenvolvimento para todos.
PostgreSQL + Ruby = Pl/Ruby (Parte 1)
maio 8th, 2009
Instalação do PostgreSQL em ambiente Linux
Olá pessoal,
Hoje vamos aprender a instalar o postgreSQL, a versão escolhida foi 8.3.7 por ser a versão mais estável e recente da época(Maio 2009), estarei utilizando como SO o Ubuntu 9.04(Saindo do forno). Na segunda parte do tutorial vamos aprender a instalar a linguagem Ruby e utilizar a PL/Ruby.
O primeiro passo vai ser abrir um terminal e logar como root.
1 | su - |
Depois vamos para o diretório /usr/local/src/ baixar e trabalhar o código fonte do postgreSQL, para ser uma instalação mais genérica não vou utilizar nenhum gerenciador de pacotes(para instalação do postgreSQL).
1 | cd /usr/local/src/ |
Antes de começar a trabalhar na instalação do postgreSQL temos que ter instalados alguns pacotes necessários, no meu caso, para não prolongar o tutorial, instalei todos os pacotes abaixo com o apt-get:
g++
libreadline5-dev
flex
bison
libzzip-dev
libio-zlib-perl
zlib1g-dev
zlib-bin
zlibc
zziplib-bin
libperl-dev
python-dev
build-essential
Agora vamos para a instalação do postgreSQL, vamos baixar o código fonte com o comando wget:
1 | wget http://wwwmaster.postgresql.org/redir/378/f/source/v8.3.7/postgresql-8.3.7.tar.gz |
Nosso próximo passo será extrair o pacote do postgreSQL:
1 | tar -vzxf postgresql-8.3.7.tar.gz |
Depois de descompactar o arquivo vamos entrar no diretório criado:
1 | cd postgresql-8.3.7/ |
Outro passo necessário antes da instalação, é criar um usuário chamado postgres, que vai ser o usuário padrão para utilizar o psql(Terminal interativo do postgreSQL):
1 | adduser postgres |

O próximo passo é executar o arquivo configure, isso vai ser necessário para definir a árvore de localização dos fontes de seu sistema. Por padrão todos os arquivos vão ser instalados no diretório /usr/local/pgsql/ , este diretório é padrão, podendo ser alterado passando o parâmetro –prefix=diretorio_escolhido , porém não recomendo você alterar o local padrão. Também vou instalar suporte às linguagens de programação pl/perl e pl/python passando os parâmetros –with-perl e –with-python.
1 | ./configure --with-perl --with-python |
Depois de rodar o configure e ver um monte de letrinhas passando na tela, vamos ao próximo passo, que é rodar o comando make:
1 | make |
Depois de uma longa espera, vamos para o próximo passo, instalar o postgreSQL:
1 | make install |
Com o postgreSQL instalado vamos criar as aplicações clientes e bibliotecas de interfaces:
1 2 3 4 | make -C src/bin install make -C src/include install make -C src/interfaces install make -C doc install |
Depois disto vamos tornar os usuários do grupo postgres donos do psql:
1 | chown -R postgres.users /usr/local/pgsql/ |
Neste ponto já podemos acessar o psql, porém para não termos sempre o trabalho de chamar o comando /usr/local/pgsql/bin/psql para iniciar o psql vamos criar um atalho para utilizar o mesmo chamando apenas psql:
1 | ln -s /usr/local/pgsql/bin/psql /usr/local/bin/psql |
Pronto! Agora vamos começar a utilizar o banco de dados, vamos entrar com o usuário postgres:
1 | su - postgres |
Agora temos que executar uma única vez o comando :
1 | /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data |
O comando acima cria o novo diretório para alocar os arquivos de dados do PostgreSQL. Agora já podemos iniciar nosso postgreSQL, devemos rodar o comando:
1 | /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/serverlog start |
Vamos sair do usuário postgres:
1 | exit |
Para simplificar a vida vamos copiar o arquivo contrib/start-scripts/linux que encontra-se dentro da pasta extraída do pacote e jogar para o /etc/init.d:
1 | cp contrib/start-scripts/linux /etc/init.d/postgreSQL |
Com o comando acima o postgreSQL também vai ser iniciado no momento que o sistema fizer seu boot. Agora vamos alterar as permissões do arquivo criado anteriormente para que todos possam iniciar, ou parar o postgreSQL:
1 | chmod a+x /etc/init.d/postgreSQL |
Para realmente o postgreSQL iniciar ao boot do linux temos que atualizar os arquivos de inicialização para incluir o novo arquivo:
1 | update-rc.d postgreSQL defaults |
Agora podemos fazer um teste:
1 | /etc/init.d/postgreSQL status |
Pronto, nosso postgreSQL já funciona! Vamos novamente entrar como usuário postgres:
1 | su - postgres |
Agora vamos acessar o PSQL:
1 | psql |

Finalmente terminamos com sucesso nossa instalação, agora temos o PostgreSQL 8.3.7 em nosso linux, espero que o tutorial não tenha ficado tão extenso e complicado, tentei ser o mais dinâmico possível com o assunto que é, na minha opinião, tão complicado. Espero vocês no próximo artigo onde vamos instalar e utilizar o Pl/Ruby.
Testando Jquery no RubyOnRails 2.3 com Jrails
abril 19th, 2009
Olá pessoal,
Acho que todos conhecem a Jquery, se trata de uma biblioteca javascript muito bacana e leve, como o RubyOnRails usa por padrão o prototype e como o prototype é, na minha opinião, muito complicado de usar resolvi testar o Jrails(http://ennerchi.com/projects/jrails) que é um plugin para o RoR que substitui as bibliotecas padrões de javascript por bibliotecas Jquery.
Começando vou criar um projeto com a finalidade de testar os recursos nativos mais usados no RubyOnRails:

Com meu projeto criado vou instalar meu plugin:
1 | script/plugin install http://ennerchi.googlecode.com/svn/trunk/plugins/jrails |

Com o Jrails instalado vamos começar a brincadeira, vou criar um layout padrão da minha aplicação, diferente de tudo que escrevo, hoje não vou utilizar scaffold:

Depois de ter um super layout pronto vou criar um controller onde vou tratar minhas requisições:

Agora vou criar minha primeira action do controller inicio:

Com minhã action criada vou agora criar uma pagina para começar a trablhar com o Jrails:

Agora sim vamos começar a parte legal, neste primeiro teste vou utilizar um observe_field, vou ter uma lista de personagens e ao ser selecionado um vai aparecer o nome dele dinamicamente na minha pagina:

Repare bem no codigo:
1 2 3 4 5 6 | <%= observe_field :controlador, :url => {:action => "mostra_turma"}, :update => "turma", :with => "turma" %> |
Ele esta pegando meu elemento html com id controlador, chama a action mostra_turma, atualizando o elemento html chamado turma e e envia um parâmetro chamado turma, o valor deste parâmetro vai ser o que foi selecionado anteriormente. O próximo passo é escrever uma nova action chamada mostra_turma:

Depois de criado nosso primeiro exemplo, vamos ajustar a framework antes de ver funcionando:

Vamos no application controller ajustar para que todos os nossos layouts fiquem com o template main criado anteriormente:

Não vamos esquecer de configurar nosso banco de dados, vou utilizar o postgreSQL:

Depois vamos no config/routes.rb e setar como nosso controller inicial o controller inicio:

Agora vamos startar o servidor:

Vamos no navegador e ver o que aconteceu:

Quando vou na minha caixa de escolha e seleciono um personagem aparece abaixo o nome dele:

Bem agora vimos que o Jrails funciona, mas vamos brincar mais um pouco. Agora vou criar um relógio para ir acompanhando as horas em meu site, desta vez para economizar tempo e espaço vou dividir a tela no vim com o comando split e mostrar o controller e a view ao mesmo tempo:

Entre as linha 22 e 28 na parte de cima apenas mandei renderizar inline a data atual, a parte de baixo entre as linhas 27 e 30 estou falando para atualizar o elemento html com id relógio, chamando a ação relogio criada anteriormente a cada um segundo. O resultado é:

Com este outro exemplo funcionando vamos partir para o próximo, agora vamos criar um link remoto onde o conteúdo de uma action vai aparecer na tela ao clicar no mesmo:

O que aconteceu foi que chamei o link_to_remote com um nome “Aperte aqui!!!”, onde atualizo o elemento html link_dinamico com a action link_dinamico. O controller é muito simples eu apenas jogo inline o nome Olá mundo, mas observe:
1 | <%= link_to_function "[Remover]", "$('.ola').remove()" %> |
Ele vai chamar uma função para remover aquele elemento criado quando aperto o “aperte aqui!!!”. Vamos conferir o resultado:

Agora vamos fazer uma brincadeira bem bacana, vamos trabalhar com um formulário, o próximo teste vai ser um formulário onde vou escrever um nome e quando apertar no botão de enviar o formulário ele vai fazer um request e um response sem recarregar a página:

Na parte de cima apenas vou colocar inline o nome enviado pelo formulário, já na parte de baixo fiz um formulário comum que direciona para a action escreva_nome, o que vai diferenciar este formulário é na parte:
1 2 3 | <%= submit_to_remote 'submit', 'Escrever nome', :update => 'escreva_nome', :url => { :action => 'escreva_nome' } %> |
Estou falando para submeter remotamete o formulario atraves do botão nome, a ação esvreva_nome,onde vai atualizar o elemento html com id esvreva_nome. Vamos ver como ficou:

Quando escrevi meu nome e depois apertei escrever nome ele me mostrou o nome escrito anteriormente.
p.s.: Não leve a serio na imagem o botão chamado esvrever ahha devia ser escrever, digitar e tomar cerveja ao mesmo tempo não é legal hahaha.
Vamos agora como próximo exemplo fazer uma lista onde vamos poder escolher a ordem em que minha lista vai estar disposta:

Acho que de todos os exemplos este foi o mais simples apenas fiz uma lista com os elementos html ol e li, no ol dei um id chamado sortear depois foi só chamar a tag sortable element para o elemento com id sortear. Vamos ver como ficou:

Depois deste exemplo moleza vamos partir para algo mais complicado, vamos agora fazer como ultimo exemplo o famoso arrastar e soltar, quando comecei a programar era meu sonho fazer algo do tipo =), de la pra cá já fiz muito esse camarada haha.
Como é algo com um pouco mais código vou colocar as imagens e depois comentar as linhas:

Vamos agora por partes, na linha 63 abro uma div que é fechada na linha 70, esta div tem um estilo css inline, não recomendo fazer isto mas como não queria prolongar mais ainda o tutorial fiz esta gambiarra =). Nesta div vou ter dentro dela os elementos arrastáveis.
Na linha 65 eu faço um loop a partir de um hash onde vou ter um valor e um nome, fiz isto para escrever vários elementos html com o mesmo padrão que vão ser os camaradas que vão ser arrastados.
Na linha 66 monto cada option, repare que coloco uma classe chamada “elemento” e um id diferente para cada camarada e dentro de cada option o nome do personagem.
Na linha 67 digo que cada elemento daquele loop pode ser arrastado e com o revert digo que após soltar o camarada volta para o lugar de onde veio.
Na linha 71 monto a div onde os elementos arrastáveis vão ser soltos, veja que também usei css inline, Crianças não tentem fazer isto em casa.
Já na linha 74 utilizo:
1 2 3 4 5 | <%= drop_receiving_element( 'segunda_caixa', :accept => "elemento", :url => {:action => "arrastar" } , :update => "segunda_caixa" )%> |
O que estou ali falando para receber os arrastáveis na div de id segunda_caixa onde vou aceitar arrastáveis dos elementos html de class elemento(lembra da classe comentada antes?), quando for solto o arrastado vai chamar a action arrastar e atualizar o elemento html com id segunda caixa.
Ufa, pronto agora temos que ver apenas o controller com a ação arrastar:

Algo bem simples, quando soltar meu arrastado ele vai mostrar a frase: soltou em e o horário que o objeto foi solto no elemento html com id segunda caixa. Agora com tudo pronto vamos testar:

Neste ponto já consigo arrastar meu elemento, porem quando solto dentro da segunda caixa não tenho resultado algum. Acredito que o Jrails ainda não é compatível com esta opção no Rails 2.3. Para tirar as duvidas vamos remover o plugin e tentar novamente:

Com o plugin removido vou reiniciar o servidor e testar novamente com o prototype nativo do RoR, o resultado foi:

Pronto assim funfou.
Minha impressão ao utilizar o Jrails foi de ser um plugin onde troco meu prototype por Jquery de uma forma bem transparente, como podemos observar não precisamos alterar nada em nosso layout para ele poder funcionar, da mesma forma para remover o plugin é bem fácil não tendo nenhum problema ao deixar de utilizar ele. Gosto muito do Jquery então quando for começar um novo projeto vou optar por ele, caso realmente precise utilizar um arrastar e soltar você pode escrever direto com o Jquery(o que não é difícil) ou tentar utilizar o jquery com o prototype utilizando a opção jQuery.noConflict().
Por hoje é só, espero que tenham um bom desenvolvimento e de preferência sem cerveja para não trocarem os nomes =).
Flisol, Vamos nessa?
abril 17th, 2009
Pessoal vamos ter o flisol agora dia 25 de Abril de 2009, particulamente eu gostaria de pedir aos colegas para comparecerem em massa para fortalecer ainda mais a comunidade Livre como também a comumnidade CearáOnRails, me cadastrei para a judar na instalação do RoR, espero que seja aceito haha.
Sobre o evento:
O FLISOL (Festival Latinoamericano de Instalação de Software Livre) é o maior evento de divulgação de Software Livre da América Latina. Ele acontece desde 2005 e seu principal objetivo é promover o uso de software livre, apresentando sua filosofia, seu alcance, avanços e desenvolvimento ao público em geral.
Com esta finalidade, diversas comunidades locais de software livre (em cada país, em cada cidade/localidade), organizam simultaneamente eventos em que se instala gratuitamente e totalmente legal, software livre nos computadores levados pelos participantes. Também, paralelamente, são oferecidas apresentações, palestras e oficinas, sobre temas locais, nacionais e latino-americanos sobre Software Livre, com toda sua variedade de expressões: artística, acadêmica, empresarial e social.
Maiores detalhes: http://flisolceara.net/
Super Cataz(de muito bom gosto):
