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.

Futebol e os novos tempos

Posted May 3rd, 2010 in Marketing by felipepavao

Lendo a última entrevista do Eurico Miranda, ex-presidente-achando-que-era-dono do meu clube de coração Vasco da Gama, tive a inspiração para divagar um pouco sobre os negócios que o futebol pode gerar. E o ponto central de onde tirei esses minutos de inspiração foi quando ele mencionou que uma gestão amadora no futebol ainda é mais “produtiva” que a gestão profissional. Segundo ele, a gestão amadora garante a um clube de futebol a manutenção da sua tradição (ignorando os atores principais por manter a tradição de um clube: os torcedores). Ele afirma que só um presidente amador saberia tomar decisões sábias para o futuro do clube.

Para começar, essas afirmações são totalmente furadas: futebol virou negócio, e quem não pensar assim ficará para trás. Um dos exemplos nacionais mais dramáticos é o time do Santa Cruz, com milhares de torcedores no Nordeste, e mesmo assim foi parar na quarta divisão do futebol nacional. Em 2008 foi a vez do meu time, o Vasco da Gama descer a segunda divisão e disputar a competição no ano seguinte. E tantos outros exemplos, como o Corinthians, Fluminense, Bahia, Atlético Mineiro, Botafogo, Palmeiras, entre outros. Os inúmeros exemplos, não só nacionais quanto internacionais, só comprovam a tese que se clubes de futebol tiverem administrações ruins, mesmo sendo de grande porte (com grandes torcidas), não suportarão a forte competição dos concorrentes e não obterão sucesso.

Seguindo esse argumento, chegou a hora de pensar nos negócios que o futebol pode gerar. Até porque, também temos no mundo inúmeros clubes e times-empresa que conseguem gerar ‘N’ formas de receita. Renda dos jogos, produtos, TV e patrocínios não são as únicas fontes. Na verdade, todo trabalho de marketing é baseado no fortalecimento da marca e a aproximação dos torcedores. E os serviços básicos para aproximar seus torcedores são oferecidos e cumpridos a rigor. Um torcedor, que se associa a um clube, consegue comprar ingressos de forma antecipada para todas as partidas de seu clube. E pela internet, sem enfrentar filas!! Além disso, ele tem descontos nos produtos licenciados do clube e pode participar ativamente e consumir as instalações do clube. Não preciso nem comentar sobre as instalações dos clubes europeus, que botam no chão qualquer clube do Brasil.

Então como podemos mudar esse cenário ?  No Brasil nós ainda precisamos do básico. Vender ingressos pela internet e garantir um lugar confortável ao torcedor que é associado é o começo. Precisamos melhorar nossos estádios e instalações também. Alguns clubes nacionais já criaram o seu “dia do torcedor”, onde ele paga um valor determinado  e faz um passeio pelas instalações do clube, estreitando assim o relacionamento. Além de promoções pela internet (que geram incentivos), montar equipes fortes e promover uma administração transparente também são fatores importantes. E a lista não para por aqui. Poderia passar o dia inumerando ações no futebol, mas esse ainda não é o meu trabalho. Quem sabe, um dia.

Lançado o novo site do G1

Posted April 15th, 2010 in Projetos by felipepavao

Depois de alguns meses/anos de muito trabalho e dedicação, lançamos nessa madrugada do dia 15 de abril de 2010 a nova versão do site do G1, fundado em uma nova plataforma de publicação que foi desenvolvida internamente. Antes de falar um pouco do projeto gostaria de parabenizar toda a equipe envolvida e responsáveis por conduzir mais um projeto bem sucedido da Globo.com. O novo layout do G1 vem seguindo as novas determinações de usabilidade que já haviam sido apresentadas aos usuários nos sites Rede Globo e Entretenimento.

Como disse anteriormente, o projeto G1 foi desenvolvido em alguns meses, entretanto a nova plataforma de publicação já vinha sendo desenvolvida e se tornou madura o suficiente para garantir a produção do maior site de notícias do Brasil. Sobre o projeto, desenvolvemos utilizando a metodologia Kanban, o que garantiu mudanças rápidas durante o ciclo de desenvolvimento e propiciou muita agilidade nas tomadas de decisão.

Fico feliz de ter participado desse time e vamos em frente, produzir mais funcionalidades que propiciem uma melhor experiência de uso por parte dos usuários.

E um pouco de política

Posted April 2nd, 2010 in Projetos by felipepavao

Enquanto não termino uns posts sobre negócios e futebol, que estão dando um pouco de trabalho por sinal, estou passando rápido aqui para anunciar um novo blog, criado por mim e mantido pelo meu primo, Vítor Wilher, o blog ForaPT.

Após diversas conversas de bar, resolvi materializar nossa ideia e ajudar o Brasil a extirpar o câncer chamado PT. Também estou insatisfeito com a situação política que vivemos e essa é minha forma de contribuir e poder melhorar nossa nação.

A todos que passam aqui e tem um pouco de visão política, tem a missão social de informar aos amigos para aderir ao movimento. Chega de roubalheira, corrupção, mensalão, facilitação e todo tipo de armação (desculpem o tanto de ão) que o PT fez/faz para eternizar seu império no controle do Brasil. Se eles aumentaram em 100 mil empregos de cargo comissionado, incharam a máquina pública no intuito de empregar seus “companherios”, nós, como brasileiros, temos o dever de impedir o continuismo desse governo.

Você pode conhecer mais visitando o site, e tornando-se fã do blog, na página do Facebook.

Abraços e até mais.

Comportamento humano e o ambiente corporativo

Posted March 18th, 2010 in Gestão by felipepavao

Venho percebendo por todas as empresas por onde passei que algumas pessoas apresentam um comportamento não muito “ideal” no que tange a divisão de tarefas mais desafiadoras e as mais triviais. Ainda não pude concluir o motivo desse tipo de comportamento, mas espero encontrar mais respostas aqui neste espaço.

Todo tipo de trabalho é dividido entre atividades triviais e desafiadoras. Nós tendemos a rejeitar as triviais por acharmos que podemos contribuir mais para a empresa em que trabalhamos. Entretanto, quando se trabalha em equipe, é preciso entender que as outras pessoas que compartilhamos a maior parte do dia também tem o mesmo desejo: contribuir mais para a empresa. Portanto eu penso que, uma das características da maturidade profissional é ter discernimento sobre essa divisão de atividades: um dia você encara um desafio maior, outro dia você permite que seu colega encare.

Fazendo isso, é possível que os próprios colegas de trabalho consigam manter sua equipe motivada, sem a intervenção de um gerente. Falando por mim, acredito que todas as pessoas da minha equipe (que desenvolve software web) tem muito tesão no que faz e ficaria feliz em poder sempre enfrentar desafios maiores, e não ficar no marasmo da mesmice. Todos aqui brigam por isso e é muito satisfatório ver esse comportamento.

Por outro lado, já ouvi de ex-gerentes que deveríamos encarar, mesmo as tarefas triviais, como desafiadoras. Esse argumento, no fundo, tem um sabor psicológico da relação empresa x empregador: se recebe dinheiro por isso, deve fazer e pronto. Entretanto, penso que a grande maioria das pessoas que trabalham comigo não estão aqui apenas por dinheiro: elas querem se sentir desafiadas, motivadas e valorizadas.

Agora, voltando a questão do comportamento humano citado anteriormente, podemos concluir que se trata de falta de maturidade profissional (falta de percepção) ou egoísmo mesmo (uma falha de caráter) ?

Novo Primeira Chance

Posted March 6th, 2010 in Projetos by felipepavao

Como eu disse no primeiro post do ano, estou planejando ações para os próximos 5 anos. E uma delas é a reformulação um dos sites que criei, o Primeira Chance. A primeira medida foi criar o blog oficial do site, que será responsável por ser o canal principal de comunicação da nossa equipe com os usuários.

O Primeira Chance foi uma grata surpresa em minha vida, apesar de ter dados reais que poderia se tornar um sucesso. O site cresceu em um espaço não preenchido pelas empresas de recursos humanos. Espaço esse que consiste em dar uma atenção especial para as pessoas que desejam entrar no mercado do trabalho e pôr em prática o que aprenderam na sala de aula.

Foi em Setembro de 2008 que tive a ideia de lançar o projeto, após perceber a dificuldade de encontrar informações sobre vagas de estágio. Hoje, com quase 2 anos, temos uma média diária de 3.500 acessos únicos. É claro que eu não consegui isso sozinho: tive o apoio e contribuição irrestritos da minha namorada, a Rê Souza. Sem ela, acredito que o projeto estaria em coma ou até mesmo teria morrido.

Apesar de termos atingido um ótimo patamar, queremos mais: oferecer um melhor serviço, tanto para os candidatos quanto para os recrutadores. O Novo Primeira Chance vai ser um marco, e espero anunciá-lo em breve. Para se increver e poder testar a versão beta, preencha o cadastro no blog oficial. Acompanhe de perto do blog oficial para saber das novidades.

Estréia 2010

Posted February 22nd, 2010 in Projetos by felipepavao

Passados praticamente 2 meses, o ano finalmente está começando, uma vez que ultrapassamos o Carnaval, e estou dando início oficialmente aos meus objetivos para os próximos 5 anos. O primeiro deles é finalizar meu site pessoal, que está sendo feito de forma incremental. Estou disponibilizando aqui todos os artigos técnicos que um dia eu publiquei (no startapp.org, blog da fábrica entre outros).

Ainda possuo na fila 2 artigos por terminar, sobre Sitemap e RSS em Rails, mas é certo que cada vez menos compartilharei dos meus conhecimentos técnicos aqui, devido ao vasto material que é possível encontrar na internet: eu realmente não gosto de parecer redundante. Irei focar, daqui por diante, nas minhas observações pessoais sobre o mundo, cotidiano, e tentarei ajudar no dia-a-dia de vocês, seja no trabalho ou na vida. Sim, não é pretensão, mas acredito que posso compartilhar um pouco do que acredito e ajudar a fazer a diferença no nosso amado país.

Até o próximo post, sobre empreendedorismo.

Adicionando dados ao banco corretamente com Rails

Posted November 27th, 2009 in Desenvolvimento by felipepavao

Essa dica é rápida porém muito eficaz. No Rails 2.3.4 foi adicionado uma funcionalidade para podermos popular nossa base de dados de forma segura e correta, pois antes tínhamos que criar migrations de dados de exemplo ou até mesmo os primeiros dados de configuração da aplicação.

Agora basta criar um arquivo chamado seeds.db dentro da pasta db da sua aplicação. Nele você pode chamar os objetos Rails normalmente como o código abaixo:

 
puts "Adicionando usuario admin"
u = User.new(
            :email => "admin@testecom",
            :login => "admin",
            :password => "12345",
            :password_confirmation => "12345",
            :admin => true
            )

Para rodar a massa de dados basta executar:

rake db:seed

Não está mais fácil e organizado ? Até a próxima.

Localização e Rails 2.3

Posted September 29th, 2009 in Desenvolvimento by felipepavao

De vez em quando somos desafiados a desenvolver projetos que necessitam de traduções para outras línguas. Para resolver isso, usamos técnicas de localização.O Rails facilita muito a nossa vida ao guardar mensagens de erro e todo o texto customizado que você desejar traduzir em apenas um lugar.

Abaixo segue um exemplo de um trecho do arquivo de tradução com mensagens de erro do Active Record traduzidos para português:

:activerecord => {
      :errors => {
        :template => {
          :header => {
            :one => "Identificamos 1 erro nesta operação",
            :other => "Identificamos {{count}} erros nesta operação"
          },
          :body => "Por favor, confira os seguintes campos:"
        },
        :messages => {
          :inclusion => "não está incluso na lista",
          :exclusion => "não está disponível",
          :invalid => "não é válido",
          :confirmation => "é diferente da confirmação",
          :accepted  => "precisa ser aceito",
          :empty => "não pode ser vazio",
          :blank => "não pode ser vazio",
          :too_long => "é muito longo (deve ser menor que {{count}} caracteres)",
          :too_short => "é muito curto (deve ser maior que {{count}} caracteres)",
          :wrong_length => "não é do tamanho correto (precisa ter {{count}} caracteres)",
          :taken => "não está disponível",
          :not_a_number => "não é um número",
          :greater_than => "precisa ser maior do que {{count}}",
          :greater_than_or_equal_to => "precisa ser maior ou igual a {{count}}",
          :equal_to => "precisa ser igual a {{count}}",
          :less_than => "precisa ser menor do que {{count}}",
          :less_than_or_equal_to => "precisa ser menor ou igual a {{count}}",
          :odd => "precisa ser ímpar",
          :even => "precisa ser par",
        }
      },

Seguindo o tutorial, para ativar a localização em um aplicativo Rails, basta definir as seguintes configurações em seu arquivo enviroment.rb:

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
config.i18n.default_locale = 'pt-BR'

Dessa forma, define-se uma linguagem padrão para todo o site. Se quisermos alterar a linguagem durante a renderização das páginas, passando parâmetro na URL, pode-se definir os seguintes parâmetros no application controller.

before_filter :set_locale
 
def set_locale
    # update session if passed
    session[:locale] = params[:locale] if params[:locale]
 
    # set locale based on session or default
    I18n.locale = session[:locale] || I18n.default_locale
 
    # load locale from settings
    @locale_files = []
    ['yml', 'rb'].each do |type|
      locale_file = "#{LOCALES_DIRECTORY}#{I18n.locale}.#{type}"
      if File.exists?(locale_file)
        @locale_files << locale_file
        I18n.load_path << locale_file
      end
    end
  end

Como viram, é bastante fácil “localizar” em Rails. Se você desejar também traduzir o conteúdo das páginas. Veja o codigo abaixo:

},
      :home => {
        :see_more_link => "Veja mais {{more_link}}",
        :see_all_link => "Saiba tudo sobre este {{all_link}}",
        :video_box_title => "Aperitivo",
        :events_box_title => "Últimos Eventos",
        :blog_box_title => "Blog",
        :followers_box_title => "Fãs",
        :scrapbook_box_title => "Scrapbook",
        :shopping_box_title => "Shopping"
      },

Criamos um dicionário de ítens a serem traduzidos. No template HTML, você deve fazer da seguinte forma:

<h1><%= I18n.t 'txt.home.video_box_title' %></h1>

Mais uma vez comprovamos a facilidade de traduzir com Rails. Para ter o arquivo de localização completo, entre em contato comigo que eu enviarei, pois ainda não disponibilizei no github. Se for urgente, você poderá encontrar em alguns perfis onde achei o modelo para me basear.

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.