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.)

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.

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.

Acid 2

O pessoal do Web Standards Project, há algum tempo, colocou no ar uma excelente iniciativa em prol dos padrões: The Acid2 Test.
A idéia é a seguinte: quando você acessa este teste o resultado obtido tem que ser igual ao desta página. Se for diferente, tem algo de errado com seu navegador. Quanto mais diferente, mais problemas há com o seu navegador em relação a HMTL, CSS, PNG e etc. É muito interessante comparar o resultado no Internet Explorer, no Firefox e no Opera.
Pois bem, nada disso é novo. A novidade é a seguinte: estava lendo os comentários desse post do Diego no Tableless, falando sobre navegadores e a qualidade do Internet Explorer, e me deparei com um comentário do Rafael dizendo que o Safari é o único navegador que passa no Acid 2.
Pois bem, senhores:
Miniatura: Konqueror passa no teste Acid 2
Este é um screenshot do novíssimo Konqueror 3.5 (preciso falar aqui sobre o KDE 3.5, vieram melhorias muito interessantes.) O motor do Safari foi construído em cima do Konqueror, e a Apple devolveu ao projeto KDE as melhorias. Aliás, deixe-me dizer que na Tux Magazine deste mês há uma interessantíssima entrevista com Daniel Molkentin, desenvolvedor do KDE, sobre o KDE 3.5 e o futuro 4.0.
Quando comecei a usar o KDE, na versão 3.3, o Konqueror era um navegador muito ruim. Da versão 3.3 para a 3.4 algo muito importante aconteceu: a Apple resolveu escrever o Safari. Aqui demonstra-se o poder do software livre. A Apple devolveu ao KDE as melhorias que fez no Konqueror e, embora eles ainda não tenham conseguido unificar as bases de código, o Konqueror incorporou grande parte das mudanças que a Apple fez. A mudança da versão 3.3 para a 3.4, principalmente em estabilidade e suporte aos padrões, foi drástica. Melhorou tanto que é o navegador padrão de algumas distribuições, por exemplo, do Kubuntu.
Agora, na versão 3.5, o Konqueror é um navegador muito maduro. O suporte aos padrões está excelente. É bastante comum que eu abra um site que nunca foi testado no Konqueror e ele funcione com perfeição.
Aliás, isso só mostra como os padrões realmente funcionam, facilitando a vida do desenvolvedor. É muito comum desenvolver um site testando apenas no Firefox e, sem alterações, vê-lo funcionar no Opera, no Konqueror e no Safari.
Só falta o Internet Explorer, mas sobre isso você pode ler aqui

Excelente repositório de Javascript

Estava lendo a ArqHP hoje e o Jonas Raoni, assíduo colaborador da lista, enviou um link interno de um site que ele mantém junto com o Carlos Rodrigues: JSFromHell.com.
Já tinha visitado o site no passado, mas o conteúdo cresceu um bocado. É uma coleção de exemplos em Javascript. Coleções de javascript a gente encontra às pencas por aí, mas essa é diferente. Não são códigos prontos para você copiar e colar. São códigos para quem trabalha com Javascript. Muito código útil para quem pretende construir seus próprios scripts, e também para quem está aprendendo Javascript agora e gostaria de ler um pouco de código bom. Recomendo.

Pílulas

Ventos de mudanças

Você sabe o que é Web 2.0? Excelente. Essencial para quem chegou agora e não está entendendo nada desse papo de “Ajax[bb]“, “GMail”, “RSS”, “tagsonomia”, etc…
O time que escreveu também é de primeira.
Concordo com tudo, sem tirar nem por (exceto, claro, picuinhas como alguém ter escrito que Ajax é linguagem de programação e outras imperfeições sem importância.) Essas são as coisas que tem tirado meu sono, sido objeto do meu estudo, e inspirando algumas das coisas que eu faço, como o Robô de Google Ranking que eu anunciei há pouco.
Percebem como o pessoal parou de falar sobre RIA rapidinho? Estamos todos fazendo RIA, sem flash, e é legal pra caramba! Fica aqui minha lista de coisinhas para você ficar de olho:

  • Padrões Web: o caminho da simplicidade. XHTML, CSS e Javascrip[bb]t são o material de alvenaria dessa nova web. XML são os tijolos.
  • RSS/Atom: ainda tem muuuuita gente que nem sabe o que é isso. Mas, para quem já usa, é hora de dar um passo adiante. Pense em RSS ou Atom para outras coisas além de monitorar sites de notícias, e pense em RSS ou Atom sendo acessado por máquinas que vão fazer mais do que simplesmente te avisar das novidades. Há muito espaço para ser criativo aqui.
  • Ajax: você sabe, a RIA descomplicada e acessível. Ando escrevendo um bocado sobre isso, não?
  • Tags: manja del.icio.us? Coisa assim, classificação pelos usuários.
  • Microformatos: esqueça a looonga espera por uma web semântica. Vamos construir coisas úteis e simples com a semântica que temos hoje.
  • Spiders: e outros tipos robôs de acesso, claro. Pense em máquinas acessando a web e fazendo o trabalho sujo por você. Elas já estão por toda parte. É o Google, o Buscapé e o Bondfaro, o Yahoo!, o Adsense do Google (que lê minha página para exibir anúncios relevantes.) Chegou a hora desses robôs se multiplicarem. Acessando HTML (pense nisso com microformatos,) RSS, Web Services, seja o que for, há muitas oportunidades aqui.
  • Internet Móvel: você vai querer fazer muito mais do que apenas ler seu email em seu celular

Se você quer acrescentar alguma coisa à lista, já sabe, comentários aí embaixo.
Por hoje é só pessoal. Parabéns ao pessoal do Carreirasolo pelo excelente post.

Robô de Google Ranking

Há algum tempo que o Robô de Google Ranking da Atípico está fora do ar. Como foi desenvolvido em ASP, eu estava sem vontade nem paciência para mexer nele.
Parei ontem à noite para desenvolver um em Python. Duas horas depois ele havia nascido: novo Robô de Google Ranking, ainda beta. Veja um exemplo de como usá-lo aqui. Feito com Python e PSE, ainda tem muito o que melhorar, mas já pode ser usado. Durante essa fase do trabalho comentários, bugs e sugestões são muito bem vindos. Tem algo que você queria que essa ferramenta fizesse ou algo em que ela poderia melhorar? Escreva aqui nos comentários.

CSS e cache

Uma dica:

Durante o desenvolvimento, costumo usar:
@import url(estilo.css?<%=rnd%>);

Assim não tenho problemas com cache.

Depois que o site vai pro ar, coloco:
@import url(estilo.css?1);

Quando preciso fazer alguma alteração, mudo o número:
@import url(estilo.css?2);

Assim, quem costuma visitar constantemente o site não vai ficar com a versão antiga em cache.

Obviamente, você pode fazer a mesma coisa com PHP, Python, JSP, ColdFusion… Basta trocar rnd pela função de random da sua linguagem.