Title: Computa
1Computação Sensível a Contexto
- Pesquisa desenvolvida pelo Georgia Institute of
Technology
2Histó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
3O 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
4Categorias 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)
5O 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
6Como desenvolver uma aplicação sensível a
contexto?
- Context Toolkit
- Widgets
- Aggregators
- Interpreters
- Desenvolvido em Java
http//www.cc.gatech.edu/fce/contexttoolkit
7Aplicaçã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/
8Problemas 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
9Aplicaçã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
10Exemplos - CybreMinder
Situação Linguagem Natural CybreMinder
Tempo 945 a.m. Expiration field 945 a.m.
Local Previsão de chuva e Bob está saindo de casa CityAtlanta, WeatherForecastrain UsernameBob, LocationBobs front door
Co-local Sally e seu colega estejam no mesmo local UsernameSally, Location1 UsernameBob, Location1
Complexa Preço das ações de X é maior que 50, Bob está sozinho e tem tempo livre StockNameX, StockPricegt50 UsernameBob, Location1 Location1, OccupantSize1 UsernameBob, FreeTimegt30
Complexa Sally está em seu escritório, tem algum tempo livre e seu amigo não está ocupado UsernameSally, LocationSallys office UsernameSally, FreeTime60 UsernameTom, ActivityLevelLow
11Problemas - 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
12O 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 GUIs
13Estrutura do Context Toolkit
14Componentes do Context Toolkit
- BaseObject
- Context Widgets
- Context Servers (Aggregators)
- Context Interpreters
15Base 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
16Como 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
17Como usar o Base Object
- // create BaseObject running on port 7777
- BaseObject server new BaseObject(7777)
- // request the version number
- DataObject dataVersion server.getVersion("localh
ost",5555,"PersonPresence_here") - String versionError new Error(dataVersion).getEr
ror() - if (versionError.equals(Error.NO_ERROR))
- System.out.println("Version is
(String)version.getDataObject(WPersonPresence.VERS
ION).getValue().firstElement() -
- else
- System.out.println("Error "versionError)
-
- DataObject dataPing server.pingComponent("localh
ost", 5555,"PersonPresence_here") - // ping
- String pingError new Error(dataPing).getError()
- System.out.println("Ping results "pingError)
18Context 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
19Como usar um Context Widget
Uma aplicação pode
- 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)
20Como usar um Context Widget - Subscribing
- public Error subscribeTo(Handler handler,
- int localPort,
- String localId,
- String remoteHost,
- int remotePort,
- String remoteId,
- String callback,
- String url,
- Conditions conditions,
- Attributes attributes)
21Como usar um Context Widget - Subscribing
- // create BaseObject running on port 7777
- BaseObject 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())
22Como usar um Context Widget - Handler
- public DataObject handle(String callback,
DataObject data) throws InvalidMethodException,
MethodException -
- if(callback.equals("presenceUpdate"))
-
- AttributeNameValues atts new
AttributeNameValues(data) - AttributeNameValue timeAtt atts.getAttributeNa
meValue(WPersonPresence.TIMESTAMP) - String time (String)timeAtt.getValue()
- System.out.print(time"\n")
-
23Context 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
24Como usar Context Servers
- public Server(String clientProtocol,
- String serverProtocol,
- int serverPort,
- String clientEncoder,
- String serverEncoder,
- String storageClass,
- String id,
- WidgetHandles widgets)
- Normalmente os Servers utilizam JDBCMySQL como
mecanismo de armazenamento. Isso pode ser
substituído fornecendo-se uma string com o nome
da classe que implementa armazenamento no
construtor.
25Context Interpreters
- Transformam uma forma de contexto em outra. Não
armazenam dados - nome -gt e-mail
- número de pessoas, direção em que olham, nível de
ruído, horário -gt 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
26Como usar Context Interpreters
- DataObject 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)
27Demais Classes
- Necessárias
- DataObject
- Error
- Attribute
- AttributeFunction
- AttributeNameValue
- Condition
- Retrieval
- RetrievalResults
- Callback
- Subscriber
- WidgetHandle
- Úteis
- Constants
- ContextTypes
- ConfigObject
- Configuration
- XMLURLReader
28ToDo 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
29ToDo 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.