290 likes | 391 Views
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
E N D
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
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
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 7777 BaseObject server = new BaseObject(7777); // request the version number DataObject 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"); // ping String 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
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) Como usar um Context Widget Uma aplicação pode:
Como 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);
Como 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());
Como 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.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 Servers public 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 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);
Necessárias DataObject Error Attribute AttributeFunction AttributeNameValue Condition Retrieval RetrievalResults Callback Subscriber WidgetHandle Úteis Constants ContextTypes ConfigObject Configuration XMLURLReader Demais Classes
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.