Mais Microformatos

O Henrique ensina a usar XOXO e o Fellipe ensina a usar hCard.

Talvez você esteja se perguntando de que adianta usar um formato de código que também só está sendo usado por meia dúzia de early adopters. Lembre-se que RSS[bb] foi exatamente assim um dia. Quanto mais gente começar a usar microformatos, mais valor eles terão. Ou seja, se a idéia parece boa, comece a usar assim que possível. Quanto mais gente usando, mais gente vai querer usar e construir aplicações que leiam esses formatos.

Microformats, Microformatos, Web 2.0, Web2.0, XHTML, XOXO, hCard

Google Pack

Seu Windows precisa ser formatado a cada oito meses? Cada vez que você troca de computador[bb] perde um dia ou dois configurando seus programas?

Depois de instalar o sistema operacional, você precisa baixar e instalar Firewall, Anti-vírus, Anti-Spyware, um navegador decente, programas para lidar com Zip, PDF, um bom visualizador e organizador de fotos, um screensaver melhor que o “voando pelo espaço” e meia dúzia de outras coisinhas?

Google Pack: o tudo-em-um-auto-atualizável do Google[bb], pode resolver seus problemas.

A idéia é genial, como quase tudo o que o Google tem feito. Assim os usuários de Windows[bb] podem ter ua experiência um pouquinho parecida com o que é gerenciar programas num bom sistema operacional.

Google, Google Pack, GooglePack, Windows, Linux

10 Lugares Aonde Você Deveria Usar Ajax

A Vanessa, que já havia traduzido o artigo do Jesse James Garret sobre Ajax[bb], traduziu mais um:

10 Lugares Aonde Você Deveria Usar Ajax, do Alex Bosworth (original aqui.)

Excelente leitura. Parabéns à Vanessa pela iniciativa.

Está escrito lá, mas eu vou recomendar aqui para que você não corra o risco de não clicar: Places to use Ajax, em formato Wiki, já evoluiu um tanto em relação ao artigo original.

Ajax, Webstandards, Usability, Usabilidade, Javascript

Django e Rails: vídeos da conferência Snakes and Rubies

Snakes and Rubies

Ocorreu mês passado em Chicago a Snakes and Rubies, conferência que reuniu Adrian Holovaty, criador do Django e David Heinemeier Hansson, criador do Ruby on Rails.

Agora o vídeo[bb] da conferência está disponível para download:
Django | Snakes and Rubies downloads

Aproveite agora e baixe por bittorrent, está bastante rápido aqui.

Estou desenvolvendo em Django todo o sistema de e-commerce e e-learning da Visie. Fiz em quatro dias coisas que eu costumava levar semanas. Logo que o sistema estiver no ar eu conto as novidades para vocês.

Web, Programming, Python, Ruby, Django, Ruby-on-Rails, Video

Web 2.0 pé no chão

A edição de janeiro da Revista Webdesign traz uma extensa e interessante reportagem sobre a Web 2.0 (na mesma revista, o primeiro de uma série de tutoriais meus sobre Ajax.) Ao mesmo tempo, Richard MacManus anuncia a morte da Web 2.0, que, na verdade, nunca existiu.

Ao mesmo tempo, falando de Ajax, surgiram o Ajah, o Ahah, o Ajat e uma série de outros “novos métodos”, todos “mais simples”, “mais eficientes” e “mais rápidos” que o Ajax.

Isso é pra confundir qualquer um, não? Calma, vou tentar explicar. Meu conselho é: esqueça o nome, entenda o que se pode fazer. Principalmente, o que pode ser feito para seu usuário.

Comecemos com o caso do Ajax. Ele permite que você carregue apenas parte de sua página usando Javascript[bb], sem precisar fazer o refresh de toda a página. Isso é fantástico, e é isso o que realmente importa, para você e para o seu usuário. O nome que você vai dar a isso realmente importa muito pouco.

Assim, se você quer usar XMLHttpRequest para requisitar trechos de XML que serão interpretados pelo Javascript, ou trechos do seu HTML, ou simples arquivos de texto, faça o que for melhor para o seu projeto. Como você vai chamar isso, realmente, importa muito pouco. Eu, por exemplo, tenho usado muito duas técnicas: requisitar trechos de HTML do servidor (que eles chamam por aí de Ajah ou Ajat) e requisitar Json (o que poderia ser considerado uma forma de Ahah.) Mas, para simplificar, chamo tudo de Ajax.

O nome realmente não importa, o que importa é que, para meus usuários, a aplicação está muito mais rápida. Então, se os nomes parecem complicados, relaxe. Se gostar da idéia, aceite minha sugestão e chame tudo de Ajax. Senão, tudo bem, não faz a menor diferença mesmo.

Numa esfera muito maior, a mesma coisa acontece com a Web 2.0. A diferença é que o Ajax é um conceito e a Web 2.0 é o nome para uma série de conceitos que representam um novo nível de maturidade no desenvolvimento de aplicações web. Diferente de algumas das muitas idéias que vimos explodir junto com a bolha, esses são conceitos maduros, comprovados pelo mercado, testados e aprovados pelo mundo real. Por isso, não importa se você vai chamar isso tudo de Web 2.0 ou não, o que importa é:

  • A web é a melhor plataforma de desenvolvimento de software existente hoje: de novo, pense no usuário. Veja, por exemplo, este PDF publicado pelo Estado de São Paulo.
    • Distribuir software pela web é o melhor dos mundos: Nada de CDs com atualizações de software. Atualização instantânea para toda a base de usuários. Software sempre atualizado, sem que você tenha o trabalho de esperar por um CD, colocá-lo no drive e seguir as instruções.
    • Experimente o desenvolvimento orientado a serviços: é um jeito de se desenvolver. Ao invés de desenvolver componentes ou bibliotecas que serão usados por seus programas, você desenvolve APIs de serviços web. Dá praticamente o mesmo trabalho desenvolver um webservice e uma DLL. A diferença é a vastidão de situações em que o webservice pode ser útil. Tenho, por exemplo, um webservice desenvolvido em PHP para um sistema de pagamento que eu reaproveitei. Estou usando o mesmo webservice de outro servidor, a partir do Python[bb]. Faça isso com DLLs ou coisa parecida, quero ver! As vantagens para o seu usuário são o fato de suas aplicações ficarem prontas logo e suas migrações serem menos traumáticas, ou seja, seu sistema funcionará melhor, e o fato de que outras pessoas poderão desenvolver sistemas que usem seus serviços. Esse tipo de integração é fabuloso!
    • Você precisa de um bom framework[bb]: Algo como Rails, que o faça produtivo. Estou usando Django e estou satisfeitíssimo. Se você não trabalha com um bom framework, não sabe o que está perdendo. Um bom framework permitirá a você desenvolver em poucos dias softwares que antes levavam semanas. E a web permitirá disponibilizá-los imediatamente. É um salto de um ciclo de meses para um ciclo de dias.
  • O conteúdo é o rei: não importa quão bonita seja sua aplicação, ou quão bem ela funcione, o valor dela está relacionado com o conteúdo que ela armazena, classifica e distribui, e, numa segunda análise, em quão bem ela é capaz de fazer isso. Assim:
    • O projeto de sua aplicação deve ser voltado ao conteúdo: Toda a sua equipe deve ter na ponta da língua o que seu site faz exatamente, ou seja, que conteúdo ele entrega para quem, e trabalhar em prol disso.
    • Nada deve impedir seu usuário de chegar ao conteúdo: Sua idéia genial de navegação não deve impedí-los. A versão do navgador deles ou sua banda estreita também não.
    • O próprio valor do negócio está relacionado com o conteúdo: Não importa quão bonitos sejam os gráficos com os trovões e a chuva, as pessoas entram em sites de previsão do tempo para ver a previsão do tempo. Por isso, se você puder investir em apenas uma coisa, invista no seu conteúdo. Tenha a melhor previsão do tempo, que abrange o maior número de cidades, que é mais fácil de se entender, que acerta mais. Já percebeu como é feia a home do Google? Há uma série de mecanismos de busca mais bonitos por aí, mas sem o que o Google tem: conteúdo relevante[bb].
  • Dar poder à pessoas: já leu aquele papo sobre o valor exponencial dos aparelhos de telefone em seu início? Pois então, é a mesma coisa com o del.icio.us, por exemplo. Dar poder às pessoas significa:
    • Folksonomia: como você organiza o conteúdo em seu site? Quem define se o link no menu vai se chamar “contato” ou “fale conosco”? Esse trabalho é o que o pessoal da arquitetura de informação chama de taxonomia. É o trabalho de dar nome e classificar as coisas. Alguém teve a interessante idéia de colocara taxonomia na mão de seus usuários, daí surgiu o termo folksonomia (folk=povo, gente.) Um exemplo? Veja como se usava taxonomia antigamente: Cadê? Internet. Essa página é um exemplo de taxonomia convencional. Embora as categorias e os sites cadastrados tenham sido sugeridos por usuários, foi alguém dentro do Cadê que resolveu o que ia aonde. Percebe que não há uma categoria Web 2.0 lá? Agora veja esse: Del.Icio.Us Internet. Veja que há, na direita, um “related tags”, com links para Web 2.0 e Ajax, por exemplo. Ao colocar a classificação na mão de seus usuários o del.icio.us pode ser atual como nenhum outro serviço. Veja, por exemplo, o que a Amazon está fazendo ao deixar que as pessoas classifiquem seus produtos: internet tag na amazon
    • Deixá-las publicar: Conhece o Slashdot? É um site de notícias de ciência e tecnologia, principalmente tecnologia. Todo o conteúdo é criado pelos próprios usuários. Recebe diariamente centenas de milhares de leitores e tem um volume absurdo de informações interessantes. E a Wikipedia? O mesmo formato, só que é uma enciclopédia. A original, em inglês, tem quase um milhão de artigos escritos. Em português há quase cem mil. E se falarmos de sites que vendem conteúdo. Que tal, por exemplo, um que vende livros? Não faz sentido deixar as pessoas escreverem, não é mesmo? Afinal, você entra num site de livros porque quer ler alguma coisa escrita por um profissional. Bem, veja este exemplo: Firefox Hacks na Amazon. Primeiro veja, junto à imagem da capa do produto, duas miniaturas de imagens enviadas por usuários. Interessante, não? Agora role até o meio da página, até a seção “Spotlight Reviews.” Olha só que coisa interessante, comentários de gente que comprou o livro. O que você acha mais interessante ler antes de comprar um livro? Comentários de um profissional cujo trabalho é lhe vender livros ou de gente comum que comprou o livro e leu de verdade?
    • Deixá-las reutilizar seu conteúdo: estamos falando de RSS, de Web Services, de código simples e outros subterfúgios para que as pessoas consigam usar o conteúdo que você distribui fora do seu site. Veja, por exemplo, o Varal, uma interessante experiência do René. Ali aparece tudo o que ele publica, em todos os seus blogs, fotologs, flickrs e etc. Já exite um serviço que faz algo parecido, veja: SuprGlu. Você pode acessar assim, via programação, suas fotos no Flickr, seus favoritos no del.icio.us, seus posts no Blogger (ou no WordPress), os livros da Amazon, as buscas do Google, os mapas do Google Maps e uma série de outras coisas interessantes. Pode criar, por exemplo, uma sidebar para seu blog que mostra livros sobre o assunto do post que está sendo lido, resultados no Google sobre o assunto, seus favoritos no del.icio.us sobre o assunto, e etc. Pode exibir, usando GeoURL, a que distânia estão do seu site as pessoas que fizeram comentários nele. Seu site não pode ser um buraco negro de informações estanques, há toda uma web com a qual interagir.
    • Ouví-las: quer saber? Esta sempre foi a questão principal. E hoje é muito mais fácil saber o que as pessoas tem a dizer. Digamos que você trabalhe para a Telefonica e precisa saber o que as pessoas andam dizendo de você por aí: você pode tentar aqui, aqui ou aqui, por exemplo. E o mais interessante é que a maioria dos resultados vem acompanhada de uma caixinha de comentários ou outra maneira de responder ao autor.
  • Acessibilidade: Nesse contexto, a acessibilidade ganha um novo aspecto. Primeiro, ela é importante porque permite a qualquer pessoa acessar seu conteúdo e isso vai incluir os excluídos. Os excluídos são aqueles que não vêem como você, não ouvem como você, ou não tem um computador, um sistema operacional e um navegador como os seus. Como essas pessoas são publishers, incluí-las vai aumentar o valor do seu conteúdo. Mas, num segundo aspecto, a acessibilidade é relevante porque vai incluir também as máquinas. Sabe, o bot do Google, o usuário mais importante que visita seu site, é cego e surdo, não entende javascript nem CSS. E, além dele, com a web 2.0 há a possibilidade de uma porção de outros usuários “automáticos” começarem a freqüentar seu site.
  • Semântica e Reuso: Você sabe, semântica, h1, h2 e h3 para títulos, ul, ol e li para listas e etc. Pois bem, alguém inventou um jeito interessantíssimo de se reaproveitar código semântico sem muita complicação, os microformatos. Dê uma olhada, é bastante interessante, e tão fácil de implementar que não vale a pena deixar de experimentar. Por exemplo, esta lista de tópicos está implementada em XOXO e isso não me deu absolutamente nenhum trabalho extra. O fato é que desde que começamos a falar em semântica um dos nossos objetivos era construir código reutilizável.

Deixe-me levá-lo agora a dois textos interessantes: o primeiro: Lenda viva, muito viva. No meio do texto, antes de falar sobre RSS, René pergunta: “Mas afinal… do que esse nosso papel é capaz?”
Para ajudar a responder, leia esse outro: Mundo de Pontas.

Como você pode notar, as coisas que realmente dão valor à tal Web 2.0 já são valiosas há algum tempo. Já há algum tempo que isso tudo vem dando certo também. Se alguém resolveu dar um nome a isso tudo, e se outra pessoa resolveu dizer que ela morreu, não faz a menor diferença. Esses pontos são verdade há bastante tempo, independente de serem chamados de Web 2.0 ou qualquer outro nome. Assim, se disserem que a Web 2.0 é o que há, ou se disserem que ela morreu, relaxe e concentre-se no que realmente importa para seus clientes e usuários.

Vou aproveitar para recomendar o ótimo texto do Henrique: Designing for web 2.0: “Se você está preocupado com Web2, esqueça o termo completamente e estude web standards, acessibilidade e Microformats…”

Technorati Tags: , , , , , , , , , , , , , , , ,

If ++ Increments … (++)

Sei que não é gentil ficar rindo da falta de talento alheia, mas eu não resisto a esse site.

Veja essa:

Another slow day, another revisited post. Even if you’ve seen the original, I highly recommend checking out the comments posted. There you will find a number of solutions (five pages worth) to the problem that Steve Local’s … less gifted … colleague was having in C# …

Nathan: Steve, you know how ++ will increment, right?
Steve: Right ….
Nathan: Okay, so how do you increment by 11?

Vá até lá e leia os comentários, são hilários. Esta outra também é muito boa.

Fun, Humor, Code, C#, C

Biblia Online mais rápida

Fiz algumas alterações no código da Bíblia Online, está bem mais rápida. O truque foi implementar numa thread um servidor que oferece um serviço de consulta à Bíblia. Assim, a página web só faz uma consulta a esse servidor. Fiz com XMLRPC.

Se um dia eu tiver que usar consultas à Bíblia[bb] de uma outra aplicação, tenho o webservice feito, sem nenhum trabalho adicional 😉

Bible, Bíblia, XMLRPC, Web Services

WordPress é espetacular

Fantástico, maravilhoso. Indescritível.

Um gerenciador de blogs[bb] completíssimo, ao mesmo tempo, simples de instalar, de usar e de estender. Tem tudo o que você precisa, e o que não tiver, há um plugin disponível.

Coisas fantásticas que descobri ontem:

  1. Se você cria e publica um post para uma data posterior, ele entra no ar automaticamente na data escolhida. Isso pode ser muito útil. Você pode, por exemplo, deixar programado o “post da virada” para entrar no ar à meia noite do dia 31 e ir tranqüilo à praia.
  2. O plugin SimpleTags. Você coloca em algum lugar uma lista assim: <tags>WordPress, WordPress Plugins, WordPress Tips, PHP, Blogging, Google Sitemap, Technorati, Tableless, Web Standards</tags> e ele transforma em: “WordPress, WordPress Plugins, WordPress Tips, PHP, Blogging, Google Sitemap, Technorati, Tableless, Web Standards
  3. O plugin Google Sitemap Generator gera automaticamente um sitemap do Google para você cada vez que um post é publicado em seu blog.

Depois da instalação do WordPress[bb] no Tableless.com.br, em que tive que mexer bem mais a fundo do que neste humilde blog (escrevi até dois plugins!) fiquei ainda mais apaixonado por isso aqui!

Se você tem mais recomendações de plugins legais, por favor, deixe um comentário!

(Ah, se tudo der certo, este post irá para o ar às 4h da manhã. Não, eu não estava acordado. Só estou demonstrando a funcionalidade descrita acima.)

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.

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!