Computao Sensvel a Contexto Pesquisa desenvolvida pelo Georgia

  • Slides: 29
Download presentation
Computação Sensível a Contexto Pesquisa desenvolvida pelo Georgia Institute of Technology

Computação Sensível a Contexto Pesquisa desenvolvida pelo Georgia Institute of Technology

Histórico da Computação Sensível ao Contexto n n Discutida pela primeira vez em 1994

Histórico da Computação Sensível ao Contexto n n Discutida pela primeira vez em 1994 - Xerox Corporation “Software que se adapte ao local em que estiver sendo utilizado, ao conjunto de pessoas e objetos próximos, e também às mudanças deles ao longo do tempo” Active Badges da Olivetti (1992) - primeiro trabalho de pesquisa nessa área Atualmente as pesquisas mais interessantes são desenvolvidas no Georgia. Tech

O que é contexto? n n n “Contexto é qualquer informação que possa ser

O que é contexto? n n n “Contexto é qualquer informação que possa ser usada para caracterizar a situação de uma entidade” “Entidade é uma pessoa, lugar ou objeto relevante à iteração entre usuário e aplicação” Utilizando-se o contexto pode-se aumentar as formas de troca de informações entre o usuário e o computador

Categorias de Contexto n Pode-se dividir em duas categorias n Primários (mais importantes na

Categorias de Contexto n Pode-se dividir em duas categorias n Primários (mais importantes na prática) n n n Local Identidade Atividade Tempo Secundários (indexados pelos primários) n n Telefone (derivado da identidade) Clima (derivado do local + tempo)

O que é Computação Sensível a Contexto? n n “Um sistema é considerado sensível

O que é Computação Sensível a Contexto? n n “Um sistema é considerado sensível a contexto se ele utiliza o contexto para fornecer informações/serviços relevantes para o usuário” Pode suportar 3 tipos de características n n n Apresentação Execução Relacionamento

Como desenvolver uma aplicação sensível a contexto? n Context Toolkit n n Widgets Aggregators

Como desenvolver uma aplicação sensível a contexto? n Context Toolkit n n Widgets Aggregators Interpreters Desenvolvido em Java http: //www. cc. gatech. edu/fce/contexttoolkit

Aplicação – In/Out Board n n n Mostra através de uma página Web quais

Aplicação – In/Out Board n n n Mostra através de uma página Web quais professores estão dentro/fora do prédio Utiliza o Context Toolkit Utiliza o i. Button para detectar estado http: //fire. cc. gt. atl. ga. us/inout/

Problemas – In/Out Board n n n Ação explícita do usuário Único ponto de

Problemas – In/Out Board n n n Ação explícita do usuário Único ponto de verificação Soluções n n Sensores não intrusivos Combinação de Sensores http: //www. ibutton. com

Aplicação – Cybre. Minder n n Post-it digital Entrega baseada em contexto n n

Aplicação – Cybre. Minder n n Post-it digital Entrega baseada em contexto n n n Quando ocorre uma situação especificada Quando expira o limite de tempo 3 tipos de entrega n n n Aviso na tela E-mail SMS

Exemplos - Cybre. Minder Situação Linguagem Natural Cybre. Minder Tempo 9: 45 a. m.

Exemplos - Cybre. Minder Situação Linguagem Natural Cybre. Minder Tempo 9: 45 a. m. Expiration field: 9: 45 a. m. Local Previsão de chuva e Bob está saindo de casa City=Atlanta, Weather. Forecast=rain Username=Bob, Location=Bob’s front door Co-local Sally e seu colega estejam no mesmo local Username=Sally, Location=*1 Username=Bob, Location=*1 Complexa Preço das ações de X é maior que $50, Bob está sozinho e tempo livre Stock. Name=X, Stock. Price>50 Username=Bob, Location=*1, Occupant. Size=1 Username=Bob, Free. Time>30 Complexa Sally está em seu escritório, tem algum tempo livre e seu amigo não está ocupado Username=Sally, Location=Sally’s office Username=Sally, Free. Time=60 Username=Tom, Activity. Level=Low

Problemas - Cybre. Minder n n Determinação de situações é complexa Possibilidade de criação

Problemas - Cybre. Minder n n Determinação de situações é complexa Possibilidade de criação de situações que não podem ser detectadas Poucas formas de recebimento de mensagens Apesar dos resultados promissores, aparentemente o projeto foi descontinuado

O que é o Context Toolkit? n n n Conjunto de classes desenvolvidas para

O que é o Context Toolkit? n n n Conjunto de classes desenvolvidas para facilitar a criação de aplicações sensíveis ao contexto Feito em Java Utiliza o mesmo conceito de widgets para GUI’s

Estrutura do Context Toolkit

Estrutura do Context Toolkit

Componentes do Context Toolkit n n Base. Object Context Widgets Context Servers (Aggregators) Context

Componentes do Context Toolkit n n Base. Object Context Widgets Context Servers (Aggregators) Context Interpreters

Base Object n n n Utilizado como base para os demais objetos do toolkit

Base Object n n n Utilizado como base para os demais objetos do toolkit (todos são derivados do Base Object) Oferece suporte à comunicação entre componentes do toolkit e entre aplicações e componentes Normalmente aplicações criam uma instância do Base Object e os componentes são subclasses Pode funcionar tanto como cliente quanto como servidor Comunicação feita em XML utilizando HTTP como protocolo de rede

Como usar o Base Object n Construtores n n n public Base. Object(int server.

Como usar o Base Object n Construtores n n n public Base. Object(int server. Port); public Base. Object( String client. Protocol, String server. Protocol, int server. Port, String client. Encoder, String server. Encoder); Como XML e HTTP são ineficientes, é possível especificar classes que implementem outros protocolos

Como usar o Base Object // create Base. Object running on port 7777 Base.

Como usar o Base Object // create Base. Object running on port 7777 Base. Object server = new Base. Object(7777); // request the version number Data. Object data. Version = server. get. Version("localhost", 5555, "Person. Presence_here"); String version. Error = new Error(data. Version). get. Error(); if (version. Error. equals(Error. NO_ERROR)){ System. out. println("Version is: “ + (String)version. get. Data. Object(WPerson. Presence. VERSION). get. Value(). f irst. Element(); } else { System. out. println("Error = "+version. Error); } Data. Object data. Ping = server. ping. Component("localhost", 5555, "Person. Presence_here"); // ping String ping. Error = new Error(data. Ping). get. Error(); System. out. println("Ping results = "+ping. Error);

Context Widgets n n n Responsáveis por separar os detalhes dos sensores das informações

Context Widgets n n n Responsáveis por separar os detalhes dos sensores das informações geradas por eles Description – auto-descrição (tipo de contexto captado, callbacks e serviços oferecidos) Polling – devolve o estado atual Subscription – componentes podem se alistar nas funções callbacks para receberem eventos na mudança de estado do widget Storage – armazena informações históricas de contexto Services – serviços que o widget pode fornecer

Como usar um Context Widget Uma aplicação pode: n n n assinar (subscribe) cancelar

Como usar um Context Widget Uma aplicação pode: n n n assinar (subscribe) cancelar assinatura (unsubscribe) perguntar (poll) atualizar e perguntar colocar dados n n n obter lista de callbacks obter lista de atributos obter lista de serviços obter dados históricos executar serviços (síncrono e assíncrono)

Como usar um Context Widget - Subscribing public Error subscribe. To(Handler handler, int local.

Como usar um Context Widget - Subscribing public Error subscribe. To(Handler handler, int local. Port, String local. Id, String remote. Host, int remote. Port, String remote. Id, String callback, String url, Conditions conditions, Attributes attributes);

Como usar um Context Widget - Subscribing // create Base. Object running on port

Como usar um Context Widget - Subscribing // create Base. Object running on port 7777 Base. Object server = new Base. Object(7777); Attributes sub. Atts = new Attributes(); sub. Atts. add. Attribute(WPerson. Presence. USERID); sub. Atts. add. Attribute(WPerson. Presence. TIMESTAMP); Conditions sub. Conds = new Conditions(); sub. Conds. add. Condition(WPerson. Presence. USERID, Storage. EQUAL, "16 AC 850600000044"); Error error = server. subscribe. To(this, 7777, "test. App", "localhost", 5555, "Person. Presence_here", WPerson. Presence. UPDATE, "presence. Update", sub. Conds, sub. Atts); System. out. println("Subscription with valid attributes/conditions: "+error 6. get. Error());

Como usar um Context Widget - Handler public Data. Object handle(String callback, Data. Object

Como usar um Context Widget - Handler public Data. Object handle(String callback, Data. Object data) throws Invalid. Method. Exception, Method. Exception { if(callback. equals("presence. Update")) { Attribute. Name. Values atts = new Attribute. Name. Values(data); Attribute. Name. Value time. Att = atts. get. Attribute. Name. Value(WPerson. Presence. TIMESTAMP); String time = (String)time. Att. get. Value(); System. out. print(time+"n"); } }

Context Servers n n Responsáveis por agregar todo o contexto sobre uma pessoa, entidade,

Context Servers n n Responsáveis por agregar todo o contexto sobre uma pessoa, entidade, objeto ou lugar Assina todos os widgets relevantes utilizando as opções importantes para a entidade considerada Serve de mediador entre a aplicação e os widgets As aplicações devem preferencialmente se comunicar com servers do que com widgets

Como usar Context Servers public Server(String client. Protocol, String server. Protocol, int server. Port,

Como usar Context Servers public Server(String client. Protocol, String server. Protocol, int server. Port, String client. Encoder, String server. Encoder, String storage. Class, String id, Widget. Handles widgets) n Normalmente os Servers utilizam JDBC+My. SQL como mecanismo de armazenamento. Isso pode ser substituído fornecendo-se uma string com o nome da classe que implementa armazenamento no construtor.

Context Interpreters n n n Transformam uma forma de contexto em outra. Não armazenam

Context Interpreters n n n Transformam uma forma de contexto em outra. Não armazenam dados nome -> e-mail número de pessoas, direção em que olham, nível de ruído, horário -> está ou não sendo realizada uma reunião Description – fornecem uma auto-descrição (contextos de entrada e contextos de saída) Interpretation – serviço de mudança de um tipo de contexto em outro

Como usar Context Interpreters Data. Object ask. Interpreter(String remote. Host, int remote. Port, String

Como usar Context Interpreters Data. Object ask. Interpreter(String remote. Host, int remote. Port, String remote. Id, Attribute. Name. Values data) Attribute. Name. Values data = new Attribute. Name. Values(); data. add. Attribute. Name. Value(IIButton 2 Name. IBUTTONID, "ABCDEF"); Data. Object interpreted = ask. Interpreter("localhost", 8888, IIButton 2 Name. CLASSNAME, data); Attribute. Name. Values new. Data = new Attribute. Name. Values(interpreted); System. out. println("new data is: "+new. Data);

Demais Classes n Necessárias n n n Data. Object Error Attribute. Function Attribute. Name.

Demais Classes n Necessárias n n n Data. Object Error Attribute. Function Attribute. Name. Value Condition Retrieval. Results Callback Subscriber Widget. Handle n Úteis n n n Constants Context. Types Config. Object Configuration XMLURLReader

To. Do Básico n Resource Discovery n n Visualização n n Descoberta de sensores

To. Do Básico n Resource Discovery n n Visualização n n Descoberta de sensores dada a função executada, sem especificação de host, porta, nome, etc. Existindo o Resource Discovery, permitir a visualização dos componentes existentes, quem se comunica, etc. Condições n Atualmente só é possível especificar as condições com AND. Ampliar para OR e NOT

To. Do Avançado n Suporte a Ambigüidade n n Desenvolver o suporte à ambigüidade

To. Do Avançado n Suporte a Ambigüidade n n Desenvolver o suporte à ambigüidade das informações geradas pelos sensores. Permitir condensamento de informações de mais de um sensor, transmissão da precisão da informação além do contexto, etc. Segurança/Privacidade n Desenvolver suporte à privacidade quando as informações de contexto transmitidas forem particulares/sensíveis.