The emergence of context-aware applications, those that take into account the context of the user and environment, has shown the ability for rich interaction with the surrounding environment. Such applications prove challenging to construct and control, both for users and programmers. While a deployed application may take advantage of real-time data sensed in the environment, during development such data is often not available. It can be cumbersome and error-prone for a programmer to manually manage the access and retrieval of available data. During run-time it can be unclear how an application is configured and usually it will be difficult or impossible to change that configuration.
We are investigating approaches to mitigate these problems in context-aware application development and usage. Our objective is to establish a working and usable environment to support programmers as they build and prototype context-aware applications. This would involve developing new interaction techniques for developing applications either through a graphical user interface (GUI) or other tangible means, and an interface into a real or simulated system.
Existing low-level infrastructures promote reuse of sensors and provide heterogeneous access to environment data . Using this existing research, we are building prototyping tools that allow developers to rapidly build and simulate context aware applications with or without access to an actual instrumented environment. There are many technical challenges to be addressed in a prototyping system, ranging from a specification language, interface methods, distributed computing issues, and exposing functionality of a complex sensor-based system to programmers and end-users. The tools we are constructing integrate with rule-based primitives that manage all interaction with low-level infrastructures on behalf of an application. Rules may be inspected and modified at run-time to allow feedback and control of applications, again managed on behalf of applications with no explicit additional programming.
Our goal is to provide high-level primitives in context-aware infrastructures that will make applications easier to build, maintain, and modify by both programmers and end-users.