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:

  • App downloader: users will install this application in their mobile device to connect to the repository and download adapted applications.
  • The REST server: it contains the application repository. Once users select a desired application, the server will:
    • Use the Fuzzy Knowledge-Eliciting Reasoner to infer new values with the user and device configuration and the variables and rules established by the developer of the application.
    • Call the Preprocessor to select only the code that the final user requires.
    • Delegate the compilation of the application to the Compiler Manager. Currently the REST server only supports Android, but other compilers could be easily added.
    • Store the compiled application in the Compilation Cache, so future requests will not require to pass through the whole process if they have the same configuration values.
  • Wizard: developers will use the wizard to establish the variables and the possible values of those variables. It uses the trends database to show the different values given a concrete user and a concrete device.
  • Capacity Tester: users will need to create a user profile with their capabilities. Capacity Tester will gather those capabilities by testing them. Current application is just a proof of concept of how the Capacity Tester should work.
Imhotep architecture


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:

Piramide Application Downloader

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.

Piramide REST Server

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.

Capacity Tester

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.

Use case

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.


Simple Sample

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 = "${}";
The results can be appreciated in the following screenshots:

Assisted City

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:

  • a. The AssistedCity application adapted to blind users. Basically, it uses the Android TextToSpeech API to communicate all the menus, selections and directions to the user. It also has a graphic interface with different colors and font sizes to easy the reading.
  • b. The AssistedCity application adapted to regular users. With a more user-friendly interface (and a better good-looking) users will be driven to the selected point by using the augmented reality paradigm. As you can see in the image bellow, the distance to the point and a marker indicating its position is shown using the device camera.

Application features:

  • Tested on Android 2.1 and 2.2.
  • Camera access for viewing the street and indicate directions over the screen.
  • Internet access (WiFi or 3G) for requesting all points coordinates
  • GPS access for geolocate user's position and calculate distances between points and user's location'.

Take a look to the available packages in the Google Code site or click on the following links to download directly the desired application:

  • AssistedCity for blind users. [download]
  • AssistedCity for regular users. [download]


All the versions of the available binaries and tarballs are listed and described in the Google Code site:

Source Code

Imhotep is an Open Source Project (Apache License 2.0). You can find the source code in the Google Code site:


Via Inteligente 2012

Best application in the Navigate, within the Via Inteligente awards for services oriented to citizens

Award: Best application in the Navigate, within the Via Inteligente awards for services oriented to citizens.
Entity: Via Inteligente
Date: March 7th, 2012
Authors: Aitor Almeida, Pablo Orduña, Eduardo Castillejo, Diego López-de-Ipiña

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.


  • Aitor Almeida, Pablo Orduña, Eduardo Castillejo, Diego López-de-Ipiña, Marcos Sacristan. A method for automatic generation of fuzzy membership functions for mobile device's characteristics based on Google Trends. Computers in Human Behaviour (Journal). Impact Factor (2011): 2.293 DOI: 10.1016/j.chb.2012.06.005. March 2013. Volume 29, Issue 2. Pages 510–517. Buy online
  • Aitor Almeida, Pablo Orduña, Eduardo Castillejo, Diego López-de-Ipiña, Marcos Sacristán. Adaptative applications for heterogeneous intelligent environments. ICOST 2011: 9th International Conference on Smart Homes and Health Telematics. Montréal, Canada, June 2011. LNCS6719, Toward Useful Services for Elderly and People with Disabilities, Springer, ISBN: 978-3-642-21534-6, pp. 1-8. Download
  • Aitor Almeida, Pablo Orduña, Eduardo Castillejo, Diego Lopez-de-Ipiña, Marcos Sacristan. Imhotep: an approach to user and device conscious mobile applications Personal and Ubiquitous Computing (Journal). Springer. Impact Factor (2009): 1.554. ISSN: 1617-4909. DOI: 10.1007/s00779-010-0359-8. January 2011. Buy online
  • Aitor Almeida, Pablo Orduña, Eduardo Castillejo, Diego Lopez-de-Ipiña, Marcos Sacristan. A user-centric approach to adaptable mobile interfaces. Actas del II International Workshop of Ambient Assisted Living (IWAAL 2010), p.p. 153-160 Valencia, Spain, September 7-10, 2010 (ISBN: 978-84-92812-67-7) Download


  • Aitor Almeida (aitor.almeida[AT] [web]
  • Pablo Orduña (pablo.orduna[AT] [web]
  • Eduardo Castillejo (eduardo.castillejo[AT] [web]
  • Diego Lopez-de-Ipiña (dipina[AT] [web]
  • Marcos Sacristán (marcos.sacristan[AT] [web]


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

Validate this page here using the Markup Validator Service by the W3C