# Context-Aware End-User Development Review
## 4 Application Building Techniques
### Demonstrate Actions  
Demonstrate actions [8; 40] refers to approaches to specifying actions by only showing the system what to do through an interface, e.g., programming by example/demonstration/rehearsal/teaching. The development tool includes functionalities to \"record\" a demonstration (e.g., sequence of events or actions), and then the application will perform accordingly. [PERSON] et al. introduced a CAPPella [41], programming by demonstration approach for building context-aware applications. The approach enables end-users to specify features by annotating relevant demonstration portions to program desired behaviors. A recording system captures data from sensors (e.g., video, microphone, RFID, phone in use) and actions from actuators (e.g., login/out, send e-mail, turn on/off a light). The recorded data are presented in an UI as a stream of information, including three parts: a video/audio player, events detected, and actions performed during the recorded session. A user can annotate the data in the UI, setting a start and end time of events, representing desired behaviors. The system then uses the annotations (of repeated recordings) as a machine learning system's training data. Then, the system recognizes \"programmed\" situations with live data and performs the specified actions. [PERSON] et al. introduced the Topiary tool [46] to prototype applications based on a location of entities (i.e., people, places, or things), e.g., a location-based tour guide. The tool includes a visual language to represent places of interest, linking people to the places. Topiary can show status (i.e., display location), find (i.e., recognize specific or nearest entity), active maps (i.e., update entity locations), trigger action (i.e., activate when in/near) and wayfinding (i.e., reach location). Topiary's scope is twofold: prototype scenarios using a storyboarding interaction for representing location contexts, and running the storyboards on mobile devices, testing the prototype by updating locations. The scenarios are captured using programming by demonstration with a resizable recording window covering the target screen. The demonstrations allow dragging entities to define spatial relationships (i.e., in, out, enters, exits), a definition of proximity regions (i.e., near), and inclusion and exclusion of entities. After being defined, the tool allows for generalizing scenarios (e.g., replacing \"a person\" with \"any person\") and editing scenarios through visual functionalities. Finally, the tool facilitates linking scenarios to create storyboards with explicit links (i.e., end-users followed actions) and implicit links (i.e., automatic actions defined in scenarios). [PERSON] et al. introduced GALLAG Strip [61], a mobile tool for building context-aware applications based on real-world tangibility--an approach that follows the programming by demonstration development style. In this approach, end-users interact with sensors and objects to create an application through physical demonstration rather than software models and representations. A server maintains a registry of sensors, and the tool presents available sensors for building applications using a comic strip metaphor. A user starts a recording mode to create a new application, and the tool waits for user actions that trigger events. The demonstration screen shows it as an action frame when existing an event (physically triggered, such as turning on the TV). The user stops the recording mode after the required events, and the tool changes to an edit mode. In edit mode, the user reviews the sequence, and the tool allows for adding response frames (e.g., an alarm message). The tool then allows starting the recording mode to add events (e.g., turn off TV) and complete the application. The tool also allows for starting the recording mode again and completing the application with additional events (e.g., turn off TV + turn off speakers). Finally, end-users can edit the final application sequence (i.e., application strip), adding time-date frames for constraining executions.