Hello, Ruby!!

Sou obrigado a admitir uma coisa: Tenho sentido bastante saudade de programar.

Tendo me acostumado a fazer isso durante alguns anos em minha vida, enquanto trabalhei ativamente no desenvolvimento de rotinas, sistemas e relatórios para meu empregador, minha trilha de carreira nos últimos anos acabou por me desviar de tal rumo, o que, na prática, significa dizer que minhas atribuições atuais não são exatamente as mais apropriadas para continuar tendo contato com escrever e compilar código, entre outras coisas.

Acho que, na prática, as palavras que estou tentando buscar são “eu não sou mais um programador“. Pelo menos, não um que faça isso profissionalmente — o que não quer dizer que eu não possa me impor o desafio de continuar em contato com o mundo da programação.

Para isso, após refletir um pouco nos últimos dias, cheguei à conclusão de que a melhor coisa a se fazer é aprender uma nova linguagem de programação — e, sem maiores delongas, resolvi que quero aprender Ruby, sobretudo porquê é uma linguagem que sempre me chamou a atenção por ser elegante e sofisticada, além de possuir código fonte que, quando lido, faz sentido até para seres humanos.

Há também um outro ponto: Aquele em que eu admito que já tentei aprender a linguagem no passado, um projeto abandonado por falta de tempo, e, principalmente, de força de vontade.

No entanto, tentando fazer com que as coisas tomem um rumo diferente desta vez — o rumo em que eu efetivamente consigo aprender a linguagem —, resolvi começar instalando o Ruby em meu PC. No entanto, ao invés de recorrer ao site oficial, baixei o RubyInstaller for Windows, um pacote de instalação que contém o Interactive Ruby — na realidade, um terminal em que a linguagem Ruby, interpretada, pode ser diretamente executada. Há também códigos-fonte e um livro em formato PDF — “The Book of Ruby“, de Huw Collingbourne —, que acaba servindo como um guia de primeiros contatos com a linguagem (aliás, é possível baixar apenas o livro, direto do site do autor, se alguém tiver interesse).

Com o Interactive Ruby em mãos, resolvi também me aventurar com alguns tutoriais rápidos, como é o caso do Ruby in Twenty Minutes, que está disponível no próprio site da linguagem de programação. Foi através deste tutorial que comecei como todos começam, ou seja, escrevendo o meu primeiro Hello World! em Ruby:

[ruby toolbar="0"] puts "Hello world!"
[/ruby]

E, é claro, também foi fácil entender como sofisticar a coisa um pouco mais:

[ruby] def h(nome = "world")
puts "Hello, #{nome.capitalize}!"
end
[/ruby]

Neste exemplo, a grande diferença foi o uso da palavra-chave reservada def, que permite definir um método para dizer Hello digitando apenas h. Se nenhum nome for informado, o resultado será um simpático “Hello World!” — e, notem, nãoHello world!”, já que foi utilizado o método capitalize, diretamente aplicado à variável nome. Aliás, para quem não sabe, um dos diferenciais da linguagem Ruby é que, nela, tudo é um objeto, sujeito à ação de métodos — mesmo as variáveis.

Mas na minha opinião, o que mais chama a atenção neste segundo código em Ruby é  o comportamento do método puts, que coloca conteúdo na tela. É possível embutir variáveis diretamente na impressão, apenas cercando-as com #{} — no exemplo acima, a variável nome torna-se #{nome}.  Também dá pra fazer cálculos e exibir seus resultados em uma nova linha com tabulação — através, respectivamente, dos códigos de escape não imprimíveis \n e \t — com uma única linha de código:

[ruby]

puts( "\n\t#{(1 + 2) * 3}\nAté logo!!" )

[/ruby]

Na prática, o que estou percebendo, é que será muito divertido voltar a aprender a linguagem — e o que eu sinceramente espero é poder dividir meu aprendizado com quem estiver disposto, bem aqui. Desejem-me sorte!!

Nurse Jackie, só em 2011

Finalmente coloquei em dia os últimos 7 episódios da segunda temporada de Nurse Jackie — e após ter chegado ao fim de uma maratona como esta durante a última madrugada, devo admitir: Continuo listando a série entre as minhas favoritas, dada a sua combinação singular de drama e humor, da qual não vou nunca me cansar de falar.

Além disso, ao final dos 12 episódios mais recentes, mais uma vez a série foi capaz de terminar com um ótimo cliffhanger: O que acontecerá agora com Jackie Peyton? A produtora executiva da série, Linda Wallem, falando na Comic Con, já adiantou que a personagem continuará a sofrer com seu vício em drogas. Durante o evento, em um dos paineis, foi exibido o seguinte vídeo:

http://www.youtube.com/watch?v=cZWr_kzf5os

A única coisa que me deixou triste, no entanto, é que terei que esperar até 2011 pela terceira temporada. É muito tempo. Muito.

Minha pilha recarregável favorita

Que tal nunca mais precisar recarregar uma pilha recarregável na vida?

As novas pilhas Vibration-power Generating Battery — ou VpGB —, da Brother, que serão demonstradas durante a Techno Frontier 2010, em Tóquio, entre os dias 21 e 23 deste mês, prometem fazer isso.

A ideia é simples: Ao contrário das pilhas AA e AAA comuns, que contem uma certa quantidade de energia em seu interior, que vai descarregando com o tempo, as pilhas VpGB geram energia automaticamente sempre que são sacudidas — e o melhor, a energia pode ser usada instantaneamente.

É verdade que não será possível substituir completamente as velhas pilhas AA e AAA pelas novas VpGB, uma vez que elas só são eficazes para aparelhos que não consomem energia o tempo inteiro, e que consomem, no máximo, entre 100 e 180mW. Mas para controles remotos, por exemplo, elas são ideiais — além de permitirem a quem tem um Wii, por exemplo, sentir um gostinho de familiaridade.

Traga mais Readability para o seu blog

Meu amigo Rodrigo Ghedin conseguiu, sem querer, me deixar preocupado com a aparência: Não a minha, é verdade — já que neste caso nem as versões mais avançadas e recentes de Photoshop dariam jeito —, mas com a do meu blog. Tudo isso porquê, há alguns dias atrás, ele falou, em mais um de seus excelentes posts, sobre o conceito de readability.

Para quem não sabe o que readability significa, eu vou simplificar: Trata-se, basicamente, de tornar o processo de leitura mais fácil.

Ao encontrarem condições que lhes permitam ler mais facilmente, os seres humanos têm melhoradas suas capacidades de compreensão, retenção e velocidade de leitura. E para quem estiver se perguntando o que isso pode ter — ainda que de longe — a ver com os blogs que lemos no dia-a-adia, eu explico, mais uma vez. Só que desta vez vou usar um trecho do post onde o Ghedin menciona leituras realizadas na web:

(…) mesmo nas leituras mais rápidas, essenciais ao trabalho que desempenho e muito útil para ler muita coisa boa que aparece em blogs, sites e outros locais, às vezes me sinto incomodado. Não pelo monitor, mas sim pelo layout. Tem gente que publica um texto com fonte branca em fundo preto! A mim, o efeito é o mesmo que ficar meia hora olhando diretamente para uma lâmpada acesa. Meus olhos sentem essa agressão.

E esse problema de contraste é apenas um dos vários que existem. Tipografia mal escolhida, espaçamento inadequado, excesso de anúncios inseridos dentro do texto. Eu costumava pregar a máxima de que não importa aonde você escreva, o que importa, mesmo, é a mensagem. Bobagem! Já deixei de ler muita coisa boa porque a apresentação não colaborava.

Notem que um site mal cuidado, com qualquer um dos deslizes mencionados acima, pode estar prejudicando a facilidade de leitura de seus visitantes. Na prática, isso pode, inclusive, acabar se traduzindo em falta de fidelização dos leitores, ou seja: Eles podem nunca mais querer voltar ao seu site, pois se lembrarão, por exemplo, que precisaram de óculos escuros para proteger os olhos na última vez em que ali estiveram.

Felizmente, visando auxiliar a leitura de informações por milhões de internautas, um pessoal muito bacana desenvolveu um projeto — também, obviamente, chamado de Readability —, onde se encontra disponível um bookmarklet configurável para tornar qualquer página mais agradável de ler. O Rodrigo, muito oportunamente, ensina como fazer a configuração, passo-a-passo.

Com a existência de plugins prontamente disponíveis para a implantação de readability no Firefox e Google Chrome, o lado dos internautas está ainda mais garantido.

Mas acontece que eu fiquei pensando em como garantir que qualquer um que me visitasse pudesse ter acesso aos recursos de readability sem necessariamente contar com bookmarklets, extensões ou plugins. Esse conceito é tão interessante que deveria ficar ao lado de botões como os de compartilhamento de links no del.icio.us, ou de retweet, que hoje são amplamente vistos nos blogs por aí. E felizmente, não é nada complicado deixar o seu blog readability-ready.

O primeiro passo para isso é dar uma olhada no código fonte do bookmarklet que o Rodrigo ensina a configurar. No Firefox, basta clicar o botão direito sobre ele e selecionar a opção Propriedades. Você logo se deparará com algo assim no campo endereço:

[javascript] javascript:(function(){readConvertLinksToFootnotes=false;readStyle=’style-novel’;readSize=’size-medium’;readMargin=’margin-medium’;_readability_script=document.createElement(‘script’);_readability_script.type=’text/javascript’;_readability_script.src=’http://lab.arc90.com/experiments/readability/js/readability.js?x=’+(Math.random());document.documentElement.appendChild(_readability_script);_readability_css=document.createElement(‘link’);_readability_css.rel=’stylesheet’;_readability_css.href=’http://lab.arc90.com/experiments/readability/css/readability.css’;_readability_css.type=’text/css’;_readability_css.media=’all’;document.documentElement.appendChild(_readability_css);_readability_print_css=document.createElement(‘link’);_readability_print_css.rel=’stylesheet’;_readability_print_css.href=’http://lab.arc90.com/experiments/readability/css/readability-print.css’;_readability_print_css.media=’print’;_readability_print_css.type=’text/css’;document.getElementsByTagName(‘head’)[0].appendChild(_readability_print_css);})();
[/javascript]

Assustador, não é mesmo?

No entanto, não é necessário se preocupar com o que o código acima faz — que, na verdade, é somente aplicar readability à página que você está lendo. O importante é saber que é este o código que você precisará para permitir que qualquer um que visite seu site aplique readability nele. Na verdade, a coisa é tão simples que você precisará apenas criar um link em qualquer lugar da página onde escreveu um texto para que a pessoa possa clicar sobre ele. Vejamos a seguir como isso funciona no WordPress.

Acessando seu editor de temas, você precisará criar um link com o código acima no arquivo single.php — uma vez que o bookmarklet original é idealizado para transformar páginas com artigos individuais, e não sites inteiros, embora isso também possa ser feito. No meu caso, isso se traduziu da seguinte maneira:

[javascript wraplines="false"] <span class="readability">
<a title="Torne este texto mais agradável de ler!" href="javascript:(function(){readConvertLinksToFootnotes=false;readStyle=’style-novel’;readSize=’size-medium’;readMargin=’margin-medium’; _readability_script=document.createElement(‘script’);_readability_script.type=’text/javascript’;_readability_script.src=’http://lab.arc90.com/experiments/readability/js/readability.js?x=’+(Math.random());document.documentElement.appendChild(_readability_script)_readability_css=document.createElement(‘link’);_readability_css.rel=’stylesheet’; _readability_css.href=’http://lab.arc90.com/experiments/readability/css/readability.css’;_readability_css.type=’text/css’; _readability_css.media=’all’;document.documentElement.appendChild(_readability_css); _readability_print_css=document.createElement(‘link’); _readability_print_css.rel=’stylesheet’; _readability_print_css.href=’http://lab.arc90.com/experiments/readability/css/readability-print.css’; _readability_print_css.media=’print’; _readability_print_css.type=’text/css’; document.getElementsByTagName(‘head’)[0].appendChild(_readability_print_css);})();">Readability</a>
</span>
[/javascript]

O único retoque que eu fiz foi acrescentar uma classe CSS para deixar a coisa um pouco mais bonita de se ver. Não sabia exatamente qual ícone utilizar, então optei por capturar o favicon do próprio projeto Readability:

[css] .readability{
display:line;
background: transparent url(images/readability_16.png) no-repeat;
margin-left: 5px;
padding-left:26px;
padding-bottom:5px;
min-width:8px;
}
[/css]

O resultado já pode ser visto nas páginas individuais dos artigos aqui do blog. Espero, sinceramente, que desta maneira, eu esteja contribuindo para que as pessoas encontrem por aqui uma experiência de leitura um pouco mais agradável.

PS: Depois, com mais calma, pensarei em um jeito de tornar essa coisa um plugin para o WordPress.

Plants vs Zombies 2 vindo por aí?

Exatamente na semana em que eu estava reclamando que bem que poderiam criar um expansion pack para Plants vs Zombies, eis que me deparo com algumas notícias que dão conta de que algo diferente deve ser anunciado pela Popcap no próximo dia 2 de agosto. Alguns sites e revistas especializados em games receberam um convite para reservar a data em questão em suas agendas, juntamente com a imagem abaixo.

Será que minhas preces serão atendidas? #esperança

[via]

Protegendo melhor o meu WordPress

Depois de ter sido recentemente atacado por uma script injection que surgiu do nada, fiquei mais cauteloso no que diz respeito ao blog, quando se trata de segurança.

No começo deste mês acabei encontrando um artigo da Smashing Magazine, com 10 dicas para reforçar a proteção de sites que, como o meu, utilizam o WordPress. Embora seja verdade que reforçar a segurança de um site por conta própria requeira um conhecimento mínimo de Apache — e não se sentir intimidado com alterações no arquivo .htaccess —, não há nada realmente muito cabeludo a se fazer.

Assim sendo, quero compartilhar com vocês duas das alterações que fiz:

Primeira coisa: Proteger o blog de injeções de script

Os ataques de injeção de scripts acontecem quando um hacker introduz algumas linhas de código malicioso em um site através de um de seus formulários — o de comentários, por exemplo — e então envia tais dados através deste formulário. Isso é feito, geralmente, para que se possa enganar os sistemas em uso nos sites, de maneira que eles pensem que se trata de conteúdo enviado por um usuário válido, e assim acabem permitindo, sem querer, que dados sejam acessados, editados excluídos, ou que scripts mal intencionados sejam acessados e instalem vírus nas máquinas dos internautas desavisados.

Uma das técnicas básicas para um script injection é que uma máquina cliente submeta informações que contem tags, como a tag <script>. Isso nos leva às diretivas abaixo, sugerida no artigo que li:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

Ao serem adicionadas ao arquivo .htaccess, tais diretivas fazem com que qualquer requisição de acesso à uma página no blog seja verificada. Caso ela contenha referências à uma tag <script> ou, mais ainda, tenha tentado modificar o valor das variáveis GLOBALS ou _REQUEST do PHP, a requisição será bloqueada com um erro 403 (“Forbidden“) do Apache, ou seja, quem quer que esteja tentando realizar o acesso — neste caso, provavelmente alguém muito mal intencionado — será impedido de fazê-lo. Você pode até criar um documento personalizado para recepcionar alguém que tenha recebido o erro em questão:

ErrorDocument 403 /forbidden.php

Uma última palavra sobre as diretivas acima, é que estas podem ser facilmente modificadas para que incluam também as tags  <object>, <applet> e <embed>, também utilizadas em script injections. Desta maneira, reforça-se ainda mais a segurança.

Segunda coisa: Proteger o arquivo wp-config.php

Quando li o artigo da Smashing Magazine, vi que eles recomendam a proteção do arquivo wp-config.php — onde residem todas as configurações principais do WordPress, inclusive nomes de usuário e senha do banco de dados, que permitem a qualquer um com más intenções acesse todo o conteúdo do seu blog e faça com ele o que bem entender —, o que, afinal de contas, é uma excelente ideia.

O único problema é que eles, mais uma vez, se valem de alterações no arquivo .htaccess, da seguinte maneira:

<files wp-config.php>
order allow,deny
deny from all
</files>

Acredito, no entanto, que uma solução muito mais efetiva para impedir o acesso ao conteúdo do arquivo seja movê-lo para um lugar inacessível publicamente. Na prática, normalmente, isso significa movê-lo para antes da pasta public_html — onde fica tudo o que é visível para o mundo lá fora — em sua conta de usuário. Felizmente, desde a versão 2.6 do WordPress, isso é possível. Dessa maneira, basta que você utilize um programa de FTP de sua confiança e mova o arquivo em questão um nível acima.

De qualquer maneira, a dica dada pela Smashing Magazine ainda é válida se adaptarmos um pouco as coisas: Por exemplo, podemos aproveitar para proteger não o arquivo wp-config.php, mas sim o próprio arquivo .htaccess, da seguinte maneira:

<files .htaccess>
order allow,deny
deny from all
</files>

Conclusão

É óbvio que a proteção de um site contra ataques envolve uma série de outros passos e medidas de segurança, e muito mais leitura e estudo. Ainda assim, minha decisão de dividir estas duas simples alterações se deu porquê acredito serem realmente de grande valia para alguém que está pensando em proteger melhor seu conteúdo, e espero que, desta maneira, esteja prestando um serviço a quem se encontrar em uma situação difícil.

Para maiores informações, recomendo também a leitura do excelente artigo Hardening WordPress, disponível no próprio Codex da ferramenta.

May the force be with you

Às voltas com a decisão de comprar ou não um GPS para usar no carro, acabei encontrando meio que por acaso os vídeos abaixo, que retratam os bastidores das gravações das vozes de, nada mais, nada menos, que Darth Vader e Mestre Yoda para os navegadores TomTom. Além das vozes dos dois personagens, também está disponível a do robô C-3PO e estará, em breve, a de Han Solo.

Ah!! E se alguém por aí por acaso acha que se trata de uma brincadeira, pode ficar tranquilo: Não é não.

Genial!

“Back to the Future”: O viral que não era

Dê uma olhada nas imagens a seguir.

Se você — assim como eu — é um fã da série de filmes Back to the Future, estrelada por Michael J. Fox, deve ter se empolgado com a possibilidade de, finalmente, estar presenciando o Future Day, ou seja, o dia ao qual Martin McFly chegou quando foi ao futuro, no filme número dois da franquia.

Eu mesmo, confesso, fiquei impressionado, pois mal me lembrava deste pequeno detalhe. Aliás, a empolgação foi tanta que eu resolvi repassar a imagem a um monte de amigos que gostam dos filmes em questão — recebi apenas a segunda, por email. Junto com a imagem, recebi o seguinte comentário:

Today is the day that Marty McFly arrived in the future after hitting 88mph in a pimped out Delorean in 1985.

Ocorre que a história toda é um hoax, ou seja, não passou de um boato, ou de uma lenda urbana. Ela começou quando a revista britânica Total Film espalhou um tweet e depois uma imagem com a data de ontem — a primeira que ilustra este texto —, alegando ser 05 de julho de 2010 a data referenciada no filme. Conforme descrito pela Wikipedia, a coisa se tornou uma febre — ou um viral — na rede de micropostagens, de maneira que milhares e milhares de usuários a reproduziram.

Hoje a revista se desculpou, através de uma nota em seu site, onde explica toda a situação, já que milhares de fãs fervorosos do filme notaram o erro:

A segunda imagem — com data de hoje — veio, de acordo com a própria nota da revista, de um terceiro, que resolveu trocar a data e continuar com a coisa toda.

Mas não se preocupem,  já que o Delorean chegou ao futuro em 21 de outubro de 2015, como se pode ver através da imagem acima, retirada da Wikipedia.

No final das contas, a única coisa verdadeira dessa história toda é a seguinte: Eu realmente estou ficando velho. E se você começou a pensar quantos anos fazem desde a segunda parte do  filme — rodado em 1989 —, também está. É a vida.

Infográfico: IPhone 4 x IPhone 3GS

Encontrei por acaso o infográfico abaixo, que compara as versões 4 e 3GS do IPhone, da Apple.

É fato que a comparação nos permite ver uma série de evoluções entre os dois modelos, mas, na minha opinião, o que rouba a cena é a disponibilidade do iOS 4, sistema operacional dos telefones móveis da empresa de Steve Jobs, que além de permitir, finalmente, o multitasking, também introduz o recurso FaceTime, capaz de permitir a realização de video conferências facilmente.

Aliás, o aparelho, que custa entre US$ 199 e US$ 299 no exterior, tem componentes que, juntos, custam apenas cerca de US$ 188. Na prática, a Apple mantém suas margens de lucro baixas mas consegue bons lucros com o produto. Muito inteligente.