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.

Obrigado Ruby Conf BR 2012 / Fôlego Renovado

Sim, eu confesso. Já faz algum tempo que eu tenho andado desmotivado, desanimado e até um pouco frustrado com minha carreira e profissão. Eu parecia o Mr. Bean na abertura dos jogos olímpicos de Londres:

Imagem

Calma, antes que você queira me apedrejar(como alguém que trabalha com ruby e rails pode ficar assim?), deixe-me explicar que não estive assim à toa.

Para ser bem claro, falhei na entrega de um freela onde houve falha de comunicação, senti que estava com meu dever cumprido, mas no final das contas, havia mais coisa para ser feita. Isso me gerou bastante frustração e apesar do ocorrido, meu contratante perdeu o cliente e não achei justo cobrar pelas minhas horas trabalhadas, com isso mantive ao menos meu caráter e dignidade intactos. Além deste ocorrido, a startup onde trabalho vive um período de incertezas e de muita fé e esperança de que o produto ainda vingue. Admito que neste período obscuro da minha carreira, eu passei a desacreditar neste sucesso.

Enfim, páginas viradas e páginas sendo escritas. Agradeço à Deus por poder adquirir tantas experiências e mais ainda por poder assistir às palestras da Ruby Conf Brasil 2012.

Cara, como é bom ver profissionais talentosos como: fnando, caffo, cv, danilo sato, daniel lopes,valim, shiota entre outros(não fique bravo, não esqueci de ninguém, apenas citei os que mais pude acompanhar a palestra). E também não vou falar de nenhuma palestra em específico aqui, mas sim de uma maneira geral.

É muito bacana a troca de experiência, o leque de possibilidades, conhecimento e oportunidades que se abrem na rubyconf. Comecei a acompanhar o evento bem desanimado e sem expectativas por conta do momento profissional que atravessei, mas conforme as palestras iam acabando eu sentia minhas energias se renovando, o entusiasmo foi tomando conta de mim e enfim eu pude voltar a sentir aquilo que há bastante tempo não sentia: o tesão por aquilo que faço.

Assistir à alguém que fez um bot para Diablo 3 realmente te faz parar pra pensar: tanta ideia bacana, tanta coisa pra ser feita, tanta coisa pra te motivar e você aí, parado vendo a vida passar. E o incrível é que quanto mais você feras falando sobre um assunto, mais você percebe que precisa estudar mais.

Bom, se você quiser entender um pouco do que eu tentei expressar com poucas palavras, vale a pena dar uma conferida nas palestras gravadas aqui: www.eventials.com/rubyconfbr2012.

Eu diria que é obrigatório para qualquer railer assistir à estas palestras.

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 !

Instalando e configurando PostgreSQL e Postgis no Mac OS Lion

Olá pessoal, após fazer o clean install do Mac OS Lion, percebi que o note ficou muito mais rápido, recomendo à todos fazerem o clean install !

Como o note está zerado, precisei instalar e configurar o PG e o PostGis no Lion e para isto contei com uma grande ajuda de meus amigos Kleber e Lucas. Eles criaram e incrementaram o seguinte GIST.

Além do passo a passo para o Mac OS Lion também tem um tutorial para o Ubuntu, vale a pena conferirem, aqui funcionou que é uma beleza !

Dica rápida: Como instalar o PostgreSQL no seu Mac OS e as gems para sua aplicação Rails

Olá pessoal !

A dica rápida de hoje visa diminuir a dor de cabeça e agilizar o processo de instalação e configuração do PostgreSQL para que funcione com o Rails em seu ambiente de desenvolvimento.

O primeiro passo, é baixar a versão do PostgreSQL para Mac OS(utilizei o .dmg por questão de praticidade) que pode ser encontrato em: http://www.enterprisedb.com/products-services-training/pgdownload#osx

Após a instalação do .dmg podemos criar uma nova aplicação, aqui usaremos exemplo_pg para exemplificar, então, abra o terminal e digite:

rails new exemplo_pg

Com nossa estrutura no esquema, devemos inserir no Gemfile do projeto a gem ruby-pg que é a responsável pela integração do rails com o postgre. Porém, se tentar executar o comando bundle install, você muito provavelmente obterá uma saída parecida com esta:


Fetching: ruby-pg-0.7.9.2008.01.28.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing ruby-pg:
ERROR: Failed to build gem native extension.


/Users/mauriciovoto/.rvm/rubies/ree-1.8.7-2011.03/bin/ruby extconf.rb
extconf.rb:1: command not found: pg_config --bindir

=========== WARNING ===========

You are building this extension on OS X without setting the
ARCHFLAGS environment variable, and PostgreSQL does not appear
to have been built as a universal binary. If you are seeing this
message, that means that the build will probably fail.

Try setting the environment variable ARCHFLAGS
to '-arch x86_64' before building.

For example:
(in bash) $ export ARCHFLAGS='-arch x86_64'
(in tcsh) % setenv ARCHFLAGS '-arch x86_64'

Then try building again.

===================================
extconf.rb:55: command not found: pg_config --includedir
extconf.rb:52: command not found: pg_config --libdir
checking for main() in -lpq... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/mauriciovoto/.rvm/rubies/ree-1.8.7-2011.03/bin/ruby
--with-pgsql-dir
--without-pgsql-dir
--with-pgsql-include
--without-pgsql-include=${pgsql-dir}/include
--with-pgsql-lib
--without-pgsql-lib=${pgsql-dir}/lib
--with-pqlib
--without-pqlib
Could not find PostgreSQL build environment (libraries & headers): Makefile not created

Gem files will remain installed in /Users/mauriciovoto/.rvm/gems/ree-1.8.7-2011.03@gis/gems/ruby-pg-0.7.9.2008.01.28 for inspection.
Results logged to /Users/mauriciovoto/.rvm/gems/ree-1.8.7-2011.03@gis/gems/ruby-pg-0.7.9.2008.01.28/ext/gem_make.out


Para resolver este problema e instalar a gem normalmente, basta executar o seguinte comando:

PATH=$PATH:/Library/PostgreSQL/9.0/bin/ bundle install

E em seu database.yml:

development:
adapter: postgresql
database: sua_base
username: seu_user
password: sua_password
host: localhost
encoding: UTF8

Com isto, ao rodar os comandos rake db:create e db:migrate deverá obter sucesso !

Espero poder contribuir e evitar que muitos tenham os problemas e dificuldades que tive ao executar este procedimento que em tese, deveria ser bem simples. Fiz tentativas com algumas outras gems do postgre, porém sem êxito.

Obs: As versões utilizadas neste post foram:

- Mac OSX 10.6.8

- Rails 3.0.3

- PostgreSQL 9.0.4-1

Dica rápida: Como corrigir a quebra de layout da div com classe fieldWithErrors

Olá pessoal, depois de muito tempo sem postar nada, estou de volta com uma pequena porém interessante dica. Especialmente para você que não tem um designer para lhe ajudar ou que tem e não pode contar muito com ele, hehehe !

O problema:

Quando customizamos a aplicação, criamos nosso css, estilizamos tudo direitinho e depois de integrar o layout da aplicação e testarmos, nos debatemos com o seguinte problema: em nosso form, ao tentar gravar ou editar, o ActiveRecord identifica qual o erro de validação, em qual campo houve o problema. É incluído uma div com a classe fieldWithErrors para que este campo tenha um destaque, porém, se temos o layout com label e input na mesma linha, o div com a classe fieldWithErrors faz o input pular ir para a linha debaixo, quebrando assim o seu belo layout.

A solução:

Pesquisando um pouco no google, vi diversas soluções, onde o pessoal substituiu o div com o campo que continha o erro por um span e o problema então seria solucionado. Mas é claro que as coisas não funcionam de primeira, no meu caso, possuo um helper para exibição de mensagens de erros e lá possuo um método responsável por imprimir as mensagens, algumas pessoas utilizam os arquivos de configuração(environment.rb ou application.rb dependendo da versão de seu rails), mas não gosto muito dessa abordagem.

A solução seria apenas incluir:

ActionView::Base.field_error_proc = Proc.new { |html_tag, instance|”<span class=\”fieldWithErrors\”>#{html_tag}</span>” }

Mas Milk, você está utilizando Rails 3 agora esqueceu ? Como existe a questão de XSS Protection no Rails 3, devemos sempre chamar html_safe nos outputs e pronto, problema resolvido !

Espero que essa dica agilize a vida de vocês como agilizou a minha !