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: 16.969 ]

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

Gerar Códigos QRCode com Python

Reconhecimento de placas de veículos com OpenALPR

Gerar senhas seguras com Python

Breve Estudo Sobre Ransomwares e Análise Estática/Dinâmica do WannaCry

Interagindo com servidores HTTP com Python

  
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