Within the PIRAmIDE project the MoreLab Research Group has focused on two task:
Imhotep aims to ease the development of accessible and adaptable user interfaces. In order to do so, developers write code defining some preprocessor directives, taking into account both the user capabilities and the device characteristics. Then, applications can be uploaded to a repository. Finally, users will use an App Downloader to see the available applications and to download those applications compiled for them.
One of the most interesting things of Imhotep is the level of expressivity of the preprocessor directives. Developers can establish their own variables and rules such as:
IF screensize IS big AND resolution IS normal
THEN video IS high;
IF screensize IS big AND RESOLUTION IS big
THEN video IS very_high;
Where the variables, rules, and possible values of the variables are defined by the developer with the web based wizard. Furthermore, the concepts of resolution is big is created by the system taking into account the information of the mobile devices (provided by WURFL) and pondering it with their popularity (with Google Trends data).
You can find more detailed information in the Architecture section.
Imhotep is divided into 4 different modules:
The wizard is a web application that can be used by developers to play with the fuzzy values and create the proper profile and device configuration. It has been developed using Google Web Toolkit and it has been publicly deployed at:
The results of the wizard can be geolocated to improve the inference process. Below it can be seen the difference between the resolution distribution worldwide and in Japan.
The preprocessor directives define how the final source code must be generated, providing conditions for certain regions of code to be added or skipped, and adding Imhotep variables that the preprocessor will adapt for each compilation. The preprocessor identifies the directives when they start by //# in languages that support inline comments starting by //, such as Java, C# or C++, #// in languages that support inline comments starting by #, such as Python or Perl, and '// in VB.NET.
The preprocessor can avoid the compilation of fragments of code if certain conditions are matched. These conditions can include calls to functions provided by the system. Basic string and math functions are available, including lowercase, trim, contains, round or sqrt, as well as functions to check if a certain variable is available. The conditions can be embedded, as shown in the image below. The syntax of the conditions is based on the syntax used by the Python programming language.
Developers ask for user and device capabilities in these conditions. For example, one directive could state that if the user is blind the application should use a voice based interface.We have defined five categories for user capabilities that can be seen below:
In order to download applications, a client is required. We provide the App downloader, an Android mobile application, which lets users select their profile (at the moment selecting among Regular or Blind, this part should be integrated with the Capacity Tester), and the URL of the REST Server (which defaults to our sample repository). With this information, the downloader shows the applications deployed in the remote repository and lets users select a version of an application and the application will be compiled in the server and downloaded and installed by the downloader.
The PIRAmIDE REST Server is a servlet application that contains the repository of applications. Developers upload the applications to the repository, and users will get the adapted binaries. In order to deploy the PIRAmIDE REST Server, the PiramideRestServer.war must be deployed, and the build.xml script in the deploy directory must be called.
The Capacity Tester is an Android application which is a proof of concept of how the Capacity Tester should work. In order to provide complex variables such as piramide.user.font.size.min, the application will show a text in different text sizes and the user will confirm if it can be read. In the same way, different combinations of colours can cause problems, so they are tested. In the future, other types of tests, for instance testing if the user can move the mobile device as expected, should be implemented.
In order to test the system, we have published two use cases. The first one is a very simple sample developed to understand the system. Assisted City is a more complex example that shows how useful Imhotep is in a more realistic scenario.
The Piramide Simple Sample, available in the default repository, shows a different title with the user name sent by the client. The key code is the following:
String message = "default";
//# message = "${piramide.user.name}";
setTitle(message);
The results can be appreciated in the following screenshots:
This Android application allows users to search nearby interest locations, like bars, restaurants, hotels, gas stations, etc. Thanks to the Imhotep framework, AssistedCity's user interface will be adapted to the user requeriments and capabilities.
Looking at the picture bellow, you can see:
Application features:
Take a look to the available packages in the Google Code site or click on the following links to download directly the desired application:
All the versions of the available binaries and tarballs are listed and described in the Google Code site:
Imhotep is an Open Source Project (Apache License 2.0). You can find the source code in the Google Code site:
Best application in the Navigate, within the Via Inteligente awards for services oriented to citizens
This mobile app helps you enjoying services and contents at your city. It enables you to find restaurants, museums, petrol stations and so on. It will show you how to reach to all those places. Furthermore, it caters for users with special needs. It is an assistant for both people with disabilities and without them. It is written with our Imhotep framework which follows the "write once execute anywhere for any device and any user" mantra.
This work has been supported by project grant TSI-020301-2008-2 (PIRAmIDE), funded by the Spanish Ministerio de Industria, Turismo y Comercio.
Authors would also like to acknowledge the work of the Open Source software used on top of which this project was developed:
As well as other projects and services, such as