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

Preview:

Citation preview

Computação Sensível a Contexto

Pesquisa desenvolvida pelo Georgia Institute of

Technology

Histórico da Computação Sensível ao Contexto 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 GeorgiaTech

O que é contexto? “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 Pode-se dividir em duas categorias

Primários (mais importantes na prática) Local Identidade Atividade Tempo

Secundários (indexados pelos primários) Telefone (derivado da identidade) Clima (derivado do local + tempo)

O que é Computação Sensível a Contexto? “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 Apresentação Execução Relacionamento

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

Widgets Aggregators Interpreters

Desenvolvido em Java

http://www.cc.gatech.edu/fce/contexttoolkit

Aplicação – In/Out Board Mostra através de

uma página Web quais professores estão dentro/fora do prédio

Utiliza o Context Toolkit

Utiliza o iButton para detectar estado

http://fire.cc.gt.atl.ga.us/inout/

Problemas – In/Out Board Ação explícita do

usuário Único ponto de

verificação Soluções

Sensores não intrusivos

Combinação de Sensores

http://www.ibutton.com

Aplicação – CybreMinder Post-it digital Entrega baseada em contexto

Quando ocorre uma situação especificada

Quando expira o limite de tempo 3 tipos de entrega

Aviso na tela E-mail SMS

Exemplos - CybreMinderSituação Linguagem

NaturalCybreMinder

Tempo 9:45 a.m. Expiration field: 9:45 a.m.Local Previsão de chuva e

Bob está saindo de casaCity=Atlanta, WeatherForecast=rainUsername=Bob, Location=Bob’s front door

Co-local Sally e seu colega estejam no mesmo local

Username=Sally, Location=*1Username=Bob, Location=*1

Complexa Preço das ações de X é maior que $50, Bob está sozinho e tem tempo livre

StockName=X, StockPrice>50Username=Bob, Location=*1Location=*1, OccupantSize=1Username=Bob, FreeTime>30

Complexa Sally está em seu escritório, tem algum tempo livre e seu amigo não está ocupado

Username=Sally, Location=Sally’s officeUsername=Sally, FreeTime=60Username=Tom, ActivityLevel=Low

Problemas - CybreMinder 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? 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

Componentes do Context Toolkit BaseObject Context Widgets Context Servers (Aggregators) Context Interpreters

Base Object 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 Construtores

public BaseObject(int serverPort); public BaseObject( String clientProtocol,

String serverProtocol,int serverPort,String clientEncoder,String serverEncoder);

Como XML e HTTP são ineficientes, é possível especificar classes que implementem outros protocolos

Como usar o Base Object// create BaseObject running on port 7777BaseObject server = new BaseObject(7777);// request the version numberDataObject dataVersion =

server.getVersion("localhost",5555,"PersonPresence_here");String versionError = new Error(dataVersion).getError();if (versionError.equals(Error.NO_ERROR)){

System.out.println("Version is:“ + (String)version.getDataObject(WPersonPresence.VERSION).getValue().firstElement();

}else {

System.out.println("Error = "+versionError);}DataObject dataPing = server.pingComponent("localhost",

5555,"PersonPresence_here");// pingString pingError = new Error(dataPing).getError();System.out.println("Ping results = "+pingError);

Context Widgets 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

assinar (subscribe) cancelar assinatura

(unsubscribe) perguntar (poll) atualizar e perguntar colocar dados

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)

Uma aplicação pode:

Como usar um Context Widget - Subscribingpublic Error subscribeTo(Handler handler,

int localPort, String localId, String remoteHost, int remotePort, String remoteId, String callback, String url, Conditions conditions, Attributes

attributes);

Como usar um Context Widget - Subscribing// create BaseObject running on port 7777BaseObject server = new BaseObject(7777); Attributes subAtts = new Attributes();subAtts.addAttribute(WPersonPresence.USERID);subAtts.addAttribute(WPersonPresence.TIMESTAMP);Conditions subConds = new Conditions();subConds.addCondition(WPersonPresence.USERID,

Storage.EQUAL,"16AC850600000044");Error error = server.subscribeTo(this, 7777, "testApp",

"localhost", 5555, "PersonPresence_here", WPersonPresence.UPDATE, "presenceUpdate",

subConds,subAtts);System.out.println("Subscription with valid

attributes/conditions: "+error6.getError());

Como usar um Context Widget - Handlerpublic DataObject handle(String callback, DataObject data)

throws InvalidMethodException, MethodException { if(callback.equals("presenceUpdate")) { AttributeNameValues atts = new AttributeNameValues(data); AttributeNameValue timeAtt =

atts.getAttributeNameValue(WPersonPresence.TIMESTAMP); String time = (String)timeAtt.getValue(); System.out.print(time+"\n"); }}

Context Servers 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 Serverspublic Server(String clientProtocol, String serverProtocol, int serverPort, String clientEncoder, String serverEncoder, String storageClass, String id, WidgetHandles widgets)

Normalmente os Servers utilizam JDBC+MySQL 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 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 InterpretersDataObject askInterpreter(String remoteHost, int remotePort, String remoteId, AttributeNameValues data)

AttributeNameValues data = new AttributeNameValues();data.addAttributeNameValue(IIButton2Name.IBUTTONID,

"ABCDEF");DataObject interpreted = askInterpreter("localhost",

8888,IIButton2Name.CLASSNAME,data);AttributeNameValues newData = new

AttributeNameValues(interpreted);System.out.println("new data is: "+newData);

Demais Classes Necessárias

DataObject Error Attribute AttributeFunction AttributeNameValue Condition Retrieval RetrievalResults Callback Subscriber WidgetHandle

Úteis Constants ContextTypes ConfigObject Configuration XMLURLReader

ToDo Básico Resource Discovery

Descoberta de sensores dada a função executada, sem especificação de host, porta, nome, etc.

Visualização Existindo o Resource Discovery, permitir a

visualização dos componentes existentes, quem se comunica, etc.

Condições Atualmente só é possível especificar as

condições com AND. Ampliar para OR e NOT

ToDo Avançado Suporte a Ambigüidade

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 Desenvolver suporte à privacidade quando

as informações de contexto transmitidas forem particulares/sensíveis.

Recommended