Menu

Context Aware Systems and Programming

Context data is that which represents the conditions in which something exists. Borne out of earlier work on Ubiquitous and Pervasive Computing, context-aware computing represents the discipline that wishes to improve how the computer behaves based on its context. This could mean tailoring how the system operates based on user preferences, to where the user or machine is, or even what type of device that’s being used, right now.

Our interest in this subject is less from the interaction design perspective and more in line with our self-adaptive systems work. Here we are interested in exploiting context knowledge to improve systems operation. To this end we have examined two threads:

Context-Oriented Programming

Practical implementations of CA systems are typically based on bespoke implementations of context aware behaviour. This both prevents reusability of this behaviour, and makes it easier for subtle bugs and programming errors to be repeated throughout implementations of the same behaviour. Rather than accepting this is an inevitable consequence of context-awareness, we embed it into a programming language providing constructs that enable a compiler to statically verify the correctness of CA properties in code. This allows developers to develop systems that dynamically adapt while maintaining soundness. We provide composable abstract context-dependent values for functional programming with a formal grounding.

We present a framework for the adaptive delivery of context information to CA applications. The framework abstracts the applications from the sensors that provide context, and where the application defines utility functions based on the quality of context attributes that describe the context providers. Given multiple alternatives for providing the same type of context, the system can select between alternatives and choose the one with the maximum utility. By allowing applications to delegate the selection of context source to the framework we can implement self-configuration, healing and optimization. We further produce methods to combine context information taking the trustworthiness of each provider into account.