Desenvolvimento em ambiente local com Omniauth e Facebook

Posted November 21st, 2011 in Desenvolvimento by felipepavao

Faz tempo que não publico nada técnico, não é ? Pois lá vai uma dica rápida porém bastante útil para quem não desenvolve mais módulo de autenticação em seus sistemas. Faz tempo que a maioria dos meus projetos pessoais utiliza o Facebook como sistema de autenticação. E essa facilidade foi possibilitada pela utilização da gem Omniauth. Entretanto, como o Facebook não possui Sandbox, era muito chato ter que ficar alterando a URL de retorno da Facebook App a todo momento que eu queria fazer alterações locais.  Além disso, não é nada inteligente fazer isso.

A solução

Tirei algumas horas pra pensar e seguei a seguinte solução:

1) Crio uma aplicação nova no Facebook, com a minha url de ambiente local setada;
2) Adiciono a seguinte linha no initializar do Omniauth:

if Rails.env == 'development'
  provider :facebook, 'xxxxxxxx', 'xxxxxxxxxxxxxxxxxxxxxxxx', :setup => true
else
  provider :facebook, 'yyyyyyyy', 'yyyyyyyyyyyyyyyyyyyyyyyy', :setup => true
end

Acredito que tenha demorado a chegar nessa solução pela inexperiência em fazer integrações. Mas é vivendo que se aprende, não é mesmo ? Até a próxima!

Mais um projeto no ar e os novos desafios

Posted January 14th, 2011 in Desenvolvimento by felipepavao

Uma das coisas mais prazerosas dessa profissão de desenvolvedor web é que durante nossa vida iniciamos e concluímos muitos ciclos, traduzidos aí em projetos. A história até parece ser repetitiva e seguir um modelo típico, onde o início é bem motivador (a fase do desconhecido), o caminho é árduo e cheio de percalços e o final geralmente é gratificante e prazeroso. Embora haja essa tal “repetição” do modelo, não há nada de sacal no processo, pois cada projeto é tecnicamente  diferente um do outro, sendo este fator determinante para sempre eu estar me renovando tecnicamente durantes os projetos que aparecem.

O projeto

Nos últimos 5 meses de 2010 estive envolvido em um projeto onde utilizamos Ruby on Rails como tecnologia principal. É claro que Rails foi apenas uma, pois a aplicação é bastante complexa e ampla, então utilizamos tudo que há de melhor possível para promover agilidade e facilidade de uso ao nosso usuário. Célula Z é um produto criado e direcionado a pequenos e micro negócios, além de profissionais liberais que queiram divulgar seus negócios assim como interagir e aumentar seu networking com outras pessoas.

Os desafios

Como disse anteriormente, esta foi uma aplicação repleta de desafios. As partes que fiquei responsável possuíam muitas interações em AJAX, além de grandes consultas ao banco de dados. Então, como Javascript nunca foi meu forte, tive que correr atrás do prejuízo e estudar mais para conseguir alcançar os resultados. Também precisei estudar mais banco de dados para fazer algumas otimizações de SQL e ainda utilizei o  Memcached para liberar a carga do banco e melhorar a performance da aplicação.

Conclusão

Virar a página e finalizar um projeto com sucesso é sempre bom: é a chance de ser reconhecido pelo trabalho realizado e ainda ter futuras  oportunidades de novos negócios. É também o momento de sintetizar um ciclo que termina, fixar o conhecimento adquirido, e mais do que nunca, compartilhá-lo. Afinal, quem ensina, aprende duas vezes.

Curso de introdução ao Sinatra no RubyLearning

Posted December 21st, 2010 in Desenvolvimento by felipepavao

Eu sempre gostei do modelo de ensino a distância (EAD) e já tive algumas experiências, tanto aqui no Brasil quanto no exterior. No Brasil, eu fiz o curso da Egenial de Adobe Flex, pois ganhei um sorteio através do site RubyInside. Além de ótimo conteúdo, o curso utilizava o mais destacado produto da empresa, o TreinaTom. Fora do país, minhas únicas experiências aconteceram através do site RubyLearning, de Satish Talim.

Ruby Learning

Como já mencionado, RubyLearning é o site de EAD do Satish Talim, grande evangelista de Ruby. Através de seus cursos, muitos desenvolvedores do mundo inteiro podem melhorar seus conhecimentos de programação. Seus cursos são ministrados através da plataforma de ensino a distância open source Moodle e se caracterizam pelo material de ensino de ótima qualidade, fornecido em PDF. Além disso, grandes e interessantes discussões ocorrem nos fóruns da ferramenta. O meu primeiro curso foi um introdutório a linguagem Ruby. Confesso que após o curso me vi apaixonado pela linguagem e tive certeza que todo projeto em que pudesse escolher uma linguagem, escolheria Ruby, por sua naturalidade e beleza. O último curso que realizei foi um introdutório ao Sinatra.

O que é Sinatra ?

Dando nomes aos bois, Sinatra é uma DSL que possibilita criar aplicações web de maneira rápida e com o mínimo esforço possivel. Basta olhar o código de exemplo de sua página introdutória para entender:

 # myapp.rb
  require 'sinatra'
 
  get '/' do
    'Hello world!'
  end
 
  post '/' do
    'Posting something!'
  end

Como se pode ver, Sinatra permite que se codifique a aplicação orientado pela indicação de correspondência de URL, obedecendo aos verbos HTTP (GET, POST, PUT, DELETE).

Padrões e boas práticas

Sinatra não atende ao padrão MVC, muito embora você possa adaptar e programar dessa maneira. Sinatra deseja que a programação de uma aplicação web seja algo simples, mas não simplório. Por isso mesmo é fornecido ao desenvolvedor a ferramenta de testes Rack::Test, para que você possa usar de TDD durante o desenvolvimento de uma solução, entretanto você pode escolher uma ferramenta que preferir, como RSPEC, por exemplo.

Cases

Embora Sinatra possa ser considerada uma ferramenta simples, enganam-se aqueles que pensam que ela não pode suportar grandes sites. No Brasil por exemplo, a Globo.com construiu o site BaixaTudo com Sinatra. Acredito que já existam muitos outros sites também em Sinatra, então caso você conheça algum, compartilhe aqui no blog.

Conclusão

O curso em si me ofereceu uma grande visão do que pode ser feito com Sinatra. Percebi que ela é uma ótima opção quando não precisamos de todo o poderio que Ruby on Rails oferece. Podemos desenvolver aplicações sob demanda, utilizando as gems que achamos necessárias, chegando assim a um produto mais enxuto e customizado. E pessoalmente enxergo que Sinatra pode ser uma das melhores ferramentas de criação de Mockups para efetivamente demonstrar algum produto de forma rápida e objetiva antes de desenvolvê-lo mais profundamente.

OBS:  A pesquisa sobre problemas no escritório permanece no ar, então se você ainda não respondeu, responda agora e ajude o nobre amigo investindo mais 5 segundos neste artigo.

Criando um sitemap.xml em Rails

Posted May 3rd, 2010 in Desenvolvimento by felipepavao

Dica rápida para quem está precisando criar um arquivo sitemap.xml, aquele mesmo que auxilia os navegadores a indexar melhor as páginas de um site.

Levando em consideração, neste exemplo, que temos um root_controller.rb, criaremos um método sitemap nele.

def sitemap
    @urls = [
              ["1.0", "http://www.domain.com/", "daily"],
              ["0.5", "http://www.domain.com/about", "monthly"],
              ["0.5", "http://www.domain.com/contact", "monthly"],
            ]
    @objects = Object.find(
           :all, 
           :order => "updated_at DESC", 
           :limit => 50000)
 
    response.headers['Content-Type'] = 'application/xml'
    render :action => 'sitemap', :layout => false
end

Como podemos observar, foi criado um hash com as URLs que são estáticas (podem até ter conteúdo dinâmico, mas são URLs que nunca mudarão). Definimos no hash alguns parâmetros como a importância e a frequência que as páginas são atualizadas. Em seguida, recebemos de uma consulta ao banco, objetos que formarão as URLs dinâmicas do site. Definimos também que a resposta da requisição está no formato XML e que aquele determinado método não é renderizado pelo template padrão.

No arquivo de rotas (routes.rb), criaremos uma rota para o método sitemap. Veja abaixo:

map.sitemap "/sitemap.xml", :controller => "root", :action => "sitemap"

Agora precisamos criar o template do XML que vai renderizar os parâmetros do método:

xml.instruct! :xml
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
  @urls.each do |url|
    xml.tag! 'url' do
      xml.tag! 'loc', url[1]
      xml.tag! 'changefreq', url[2] 
      xml.tag! 'priority', url[0] 
    end
  end
  @objects.each do |o|
    xml.tag! 'url' do
      xml.tag! 'loc', object_url(o)
      xml.tag! 'changefreq', 'monthly'
      xml.tag! 'priority', '0.2'
    end
  end
end

Este arquivo, sendo salvo como sitemap.rxml, será responsável por formatar o documento XML. Podemos observar que o primeiro bloco de código é responsável pelas urls estáticas, e a segunda parte faz um loop do objeto que recuperamos do banco de dados.

Agora você já tem um um sitemap.xml para utilizar nas ferramentas de webmasters dos mecanismos de busca.

Dev in Rio 2009

Posted August 23rd, 2009 in Desenvolvimento by felipepavao

Dev in Rio 2009

Mais um evento muito legal promete agitar e marcar o cenário carioca de desenvolvimento de software. Será realizado dia 14 de setembro o Dev in Rio, um evento que terá vários ícones nacionais e internacionais representando diversas comunidades de tecnologias. Um dos organizadores é meu colega de trabalho Guilherme Chapiewski, famoso por diversas palestras que já fez em sua carreira, além de ser um grande desenvolvedor.

O evento que também é organizado pelo Henrique Bastos, contará com as presenças de Ryan Ozimeck, Guilherme Silveira, Nico Steppat, Fábio Akita, Jacob Kaplan-Moss, Jeff Patton e Vinícius Manhães Teles.

Confira toda a programação no site do evento e não deixe de participar.

Ruby e SQLite sem Rails

Posted July 2nd, 2009 in Desenvolvimento by felipepavao

Estou desenvolvendo um programinha para consumir dados da API de buscas do Twitter e tive a ideia de implementar algum controle de usuário, para que a aplicação não faça muitas requisições ao Twitter e para que eles não me bloqueiem :-).

Então resolvi utilizar o SQLite diretamente de um script feito em Ruby. Basicamente, nesse script eu preciso criar o banco de dados, a tabela com os campos, inserir dados e verificar se eles já foram inseridos anteriormente. Veja abaixo como poderia ser.

require 'sqlite'
 
#criando ou utilizando o banco de dados
db = SQLite::Database.new('example01.db', 0644)
 
#criando a tabela
db.execute_batch <<-SQL
      CREATE TABLE users (
          idx INTEGER PRIMARY KEY,
          username VARCHAR(255)
      );
SQL
 
#inserindo um dado no banco
db.execute( "INSERT INTO users (username) VALUES ('username01')" )
 
#fazendo uma consulta e verificando se já existe no banco
if db.execute("SELECT * FROM users WHERE username = '%s' " % "username01") != []
  puts "O usuario username01 já foi adicionado anteriormente no banco de dados."
end

Se você quiser aprender mais, dê uma olhada na documentação do plugin SQLite Ruby. Este post também explica uma série de macetes se você quiser aumentar a interação com o banco de dados.

Aprenda a programar em Ruby

Posted April 13th, 2009 in Desenvolvimento by felipepavao

2007-cover-open

Mais uma dica para quem deseja programar e não sabe por onde começar. Em outro post, falei dos projetos “Aprenda a programar” em Python e Ruby. Este é também um guia de aprendizado para programar em Ruby e foi traduzido para português pela comunidade. Está hospedado no blog “Nome do Jogo” e pode ser acessado neste link (trata-se de um livro on-line). O livro original encontra-se em no site http://poignantguide.net

Aprenda a programar – programação para todos

Posted March 13th, 2009 in Desenvolvimento by felipepavao

Muitos amigos intessados em iniciar no mundo da programação têm dúvidas de como começar ou qual linguagem escolher para estudar, e se sentem perdidos neste imenso campo de informação. Para melhorar isso, indico a todos os leitores que sejam iniciantes, a praticarem os tutoriais de iniciação em Python e Ruby.

python logoruby logo

Não irei defender nenhuma delas, mas considero sendo estas 2 grandes linguagens em que um novo programador se sentirá confortável para desenvolver desde os conceitos básicos até os mais avançados. Divirta-se.