Blogger Web Comments for Firefox

Descubra o que andam falando do seu site por aí com essa excelente extensão para Firefox criada pelo Google:
Blogger Web Comments for Firefox

Muito bem feitinha, fácil de usar, bonita, excelente produto das mentes brilhantes do Google. Boa ferramenta para SEO, análise de mercado e pura satisfação da sua curiosidade, mas, além disso, excelente termômetro instantâneo da reputação do site que você está visitando.

Dica do Charles na radinho (sim, essa lista é muito boa mesmo.)

Mergulhando no Python

Recomendo: Mergulhando no Python, de Mark Pilgrim

Descrição no Submarino:
“O Python é uma linguagem de programação interativa e orientada a objetos. Geralmente é comparada ao Tcl, Perl, Scheme ou Java. Ele combina poder notável com uma sintaxe desobstruída. Apresenta módulos, classes, exceções e tipos de dados dinâmicos de nível elevado. Relaciona-se com chamadas e bibliotecas do sistema tão bem quanto os vários sistemas windowing (X11, motif, Tk, mac, MFC). Os novos módulos internos são escritos facilmente em C ou em C++. O Python é também usado como uma linguagem de extensão para as aplicações que necessitam de uma relação programável. A execução do Python é bastante prática: funciona em muitos tipos de UNIX, Windows, OS/2, Mac, Friend e em muitas outras plataformas. Se seu sistema favorito não for alistado aqui, pode ainda ser suportado, caso haja um compilador de C para ele. Mergulhando no Python é um livro para programadores de todos os níveis, e vai direto ao assunto.”

Se você entende inglês e quer poupar suas preciosas patacas, o livro está disponível gratuitamente na internet.

Outro recurso interessante é o Python: Guia de Consulta Rápida. É um livro de referência, bom para deixar ao lado de sua mesa de trabalho para fazer o que o título manda, consultas rápidas. Não é um livro que você vai ler de capa a capa, naturalmente. Esse não tem moleza na internet, eu comprei o meu 😉

Cliente RPC no Python

Ontem recomendei, lá no Tableless, este artigo, muito bom, sobre webservices em PHP e JSP.

Hoje um amigo me perguntou alguma coisa sobre aquele velho tema, Python[bb] X Java (ou PHP, ou ASP, ou .Net, ou VB…) Vou tomar a liberdade de usar este artigo como exemplo. Não é que o código do artigo seja ruim, pelo contrário. Mas serve com perfeição para uma comparação entre as linguagens. Vamos implementar o exemplo do client do artigo usando Python e PSE. Convém dizer que não é preciso baixar e instalar nenhuma biblioteca específica para trabalhar com XMLRPC em Python, que já vem com a xmlrpclib.

A Client.java em nosso exemplo vai se chamar client.py. Fica assim:

import xmlrpclib
client=xmlrpclib.ServerProxy("http://localhost/wsdemo/webservice.php")

A testa.jsp em nosso exemplo vai se chamar client.pt, e fica assim:

<?=client.semana(2)?>

Gostou?

WebPatterns

Acabo de ver nas Sinistras:
WebPatterns.org

Já faz algum tempo que todo bom programador trabalha com Design Patterns. A idéia é bastante simples: a grande maioria dos problemas de programação são muito parecidos. Se você parar para observar, vai notar que já resolveu muitas vezes o mesmo exato problema. A aplicação era diferente, os nomes das classes eram diferentes, mas a estrutura do problema era exatamente a mesma.

Vamos dar um exemplo de um pattern de estrutura que eu uso muito: o adapter. Veja o diagrama UML:
Pattern Bridge - Gof

Imagine que você tem um sistema em que há uma interface file, que tem um método read() que retorna o conteúdo do arquivo. Existem várias classes da interface file, uma que lê arquivos locais, outra que lê arquivos no subversion, outra que lê páginas web e até uma que lê itens em arquivos RSS. Agora seu chefe te pede para integrar o sistema a outro, um wiki corporativo. O sistema de wiki tem uma classe Page que faz tudo o que suas classes file fazem, mas os nomes dos métodos são diferentes. Ao invés de read() o método se chama get_content().

O que fazer? Reescrever a classe do wiki? Claro que não! Você certamente tem uma solução mais simples. Mas, acredite se quiser, já vi muita gente abrir a classe que não implementa a interface e copiar cada método mudando o nome! Bom, a solução que qualquer programador experiente daria seria criar uma classe que fizesse a adaptação, assim:

class PageAdapter:
    '''Adapta wiki.page para funcionar como file'''
    def __init__(self):
        self.page=wiki.Page()
    def read(self):
        return self.page.get_content()

Se você não fala Python, existem algun bons exemplos em C# aqui.

Vamos dar um nome a cada personagem em nosso problema. As classes que já existem no seu sistema e que usam os objetos file são seus Clients. A interface file é o Target. A classe Page é o Adaptee e a PageAdapter é o Adapter. Olhe novamente agora o diagrama UML e veja como é simples. A classe Client usa um Target (file). Adapter (AdapterPage) é um Target (file). Adapter (AdapterPage) usa um Adaptee (Page), “traduzindo” seus métodos para a Client.

Ao dar nome aos elementos e criar um diagrama UML do problema você se acostuma com a solução. Da próxima vez que você vir uma classe que faz a mesma coisa que uma interface que você já usa, automaticamente vai pensar: “acho que preciso de um adapter…”

Isso também inibe programadores novatos de “inventar” solução exotéricas, principalmente as do tipo CTRL+C CTRL+V, para problemas que já foram solucionados com sucesso um milhão de vezes antes.

A idéia do WebPatterns.org é que poderíamos reaproveitar nossa genialidade se tivermos patterns específicos para a web. Quase todo programador que chega ao assunto chega através de Design Patterns, que são os padrões de solução de problemas ao projetar software (e, por isso mesmo, são geralmente expresos em UML.) Mas já faz algum tempo que ouço falar de patterns de análise, de arquitetura, de interface com o usuário (onde a coisa vai entrar na área dos webdesigners e arquitetos de informação.) E agora estão surgindo patterns no projeto de aplicações web. Veja, por exemplo, esta lista. São patterns para quando estiver fazendo o planejamento dos conteúdos e funcionalidades de um site. Os microformats, por outro lado, são patterns para quando você estiver escrevendo seu HTML[bb].

A idéia é boa. Quanto mais ordem pudermos colocar nesse caos que é o desenvolvimento web, melhor.

Freakonomics Blog

Freakonomics: o Lado Oculto e Inesperado de Tudo que nos Afeta
Descrição no Submarino: Nesse fascinante best-seller (número 1 em todas as listas nos EUA), o economista Steven Levitt e o jornalista Stephen J. Dubner estudam a rotina e os enigmas da vida real – da trapaça à criminalidade, dos esportes à criação dos filhos – com conclusões que viram de cabeça para baixo o senso comum, geralmente usando dados aparentemente inofensivos e fazendo perguntas simples nunca feitas. Daí surge o novo campo de estudo apresentado neste livro: freakonomics. O que liga essas histórias é a crença de que o mundo moderno, aparentemente confuso, complicado e enganoso, não é impenetrável nem indecifrável. Na verdade, quando fazemos as perguntas certas, o mundo é ainda mais interessante do que supomos. É preciso, apenas, uma visão nova. Steven Levitt, por meio de um raciocínio incrivelmente inteligente e objetivo, mostra como é possível ver as coisas de maneira clara nessa barafunda. Os leitores vão tirar deste livro enigmas e histórias para entreter interlocutores em muitas e muitas festas, mas Freakonomics traz mais que isso: ele redefine a maneira como encaramos o mundo.

O livro é realmente bom, curiosíssimo, recomendo.

Acabo de descobrir o site do livro, com um interessante blog do autor.

Interessante é a maneira como cheguei ao site. O Levitt citou a Bruna Surfistinha, cujo livro é um fenômeno de vendas.

Daí a Mônica, do excelente Brand Game, noticiou a coisa, colocando o link para o excelente site do Freakonomics dentro do meu Bloglines.

Golpe Embratel Livre

Oito horas da noite. Meu Livre, aquele telefoninho da Embratel que é um celular, mas você só pode usar em casa, toca. O número tem um prefixo parecido com o meu, deve ser um outro Livre.

– Alô?
– Alô, boa noite! Com quem eu falo?
– Elcio.
– Senhor Elcio, aqui é Lais Ribeiro da Embratel.
– Boa noite, Lais.
– Boa noite, senhor Elcio. Estamos entrando em contato porque estamos realizando a implantação de um novo sistema em nossas antenas e isso pode estar ocasionando alguns problemas em sua linha, como eco em sua voz, perda de sinal, ligações que caem… Algum desses problemas está acontecendo com o senhor?

– Ocasionalmente, Lais, todos eles.
– Pois então, senhor Elcio, estamos iniciando um rastreamento de linhas via satélite para ajudar a resolver estes problemas. O senhor se importaria de fornecernos alguns dados a respeito de seu telefone?

A partir daí ela me pediu para remover a bateria e anotar um número que estava embaixo dela, que ela ligar de volta para pegá-lo. Naturalmente, eu disse a ela que não poderia fornecer esse tipo de informação assim, porque um golpista larápio poderia me ligar e pedir estes dados. E disse que iria ligar para a Embratel, no *500, do meu telefone, para passar os tais dados. ;-)

O número que ficou no olho mágico deve ser de algum outro telefone sequestrado. A Embratel não quis. Tentei ligar de volta e caiu direto na caixa postal.

Crianças, cuidado ao atender o telefone[bb].

Novo Tableless

Está no ar, senhoras e senhores. (Se você ainda está vendo a versão antiga, aguarde, é cache de DNS. Logo deve aparecer o novo.)

WordPress, fórum com phpBB, ficou pronto em menos de três dias. É o poder do OpenSource. O Bruno Torres arrumou a hospedagem, configurou o domínio, instalou o WordPress e o phpBB, tudo de uma vez só. Depois o Diego fez o layout e escreveu o XHTML e o CSS[bb]. No dia seguinte o Bruno fez o template para WordPress e eu importei os dados do fórum do Snitz para o phpBB e instalei o pacote de português brasileiro nele e no WordPress.

Hoje eu e o Diego fizemos revisões de layout, eu instalei uns plugins para o WordPress[bb] (escrevi meu primeiro plugin, estou orgulhoso) e mudamos o DNS no registro.br. Pronto. Vou escrever um manual “como colocar um site no ar em três dias.”

Conheça a Web 2.0 navegando

Ver e experimentar aplicações web 2.0[bb] pode ser uma excelente maneira de se entender mais dessa coisa toda. Vamos começar com links recomendados na Wikipedia. O assunto agora são os mashups. Mashups são aplicações feitas em cima de APIs de outras aplicações, combinando numa única aplicação recursos de pelo menos duas outras aplicações diferentes. Assim, ao ajuntarmos GeoURL e Flickr, podemos ver fotos tiradas perto de nossa casa. Ajuntando isso com o Google Maps, podemos vê-las em um mapa. Os links que a Wikipedia recomenda:

Por fim, leia o próprio artigo na Wikipedia: Mashup (web application hybrid).

Mashups são construídos em cima de APIs públicas. Sobre APIs:

Também vale ler na Wikipedia sobre os formatos mais comuns para se disponibilizar Open APIs: REST, SOAP e XML-RPC. O próprio artigo da Wikipedia sobre Webservices tem links muito interessantes.

Ainda sobre APIs e formatos: meu predileto tem sido XML-RPC, principalmente por sua simplicidade. Mas ultimamente tenho brincado muito, muito, muito com JSON e YAML, que, surpresa, são quase a mesma coisa! Eu sei que a idéia de não se usar XML pode parecer estranha, mas acalme-se, há bons motivos para isso. Escrevo mais sobre isso em breve.

Ah, sim, dê uma olhadinha no próprio verbete “Web 2.0” na Wikipedia. É, desculpem o trocadilho, enciclopédico.

Por fim, queria recomendar a lista de aplicações web 2.0 que o Ricardo publicou: O que ESTÁ Web 2.0 – lista de sites relacionados à web 2.0. Excelentíssimo recurso, vale a pena gastar algum tempo conhecendo as aplicações uma a uma.

Os links estão aí, divirta-se!

Ajax, nomex, descomplicax

Eu já escrevi aqui sobre como é bom que a forma como temos usado XMLHttpRequest tenha um nome. Mas o pessoal está exagerando por aí.
Se você requisita XHTML do servidor, e não XML (mesmo que XHTML seja XML) então você está usando Ahah, um subset do Ajax[bb]. (É como quem diz: Ahah! Pensou que estava usando Ajax, hein! Desculpe, não resisti.)
Ops, será que é Ahah mesmo? Talvez seja Ahax (sem trocadilhos aqui.)
Chega, né pessoal? Que tal esquecer o preciosismo e chamar tudo de Ajax mesmo? Ou tem alguma coisa ali que não estou percebendo? Se você entendeu algo que eu não consegui, por favor, deixe um comentário.