Pages

Showing posts with label pipes. Show all posts
Showing posts with label pipes. Show all posts

Saturday, January 12, 2008

Integrando melhor o del.icio.us com o Pipes

Pessoal, essa foi minha primeira grande besteira escrita nesse blog. No entusiasmo de resolver o problema não percebi que a variável que eu manipulava não era a que eu imaginava estar manipulando. Resultado, o segundo problema listado abaixo está sem solução até o momento. Estou editando esse tópico para deixar apenas o que funciona.

Depois ter dado uma idéia de como usar o Pipes para acompanhar conteúdo marcado com certas tags no del.icio.us. Eu fiquei pensando se não existiria uma forma de contornar alguns problemas que ainda persistiam.

O primeiro desses problemas são os links de páginas escritas em línguas completamente incompreensíveis para mim, ou seja, diferentes de português, inglês, espanhol, francês e italiano. E não. Eu não falo/leio em todas essas línguas. Eu digo que elas são compreensíveis para mim porque quando eu as vejo escritas, eu sei que língua é. Ao contrário do que acontece quando vejo um texto escrito em alemão, holandês, russo, japonês, chinês e toda e qualquer língua que não utilize apenas o alfabeto latino para escrever. E se eu não sei que língua é, eu nem consigo tentar a sorte no tradutor online.

O segundo problema são os links populares. Eu resolvi boa parte do problema de duplicidade de links, mas não resolvi, por exemplo, quando pela enésima vez alguém adiciona a página principal do ubuntu ou do firefox. É justo, lógico e honorável que essas adições ocorram, mas eu já conheço esses links a "décadas", não é muito produtivo ter que filtrar esses links em meio a uma lista mais uma vez (observe que a lista de links populares é muito, mas muito grande, não é apenas dois ou três links, estamos falando de centenas, alguns são repetidos aos milhares).

Então, como resolver essas questões ?

Eu resolvi a primeira de forma parcial. Eu adicionei um filtro de conteúdo para eliminar pelo título quando houver certos caracteres nele. Como eu não conheço nada de língua oriental, o que fiz foi a abrir a página e copiar alguns desses caracteres para o módulo. Minha idéia é alimentar um filtro por aprendizado, ou seja, agora eu elimino um símbolo, mas haverão outros, então eu alimento mais um, e assim vou até que não veja mais links com símbolos que eu nem sei o que são. Eu precisei de uns 9 símbolos, pegos completamente ao acaso (e cuja origem ou significado eu desconheço) para eliminar mais de 80 % do volume de material que eu não sou capaz de compreender.

A solução não é completa porque ainda existe o alemão, o holandês, o norueguês, etc... (a lista de línguas nórdicas não tão pequena). Não dá para filtrar tudo, mas resolveu muita coisa.

[edição grande]
A segunda questão não foi , impressionantemente, resolvida. A questão toda estava bem debaixo do meu nariz. Existe um item chamado "y:repeatcount" que tem como valor justamente o número de vezes que alguém adicionou aquela página no sistema do del.icio.us. Então o que fiz por criar um módulo de filtro (Operators > Filter), que permitirá apenas (Permit) links que combinem com qualquer uma das regras (any) definidas de tal forma que item.y:repeatcount seja igual a 1 ou a 2 ou a 3 ou 4 ou a 5 ou 6 ou a 7. Sim. Eu vou me permitir ver o mesmo link 7 vezes. Isso pode parecer improdutivo, e até é, mas não tanto quanto parece. Ocorre quem em meio a uma lista é fácil perder a oportunidade de conhecer um novo bom link, quando eu permito que seja repetido, eu me dou chance de ver o link mais de uma vez e diminuo a chance de perder bons links. E está muito longe de ser tão improdutivo quanto ver o mesmo link milhares de vezes. A idéia é boa, mas o y:repeatcount não é o que eu imaginei que fosse, então o que eu digo que vai acontecer, simplesmente não acontece. Eu fui iludido com o fato de apenas uma fração do resultados serem mostrados no debug do pipe e de não ter feito um análise mais cuidadosa quando os resultados chegaram no leitor de feeds.

Eu removi a figura, pois ela não tem mais o impacto que tinha antes.

Com isso, temos um pipe que fornece quase a mesma a mesma coisa de antes. Ainda verei se consigo resolver o problema dos links muito populares, mas certamente com o fim das minhas férias não devo ter o mesmo tempo para me dedicar a esse assunto.

Porque não dizer : Eu aproveitei a oportunidade e adicionei um "sort" um elemento que me permite organizar a lista de links com uma certa ordem. E eu escolhi a ordem descendente na data de publicação. Mas isso é só cosmético.
[/edição grande]

Lamento qualquer inconveniente.

OBS.: só agora percebi, essa é uma integração completamente "Yahoo!".

Friday, January 11, 2008

Idéias de uso para o Pipes

A foi perguntado no "Garota Sem Fio" se seria possível filtrar o conteúdo de um determinado feed. No caso, eu entendi que ela queria filtrar todos os posts que falavam sobre coisas que ela não tinha interesse em feeds que ela lê diariamente. Um xará respondeu Yahoo Pipes. Eu também ia responder isso, mas como completei, ele é um sistema muito, mas muito chato de gerenciar múltiplas fontes.

Além disso, eu não considero o sistema trivial. Quer dizer: se quiser colocar um feed entrando e saindo sem fazer nada é fácil, mas vai entender certos conceitos de edição do conteúdo. Vai criar um feed para uma página que não tem um. As ferramentas estão lá, mas não estão tão claras assim.

E já houve uma época que eu tive a brilhante idéia de agregar todos os feeds (ou pelo menos a grande maioria) que eu leio pelo Pipes criando verdadeiros "planetas" com filtro de conteúdo e de entradas duplicadas. Mas acontece que eu esbarrei em um problema grotesco, como transferir todos os feeds que assino para dentro do Pipes? Não existe um "import OPML" (que eu tenha descoberto), a única forma de transferir os meus feeds para lá seria manualmente (existe algumas coisas que poderiam ser feitas no caso de eu criar uma página e colocar nela todos os links dos meus feeds, mas isso seria quase tão trabalhoso quanto!), então eu desisti. Mas existem outras coisas que podem ser feitas como o Pipes. Talvez não tão cansativas ou demoradas como transferir 200 feeds manualmente para dentro de um sistema.

Primeiro, eu preciso que você conheça um pouco do que é o Pipes. A melhor forma de aprender é vendo o vídeo de demonstração do sistema. Ok, ele está em inglês. Eu sei. Mas acredito que isso não seja uma barreira (não me refiro a língua, me refiro ao fato de que não é preciso ouvir para entender tudo, para entender o principal basta acompanhar o visual). A documentação do Pipes não é tão clara, nem tão boa quanto eu gostaria que fosse, mas serve (afinal, não tem outra mesmo!. Você pode ler essa introdução básica em português. E vou logo avisando que certas dúvidas só vão ser respondidas depois de demorada pesquisa na documentação oficial. Mas certas coisas nem em inglês, nem na documentação oficial, eu encontrei respostas. A sorte é que quase toda a documentação possuí um exemplo (e isso ajuda muito, então sugiro que realmente rode, consulte e abra os exemplos).

Depois de ter feito sua inscrição no Pipes (caso não tenha uma conta Yahoo) e de preferência ter tentado repetir um exemplo básico (esse é um bom começo). Verifique "todas" (eu não espero que veja todas, apenas as mais interessantes para você) as idéias já publicadas por terceiros. Observe que alguns são muito simples e outros são extremamente complexos (existe muita coisas duplicada em termos de idéia, isso porque muita gente segue essa dica que eu passei, de estudar o trabalho alheio antes de começa com o seu). Pode, por exemplo, começar com os Pipes mais populares ou ir direto ao sistema de tags ou ao motor de busca que facilita a localização de idéias específicas. Verifique que você pode "clonar" um Pipe. Isto é, copiar ele para dentro dos seus Pipes, onde poderá editar adicionar e remover elementos.

Esse é o maior ganho que o Pipes obteve com o tempo, os exemplos de terceiros. Exemplos de pessoas, que sabe-se Deus como, entenderam como o sistema funcionava e teve a brilhante e agradável idéia de compartilhar essa informação conosco através de exemplos.

Agora que você já sabe como usar os Pipes melhor do que eu, talvez esbarre em um problema: usar ele para fazer o que ? A idéia mais trivial é a que mencionei no começo do tópico. Filtrar conteúdo de feeds, mas esbarra também no problema que mencionei, é preciso levar os feeds manualmente até o Pipes (a menos que alguém saiba uma forma de contornar isso).

Depois da pergunta da Bia eu reabri o meu Pipes e vi lá o único que ainda estava na lista (que é o exemplo do Meio Bit) e comecei a pensar o que eu poderia fazer hoje. Eis que me lembrei de uma coisa que eu deixei de fazer: acompanhar links marcados com certas tags no del.icio.us. O problema de acompanhar tags, e não usuários, é que quando um link é adicionado ele é adicionado em pelo menos duas tags (com raras excessões, são muitas tags), exemplo, a home page do firefox cabe: "firefox, software, linux, windows, opensource, web, internet, navegador". Se você acompanha as tags: "firefox, software, linux, opensource, web". Você vai ver o mesmo link 5 vezes em 5 listas diferentes. Quer algo mais improdutivo ? Têm ! Haverá mais de um usuário adicionando aquele link, em tantas outras tags (quando não as mesmas e mais alguma).

Então, que tal acompanhar o del.icio.us através do Pipes ? Porque ? Simples. Entre outras coisas ele permite remover conteúdo repetido. Assim, quando o mesmo link for adicionado em 5 tags que você acompanha, você só verá o link 1 vez no seu leitor de feeds. Se mais de um usuário adicionar o feed em um intervalo menor que o "check" do Pipes você nem mesmo perceberá. Isso é muito, mas muito mais produtivo que acompanhar diretamente as tags do del.icio.us.

Como uma imagem vale mais do que mil palavras, veja a imagem abaixo que trás o esquema desse pipe (Clique na imagem para ampliar).


Ele consiste em usar três módulos. Um para capturar os feed (Fetch Feed), pode-se adicionar quantos quiser, e dois para filtrar elementos repetidos. O primeiro filtra os elementos que referenciam o mesmo link e o segundo que possuem o mesmo título. Há perdas ? Sim. Se existirem dois links com o título: "Qual é a melhor Pasta ?" forem publicados no mesmo intervalo, vai acontecer de um ser ignorado, mesmo que o conteúdo seja diferente. Da mesma forma existe ineficiência. Pequenas modificações no título unido a pequenas modificações na url (tipo ter ou não uma / no final) vai acabar passando por esses módulos. Mas a taxa de ineficiência é muito pequena (muito mesmo). E não existe ineficiência no caso de ver o mesmo link publicado em duas, três tags que você acompanha.

E para não dizer que fiquei em apenaseem uma idéia, eu sugiro voltar a idéia do filtro de conteúdo. Ele pode ser muito improdutivo se tiver que copiar todos os seus feeds atuais e passar por eles, mas e se ao invés disso você passasse todos os sites "digg-like" que você teima em acompanhar mesmo trazendo muito material repetido (entre dois serviços) e certa quantidade de links que não te interessam ?

No exemplo abaixo eu mostro como eu filtro a informação vinda do digg, do eu curti e do rec6 passando por um filtro de conteúdo do tipo mais simples (que avalia apenas o título).



O "segredo" do uso do módulo "filter" está onde você lê "any" no filtro acima. Por que ? Simples, o default é "all". Quando usando "all" é preciso que todas as regras estabelecidas abaixo sejam obedecidas para o filtro agir permitindo ou bloqueando o conteúdo referente (no caso eu escolhi "permit"). Quando se escolhe "any" apenas uma das regras listadas precisa ser satisfeita para um resultado "positivo". No exemplo acima eu monitoro das tais fontes apenas os itens cujo os títulos concordam com pelo menos uma das palavras chaves que selecionei. Um outro cuidado que se deve ter é que nem todos os feeds possuem os mesmos elementos. Ou seja, eu estou ali usando o elemento "title" comum a todos os feeds que estão em uso, mas o feed do digg tem elementos que só existem nele.

Você poderia passar por um filtro de conteúdo, depois por um filtro que elimine conteúdo repetido (cuidado apenas com esse último, pois o título tende a ter pequenas variações de um serviço para outro e seria preciso utilizar expressões regulares para uniformizar os títulos, por isso mesmo eu nem me preocupei com isso).

O Yahoo Pipes é um sistema que promete muito, mas ainda tem um longo caminho a correr para encontrar a comodidade e a popularidade que ele deseja para si. Eu ainda vejo esse sistema como um grande elefante branco. Por exemplo, pode ser muito mais fácil usar scripts comuns na internet (normalmente feitos em php ou shellscript) para coletar e filtrar o conteúdo de forma muito mais simples e privada. Claro que o Pipes economiza sua banda de rede e tem suas vantagens, mas não é tão grande quanto parece. Eu tenho esperança de que um dia eles melhorem a divulgação de como construir feeds de páginas que não possuem feeds.