Os números de 2010

janeiro 2, 2011 by

Os duendes das estatísticas do WordPress.com analisaram o desempenho deste blog em 2010 e apresentam-lhe aqui um resumo de alto nível da saúde do seu blog:

Healthy blog!

O Blog-Health-o-Meter™ indica: Uau.

Números apetitosos

Imagem de destaque

Cerca de 3 milhões de pessoas visitam o Taj Mahal todos os anos. Este blog foi visitado cerca de 29,000 vezes em 2010. Se este blog fosse o Taj Mahal, eram precisos 4 dias para que essas pessoas o visitassem.

 

Em 2010, escreveu 36 novo artigo, aumentando o arquivo total do seu blog para 168 artigos. Fez upload de 36 imagens, ocupando um total de 3mb. Isso equivale a cerca de 3 imagens por mês.

The busiest day of the year was 17 de maio with 368 views. The most popular post that day was Encontro no:sql(br). – Eu fui!.

De onde vieram?

Os sites que mais tráfego lhe enviaram em 2010 foram google.com.br, search.conduit.com, twitter.com, pt-br.wordpress.com e android-vs-ipad.co.cc

Alguns visitantes vieram dos motores de busca, sobretudo por 5s’s, cerebro, linux, pingu e hadoop

Atracções em 2010

Estes são os artigos e páginas mais visitados em 2010.

1

Encontro no:sql(br). – Eu fui! maio, 2010
15 comentários

2

D-Olho na Qualidade 5Ss abril, 2009
9 comentários

3

Certificação OCA – Oracle janeiro, 2009
6 comentários

4

Certificação OCA DBA 11G abril, 2009
25 comentários

5

D-olho na qualidade 5Ss (parte 2) outubro, 2009
3 comentários

RubyConf 2010 – estivemos lá! – Segundo dia

novembro 11, 2010 by

O segundo dia começou com o keynote do Evan Phoenix, que palestrou sobre o Rubinius, uma Virtual Machine para Ruby. Na palestra houve uma visão geral do Rubinius que é um plataforma para rodar código Ruby e houve grande destaque na parte de performance que o Rubinius fornece e também nas facilidades que ele traz, como por exemplo para fazer testes de performance.

Charles Nutter falou sobre o JRuby, a máquina virtual Ruby que roda sobre a JVM. Ele explicou detalhes, funcionalidades e vantagens do JRuby como:

  • Instalação e configuração rápida do JRuby;
  • Ampla gama de plataformas suportadas pelo JRuby, incluindo Windows, Z/OS, AS/400, Android.
  • Suporte a Threads nativas reais no JRuby;
  • Uso e reúso de bibliotecas Java e bibliotecas nativas no JRuby;
  • Diferenças de performance grandes em relação a VM Ruby “canônica”;
  • Compilador JIT;
  • Rails executa corretamente no JRuby;
  • Suporte a quase toda API do Ruby até 1.9.

Também tivemos exemplos rápidos de aplicativos durante a palestra:

  • “jirb”, o console interativo do JRuby;
  • Um simulador de piano rodando no JRuby;
  • Um renderizador de círculos rodando no JRuby para o Android;
  • Um jogo que usava JMonkeyEngine rodando no JRuby.

A palestra do David Chelimsky foi muito interessante pois ele falou sobre a manutenção do equilíbrio, reduzindo a duplicação de códigos em uma variedade de formas e os riscos associados a cada um. estratégias para reduzir a duplicação, sem sacrificar princípios de design como encapsulamento, baixo acoplamento e alta coesão.

O princípio DRY (Don’t Repeat Yourself) sugere que “cada pedaço do conhecimento deve ter uma única representação autoritativa dentro de um sistema.” Uma orientação forte, mas muitas vezes é atendido sem uma clara compreensão de suas motivações subjacentes, nem a consideração de outros princípios que poderiam levar o código a outras direções.

Depois do almoço houve a palestra do Ola Bini que falou sobre “O passado e o futuro das linguagens de programação”. A palestra dele foi bem interessante, pois mostrou as linguagens em que o Ruby foi inspirado, baseado em suas características principais.

Scott Chacon palestrou sobre Git, e sua palestra foi separada em duas partes: na primeira ele falou das novas funcionalidades da última versão do Git (1.7.3) e na segunda parte falou sobre alguns comandos do Git que não são tão populares. Maiores detalhes da palestra do Chacon podem ser encontrados na sua apresentação.

Após o coffee break o Alexandre Gomes falou de algumas escolhas, erros, acertos, atitudes e coragem? Como por exemplo: Computação ou medicina? Passar num concurso, enviar curriculos ou abrir uma empresa? Web, mobile ou desktop? Desde os tempos de escola somos inundados de questões que somente o curso da vida nos é capaz de responder. Em nossa formação escolar, somos orientados a seguir um único caminho, o caminho da estabilidade, segurança e conforto. Educam-nos a sermos submissos e obedientes e, condutas fora do padrão esperado são rechaçadas e condenadas ao castigo. Protagonizando essa história, estamos nós,  sob avaliação incisiva dos olhos críticos da sociedade. Poucos, acertam de primeira em suas escolhas de vida. Outros, no entando, não têm a mesma sorte e atrofiam-se em gaiolas de outro sem gozar do prazer de se viver dia após dia.

Fez refletir-nos sobre todos estes fatos, usando exemplos reais de rotinas de profissionais na mais diferentes situações e analisando porque a paixão pelo trabalho é a principal virtude compartilhada por profissionais e empreendedores de sucesso.

A última palestra do Ruby Conf 2010 foi a de Jim Weirich, uma das palestras mais aguardadas do evento, onde todos foram reunidos no mesmo horário e na mesma sala.
Figura importante no mundo Ruby, Jim é o cientista-chefe da EdgeCase LLC, uma empresa de desenvolvimento Rails localizado em Columbus Ohio.
A palestra falou sobre os princípios SOLID que são um conjunto de princípios de design que melhoram um design orientado a objeto.
Os cinco princípios são:
  • Princípio da Responsabilidade Individual
  • Principio Aberto / Fechado
  • Princípio da substituição Liskov
  • Princípio da Segregação de Interface
  • Princípio da Inversão de Dependência
Jim explicou cada um dos princípios, dando exemplos e principalmente fazendo muitas perguntas à platéia para que todos que quisessem opinar ficassem a vontade para falar a respeito das práticas de programação do SOLID.
O SOLID surgiu das linguagens de programação OO como C++ e Java, durante a palestra, Jim explicou como é possível utilizar o SOLID no Ruby on Rails.

Conclusão

A RubyConf 2010 foi excelente, com ótimas palestras sobre temas bem variados e com palestrantes de alto nível. No geral, as palestras foram de nível intermediário para avançado, isso é ruim por um lado, pois em várias acabamos “boiando”, mas em contrapartida é bom, pois nos faz perceber que precisamos aprender mais e força as pessoas a terem mais interesse em buscar entender melhor os assuntos e se aprofundar mais.

Esperamos que a RubyConf 2011 seja melhor ainda (com wifi funcionando rs). Parabéns a todos da organização e ao Fabio Akita pelo trabalho singular que vem exercendo na comunidade Ruby.

Autores:

Bruna Oliveira

Daniel Sakuma

Fabrício Campos

Glaucia Mekaru

William Nishio

Fonte imagens:

http://www.flickr.com/photos/locaweb/

RubyConf 2010 – estivemos lá! – Primeiro dia

outubro 29, 2010 by

Ocorreu entre os dias 26 e 27 a RubyConf Brasil, o maior evento de Ruby na América Latina. O evento foi no Centro de Convenções Frei Caneca, aqui em São Paulo. E nós da Voice Technology estivemos lá. 🙂

A seguir, segue as nossas impressões sobre a RubyConf 2010.

Organização

A organização da RubyConf foi muito boa, vários pontos merecem destaque:

  • A presença de uma “mestra de cerimônias”, para coordenar as trocas de palestras e dá os avisos, que ficou praticamente na sala 1, enquanto o Fabio Akita ficou na sala 2, cumprindo muito bem o papel também;
  • Coffee Break bem organizado, o único problema era o pouco espaço do saguão, frente a tantas pessoas que foram (a RubyConf LOTOU!);
  • As tradicionais Booth Babes da Locaweb (rs) que ajudaram nas horas das perguntas e do credenciamento.

Além disso, a localização do evento foi bem acertada, por ser perto do metro e como foi dentro do Shopping Frei Caneca, na hora do almoço, havia várias opções de restaurantes.

Palestras

Foram muitos palestras e não tem como falar sobre cada uma, mas vamos dá uma visão geral de como foram as que a nossa equipe participou (houveram duas trilhas).

A RubyConf começou com o keynote do Fabio Akita, onde ele deu uma visão geral sobre “ecossistema” em volta do Ruby, principalmente falando sobre Rails e a sua jornada como evangelizador de Rails, contando como ele começou com a linguagem e o framework e também citando as pessoas que fazem a diferença na comunidade, como por exemplo, o brasileiro José Valim, que é membro do core team do Rails.

Depois do keynote do Akita teve um excelente coffee break, onde o pessoal pode fazer o networking, e várias pessoas referências da comunidade estavam presentes na RubyConf.

Após o coffee havia duas trilhas de palestras e nossa equipe foi assistir a palestra do Yehuda Katz na sala 1, que falou sobre o uso de javascript do lado servidor e do cliente, dando boas dicas sobre como usar de forma eficiente. E também falou sobre o desenvolvimento do jQuery e SproutCore, dando boa enfâse na parte da performance do Sproutcore.

A palestra do Chris Wanstrath, co-fundador do Github, foi dada pelo Scott Chacon, que também é da equipe do GitHub. O tema da palestra foi o Resque, que é um sistema gerenciador de jobs em filas, que é uma boa alternativa para trabalhar com a execução de vários jobs e a distribuição deles de forma paralela.

O Resque é um projeto desenvolvido pelo próprio pessoal do GitHub para ajudar eles a processarem o grande volume de jobs do próprio GitHub. Após utilizar vários sistemas de filas, como por exemplo, o Delayed Job, eles acabaram optando por desenvolver o Resque , que hoje já conta com várias empresas utilizando ele e vários plugins.

Após o almoço, houve a palestra do José Valim, onde foi abordada as mudanças que o Rails 3 trouxe e o que será implementado na versão 3.1, que deverá sair em dezembro desse ano. A palestra foi muito boa, e deu pra perceber que o core team do Rails, está atuando fortemente para tornar o Rails cada vez melhor, tanto na parte da performance quanto na melhora do código em si, se preocupando bastante em deixar mais DRY e também mais modularizado e assim, flexível.

Logo após a palestra de José Valim, na sala 2 o tema era “Integrando o iPhone com Ruby on Rails + Geração de gráficos com Ruby on Rails”, apresentada por Pedro Franceschi.

Mais do que o tema, talvez o que chamou bastante atenção foi o palestrante: um garoto de apenas 14 anos que ganhou notoriedade desbloqueando aparelhos da Apple como Iphone e Ipod touch. Interessado em programação desde os oito anos de idade, atualmente, Pedro trabalha em uma empresa de tecnologia no Rio de Janeiro desenvolvendo aplicativos e jogos para diversos produtos da Apple.

Durante a palestra, apesar da pouca idade, o garoto mostrou bastante conhecimento técnico e desenvoltura em sua apresentação, mostrando e explicando códigos em Ruby on Rails de aplicativos que rodam no celular.

Na segunda parte da palestra, Pedro apresentou diversas gems utilizadas para gerar gráficos, explicando as vantagens e desvantagens de se utilizar cada uma dessas bibliotecas.

A palestra do Ricardo Panaggio e Thiago Pradi, foi sobre as suas experiências na RubySoC e ocorreu em paralelo com a do Pedro, na sala 1. Foi bem legal a palestra, deu pra entender bem o intuito de se participar de um evento como a RubySoC, onde o participante tem que contribuir com algum projeto open-source, seja uma solução própria, ou a melhoria de algo, e poderá receber até $5.000 pelo trabalho no projeto open-source. Ou seja, além da oportunidade de aprender MUITO e contribuir com a comunidade, o participante ainda irá receber por isso. Um ponto bem bacana que foi falado, foi que a participação em projetos open-source é uma ótima maneira de aprendizado, e não só no que tange a linguagem de programação, mas como também no uso do inglês e do trabalho e comunicação em conjunto, principalmente pela forte interação entre o participante e o seu mentor.

Depois da palestra do Ricardo e do Thiago houve o coffee break da tarde e logo após o coffee a última palestra do dia, do Lucas Húngaro onde ele compartilhou os seus conhecimentos sobre Rails.

O tema da palestra do Lucas parecia bastante interessante, mas logo no início deu para perceber que a apresentação foi feita as pressas e que não foi feita nenhuma prévia para verificar os slides no projetor.

Foi praticamente impossível acompanhar a apresentação pelo telão, pois a cor escolhida para o fundo foi um roxo tão escuro e a fonte em preto que tornou impossível ler qualquer coisa pelos slides. Lá para o fim da apresentação, o palestrante resolveu das um jeito na fonte, mas isso não impediu a platéia de gritar alguns comandos e atalhos para ver se dava uma forcinha ao Lucas.

Mas basicamente a palestra falou um pouco sobre algumas gems utilizadas e recomendadas, tais como: query_reviewer e rails_indexes para otimização e performance de banco de dados, oink para profiling e kasket e cachy para caching.

Além de abordar técnicas e soluções para problemas em rails, sugestões como utilização de checklists durante o desenvolvimento como uma boa forma de adquirir bons hábitos e se o projeto está difícil de ser testado em isolamento ele está mal projetado e deve ser revisto.

A palestra abordou também temas como SOLID, programação defensiva e lei de Demeter.

E assim foi encerrado o primeiro dia, que foi excelente. Ainda teve depois a desconferência, com várias lightning talks, mas a gente acabou não assistindo, o que foi uma pena, pois pelos comentários no Twitter, foram excelentes.

Em breve publicaremos as nossas impressões sobre o segundo dia da RubyConf. Fique de olho no Ensinar. 😉

Autores:

Bruna Oliveira

Daniel Sakuma

Fabrício Campos

Glaucia Mekaru

William Nishio

Estamos loucos!

junho 25, 2010 by

Estou ainda na metade do livro do Ricardo Semler “Você está louco!”, mas já foi possível perceber que realmente estamos loucos.

Costumamos ser 8 ou 80 no que se diz respeito ao pensar. Pensamos pouco ou quase nada e tomamos atitudes idiotas/erradas ou pensamos muito e perdemos o tempo e até a paciência para agir.

Vivemos num mundo pseudo-democrático, pseudo pois não sabemos fazer bom uso dessa democrácia. E isso se estende desde a nossa casa até a presidência da república.

Hoje mais do que nunca as pessoas gostam de falar, até porque há muitos meios para isso, desde um scrap até um tweet. Mas sobra blá-blá e falta ação.

Conversamos e conhecemos muitas pessoas, mas na hora que precisamos de alguém para ajudar em algo, é difícil encontrar uma pessoa capaz de ajudar.

Somos acomodados por natureza, e muitos se aproveitam disso para fazerem corpo mole, se preocuparem só com o próprio umbigo. Um pena, uma vez que hoje com a Internet somos capazes de grande ações e mobilizações, mas preferimos mandar CALA BOCA, ao invés, de mandar BAIXAR OS SALÁRIOS DOS LADRÕES DE BRASÍLIA.

A Terra é um lugar complexo sem dúvidas, principalmente porque muitos já perderam a fé no ser humano. Eu ainda tenho um pouco de fé nele, mas confesso que às vezes, é difícil.

Acredito que o Brasil, o mundo, poderia ter muito mais Ricardos Semler do que tem, o ser humano tem uma capacidade enorme para agir, mas muitos fazem sub-uso dessa capacidade, ou pior, usam de forma errada.

Não seremos capazes de virar a nossa própria mesa, até o momento que tivermos preocupados com a mesa dos outros.

Precisamos usar melhor a nossa capacidade e entender que todos nós somos capazes, basta para isso aprender (o Semler tinha metas de leitura de 80 a 100 livros por ano!), agir (aos 22 anos ele já estava num processo de compra de uma empresa a beira da falência), correr atrás (herdeiro da Semco, ele poderia ter ficado sentado esperando o pai passar a empresa para ele) e unidos (o Ricardo Semler não seria tudo que ele é hoje, sem a ajuda de pessoas de confiança e amigos).

Escola – Fábrica de Pessoas, parecida com a de Software

junho 20, 2010 by

O Fabrício me emprestou o livro Você Está Louco, do Ricardo Semler. As palestras que já havia visto dele na internet são muito boas, o cara é sensacional. Mas, o tempo passava e eu nunca lia o livro dele, até que ele veio parar na minha mesa. Não vou falar muito mais sobre o livro, vou falar de um aspecto que ele levantou quando falava de escola e do projeto Lumiar, e que tem muito a ver com software.

No mundo de software, muito dinheiro, estudo e tempo foram gastos tentando trazer o conceito de linha de montagem para o software. O paralelo era claro: se entra ferro e sai um carro, pode muito bem entrar uma idéia e sair um software, é só cada um ter sua atividade muito bem definida, sem bem específico. O final da história todos conhecem: este modelo vem fracassando com o passar do tempo e as pessoas têm ido em busca de algo mais humano, que valorize o indivíduo e a interação entre eles.

Até aí nada de novo e o que tem a escola a ver com isso? Vejam a observação que ele faz no livro e que está transcrita abaixo:

Pós-revolução industrial, o importante era fazer transitar massas de crianças pela escola, para alimentar o dragão do mercado de trabalho. Assim, emulou-se a linha de montagem nas escolas, com carteiras fixas, professor para 20 ou 30 alunos (40 ou mais até), estruturar modular de 55 minutos e disciplinas verticalmente construídas.

É… realmente parecia que este modelo estava fadado ao sucesso, muito bem pensado. Assim conseguimos ganhos extraordinários construindo carros. Mas as coisas ficaram mecânicas demais e esqueceu-se de levar em conta que não era só chegar e despejar conteúdo para alunos que são chamados pelo número. É necessário despertar o prazer de ler, aprender, descobrir coisas novas. Você não está despejando conteúdo, está formando a pessoa.

Além disso, assim como na fábrica de software, praticamente não aproveitamos a interação entre diferentes matérias. Existem algumas tentativas em projetos conjuntos, mas as coisas são bem separadas.

Recuperando o contato pessoal

Na proposta de educação do projeto Lumiar, as crianças seriam acompanhadas por um tutor desde os primeiros anos de vida até se formarem. Este tutor cuida de cerca de 15 crianças e determina em conjunto com os pais e as crianças quais as aulas mais importantes para ela no momento. Simples e eficiente. Sem testes, mas sim, o tutor avaliando em conjunto com pais e aluno se ele está pronto para mais conhecimento.  Além disso, as aulas são dadas somente por pessoas que gostem muito do assunto. Faz todo sentido né ?

Educando uma criança, um grande projeto de escopo fechado

Por que ao entrarmos na escola, com cerca de 6 anos, já temos um cronograma definido do que vamos aprender até os 14? Os pais, o tutor ou alguém que acompanhe de perto o aluno e o próprio aluno poderiam definir o que é o mais apropriado para a criança aprender naquele momento, o que irá trazer mais valor para o cliente, no caso a criança.

Como disse o Ricardo Jordão no seu blog, porque raios eu tenho que decorar quem foi Mem de Sá? Está no Google e quando vou precisar disso, quantas vezes você precisou?

É ingenuidade minha, mas nunca havia pensado nas escola como um modelo de fábrica. É claro que tem escolas que tentam ser diferentes, mas achei interessante este paralelo do modelo convencional de escola, com o modelo convencional de software.

Ahh… e leiam o livro, nem é novo…  é muito bom!

VTLabs – Palpite na Copa pelo Twitter

junho 15, 2010 by

Pessoal,

Como parte de um projeto de pesquisa aqui na Voice, desenvolvemos o Palpite Certo, uma aplicação para coletar palpites para os jogos do Brasil na copa via Twitter.

Acessa lá http://bit.ly/palpitecerto, o ganhador ganhará uma camisa de uma seleção a sua escolha.

Update 18/06/10

Colocamos o projeto no GitHub, segue abaixo o link:

http://github.com/vtlabs/PalpiteCerto

Até mais,

André

Post.new(“HAML”, “Rails”)

junho 2, 2010 by

A vida de um desenvolvedor Ruby on Rails não é feita apenas de código Ruby. Sendo necessário também saber html e javascript por exemplo.

Quando falamos de html no ecossistema Rails, logo vem a cabeça os arquivos html.erb. Esses que contém a cara da nossa aplicação web e é uma mistura de html e Ruby, possível graças ao ERB, que é uma implentação do eRuby em Ruby.

No entanto, há outras alternativas ao uso do ERB e uma delas é o HAML (HTML Abstraction Markup Language – “Linguagem de marcação abstraída do HTML”).

Hello World!

Para trabalhar com o HAML no Rails, precisamos instalar a gem haml. Para isso execute o seguinte comando na pasta do seu projeto:

sudo gem install haml

Se preferi você pode também especificar a gem no seu arquivo environment.rb (o que é uma boa prática), adicionando a seguinte linha.

config.gem ‘haml’

E depois executar a rake task que irá instalar as gems especificadas no seu arquivo environment.rb.

rake gems:install

Instalada a gem já podemos começar a brincar. 🙂

No exemplo abaixo é apresentado um exemplo de um Hello World “parrudo”, primeiro utilizando ERB e depois utilizando o HAML.

Hello World!
<p>
  1+1 é:
  <b><%= 1 + 1 %></b>
</p>
<p>
  Contando de 1 a 5:
  <%for i in (1..5)%>
    <i><%= i %></i>
  <%end%>
</p>
<br/>
<table border="1">
    <th>
      Grupo G
    </th>
    <tr>
      <td>
        Brasil
      </td>
     </tr>
    <tr>
      <td>
        Coreia do Norte
      </td>
     </tr>
    <tr>
      <td>
        Costa do Marfim
      </td>
     </tr>
    <tr>
      <td>
        Portugal
      </td>
     </tr>
</table>

Agora o mesmo exemplo em HAML:

Hello World!
%p
  1+1 é:
  %b= 1 + 1
%p
  Contando de 1 a 5:
  - for i in (1..5)
    %i= i
%br
%table{:border => 1}
  %th
    Grupo G
  %tr
    %td
      Brasil
  %tr
    %td
      Coreia do Norte
  %tr
    %td
      Costa do Marfim
  %tr
    %td
      Portugal

E o resultado é o mesmo, tanto com o ERB quanto com o HAML.

Diferenças

A primeira diferença notada é a quantidade de linhas para escrever usando o HAML, menor que com o ERB, uma vez que foi preciso de 37 linhas com o ERB, enquanto com o HAML apenas 24 já bastaram. Outra diferença é a sintaxe menos verbosa do HAML.

Além disso, há outras diferenças importantes que é bom saber para não cometer erros:

  • O HAML utiliza marcações menos verbosas, utilizando porcentagem (%) e essas marcações não são fechadas como no HTML;
  • Ao transformar para HTML a gem haml sabe quando uma marcação termina pela identação;
  • A identação é super importante no HAML, e você irá perceber isso ao identar errado, pois irá dá erro de sintaxe;
  • Código Ruby é identificado colocando-se um traço (), e quando queremos exibir a saída do código, colocamos um igual (=), ao invés, do traço ();
  • É possível especificar as propriedades das marcações, utilizando chaves ({}) e informando a propriedade como um símbolo (ex.: :color) e atribuindo o valor como fazemos em Ruby, com a “seta” (=>);
  • Como não é necessário fechar a marcação, não é necessário colocar end, pois a gem haml irá saber do end, pela identação. E como o HAML segue o princípio DRY e utiliza da identação para reconhecer as marcações, ele não iria deixar você colocar um end, sendo que com a identação já é possível saber que aquele trecho de código possui um end.

Gerando scaffold em HAML

Legal, mas se utilizamos o scaffold para gerar as nossas views, iremos ter um trabalho do cão para alterar os arquivos para HAML, uma vez que o scaffold gera arquivos ERB.

Pensando nisso o Norman Clarke criou o haml-scaffold, cuja principal diferença para o scaffold é que ele gera as views em HAML, ao invés, de ERB. Para instalar essa gem, basta digitar:

sudo gem install haml_scaffold

A gem haml_scaffold tem algumas dependências a gem haml (que já temos), will_paginate e mocha.  Para instalar as dependências você pode especificar essas gems no environment.rb e rodar a rake task ou instalar da forma tradicional.

Abaixo, segue as duas formas.

Via rake gems:install

No arquivo environment.rb acrescente:

config.gem “will_paginate”

config.gem “mocha”

Salve o arquivo e execute na pasta do seu projeto:

rake gems:install

Via gem install

sudo gem install will_paginate mocha

Instalado agora teremos um novo gerador, o haml_scaffold. Um exemplo de uso segue abaixo:

script/generate haml_scaffold Post title:string content:text published:boolean

Você notará que todas as views foram geradas em HAML e já temos dois partials, que são usados na criação/edição e outro na listagem.

Conclusão

Utilizando HAML as nossas views ficam bem enxutas, com o tempo acostumamos com as novas marcações e acaba sendo mais produtivo e prazeroso usar o HAML. Além disso, somos forçados a identar corretamente o código, e erros de HTML acabam não mais acontecendo.

Além disso, acaba sendo muito mais fácil dá manutenção num código gerado com o HAML, do que com o ERB, uma vez que ele é mais curto, menos verboso e identado. 🙂

Espero que vocês tenham gostado de conhecer o HAML e como podemos utilizá-lo no Rails, qualquer dúvida sintam-se à vontade em colocar nos comentários.

Saiba mais:

Site oficial com vários exemplos e explicações:

http://haml-lang.com/

Post do Marcos Tapajós, comparando a performance do ERB X HAML:

http://tapajos.me/2010/01/05/haml-versus-erb

Ambiente utilizado

SO: Ubuntu 10.04

Rails: 2.3.8

Gems: haml (3.0.6), haml_scaffold (1.1.0), will_paginate (2.3.14) e mocha (0.9.8).

rake gems:install

Cobertura do evento “Ruby+Rails no mundo real 2010”

junho 1, 2010 by

Pessoal,

No sábado passado (29-05-10) Eu e o Fabrício Campos estivemos na segunda edição do evento “Ruby+Rails no mundo real 2010”, organizado pela Tempo Real Eventos em parceria com o GURU-SP (Grupo de usuários Ruby de São Paulo).

Para os interessados em saber quais foram as novidades mostradas nesse evento, eu escrevi uma cobertura do que aconteceu e um resumo de cada palestra no meu blog.

Quer conferir? Então acesse o link abaixo:

Minhas impressões – Ruby+Rails no mundo real 2010 – 29/05/10

No ano passado eu também escrevi a cobertura da primeira edição do evento (rs) e foi publicada aqui no Blog do Ensinar. Acesse o post pelo link abaixo:

Minhas impressões – Ruby + Rails no Mundo Real 2009 – 04/04/09

Acompanhe também as atualizações do pessoal que está postando no twitter acerca do evento!

Até mais e boa leitura a todos!

Todo mundo trabalha

maio 28, 2010 by

Olá pessoal,

Semana passada eu li o livro Rework, do pessoal da 37 Signals. É um livro que segue a linha do primeiro, o Getting Real. É um livro com dicas de gestão de uma empresa, de um produto, baseado na experiência deles. Para quem não sabe, eles criaram o Basecamp, um software como serviço para gerenciamento de projetos e nada mais nada menos que o badalado framework de desenvolvimento Web, o Rails.

Em boa parte do livro eles focam no fato de fazer o simples, somente o necessário e principalmente trabalhar focado no seu objetivo. É um livro de leitura fácil, organizado em textos de pouco mais de uma página cada. Neste post vou traduzir um pequeno texto do livro, chamado: Todo mundo trabalha!

Todo mundo trabalha

Com um time pequeno, você precisa de pessoas que irão fazer o trabalho, não delegá-lo. Todo mundo deve estar produzindo. Ninguém deve estar acima do trabalho.

Isto significa que você deve evitar contratar delegadores, aquelas pessoas que amam dizer às outras o que fazer. Delegadores são peso morto para um pequeno time. Eles enchem os outros inventando trabalho. E quando eles estão sem trabalho para delegar, eles inventam mais – independente se o trabalho precisa ser feito.

Delegadores amam colocar pessoas em reuniões, também. Na verdade, reuniões são as melhores amigas de um delegador. Lá é onde ele parece importante. Enquanto isso, todos os outros que estão na reunião é impedido de resolver o trabalho real que precisa ser feito.

Antes de delegar uma atividade ou principalmente antes de contratar alguém, pense se você realmente precisa delegar, se não dar para você mesmo fazer esta atividade.

Quem quiser saber mais sobre o livro, o pessoal da Bluesoft fez um vídeo sobre o livro, no blog deles.

Até mais pessoal…

Encontro no:sql(br). – Eu fui!

maio 16, 2010 by

Ontem às 08:30 começou o no:sql(br)., um evento sobre banco de dados NoSQL (Not only SQL). Para quem não conhece o assunto, recomendo a leitura deste artigo.

O evento foi organizado pelo Alexandre Porcelli e inicialmente era para ser uma reunião de usuários de NoSQL. Porém, para a nossa sorte, acabou tomando maiores proporções, e uma reunião que poderia ser realizada sem maiores problemas numa sala de aula, teve que ser transferido para o auditório do Hotel Park Suites ITC Vila Olímpia, localizado na zona sul de São Paulo.

Eu e o Rodrigo Ribeiro tivemos a força de vontade e a nerdice, para acordar bem cedo em pleno sabadão, para ir a esse primeiro evento de NoSQL no Brasil (acredito que seja o primeiro).

Abaixo relato as minhas expectativas, impressões e falo um pouco sobre cada palestra que ocorreu. 🙂

Expectativas

Confesso que eu só fui me interessar pelo evento na última quinta-feira (hehe). Após ter tido que pesquisar sobre bancos NoSQL para um novo projeto que estamos desenvolvendo aqui na Voice. E ao pesquisar e estudar tive dificuldades em entender esse “novo” paradigma, e então, lembrei do no:sql(br). que foi divulgado pelo Rodrigo na lista do Ensinar. Só aí que fui me interessar pelo evento, justamente para clarear as minhas ideias sobre o assunto e poder aprender mais, uma vez que seria uma excelente oportunidade de aprender sobre NoSQL e principalmente, quando usar um NoSQL.

Abertura – Alexandre Porcelli (OpenSpotLight)

O Alexandre Porcelli, idealizador do evento, fez a abertura do mesmo, falando sobre como foi a origem do evento, que como disse antes, era para ser uma reunião de usuários NoSQL, e uma desculpa para ir num buteco depois. Porém, a conversa que começou no twitter, acabou tomando maiores proporções (o poder do twitter é incrível) e já no primeiro dia de inscrições foram mais de 100 inscritos!

O Strange Loop foi uma das inspirações para o evento, por sua característica mais simples e de baixo custo. E no caso do no:sql(br). o custo para os participantes foi ZERO!

O Alexandre lembrou que o evento não era para falar mal de banco relacionais, afinal NoSQL, é sobre escolha e não sobre ser contra algo. E depois o Alexandre fez um jabá de seu projeto open-source o OpenSpotLight, que objetiva ser um Google para a área de TI (Google4IT).

No final da abertura, o Porcelli informou que estará organizando um novo evento para o próximo semestre, que será sobre Linguagens Emergentes & DSLs.

noSQL anti-patterns – Gleicon Moraes (Locaweb)

Na verdade o tema correto da apresentação seria SQL anti-patterns, como foi lembrado pelo Luciano Ramalho.

O Gleicon fez uma apresentação bem legal, foi a que eu mais gostei. Falando sobre anti-patterns SQL, que muitas vezes ocorre não por má vontade do desenvolvedor e sim porque o mesmo não conhece outras alternativas (leia-se NoSQL).

Abaixo uma apresentação utilizada pelo Gleicon no evento da Locaweb, mas que é a base senão até igual a apresentação utilizada ontem.

Na apresentação Gleicon deixou bem claro a importância de conhecer NoSQL, pois muitas vezes fazemos a escolha errada, por não conhecer outras formas de implementação. Outros pontos frisados foram:

  • Não há bala de prata
    • considere alternativas;
    • pense fora da normalização;
    • considere a desnormalização como uma opção;
    • simplificar.
  • Algumas mudanças organizacionais são necessárias, o desenvolvedor precisa tomar conta dos dados;
  • “Estou otimizando”, quando na verdade a pessoa está aprendendo a fazer as coisas;
  • É importante conhecer/aprender as ferramentas certas;
  • Boa parte dos problemas ocorrem por causa da mentalidade “relacional”;
  • Verifique se você está muito dependente de cache, cache é bom, mas é remendo. Por isso a dependência de cache pode significar um alerta;
  • Pense mais sobre os seus dados.

Performance e simplicidade com Chave/Valor utilizando REDIS – Luiz Fernando Teston (OpenSpotLight)

O Teston, que também participa do projeto OpenSpotLight, começou a sua apresentação dando um introdução sobre chave/valor que é o modelo de dados utilizado pelo Redis.

Depois da introdução foi comentado que o Redis armazena os dados em memória, por isso é mais rápido. E é possível configurar de quanto em quanto tempo que ele irá persistir esses dados em disco. E além de poder adicionar strings, o Redis também pode armazenar uma lista de itens, set ordenado e array de bytes.

A respeito das chaves:

  • O index é pela chave;
  • Os ids são criados usando auto increment (como no banco relacional);
  • Chaves naturais podem ser usadas (ex.: nome do usuário do twitter);
  • Criar chave muito grande não é performático.

A instalação do Redis é bem simples e quem usa Windows precisa instalar o Cygwin.

Depois o Feston falou sobre os comandos existentes no Redis, maiores detalhes podem ser obtidos nessa página da documentação do Redis.

Qual cenário que você indica o uso do Redis?

Quando a busca por dados na memória é possível e quando o seu modelo de dados se adequa bem ao modelo chave/valor.

Por fim, o Feston deixou bem claro que o Redis não tem limitação de memória, uma vez que ele pode fazer uso de memória virtual.

O papel do REST no Neo4J e CouchDB, um comparativo – Guilherme Silveira (Caelum)

Um dos poucos palestrantes que eu já conhecia, embora não tenha visto nenhuma palestra ao vivo, só as gravadas (rs). O Guilherme Silveira é sem dúvidas um dos grandes entusiastas de REST, e aliás, ele é o desenvolvedor do Restfulie.

A palestra foi bem voltada para o mundo Web e focando em REST. E de início o Guilherme falou sobre escalabilidade, dizendo que “escalar é dá vazão para mais” e a web “é o maior sistema distribuído que o ser humano criou”, portanto, podemos aprender bastante coisas sobre escalabilidade com a Web.

Foi falado da importância de ser stateless, pois assim o servidor não precisa saber quem é você e o usuário pode ser “servido” por qualquer servidor (quando você faz uma pesquisa no Google, por exemplo, para o usuário a impressão é de está acessando o servidor do Google, quando na verdade ele está acessando e sendo servido por vários servidores).

O Guilherme lembrou que cache é fundamental para a escalabilidade, e podemos cachear tanto no cliente, intermediários e no servidor.

Dentre os pontos principais da apresentação destaco:

  • Evite bater no BD, ou seja, usar cache e perguntar só uma vez ou só para confirmar se a informação é a atual;
  • Ao ínves de usar uri pattern, usar links;
  • Há uma RFC para links, a 5829;
  • Usar melhor o header do html, por exemplo colocando um link de histórico nele;
  • O trabalho do BD não é cachear;

O auge da apresentação foi quando o Guilherme falou sobre visibilidade, o problema é que eu não me lembro muito bem o que ele falou (rs).

Pegar um sistema em camadas e tentar fazer tudo numa única camada, não é solução nenhum pouco inteligente, uma vez que é importante desaclopar os componentes da sua arquitetura.

No final o Guilherme ainda apresentou um exemplo usando Ruby e Sinatra, onde ele transformar os valores obtidos no CouchDB em links e depois ele falou sobre o QCon, que parece ser um evento bem interessante (estou pensando em ir).

A apresentação do Guilherme foi bem legal, mesmo ele não falando muito sobre o CouchDB, cuja interface é via REST. Ele fala de uma maneira bem empolgada e a apresentação tinha imagens que garantiam boas risadas da platéia.

Introdução ao MongoDB – direto da fonte! – Alberto Lerner (10gen)

A apresentação do Alberto, que veio de Nova York só para participar do evento, foi sobre o MongoDB do pessoal da 10gen, um banco de dados orientado a documentos open-source.

A palestra foi bem legal, principalmente pelo fato de ser introdutória (hehe) e ter mostrado as características e comandos do MongoDB.

O Alberto começou a apresentação falando sobre a origem do nome, que veio da palavra inglesa “humongous” que é usada de forma coloquial e significa gigante (para nós brasileiros não é um bom nome rs).

Os documentos são armazenados no formato JSON, e numa analogia com uma banco de dados relacional:

  • O documento JSON seria o registro;
  • As collections seria uma tabela;
  • Os índices seriam os índices mesmo;
  • O embedding e o linking seria o join.

Depois o Alberto apresentou os comandos principais do MongoDB, esclarencendo que o MongoDB não tem uma linguagem de consulta, o que existe são expressões/comandos, que são usados no formato JSON.

Algumas características interessantes do MongoDB:

  • É possível acrescentar dados, por meio de um update;
  • Não existe um schema dentro das coleções, ou seja, as collections podem ser dinâmicas;
  • Há upserts, que podem atualizar se documento já existe, ou cria se ele não existe;
  • Você pode armazenar o seu dado da forma que ele ocorre na “natureza”.

O Alberto também falou um pouco sobre replicação e sharding, onde deu para perceber que o MongoDB é bem flexível.

Dentre as empresas que já usam o MongoDB, destaque para o SourceForge e a FourSquare.

No final o Alberto convidou o pessoal a participar do projeto do MongoDB, dizendo que a língua não é uma barreira, o importante é a contribuição. E todo o código do MongoDB está disponível no GitHub.

Tio: um NoSQL made in Brasil – Rodrigo Strauss (1bit)

A apresentação do Rodrigo Strauss foi sobre o seu projeto chamado Tio, que é um servidor de estrutura de dados com publish subscribe.

Os slides da apresentação já foram disponibilizados pelo Rodrigo e podem ser conferidos no link abaixo:

http://docs.google.com/present/view?id=dg9kbfzn_73m4c7qvc6

O Tio é um projeto no qual o Rodrigo vem trabalhando já há 3 anos, e na época em que ele começou NoSQL ou não existia ou não era “mainstream”.

E a ideia do Tio é que o seu uso seja tão fácil quanto usar a sua linguagem de programação. O core do Tio, é o publish subscribe, onde qualquer um pode assinar para receber as mensagens da sua aplicação.

Algumas características do Tio:

  • Para usar o Tio você pode conectar via telnet/netcat;
  • Ocupa 700k de memória (com a base limpa é claro);
  • Você modela os dados igual você modela na sua aplicação;
  • Desenvolvido em C++;
  • Há uma api em Python, criada pelo próprio Rodrigo;

O Rodrigo ainda fez uma demostração do Tio fazendo um aplicação de chat, que depois basicamente só precisava da implementação do lado do cliente, e para isso ele utilizou a API em Python.

No final o Rodrigo ainda falou sobre as vantagens, limites e o que existe atualmente (tudo isso pode ser conferido no link que passei da apresentação).

Nas Nuvens com KVM, JBoss REST-Easy e InfiniSpan – Edgar Silva & Samuel Tauil (Red Hat Brasil)

A apresentação do Edgar Silva e do Samuel Tauil, começou com o Edgar falando sobre o KVM, que possibilita a virtualização nativa no SO. E a virtualização possibilita uma melhor utilização do hardware.

O Edgar lembrou que para NoSQL você precisa de uma:

  • Infraestrutura;
  • Armazenamento;
  • Acesso.

Depois foi falado um pouco sobre REST, onde a ideia é de mapeamento de verbos de serviços na Web usando URIs. Exemplo: tv/canal/121 [recurso|objeto|valor]

O Samuel falou sobre o Infinispan, que é uma plataforma dados em grid open-source, voltada para permitir o cache distribuído.

A parte da apresentação do Samuel foi focada em mostra o Infinispan na prática, mostrando a inserção de dados por meio de uma interface swing e visualizando os mesmos no navegador web.

No final o Edgar voltou e mostrou um pouco do REST-Easy.

Divide et impera – Processamento massivo com Hadoop, Pig e HBase – Vinicius Carvalho (SambaTech)

A minha expectativa para essa palestra estava alta, pois eu já tinha brincado/apanhado um pouco com o Hadoop (até fiz um post aqui no Ensinar), e queria saber como o pessoal da SambaTech está usando o Hadoop.

O Vinicius começou a apresentação explicando sobre o projeto Hadoop e depois contanto que eles usam ele para o processamento de logs, mas ainda a caráter de “prova de conceito”, embora executem toda sexta-feira o script escrito em Pig lá na Amazon.

O Hadoop é um framework de MapReduce mais utilizado, implementado em Java, capaz de executar Petabytes

Foi falado também sobre Grid Computing, onde a ideia principal é a distribuição da computação (processamento). E se formos pensar, uma arquitetura cliente-servidor já é um exemplo, embora “tosco”, de computação distribuída.

Depois o palestrante falou sobre o paradigma do MapReduce, no qual o objetivo é  mapear (map doh!)  dados que estão armazenanados de forma distribuída e depois processá-los (reduce).

O desafio do pessoal da SambaTech era fazer em Pig, o que antes era feito por um script em perl, que rodava em uma máquina.

Mais que raios é esse Pig, você deve está se perguntando… ele é uma linguagem de data-flow, de alto nível para você escrever as suas funções MapReduce.

Por que Hadoop?

O Vinicius falou as razões pelas quais eles investiram no Hadoop:

  • Dado está disponível (twitter. facebook)
  • Storage está barato
  • Web 2.0 demanda de inteligentes soluções
  • Cloud computing

O interessante da palestra foi a explicação sobre o Pig, que como disse antes é a linguagem utilizada para escrever as funções MapReduce, e a sua utilização adicionar 20% de overhead. Putz, então usar Pig é ruim!? Nem tanto, pois ele facilita bastante as coisas, uma vez que criar map/reduce não é fácil, pois o paradigma é diferente e na hora de criar o workflow que a coisa complica ainda mais.

A apresentação do Vinicius teve que ser encerrada antes dele falar sobre o HBase, que acredito que era o assunto principal para o evento. 😦 A respeito dos slides, a cor azul do texto no fundo branco, tornava praticamente impossível a leitura dos slides e havia muito texto.

Estudo de caso: avaliando o Apache Cassandra como cache distribuído – Julio Viegas (GlobalCode)

A apresentação do Julio foi sobre como eles estão trabalhando com NoSQL lá no SPC Brasil, para não substituir o Oracle e sim usar o Cassandra como cache. O sistema deles tem cerca de 100 transações por segundo, 22 processos, cache mutáveis com replicação via Ehcache + rmi, sendo esse cache chave + valor.

O Julio tentou usar o Terracotta, mas não foi uma experiência muito legal, devido a instrumentação.

Foram avaliados os seguintes NoSQL do tipo chave + valor:

Alguns pontos interessante sobre o Cassandra:

  • Criado pelo Facebook, e usado em parte dele;
  • Open-source;
  • Baseado no Amazon Dynamo;
  • Tem como usuários: digg, reddit, cisco webex, rackspace, twitter;
  • Baseado no modelo chave + valor;
  • Tipos dinâmicos versionados com timestamp;
  • Atomicidade por chave;
  • Configuração simples (isso é bem legal).

O pessoal do SPC precisava de:

  • Armazenamento descentralizado;
  • Tolerante a falhas;
  • Elástico: adicione mais servidores a quente;
  • Escala horizontalmente.

E o Cassandra trabalha justamente com disponibilidade e tolerância a perda de partições. sacrificando um pouco da consistência (afinal não é possível ter o máximo de disponibilidade, consistência e tolerância a falhas ao mesmo tempo CAP).

Com o Cassandra não é possível fazer order by, por isso é necessário gravar já de forma ordenada.

A apresentação do Julio foi bem interessante, deu para conhecer o Cassandra, que aliás, é o NoSQL que as pessoas mais usam ou tem interesse em usar.

Depois ainda teve um painel de discussão, no qual a pláteia e os palestrantes bateram um bate-papo sobre noSQL, falando desde de quando não usar um banco de dados relacional até as dificuldades em implantar um banco noSQL, que em boa parte das vezes, ocorre por causa da cultura da empresa, ou melhor, das pessoas.

No final ainda teve o happy/breja hour, mas eu não participei, pois já estava cansado (dia todo com o note no colo é osso) e a viagem para casa era longa 😦

Conclusão

O no:sql(br). foi muito bom! Uma organização EXCELENTE, melhor que muito evento pago (e uns até bem pagos) por aí. Os coffee breaks foram sensacionais (pensou que eu tinha esquecido de falar deles rs). A galera que estava presente estava realmente a fim de saber sobre o assunto (acho que todos que estavam lá, era por interesse próprio e foram por vontade própria) e mostraram ter o espírito de comunidade, muitos contribuiram com doações antes do evento e durante o evento, quando o chapéu do Borcelli passou (hehe).

As palestras foram muito boas, e a grade estava bem diversa, então deu para ter uma boa visão geral do mundo de NoSQL. Só senti falta de uma apresentação introdutória, embora o foco do evento tenha sido para as pessoas que já tinham um conhecimento/experiência prévia sobre NoSQL.

Minhas expectativas foram superadas, agora eu entendi melhor o paradigma do NoSQL e nessa semana estarei fazendo mais testes com o CouchBD de início, e talvez depois com o MongoDB, os dois que tem o modelo de dados por documentos, que parecem que se adequam melhor para a nossa necessidade (relatórios de chamadas).

Além disso, pude rever um pessoal do Guru-SP (dia 29 tem o Ruby on Rails no Mundo Real 2010, estaremos lá!) e ainda conhecer e conversar um pouco com o Akita, que deu uma dica que pode ser bem útil para nós. 🙂

Para terminar o post, gostaria de dá os parabéns ao Alexandre Porcelli, pelo excelente evento! E também a todos que foram, afinal como o Porcelli falou “é um evento da comunidade para a comunidade”. 😀

-Se o seu modelo de dados se adequa bem ao modelo chave/valor