# Context-Aware End-User Development Review
## 2 Background: End-User Developing Context-Aware Applications
### Context-Aware Application Development Involving End Users  
End-user empowering for application/service development has been a goal in pervasive computing [23]. An approach is to focus on end-users and involve them in the application design process [24]. User-centered design/development (UCD) is an applied framework to involve end-users in context-aware application development [25; 26]. However, modeling context (and mainly user activities) using UCD is challenging because the activity context is dynamic, implicating unfeasible management of the design/implementation (e.g., modeling all user activities). Likewise, testing is critical because it is challenging to consider all users and situations' contexts. To overcome the complexity of involving end-users in the application design process, context-aware application development targets end-users as application builders. A first approach is to model user and situation profiles and allow end-users to change fixed configurations. For example, the design of activity models regarding limited user profile/environment and fixed activities [19; 27]. The disadvantage is that this approach restricts end-users to the available parameters for personalization. Another approach is programming frameworks: mobile computing's progress also provides solutions that assist end-users in building applications. Emerging frameworks simplify complex application development, including visual programming and techniques, e.g., Apache Cordova [28] enables mobile web application development for various mobile platforms. Through plugins, it allows for managing the context of devices and integrates external services. Others are platform-specific or purpose-specific frameworks, e.g., App Inventor [29] facilitates application development for non-technological expert users. Modkit [30] uses Scratch [31; 32] for Arduino [33] (Arduino is an open-source electronics platform. It allows integrating sensors and actuators by coupling boards) to build interactive hardware projects without advanced hardware programming knowledge. Catrobat [34] is a mobile end-user programming solution inspired by Scratch for developing educational applications. The disadvantage is that most context-aware programmingframeworks require software experts (i.e., technical people) to adapt generic functionalities to targeted applications. End-user development tools are more straightforward mobile end-user tools (not frameworks) accessible to users to create personalized applications or own actions. These tools allow for using ambient resources to support user requirements. For example, [PERSON] et al. evaluated IFTTT [35] that helps to create condition \(\rightarrow\) action rules (if-then rules called Recipes) from pre-defined services available as building blocks (called Channels). In IFTTT, a diverse context can exist (called Ingredients) and depends on the available services. The IFTTT application builder tool is available on various mobile platforms and the Web. It integrates diverse channels, e.g., Facebook, Dropbox, Android device context, weather, e-mail. Users can discover, access, and contribute to collections of shared Recipes. Users can then personalize the recipes, e.g., download into Dropbox the Facebook photos where the user is tagged. [PERSON] and [PERSON] [36] analyzed three mobile tools that release the technical knowledge for programming context-aware applications: Tasker (context \(\rightarrow\) action), Atooma (if \(\rightarrow\) then), and Locale (condition [setting]. These tools incorporate user-friendly vocabulary and interaction to develop applications but limit logical operations and expressiveness. In the current era of cloud computing and the Internet of Things, EUD is also progressing. New solutions involve the integration of smart objects and cloud computing services. For example, IFTTT includes intelligent assistants and smart home provider channels such as Amazon Alexa [37] and SmartThings [38].