Alimentando Desktopcouch com Zeitgeist

Zeitgeist é um indexador de atividades, gerando informações sobre aplicações acessadas, músicas tocadas, etc.
Desktopcouch é (ou era) a parte de sincronização do Ubuntu One. Este artigo demonstra como criar uma extensão para o
Zeitgeist que alimente o Desktopcouch. Desta forma, as informações do Zeitgeist puderam ser acessadas remotamente.

[ Hits: 17.418 ]

Por: Hugo Ribeiro em 08/03/2012 | Blog: https://github.com/hugosenari/


Ontologia, as informações do Zeitgeist



Como descrito antes, o Zeitgeist é um registrador de atividades ou eventos, estes eventos são registrados como Ontologia.

Isto quer dizer, que não é simplesmente registrado o que, como e com quem aconteceu o evento, previamente o tipo de como, o quê e com quem aconteceu deve ser definido em forma de uma URI, e só então esta URI é registrada com o evento; desta forma, outras aplicações podem reutilizar esta definição para sua compreensão.

Grande parte desta definição, já foi previamente criada em outro projeto, o Nepomuk. O Zeitgeist usa esta definição por padrão, entretanto, novas podem ser criadas.

Vamos a um exemplo.

Quando um usuário recebe uma mensagem de texto via algum 'Instant Messenger', pode-se registrar um evento informando:

- O que aconteceu?
Recebi algo

Porém, é armazenado com a URI que define o 'recebido' no caso:
- Como aconteceu?
Alguém enviou

Novamente, deve conter a URI do evento 'alguém enviou':
- Quando aconteceu?
Neste momento.
Registrado com timestamp.

- Por onde?
Por uma aplicação.

Geralmente a URI do Application, no meu caso: application://pidgin.desktop

- Quais os itens envolvidos?
A Mensagem/O Texto/O Arquivo/Um e-mail...

Pode haver mais de um 'o que' no mesmo evento, posso apagar vários arquivos de uma só vez, receber várias mensagens de uma só vez, etc.

No exemplo a seguir, o usuário recebeu uma mensagem com um link, as duas informações são registradas.

No Zeitgeist, isto é chamado de 'subject'.

Passando isto para o Zeitgeist, em código PythonM:

#!/usr/bin/env python # -*- coding: utf-8 -*- from zeitgeist.client import ZeitgeistClient from zeitgeist.datamodel import Event, Interpretation, Manifestation, Subject import time event = Event.new_from_values( #oque aconteceu: recebi algo #uri http://www.zeitgeist-project.com/ontologies/2010/01/27/zg#ReceiveEvent interpretation=unicode(Interpretation.EVENT_INTERPRETATION.RECEIVE_EVENT), #como aconteceu: alguém enviou #uri http://www.zeitgeist-project.com/ontologies/2010/01/27/zg#WorldActivity manifestation=unicode(Manifestation.EVENT_MANIFESTATION.WORLD_ACTIVITY), #quando: agora timestamp= int(time.time() * 1000), #por onde: (no meu caso pidigin) #é comum indicar o .desktop da aplicação actor= 'application://pidgin.desktop', #com o que: com uma mensagem e um link #assim como o Evento, o com o que também recebe uma definição especial similar, #ser um arquivo ou uma música uma imagem subjects=[ Subject.new_for_values( #o que é isto: uma mensagem de texto #http://www.semanticdesktop.org/ontologies/2007/03/22/nmo#IMMessage interpretation=unicode(Interpretation.IMMESSAGE), #como isto existe: como parte de um software #http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#SoftwareService manifestation=unicode(Manifestation.SOFTWARE_SERVICE), #endereço único da mensagem: #se fosse um arquivo seria o endereço dele no sistema #no caso do pidgin não existe um uri para a mensagem #mas se você colocar por usuário pode posterioremente agrupar uri= 'pidgin://gtalk/fulano@gtalk.com', #local de origem: geralmente mesmo que uri/../ #se fosse um arquivo seria o diretório a cima #se fosse um site seria o domínio, ou também um diretório a cima #se fosse um subdomínio poderia ser o domínio origin='pidgin://gtalk/fulano@gtalk.com', minetype='text/plain', #onde fica: no hd, na caixa de e-mail, na internet #se for no hd pode ser o uuid do hd storage='local', #representação em texto: a própria mensagem text='a própria mensagem http://www.vivaolinux.com.br' ), Subject.new_for_values( #o que é isto: um link interpretation=unicode(Interpretation.WEBSITE), #como isto existe: como parte de WEB manifestation=unicode(Manifestation.WEB_DATA_OBJECT), #endereço único do link: uri= 'http://www.vivaolinux.com.br', #local de origem: geralmente mesmo que uri/../ origin='http://vivaolinux.com.br', minetype='text/html', #onde fica: no hd, na caixa de e-mail, na internet storage='web', #representação em texto #poderia ser novamente a uri já que geralmente não saberia o nome do site text='viva o linux' ), ] ) #instancia um client para enviar o evento zgcleint = ZeitgeistClient() zgcleint.insert_event(event)


Veja mais sobre Ontologia do Zeitgeist, na documentação de desenvolvimento.

Documentação Oficial: http://zeitgeist-project.com - Ontology

Um dos melhores posts sobre o assunto: http://www.grillbar.org/wordpress
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Ontologia, as informações do Zeitgeist
   3. Do evento Zeitgeist para o CouchDB
   4. Recuperação e Espera de Novos Eventos
   5. Juntando os pontos
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Python - Enviando Backup para Servidor Secundário

Python - Usando requests anônimos através da rede Tor

Python - Uma linguagem orientada a objetos

Python: automatizando a extração de informações na web com expressões regulares

Esteganografia e Esteganálise: transmissão e detecção de informações ocultas em imagens digitais

  
Comentários
[1] Comentário enviado por hugosenari em 09/05/2012 - 05:01h

Para quem se interessar em sincronizar isto e outras coisas (principalmente agora que ubnutu one não da mais suporte para couchdb), encontrei um servidor gratúito com couchdb https://www.alwaysdata.com/plans/shared/

Bem legal, tem outras coisas também (servidor python ...).


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts