Arquivo

Arquivo de dezembro, 2009

Circuito das Estações Adidas 2009 - Etapa Verão - 10km

26 de dezembro de 2009

Domingo, dia 20 de dezembro de 2009, corri a Etapa de Verão do Circuito das Estações Adidas.

O percurso de 10 Km foi todo nas ruas da região do Pacaembu, largando em frente ao estádio, passando pela avenida Pacaembu, Elevado Costa e Silva e terminando com a chegada também em frente ao portão principal do estádio do Pacaembu.

O pessoal do Locamotiva participou em peso também.

Eu, Patricia Hamasaki, Luiz Ozaki, Vagner Silva, Cleber, Paula Carrasco, Mauricio de Amorim, Glauco Oliveira, Luiz Souza e Luciano Silva

Eu, Patricia Hamasaki, Luiz Ozaki, Vagner Silva, Cleber, Paula Carrasco, Mauricio de Amorim, Glauco Oliveira, Luiz Souza e Luciano Silva

Nessa prova consegui o melhor tempo do ano nos 10km. Os cinco primeiros quilômetros fiz em 00:22:17, média abaixo de 04:30 por km, tempo que me classificaria para o Pelotão Quênia caso a corrida fosse de 5km.

Um detalhe interessante foi que depois da passagem do quilômetro cinco, eu tomei Gatorade andando. Talvez se eu não tivesse dado essa pausa, poderia chegar perto da faixa de tempo de 00:45:00 para entrar no Pelotão Quênia dos 10km.

Tempo total: 00:46:45

Tempo médio por km: 04:40

Tempo em cada km:

  1. 03:39
  2. 04:14
  3. 04:49
  4. 04:38
  5. 04:53
  6. 05:02
  7. 04:49
  8. 04:40
  9. 05:08
  10. 04:56

Foto de Treino Online

Foto de Treino Online

Foto de MidiaSport

Foto de MidiaSport

Foto de MidiaSport

Foto de MidiaSport

Foto de Treino Online

Foto de Treino Online

Foto de MidiaSport

Foto de MidiaSport

Foto de WebRun

Foto de WebRun

Esportes , , , , , , , ,

Serialização de objetos em JSON com Ruby on Rails

13 de dezembro de 2009

Em um post anterior mostrei como serializar objetos em JSON utilizando .NET. Agora vamos fazer a mesma coisa com Ruby on Rails.

Esse é o Jason, não JSON.

Vamos utilizar como exemplo uma classe de modelo chamada SomeFake:

class SomeFake < ActiveRecord::Base

end

Utilizando essa migration:

class CreateSomeFakes < ActiveRecord::Migration
  def self.up
    create_table :some_fakes do |t|
      t.string :text
      t.float :value
      t.timestamps
    end
  end

  def self.down
    drop_table :some_fakes
  end
end

No script/console vamos criar uma instância do modelo SomeFake com os seguintes dados:
>> fake = SomeFake.create :text => "I am a sample text.", :value => 150.85
=> #<SomeFake id: 1, text: "I am a sample text.", value: #<BigDecimal:18ac9f0,'0.15085E3',8(12)>, created_at: "2009-12-13 19:43:28", updated_at: "2009-12-13 19:43:28">

Então queremos serializar a variável fake em JSON para obter o seguinte resultado:
{"id":1,"text":"I am a sample text.","value":150.85}

Para fazer isso, vamos chamar o método to_json na variável fake (estou usando o comando print para uma exibição melhor no console do JSON gerado):
>> print fake_json = fake.to_json
"{"some_fake": {"updated_at": "2009-12-13T19:43:28Z", "text": "I am a sample text.", "id": 1, "value": 150.85, "created_at": "2009-12-13T19:43:28Z"}}"

O resultado que obtemos não é exatamente igual ao que estávamos querendo.

Primeiro, o nome do nosso modelo foi serializado como raiz do objeto em JSON. Isso aconteceu porque por padrão em uma aplicação Rails, a opção ActiveRecord::Base.include_root_in_json é configurada para true no arquivo config/initializers/new_rails_defaults.rb. Nós podemos alterar essa opção para false nesse arquivo, o que afeta a serialização em JSON de toda a aplicação, ou podemos alterá-lo no próprio script/console para nossos testes:
>> ActiveRecord::Base.include_root_in_json = false
=> false

Agora nosso objeto serializado fica assim:
>> print fake_json = fake.to_json
"{"updated_at": "2009-12-13T19:43:28Z", "text": "I am a sample text.", "id": 1, "value": 150.85, "created_at": "2009-12-13T19:43:28Z"}"

A segunda diferença é que não queremos que os atributos de timestamps (created_at, updated_at) sejam serializados. Então vamos dizer para o método to_json não serializar esses atributos, utilizando a opção except:
>> print fake_json = fake.to_json(:except => [:created_at, :updated_at])
“{”text”: “I am a sample text.”, “id”: 1, “value”: 150.85}”

Para fazer o inverso, transformar dados em JSON para um objeto, criamos uma nova instância da classe SomeFake e chamamos o método from_json passando a variável fake_json como parâmetro:
>> other_fake = SomeFake.new
=> #<SomeFake id: nil, text: nil, value: nil, created_at: nil, updated_at: nil>

>> other_fake.from_json fake_json
=> #<SomeFake id: nil, text: "I am a sample text.", value: #<BigDecimal:1708a04,'0.15085E3',8(12)>, created_at: nil, updated_at: nil>

Caso você precise serializar objetos em JSON sem os atributos timestamps com frequência, ao invés de sempre passar a opção except para o método to_json, podemos incluir um novo método na classe ActiveRecord::Base que faça a serialização sem esses atributos. Dessa forma, todos os nossos modelos terão essa funcionalidade.

Vamos chamar esse método de to_json_no_timestamps, o qual sua implementação é mostrada abaixo:

class ActiveRecord::Base
  def to_json_no_timestamps(options = {})
    timestamps_options = [:created_at, :updated_at]

    if (options.has_key? :except)
      if (options[:except].class == Array)
        timestamps_options = options[:except] | timestamps_options
      else
        timestamps_options &amp;lt;&amp;lt; options[:except].to_sym unless options[:except].nil?
      end
    end

    options[:except] = timestamps_options

    to_json options
  end
end

E então basta chamar nosso novo método em uma instância de qualquer modelo:
>> fake = SomeFake.first
=> #<SomeFake id: 1, text: "I am a sample text.", value: #<BigDecimal:1712798,'0.15085E3',8(12)>, created_at: "2009-12-13 19:43:28", updated_at: "2009-12-13 19:43:28">

>> print fake_json = fake.to_json_no_timestamps
"{"text": "I am a sample text.", "id": 1, "value": 150.85}"

Arquitetura, Ruby , , , ,