ricardo duarte

ruby, rails, linux, php, seo and ui

  • Home
  • Sobre
  • Rails: Sobrescrevendo atributos do ActiveRecord

    • 26 Apr 2010
    • 0 Responses
    •  views
    • activerecord rails rails-2.3 ruby
    • Edit
    • Delete
    • Tags
    • Autopost

    Dica rápida para sobrescrever atributos do ActiveRecord no Rails 2.3:

    Com esse exemplo, quando o name de um User for recuperado, ele irá capitalizar o nome. E quando for definir o name, ele iá transformar o texto para minusculas.

    • Tweet
  • Filtrando as consultas com has_scope

    • 6 Jan 2010
    • 0 Responses
    •  views
    • gem plugin rails ruby
    • Edit
    • Delete
    • Tags
    • Autopost

    A Plataforma Tecnologia lançou recentemente o has_scope, plugin/gem extraído do InheritedResources (o qual ainda não tive a capacidade de entender o funcionamento).

    Ele permite criar filtros nas consultas usando os escopos (named_scopes) definidos no Model de uma forma simples e elegante, mantendo toda a lógica do negócio fora do Controller.

    Vamos ao código:

    No Model

    No Controller, defini quais escopos que vou usar no filtro.

    Na View, criei uma partial com os campos do filtro.

    Esse formulário do filtro irá chamar o método index usando GET (através da URL), como no exemplo:

    Como de costume, esse post é só um aperitivo. Acesse o completíssimo README no GitHub para mais detalhes de utilização.

    • Tweet
  • RPCFN #2: Average Arrival Time For A Flight

    • 28 Oct 2009
    • 0 Responses
    •  views
    • ruby
    • Edit
    • Delete
    • Tags
    • Autopost

    O Ruby Learning começou uma série de desafios para Rubistas iniciantes, na qual um profissional Ruby elabora um problema e os interessados em participar enviam as soluções desenvolvidas em Ruby para serem avaliadas. O autor do desafio escolhe a melhor implementação e sorteia uma entre as outras soluções funcionais. Os premios são screencasts da PeepCode e BDDCasts.

    Por que não participar?

    O problema proposto pelo Chris Strom foi o seguinte:

    Você deve um grande favor e concordou em pegar um amigo no aeroporto toda Sexta-feira a noite. A linha área que seu amigo voa é barata, mas terrível quando se trata em reportar atrasos e horários de saída e chegada. Você rapidamente descobriu que o voos agendados para as 10pm nunca chegam no horário e usualmente atrasam mais de uma hora. Se o avião chegar as 11:15pm, 12:03am, 11:30pm, 11:23pm e 11:48pm, qual é o horário médio da chegada?

    A solução funciona se seu amigo mudar o horário de chegada para 6 horas depois? E se for 12 horas depois? A saída esperada do programa é a seguinte:

    E qual foi a minha solução?

    Eu identifiquei os seguintes passos a serem seguidos:

    • Transformar as posições do array de String para Time, para poder calcular qual é o médio.
    • O problema deixa claro que todos os tempos são no futuro, então é preciso corrigir o parser de tempo das horas que são do dia seguinte. No exemplo: Se no momento da consulta são 28/10/2009 19:00, o parser do Ruby irá converter 12:01am, 12:06am e 12:11am para 00:01, 00:06 e 00:11 do dia 28/10/2009, quando o correto seria do dia 29/10/2009).
    • Ordenar o array por tempo ascendente.
    • Pegar a posição do meio do array.

    O código para essa implementação foi o seguinte:

    Executando os testes propostos, tenho o resultado esperado. Woooo!

    UPDATE 1: As soluções vencedoras foram:

    • Charles Feduke
    • Othmane Benkirane

    UPDATE 2: o Chris Storm publicou um feedback sobre as soluções do teste. Leitura obrigatória.

    • Tweet
  • Criando um Rails Application Template

    • 21 Sep 2009
    • 0 Responses
    •  views
    • rails rails-2.3 ruby
    • Edit
    • Delete
    • Tags
    • Autopost

    Quando vamos criar uma aplicação Rails, normalmente executamos uma série de passos (instalação de plugins, gems, controllers, etc.) iguais. Por que não automatizar esse processo?

    Usando o ótimo guia escrito pelo Nando Vieira sobre Rails Application Templates, escrevi o meu primeiro template:

    Para usar o template, basta chama-lo durante a criação da aplicação com o parametro -m:

    Esse template é bem simples e faz apenas o que eu uso sempre em todas as aplicações:

    • Gems: authlogic, rspec, rspec-rails e less
    • Plugins: less-for-rails, jrails, i18n_label, activerecord_i18n_defaults, brazilian-rails, asset_packager, formtastic, paperclip e will_paginate.
    • Git: Inicia um repositório e faz os primeiros commits
    • Rails: Configura a linguagem para pt-br e o timezone para UTC-3.

    Pode melhorar esse script? Faça um fork no Github

    • Tweet
  • Deployment automatizado de aplicação PHP com Capistrano

    • 30 Aug 2009
    • 0 Responses
    •  views
    • gem php ruby
    • Edit
    • Delete
    • Tags
    • Autopost

    Os que me conhecem sabe quanto o Rails Summit 2008 mudou a minha vida profissionalmente. Eu já sabia que as coisas haviam evoluído mas sinceramente nunca tinha dado muita bola, pois os meus processos sempre funcionaram bem. Lá eu pude ver que muita coisa legal estava sendo feita e eu que não podia ficar de fora. Uma delas foi o deployment automatizado.

    Capistrano

    O Capistrano é uma RubyGem que permite que você escreva receitas para publicação em servidores web. É possível usa-la integrada com o seu repositório (centralizado ou distribuído) ou mesmo copiar-tudo-compactar-e-enviar automaticamente. Ele permite manter várias versões da aplicação no servidor (e fazer rollback se necessário) e utiliza links simbólicos para dizer qual delas é a atual.

    A instalação é mais fácil que fazer miojo:

    É necessário ter o Ruby e o RubyGems instalado no seu sistema. Se você usa Ubuntu, eu posso ajudar.

    Configurando o seu projeto

    Dentro do diretório do seu projeto, crie a estrutura básica do capistrano:

    Notem que o arquivo config/deploy.rb foi criado. É nele que você irá escrever a sua receita.

    Exemplo de receita usando estratégia de cópia

    Usando o Capistrano

    Após estar com a receita devidamente escrita, é hora de configurar o servidor online para a estrutura do Capistrano.

    O setup só precisa ser rodado uma única vez.

    Depois de configurado, para publicar a sua aplicação basta fazer isso:

    Mágico né?

    Fez merda e publicou alguma coisa que não devia? Faça um rollback!

    Algumas considerações sobre essa receita:

    1. FAÇA BACKUP! Antes de começar a testar o capistrano, tenha certeza que os arquivos da sua aplicação estão protegidos e você não irá fazer cagada.

    2. Por se tratar de uma aplicação em PHP, não é necessário reiniciar o servidor como em aplicações Rails. Por isso reescrevi a tarefa restart para que ele não faça nada.

    3. A aplicação em questão permite o upload de arquivos pelos usuários, sendo necessário criar links simbólicos para manter esses dados fisicamente fora da estrutura da aplicação que será enviada pelo Capistrano. Nesse caso, todos os arquivos que serão enviados pelos usuários ficam no diretório /f/.

    4. Como os ambientes de desenvolvimento e produção são sensivelmente diferentes, optei por manter dois arquivos de configurações separados: conf.php e conf-online.php. A aplicação faz referência ao conf.php e durante a publicação, o Capistrano se encarrega de apagar o arquivo de desenvolvimento e faz um link simbólico para o arquivo de produção.

    5. Essa receita resolve O MEU PROBLEMA. Espero que possa ser útil para você.

    Se ficou interessado em usar o Capistrano para publicar a sua aplicação, sugiro fortemente que leia a documentação para maiores detalhes.

    • Tweet
  • Rails delegate

    • 20 Jul 2009
    • 0 Responses
    •  views
    • rails rails-2.3 ruby
    • Edit
    • Delete
    • Tags
    • Autopost

    Uma funcionalidade interessante do Rails que descobri através do RubyFlow foi o delegate.

    No exemplo simples abaixo, mostra como mapear atributos de um model em outro.

    E o que isso faz? Olhe abaixo:

    Os atributos que foram declarados com delegate passam a responder como atributos do model Customer.

    • Tweet
  • Criando um bot no Twitter em Ruby

    • 13 May 2009
    • 0 Responses
    •  views
    • ruby twitter
    • Edit
    • Delete
    • Tags
    • Autopost

    Depois de ler a notícia no excelente Ruby Inside de como criar um Twitter bot com Ruby, criei coragem e montei o meu.

    O código abaixo é quase idêntico ao disponível no repositório do projeto no GitHub, com apenas uma correção e uma customização:

    E para rodar o bot, é preciso instalar as gems descritas abaixo e executar em um terminal:

    Pode melhorar esta solução? Faça um fork dela e me avise! ;–)

    • Tweet
  • About

    Ricardo Duarte, 27 anos, trabalha na Nuntec, atua como desenvolvedor web há mais de 12 anos, já tendo passado por diversas tecnologias. Este blog irá comentar um pouco destas experiências.

    29907 Views
  • Archive

    • 2010 (6)
      • October (1)
      • July (1)
      • April (1)
      • March (1)
      • February (1)
      • January (1)
    • 2009 (16)
      • October (1)
      • September (1)
      • August (2)
      • July (5)
      • May (1)
      • April (5)
      • March (1)

    Get Updates

    Subscribe via RSS