Gem omelete

E aí pessoal, hoje vou falar sobre algo que posso me orgulhar um pouco: escrevi uma ruby gem razoavelmente decente, rsrs.

Pois é, depois de algumas brincadeiras, resolvi desenvolver esta gem e depois refatorá-la para que ficasse um pouco melhor. Vou tentar descrever o que ela é e qual seu objetivo:

– Esta gem retorna objetos de cinemas, salas, filmes e horários, conforme a programação do grande portal do Uol, o Omelete

– A gem funciona como um webcrawler, onde retorna o conteúdo através do id de cinemas e filmes do próprio omelete.

Um exemplo de uso, supondo que eu queira obter informações do Cinemark Park Shopping São Caetano:

Dado que seu id no site Omelete é 650(http://omelete.uol.com.br/filmes-em-cartaz/cinema/650), devemos invocar a seguinte chamada:

agent = Omelete::MovieTheaterAgent.new 650
agent.movie_theater

Este método movie_theater lhe retorna um objeto contendo os valores, o nome e o id omelete do cinema.

Agora, vamos supor que você queira obter os filmes que estão passando no momento no Cinemark do Park Shopping São Caetano:

agent = Omelete::MovieAgent.new 650
agent.movies

Este método movies retorna um array com objetos contendo informações básicas sobre os filmes, como nome, gênero, censura, tempo de duração, url do poster do omelete e também o id omelete de cada filme. Caso você queira obter informações mais detalhadas, como sinopse, elenco e diretor, deve invocar o seguinte:

agent = Omelete::MovieDetailsAgent.new 2
agent.movie

Supondo que o id do filme do qual você deseja obter informações detalhadas, seja 2.

Não vou me extender muito por aqui, caso você queira ver mais informações como a maneira de obter salas e horários, ou caso queira contribuir com este projeto, peço para que visite o repositório da gem:

https://github.com/mvoto/omelete

Espero que gostem e contribuam.

Problema ao tentar instalar a gem rmagick no Ubuntu

Olá pessoal, mais uma dica prática de instalação e configuração de ambiente rails.

Ao tentar instalar a gem rmagick no Ubuntu, após o apt-get install imagemagick, obtive o seguinte erro:

checking for Magick-config... no
RMagick 2.13.1. Can't find Magick-config in .....

Basta instalar o pacote libmagick9-dev:

apt-get install libmagick9-dev

Até a próxima !

Html Reader, o experimento !

Iae galera, vou aproveitar minha insônia e escrever mais um post, desta vez sobre ruby.

A bola da vez é uma aplicação que desenvolvi esses dias(https://github.com/mauriciovoto/html_reader) que surgiu com a necessidade de minha noiva estar um pouco revoltada de pedirem em seu trabalho para fazer um exaustivo trabalho de ctrl C + ctrl V. Ela tinha que copiar informações de todos os Procon do estado de SP. Daí que me surgiu a ideia de desenvolver algo para ajuda-la.

Esta foi uma ótima oportunidade para botar em prática algumas coisas que havia e venho estudando, algumas delas, recomendo fortemente, como o jeweler, o rspec(quem acompanha o blog e meu twitter sabe que venho estudando bastante esta ferramenta), o infinity_test e outras gems como hpricot, rest-open-uri e spreadsheet. Além de ser outro laboratório de git pois tenho o péssimo costume de desenvolver aplicações e mante-las em minha máquina.

Bom, para resumir o que utilizei, o jeweler é uma ferramenta para geração de gems, ou seja, gera um projeto ruby com uma mínima estrutura para iniciar um desenvolvimento ideal.

O rspec como já citei antes no blog, é uma ferramenta para escrever testes como especificações.

O infinity_test é uma biblioteca que permite ao desenvolvedor ver em tempo real se seus testes estão passando ou não, um autotester que a cada alteração que é feita, roda os testes em background e notifica(em conjunto com outra ferramenta, como o growl para mac os).

O hpricot e o rest-open-uri são gems que permitem a leitura do html dos sites, sugiro a leitura das documentações para quem quiser estudar, apliquei apenas o básico em minha aplicação.

Por último, o spreadsheet é uma gem para manipulação de planilhas excel, apesar da pouca documentação não tem muito segredo de uso. Também utilizei em minha aplicação o básico de geração, nada diferente do que encontramos na página da gem.

Espero que possam dar uma conferida na app: html_reader críticas e sugestões são sempre bem-vindas ! E mais uma vez agradeço ao meu digníssimo camarada @raulsouzalima pois ele me indicou várias dessas gems e também agradecer ao @danielvlopes que apresentou brevemente o jeweler em uma de suas aulas que tive o prazer de assistir.

rvm – o mágico gerenciamento de versões do ruby

Salve salve rubistas, railers e demais developers !

O assunto de hoje, pelo menos para mim é o fantástico rvm. Como essa ferramenta é útil na vida de um desenvolvedor !

Se você deseja ter em sua máquina JRuby, Rails 3, Rails 2.3.8, Ruby 1.9.2, Ruby 1.8.7 e o melhor, de forma organizada, você tem que instalar urgentemente o rvm.

Esta ferramenta além de gerenciar as versões do ruby, também permite gerenciar as gems com o uso de gemsets que podemos chamar de “repositório” de gems para ilustrar melhor o que é, portanto, pode-se tem em sua máquina todas as versões do rails por exemplo.

Alguns comandos simples e básicos do rvm, após ter instalado:

– rvm list (lista todas as versões do ruby que você tem, incluindo jruby)

– rvm install 1.9.2 (instala a versão do ruby de seu desejo)

– rvm use 1.9.2 (para utilizar tal versão desejada)

– rvm system (volta para a versão setada como padrão no sistema)

– rvm gemset list (lista todos os “repositórios de gems disponíveis para seu ambiente atual)

– rvm gemset create rails303 (cria um “repositório” de gems)

– rvm gemset use rails303 (para utilizar o “repositório” desejado)

– para instalar as gems apenas o comum: gem install rails

Termino este post recomendando fortemente os railers a utilizarem o rvm, acho que é uma ferramenta essencial e requisito para um bom desenvolvedor RoR.

Fonte para os comandos básicos/estudo:

http://rvm.beginrescueend.com

Ah, não posso esquecer de dar créditos ao parceiro @raulsouzalima que me indicou o uso urgente da ferramenta !

Spreadsheet: solucionando bug em arquivos biff8

Conforme prometido, vou atualizar com mais frequencia este blog e vou começar com um tópico bem interessante no meu ponto de vista: o Spreadsheet, uma gem para manipulação de planilhas Excel.

O Spreadsheet é bem tranquilo de se utilizar, apesar da pouca documentação em seu site(http://spreadsheet.rubyforge.org/GUIDE_txt.html), as tarefas básicas como escrever e ler uma planilha estão bem explicadas e tranquilas de se executar.

Tudo estava lindo e maravilhoso, instalei a gem na minha máquina(sudo gem install spreadsheet), comecei a usar tranquilamente até que me deparo com o seguinte erro ao ler uma planilha extensa:

../spreadsheet-0.6.4.1/lib/spreadsheet/excel/workbook.rb:67:in `shared_string': undefined method `content'
for nil:NilClass (NoMethodError)

Ao procurar uma solução, encontrei o seguinte link que explica melhor este erro:

http://rubyforge.org/tracker/index.php?func=detail&aid=28007&group_id=678&atid=2677

Para resumir, o que acontece é que há um bug no momento de varrer as strings longas nas planilhas que se enquadram no formato BIFF8, onde ao obter os valores(strings) e armazená-los utilizando identificador, ocorre um erro ao definir o tamanho da string que foi armazenada anteriormente pois não considera no tamanho do array os caracteres rich-text e os Asian-phonetics como disse o rapaz que reportou o bug, que felizmente foi resolvido em uma issue no github, onde um commit salvador no arquivo biff8.rb resolve o problema:

http://github.com/mugathur/ruby-spreadsheet/commit/30f8c6b25f87fd34cb76e0377975164a55b40ffa

Isto resolve o problema e deixa o Spreadsheet redondo para ser utilizado.

Ótima gem, recomendo !

 

Obs1: Estou estudando para aprimorar o uso do GitHub, talvez se eu tivesse um maior conhecimento nesta ferramenta, não precisasse dar esta volta toda para solucionar o problema.

Obs2: Reforço aqui, que sou aprendiz e meu conhecimento é muito pouco, o intuito deste blog não é somente ajudar os leitores, mas também que os leitores me ajudem. Caso tenham alguma observação ou correção sempre será bem-vindo !

Linguagem Ruby

Olá a todos !
Para aqueles que estão se interessando por Ruby on Rails, é necessário que no minimo tenha uma boa noção de orientação à objetos. Aos que já possuem essa noção aqui vai uma dica para o aprendizado da linguagem Ruby em si. São os tutoriais do Akita on Rails:

Parte1: http://akitaonrails.com/2008/11/10/micro-tutorial-de-ruby-parte-i
Parte2: http://akitaonrails.com/2008/11/10/micro-tutorial-de-ruby-parte-ii
Parte3: http://akitaonrails.com/2008/11/10/micro-tutorial-de-ruby-parte-iii

Pretendo em breve postar particularidades do framework Rails. Iniciei com o material de Ruby pois faz mais sentido aprender a linguagem primeiro para depois partir para o famework.

Até breve.

Evitando a SQL Injection

Olá galera, estou aqui agora para falar sobre um problema muito comum que acontece no mundo dos desenvolvedores, o sql injection. Que nada mais é do que o usuário inserir código malicioso(SQL) em um campo de seu site, software ou o que seja.
Por exemplo, se você faz em algum momento a determinada consulta:

User.find(:all, :conditions => "name = '#{params[:name]}'")

Isso possibilita o usuário a inserir um código malicioso através de sua consulta, ou seja, o usuário pode digitar no campo “name” o seguinte:

'; DELETE FROM PROJECTS; SELECT * from projects where '1'='1

Reultando em:

SELECT * FROM users WHERE name = ''; DELETE FROM USERS; SELECT * from users where '1'='1'

Vixxxx alguém deletou todos os dados da sua tabela de usuários. Mas calma, a solução para este
problema é bem simples, basta ao invés de passar toda a condição com uma string, passa-se um um
array ou um hash:

array:
User.find(:all, :conditions => ["name = ?", params[:name]])

hash:
User.find(:all, :conditions => {:name => params[:name]})

Pequenos detalhes como este são bem relevantes para nós desenvolvedores.

Até a próxima !