Arquivo

Arquivo de junho, 2011

Track&Field Run Series 2011 - Shopping Villa Lobos - 2ª Etapa - 10 km

30 de junho de 2011

No domingo de 27 de março de 2011 parcitipei dos 10 km da corrida Track&Field Run Series 2011 - Shopping Villa Lobos - 2ª Etapa.

A corrida foi disputada em torno do Parque Villa Lobos, largando no Shopping Villa Lobos, passando pela Praça Panamericana, Ponte do Jaguaré e com a chegada também no Shopping Villa Lobos.

Como na etapa anterior, algo muito bom dessa prova foi a limitação de inscrições. Havia menos de 3.000 corredores, o que facilitou bastante a corrida durante todo o percurso.

Tempo total: 00:48:55

Tempo médio por km: 04:53

Tempo em cada km:

  1. 04:24
  2. 04:31
  3. 04:41
  4. 05:04
  5. 04:49
  6. 05:13
  7. 05:23
  8. 05:26
  9. 04:29
  10. 04:55

O pessoal do Locamotiva também estava por lá.

Maciel Moraes, Edvaldo Cruz, Mauricio de Amorim, Bruno Luppi, André Pimentel, eu e Dayvison Pellegrina

Maciel Moraes, Edvaldo Cruz, Mauricio de Amorim, Bruno Luppi, André Pimentel, eu e Dayvison Pellegrina

Foto de WebRun

Foto de WebRun

Foto de Ativo.com

Foto de Ativo.com

Foto de MidiaSport

Foto de MidiaSport

Foto de WebRun

Foto de WebRun

Esportes , , , , ,

Material de estudo sobre MongoDB e MongoMapper

21 de junho de 2011

Ontem no trabalho minha equipe fez alguns estudos e experiências com o MongoDB, um banco de dados não relacional orientado a documentos, e com o MongoMapper, um ORM em Ruby para MongoDB, para um novo projeto em Ruby on Rails 3 que iremos desenvolver.

Abaixo segue alguns links úteis que encontrei. Os que eu considero mais interessantes estão em vermelho.

MongoDB Quickstart OS X
http://www.mongodb.org/display/DOCS/Quickstart+OS+X

MongoDB Tutorial
http://www.mongodb.org/display/DOCS/Tutorial

SQL to Mongo Mapping Chart
http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

Mongo DB Advanced Queries
http://www.mongodb.org/display/DOCS/Advanced+Queries

MongoDB Data Modeling and Rails
http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails

Video Presentation “Schema Design: Data as Documents” (via Daniel Konishi)
http://www.10gen.com/presentation/mongosv2010/schemadesign

Rails Cast MongoDB and MongoMapper
http://railscasts.com/episodes/194-mongodb-and-mongomapper

MongoMapper Documentation
http://mongomapper.com/documentation

Como fazer queries com “or” no MongoMapper?
http://umamao.com/questions/Como-fazer-queries-com-or-no-MongoMapper

Ruby , , , , , , , ,

[POG] SendEmail ou EnviarEmail

19 de junho de 2011


Estou dando manutenção em sistema feito em .NET, corrigindo vários bugs e implementando algumas melhorias. Os autores do código não estão mais envolvidos no projeto.

Em uma página de formulário de contato, um e-mail é enviado para a equipe de atendimento e outro para o próprio cliente que preencheu o formulário de contato. Esses e-mails são enviados através de uma classe chamada Utils, através de dois métodos distintos SendEmail e EnviarEmail.

Vamos dar uma olhada no código C# da classe Utils:

public class Utils
{
  public static void SendEmail(string senderEmail, string senderName, string subject, string body, params string[] destinyEmails)
  {
    MailMessage mailMessage = new MailMessage();
    mailMessage.From = new MailAddress(senderEmail, senderName);
    mailMessage.Subject = subject;
    mailMessage.Body = body
    mailMessage.IsBodyHtml = true;

    foreach (string to in destinyEmails)
    {
      mailMessage.To.Add(to);
    }

    SmtpClient smtpClient = new SmtpClient(ConfigurationSettings.AppSettings["Email.Host"]);

    if (!string.IsNullOrEmpty(ConfigurationSettings.AppSettings["Email.User"]))
      smtpClient.Credentials = new System.Net.NetworkCredential(ConfigurationSettings.AppSettings["Email.User"], ConfigurationSettings.AppSettings["Email.Password"]);
    smtpClient.Send(mailMessage);
  }

  public static void EnviarEmail(string pEmail, string pAssunto, string Corpo)
  {
    try
    {
      string emailFrom = ConfigurationSettings.AppSettings["Email.From"];
      string NomeFrom = ConfigurationSettings.AppSettings["Email.Nome.From"];
      Model.Entities.Utils.SendEmail(emailFrom, NomeFrom, pAssunto, Corpo, new string[] { pEmail });
    }
    catch (Exception ex)
    {
      throw new Exception(ex.Message);
    }
  }

  // Outros métodos
}

O método SendEmail até que passa, mas daria para melhorar. Por exemplo, eu colocaria chaves no if da linha 18 para não confundir com a execução da linha 20.

Já o método EnviarEmail, nas linhas 23 a 35, tem uma lista de POGs:

  • Primeira coisa: por que o Pateta criou o método com esse nome? No mínimo esse método seria uma sobrecarga do método SendEmail.
  • O que é esse “p” como prefixo dos dois primeiros parâmetros? É para dizer que é um parâmetro? Nossa, bem mais eficaz que todo o intelisense do Visual Studio.
  • Legal esse terceiro parâmetro chamar Corpo. Esse nome é bem coerente com a convenção de nomenclatura de parâmetros.
  • Nas linhas 27 e 28 a declaração de duas variáveis locais emailFrom e NomeFrom, uma em camel case e outro em pascal case.
  • Na linha 29 uma chamada do método SendEmail com toda a hierarquia de namespace, sendo que o método chamado é da própria classse Utils.
  • Ainda na linha 29, olha que lindo que foi a passagem de parâmetros para: emailFrom, NomeFrom, pAssunto. Cada variável com uma convenção de nomenclatura diferente. O padrão é não seguir nenhum padrão.
  • Mais ainda na linha 29, no último parâmetro o Pateta criou uma array de um único elemento para passar o e-mail de destino da mensagem. No método SendEmail esse parâmetro está definido com a palavra-chave params, que permite que seja passado nenhum valor, um valor, n valores separados por vírgula ou um array.
  • E para finalizar em grande estilo, nas linhas 31 a 34, uma captura de exceção para colocar dentro de outra exceção e lançá-la de novo. Ou seja, só colocou lixo no stack trace.

Se você não conhece POG (Programação Orientada a Gambiarras), leia esse artigo para entender melhor.

POG ,

Série Delta 2011 - Etapa Etiópia - 5km

16 de junho de 2011

No domingo de 12 de junho de maio de 2011 corri os 5 km da Série Delta 2011 - Etapa Etiópia.

A prova teve sua largada em frente ao Jóquei Clube de São Paulo, com o percurso contornando a avenida Irineu de Paula Machado, entrando dentro do Jóquei (em um trecho de areia e extrume de cavalo) e com a chegada também dentro do Jóquei.

Tempo total: 00:22:54

Tempo médio por km: 04:34

Tempo em cada km:

  1. 04:20
  2. 04:45
  3. 04:38
  4. 04:41
  5. 04:30

O pessoal do Locamotiva também estava por lá.

Dayvison Pellegrina, Fabio Perrella, eu, Alexandre dos Anjos, André Pimentel, Troll Girl e André de Vasconcelos

Chupa Cabra, Fabio Perrella, eu, Alexandre dos Anjos, André Pimentel, Troll Girl
e André de Vasconcelos

Foto de WebRun

Foto de WebRun

Foto de Ativo.com

Foto de Ativo.com

Foto de MidiaSport

Foto de MidiaSport

Foto de SportClick

Foto de SportClick

Edvaldo Cruz, André Pimentel, Chupa Cabra, Mauricio de Amorim, Alexandre dos Anjos, Troll Girl e André de Vasconcelos

Edvaldo Cruz, André Pimentel, Chupa Cabra, Mauricio de Amorim, Alexandre dos Anjos,
Troll Girl e André de Vasconcelos

Esportes , , , ,

Como usar um logo no seu blog e manter a relevância do H1

7 de junho de 2011

As tags de cabeçalho H1, H2, H3, H4, H5 e H6 são utilizadas para marcar pontos de destaque no texto da página. Essas tags, quando utilizadas corretamente, estruturam o texto de uma forma hierárquica, de maneira que haja sub-níveis no contexto da página.

As tags de cabeçalho possuem um grau de importância no raqueamento nos mecanismos de busca, onde a tag H1 possui o maior peso, H2 um peso menor e assim por diante até a tag H6.

Em geral, utilizamos a tag H1 para destacarmos o título de blogs e/ou sites. Por exemplo, nesse blog:

<div id="header">
  <div id="caption">
    <h1 id="title"><a href="http://prodis.net.br/" title="Prodis a.k.a. Fernando Hamasaki de Amorim">Prodis a.k.a. Fernando Hamasaki de Amorim</a></h1>
  </div>
  ...

Mas e se eu quiser utilizar uma imagem no nome do meu blog ao invés de um texto HTML? Vou perder a relevância do H1 nos mecanismos de busca?

Uma alternativa, que na verdade eu “chupinhei” do código-fonte do blog do Héric Tilly, é utilizar tanto a tag H1 como a imagem de logo.

<div id="header">
  <div id="caption">
    <h1>Prodis a.k.a. Fernando Hamasaki de Amorim</h1>
    <a href="http://prodis.net.br/" title="Prodis a.k.a. Fernando Hamasaki de Amorim"><img src="http://prodis.net.br/images/logo.png" alt="Prodis a.k.a. Fernando Hamasaki de Amorim"></a></h1>
  </div>
  ...

Para o texto dentro das tags H1 não ser exibido, escondemos via CSS:

#caption h1 {
  display: none;
}

Agora você tem uma imagem para o nome do seu blog e continua com a relevância do H1 para os mecanismos de busca.

Geral , , , ,

[IT Web - Ruby Fundamental] Blocos em Ruby

1 de junho de 2011

Uma das características mais interessantes da linguagem de programação Ruby são os blocos, porções de códigos ou grupo de comandos que podem ser passados para outras funções e ser invocados por elas.

À primeira vista, para quem não conhece programação funcional e/ou é novato em Ruby, os blocos podem parecer um tanto complicados. Isso é normal no começo, mas conforme você vai se familiarizando e entendo melhor como as coisas acontecem, seu uso se torna fácil e natural.

Veja o post completo no blog Ruby Fundamental:
Blocos em Ruby

Veja também os outros posts do blog Ruby Fundamental:
Acessores e modificadores de atributos
Exemplos de scripts em Ruby
Um pouco sobre classes
Hash em Ruby

Ruby , , , ,