Wagner Andrade

A Vida, Programação, o Universo e Tudo Mais

WordPress com Ruby (Hurricane gem)

Meu amigo e colega Daniel Tamiosso também aderiu ao Wind. E criou o primeiro plugin para nossa plataforma, o Wordpress Importer (vou falar dele nos próximos dias). O nome já diz tudo, importa os artigos do WordPress para o Wind.

Hurricane

Para isso o Daniel criou uma gem, Hurricane. Essa gem faz parse do arquivo de exportação do WordPress (WordPress eXtended RSS file).

É muito facíl usar:

blog = Hurricane::Parse.from(WORDPRESS_FILE)
puts "Looking for #{blog.title}"

Então, se precisar de uma integração com WordPress, já sabe: Hurricane.

Coollections update #1

Agora o Coolection está de acordo com o Pattern Specification. Isso não significa nada para quem vai apenas utilizar a biblioteca, mas facilita muito a vida dos colaboradores.

O prático disso é a nova funcionalidade de agregar critérios de seleção, como:

from(animals).where("name", eq("Lion")).or("name", eq("Cat")).all();

from(animals).where("name", eq("Bird")).and("age", eq(2)).all();

Próximo passo será criar novos Matchers, por enquanto só contempla o eq (equals).

Coollections

Depois que conheci as funcionalidades do Array no Ruby e do LINQ no .NET, iterar sobre coleções virou procedimento medieval. E nesse caso Java ainda é medieval.

Para essa linguagem existem APIs que auxiliam isso, como quaere e lambdaj. Mas não gosto de nenhuma.

Fiz um experimento com as Collections do Java. Tentei criar uma API que realiza um filtro, só pra ver como ficaria. Gostei do resultado. Chamei de Coollections e coloquei no Github.

import static com.wagnerandade.coollection.Coollection.*;

List<Animal> animals;

// Gets all cats.
from(animals).where("name", eq("Cat")).all();

// Gets first animal with two years old.
from(animals).where("age", eq(2)).first();

Vou criar outras implementações, como order, select, map e outros. Farei no decorrer do período. Se alguém quiser ajudar…

HTML5 Snapshot: Placeholder

Tenho escrito pouco, voltei a dar aula e isso tem me tomado um bom tempo. Mas daqui a uns dias já estou voltando ao ritmo normal.

No blog antigo, criei uma sessão de artigos que acabou ficando famosa: Ruby Snapshot. Eram pequenos trechos de código Ruby que realizavam tarefas bem interessantes.

Agora estou iniciando o HTML5 Snapshot. A idéia é a mesma, mas dessa vez a tecnologia é HTML5. Vamos ao primeiro artigo, placeholder.

Uma funcionalidade muito elegante, que vai deixar seus forms mais minimalistas. O placeholder nada mais é do que uma label dentro do input de texto, bem discreta.

Não custa lembrar que não vai funcionar se o navegador ainda não suporta HTML5 (e provavelmente você está vendo esse site todo quebrado).

A implementação é muito simples:

<input type="text" placeholder="Insira seu nome aqui" />

E o resultado é esse (Google Chrome 6.0.472.0):

HTML5 Placeholder - Wagner Andrade

Antes mesmo do HTML5 já era possível simular esse comportamento com javascript, mas nada melhor do que o próprio navegador implementar.

Escondendo emails dos spammers

SPAM é a praga da década. Eu diria que já matou mais gente que a H1N1. Ok, pode ser um exagero, mas não deixa de ser praga.

Existem listas de emails criadas por spammers, que são os caras legais que enviam SPAM. Esses emails são “mineirados” de diversas formas, a principal delas é a utilização de web crawlers, varrendo a internet atrás de endereços de email dando sopa.

Sendo assim, um endereço que está escrito em um HTML disponível na web está suscetível a ser indexado por um crawler do mal. Resumindo: email na internet é fonte de spam.

Ronald Leite, parceiro das antigas, percebendo que meu email estava desprotegido das ameaças externas, me sugeriu um serviço do reCAPCHA que eu não conhecia, o mailhide.

É só inserir um email que o mailhide exibe um HTML para escondê-lo, criando um link para inserir um CAPCHA e aí sim exibí-lo. Não entendeu? Exemplo com o meu endereço então:

cont@wagnerandrade.com

Achei válido para alguns casos em que é necessário exibir um email publicamente. Agora chega de endereço prostituído por spammers.

Uma plataforma de, apenas, escrever: Wind

Não é segredo que mudei a plataforma deste blog. O segredo foi, até agora, qual foi a bendita plataforma escolhida. A resposta é simples: nenhuma!

Sou muito adepto do não refazer o que já tem pronto, nesse caso uma plataforma de blog. Mas existe uma diretriz que coloco na frente desta, a simplicidade. É uma fator pessoal, admito. Nesse ponto que não encontrei nenhuma plataforma que me deixasse à vontade.

Analisei várias opções. Queria apenas escrever, sem firulas, dentro do meu domínio. Escrever coisas que não cabem no Twitter. O mais próximo do que queria encontrei no jekyll, mesmo assim, não me adaptei. Não quero nenhum empecilho entre eu e meu notepad.

Aí que pensei: vou fazer como EU quero. Surgiu o Wind.

Uma plataforma de escrever feita com HTML5 (alguns navegadores não suportam ainda), utilizando Ruby e Sinatra, roda sobre os bancos mais conhecidos (qualquer suportado pelo Sequel). Essencialmente flexível e de fácil manutenção.

Ok, fiquei feliz. Agora não tenho quase nada entre eu e meu notepad.

Para mais informações sobre a plataforma, acesse o README que está em um repositório no github.

Quem quiser contribuir, de qualquer forma, é bem vindo!

O que é Web Crawler?

Recentemente recebi um e-mail de dúvida do leitor Adair Martins. Não é o primeiro sobre esse (interessante) assunto. Vou publicá-lo, junto com minha resposta, para sanar uma duvida comum.

Quem quiser complementar minha resposta é bem-vindo, use os comentários.

Bom dia Wagner,

Sou estudante do Curso de Sistemas de Informação, e estou no ultimo período. Tenho que terminar meu TCC, estou fazendo sobre web semântica e o professor que me orienta me sugeriu que eu fizesse uma aplicação que conseguisse pegar as informações sobre futebol, por exemplo, de varios sites.

Estou a procura, já faz quase um mês, e nao encontrei nada. Vendo seu artigo no iMasters, me pareceu muito interessante. Gostaria de saber se você não tem algum material que pudesse me ajudar a criar essa aplicação, se possível em java, pois é a linguagem que tivemos mais contato no curso.

Desde já agradeço a atenção.

Bem legal o assunto do seu TCC, isso (semantica) é o futuro da internet.

O que você vai desenvolver é técnicamente chamado de Web Crawler. Exemplo disso é o GoogleBot, crawler que o google desenvolveu para ficar varrendo a internet, indexando conteúdo para pesquisarmos através do famigerado Google.com.

O artigo da wikipedia sobre Web Crawler é bem completo. No fim do artigo existe uma lista de implementações de crawlers em linguagens e plataformas diferentes, inclusive em java.

Existe bastante material sobre esse assunto, até em português.

Abraço!

Remover acentos em Ruby

Quantas vezes você precisou remover acentos de malditas palavras em qualquer linguagem de programação? É recursivo, sempre aparece.

Em Ruby eu nunca tinha encontrado uma solução legal, pequena e que cumprisse a missão. Esses dias precisei de novo, trocar acentos por “letras normais”. Foi aí que encontrei o Extend String, um pequeno script que faz o trabalho sujo.

A utilização é bem simples, através de meta-programação esse script injeta dois métodos de instancia na classe String. Assim:

require 'extend_string'

str = "Isso é bem fácil!"

str.removeaccents
str.urlize
str.gsub(' ', '-').urlize

Resulta nisso:

Isso e bem facil!
issoebemfacil
isso-e-bem-facil

Mel na teta, né!?

Update

Tino Gomes comentou sobre a gem brstring, do Brazilian Rails. É uma implementação mais completa. Pra quem quer um pouquinho mais de sofisticação é uma boa pedida. Obrigado Tino!

Sobre

Simplicidade é a ausência de artifícios, extravagâncias e excessos de ordem material, social ou psicológica.

Família, futebol, automobilismo, ler, escrever, churrasco, cerveja, fotografia, cinema e programação… Sou um entusiasta da programação de computadores. Já trabalhei com diversas linguagens e tecnologias diferentes, sendo as principais Ruby, .NET e Java.

Também sou professor de desenvolvimento de software orientado a objetos, mantenho um blog sobre o assunto (você está aqui) e escrevo no iMasters. Formando em Segurança da Informação e técnico em Telecomunicações.

  • cont@wagnerandrade.com

Desculpem o incomodo

Pessoal que acompanha o blog pelo feed, desculpem o incomodo.

Os mesmos artigos repetiram algumas vezes. Foi uma instabilidade provocada pela troca de plataforma – vou falar sobre isso em um post mais a frente.

Agora o feed estabilizou. Obrigado pela paciência!

Next page →