Wednesday, August 19, 2009

MyExperience Version 0.9.1 Released

You can download MyExperience version 0.9.1 here. This was a bug fix release.

Release Notes:
- Fixed MyExperience.Analyzer error when trying to save results from query to csv file
- Added a check in Trigger.cs to see if the user did not specify a GetSensor or GetSensorStateSnapshot--if that's the case, we now print out a warning into the log file
- Fixed "The connection is already Open" in MyExperience.Analyzer
- Fixed problem when device does not use "Storage Card" for its external storage unit, MyExperienceLog.txt file getting saved in wrong directory. Now, the MyExperienceLog.txt is always stored in \Storage Card\MyExperience as designed
- Added a few more example XML files.
- Added build.bat and create_installers.bat to create the releases (should vastly reduce time it takes to create new releases and allow other developers to create releases as well)

Thursday, June 4, 2009

MyExperience Version 0.9 Released

You can download MyExperience version 0.9 here.

The main window of the MyExperience application has been blank (pure white) since its inception. I have always planned on creating an interface here that could be customized through the MyExperience.xml file but have not yet gotten around to it. For example, this could be used by researchers to add a bar graph display that shows how many surveys have been completed and missed for the week. Although we're not to that point yet, I did add the ability to place an image in the background of the main window. See the screenshot below:

To change the background image, simply replace "front_screen.png" on your device (at \program files\myexperience). You can customize this with your own logo, instructions, or simply a calming image.

Another change of note is that the default MyExperience.xml file that is installed automatically has been greatly improved; it highlights many of the question/self-report features that make MyExperience unique.

Other changes in this release:
- Added a more comprehensive feature demo as the default MyExperience.xml file
- Fixed early timeout on PocketPC-based devices during surveys
- Fixed slight formatting issue in parameter text in questions
- Can now change the MyExperience frontpage screen by changing the image "front_screen.png"
- Updated MyExperience source base to Visual Studio 2008
- Updated MyExperience database backend from SQL Compact Edition 3.1 to SQL Compact Edition 3.5
- Updated MyExperience.Analyzer to work with SQL CE 3.0, 3.1 and 3.5 databases
- Minor update to TimeSensor. It no longer, by default, saves its state changes to the database (see the RecordStateChanges base property)
- Added two false-positive preventative measures to GsmMotionSensor: MinimumPhoneSignalStrengthThreshold and MinimumCellReadingCountThreshold. The ways this works is as follows: If you are sensed to be in motion and then either the phone signal strength drops below MinimumPhoneSignalStrengthThreshold or the number of visible cells drops below MinimumCellReadingCountThreshold, then the phone is pushed back into stationary mode and a state change is triggered. If you are already in the stationary state, nothing happens.
- Updated DatabasePopulator to throw an exception if an unknown tag is found
- Improved batch file installation routine
- Added better support for random question selection during surveys (e.g., GetRandomQuestionIds) See the Questions section of
- Fixed an array handling bug in SimkinCS
- Added WiFi support to MyExperience. MyExperience.Sensors.Wifi contains : WifiDeviceListChangedSensor : triggers every time the list of good, very good or excellent wifi routers available change
- Added location inference support (e.g., user location tracking). MyExperience.Sensors.Wifi contains : SkyhookLocationSensor : localisation using skyhook. (see
- Added CellInfoSensor.cs and NetworkConnectionSensor.cs
- Added auto-upgrade support to SQL CE database in Roam.SqlCe (see -- Roam provides many of the foundational libraries for MyExperience)

Tuesday, May 26, 2009

Project Highlight: Studying Human Activities and the Environment

The College of Architecture and Urban Planning at the University of Washington used the MyExperience tool to study the relationship between the built environment and human activities. They conducted a study using MyExperience, GPS, and a wearable sensing platform (the Intel MSP) to record the activities and locations of 53 subjects over one week. In particular, they explored:
  • what associations exist between different types of activities and different kinds of urban environments;
  • what characterizes the land use patterns where people spend long periods of time;
  • and do the properties of origins and destinations differ between short and long trips or trips made by different modes of transportation
In all, they gathered approximately 2,900 hours of data and ~2,900 surveys via the Experience Sampling Method (ESM) using MyExperience to provide self-report data about activities. MyExperience would prompt participants for a survey approximately every hour. These surveys asked questions about activity type, duration, purpose, and location.

GPS trace showing the path a person followed over several days annotated with self-report data from MyExperience. Stationary GPS points are shown in red, moving points are shown in green.

For more information on this research, see MobileSense - Sensing Modes of Transportation in Studies of the Built Environment by Jonathan Lester et al.

Tuesday, May 19, 2009

Project Highlight: Mobile Heart Health

Dr. Margaret Morris and Farzin Guilak at the Digital Health Group at Intel used the MyExperience tool to explore heart health, the physiological indicators of stress, and "active" mobile therapy (e.g., using the mobile phone to intervene during inferred times of patient stress).

From the article, "Mobile therapy—just-in-time coaching that is triggered by physiological indicators of stress—is the objective of Mobile Heart Health, an exploratory research project at Intel. The project aims to help people tune in to early signs of stress and modulate reactivity that could potentially damage their relationships and long-term health."

MyExperience Sensors
Morris used a variety of contextual MyExperience sensors to automatically assess stress level including location sensing, synchronization with calendaring applications, and a wearable ECG monitor (to track heart rate variability). The mobile therapy feedback "appear on the cell phone in response to cardiovascular signals (see Figure 1) or when the system detects contextual shifts associated with stress."

MyExperience User Interface

Morris also developed a variety of touchscreen feedback interfaces that allowed individuals to report their emotional states throughout the day. "The main mood scale was the 'Mood Map,', based on the circumplex model of emotion invites users to quickly indicate mood states according to valence and arousal (see Figure 3). These subjective reporting techniques were desirable as checks on sensors, and in their own right as brief windows for self-awareness.

To read more about this work, download the article directly here or browse the IEEE Pervasive Computing magazine that published it here.

Monday, May 11, 2009

Project Highlight: UbiGreen

The UbiGreen Mobile Transportation display was recently presented at CHI2009 in Boston, MA and is built off of the MyExperience tool. The UbiGreen Transportation Display is a prototype mobile phone application that semi-automatically senses and feeds back information about transportation behavior using the background (wallpaper) of the mobile phone (see screenshots below). In this way, the transit information is always available in a fairly casual manner so the user can see it as they use the phone for everyday purposes such as making a phone call or sending a text message. The full research paper is available here and the talk slides are available here.

The MyExperience.xml that powered it all is available for download here. Note that this file is rather large and complex as it illustrates an advanced use of MyExperience, but still could be educational for some (e.g., how the download and set wall paper actions were used).

The UbiGreen Mobile Transportation display used a variety of MyExperience Sensors, including:
  • the GsmMotionSensor to sense user movement and automatically trigger a survey after this movement subsides (e.g., when the user transitions from being mobile to being stationary).
  • UbiGreen also used MyExperience to interface with a wearable sensor (the MspSensor) that could automatically detect when the user was walking, running, or bicycling.
  • the DesktopVisibleSensor to track how often the participant could see the wallpaper
  • the DeviceIdleSensor to determine when the device was not being used by the user so we could run certain computations therby not affecting the interactivity of the device
  • a host of sensors that tracked how the participants were using their phones
UbiGreen used multiple MyExperience Actions as well:
  • the HttpPostAction was used to post sensor and ESM self-report data back to a server
  • the DownloadAction was used to download appropriate wallpaper for the participant's phones
  • the SetWallPaperAction was used to change the wallpaper of the user's phone (e.g., to a different tree or polar bear design)--remember, this was the main way that UbiGreen interfaced with its users, simply by changing the user's wallpaper
  • the SendSmsAction was used to inform the research team when an emergency was occuring with a participant's device or wearable sensor (e.g., we would receive an SMS message if it appeared that our participant was not wearing their sensors that day)
  • the RestartDeviceAction was used to force restart the device if a critical, unrecoverable error occurred
  • the SurveyAction was used to contextually-prompt the user about trip information whenever vehicle travel was inferred but could not automatically be determined (e.g., we could not automatically disambiguate car from bus travel)
  • the NotificationAction was used to alert the user that they had a self-report ESM survey waiting
Please email or add a comment to this post if you would like more information.

Tuesday, January 27, 2009

CheckBoxLists and Branching

The ability to dynamically select follow-up questions based on the user's current responses and/or sensor states is a powerful feature in MyExperience. For example, with MyExperience you might ask, "On a scale of a 1-10, how exhausted are you feeling right now (1=Not Exhausted, 10=Very Exhausted)." You could then dynamically branch to a set of questions if the participant indicates that they are exhausted (e.g., a response greater than or equal to 7).

MyExperience offers many different ways of specifying question branches from within response options to short scripts. These different methods are covered here. A common question, however, is with regards to how MyExperience and CheckBoxList branching works. CheckBoxLists allow the participant to select more than one answer, each with their own specific branch in the survey.

The CheckBoxWorkOut example (available here, see Example 1) demonstrates the power of branching with CheckBoxLists and using parameterized question text. Observe how MyExperience's branching functionality loops over each of the response options in the CheckBoxList and then finally pursues the main trunk of the survey after all branches have been exhausted. This example also highlights the usage of the special options: "All of the above" and "None of the above." Note that you must have version 0.8.2 or later to run this example.

Friday, January 16, 2009

MyExperience Version 0.8.3 Released

You can download version 0.8.2 of MyExperience here, which includes a much requested feature to be able to change font sizes of response options. See screenshot below. For more on this, see Also, special thanks to Jennifer Beaudin and the MIT House_N team for contributing so much to this release.

Other changes:
- Added Volume property to NotificationAction and PlayerAction. Gets or sets playback volume on the current wave device. 100 is full volume, 0 is silent. Set to -1 to use default volume.
- Renamed SetProperty, GetProperty and ContainsProperty to SetGlobalProperty, GetGlobalProperty, and ContainsGlobalProperty
- Added ability to specify properties for response options. See MyExperience_CustomizeQuestionLookAndFeel.xml in SampleXmlFiles
- Made a few changes to make text and countdown # more visible and readable in TimeOutForm, particularly on landscape screens, such as the HTC Dash. TimeOutUseLargeFont specified that larger text should be used to print the warning message on the TimeOut form. TitleBarText and ShowsCountInTitleBar allow customization of the text show in the title bar on survey panels.
- Added SuspendPreventer to address power management issue in PocketPC devices. Periodically uses P/Invokes methods to prevent PocketPC devices from going into suspend mode. Called from MainForm
- Add class to read values from device registry; used by KeyboardLockSensor
- Added new sensor to query the registry to monitor changes to keyboard lock status. On some devices, when a device is keyboard locked, only the device home screen is visible - even though the sound and vibration will play, MyExperience will not be in foreground and even if the user unlocks the keyboard during the notification, MyExperience will remain in the background. Uses the KeyboardLockSensor to detect a state change (user unlocks device), so that MyExperience can be put in the foreground and the notification can be restarted.
- In the NotificationForm, if Snooze is not enabled, simplify buttons to be "OK" and "Skip"; if neither Snooze or Dismiss are enabled, simplify buttons to be "OK" only (rather than disabling the Menu options)
- Added static method (Application_BringToForeground) to help force MyExperience to foreground (used in NotificationAction when keyboard unlocking event detected)
- Add property (LeftButtonText) to change text of left-button on NotificationForm (by default is "OK," but an example of a reasonable alternative might be be "Start")
- NotificationAction calls MyExperienceFramework Application_BringToFront method to ensure application comes to front in keyboard recently unlocked situations
- Added actions to hide and show the MyExperience Main form. Useful for: 1) hiding MyExperience after it is initialized on start-up (although we may want to look into hiding MyExperience completely on start-up at some point, so that even the initialization doesn't show up); 2) showing MyExperience just prior to a NotificationAction, so that the desktop is not visible between selecting OK and viewing the first survey panel. The 2nd purpose inspired the development of these Actions, as one user found the typical transition jarring.
- Added action (SelectNextQuestionAction) to determine next question to present (using Goto in the MyExperience protocol) based on a probability that any given question in a list of questions is presented. Replaces massive if-then statements from within MyExperience protocol script.
- Added method to Executable base: IsKeyboardLocked() checks the device registry to determine whether the keyboard is locked; returns true if locked, false if unlocked
- Added two properties that may be useful if using SetWallpaperAction to present images to the user that convey information, such as the status of MyExperience. Default values preserve original SetWallpaperAction procedures. UsesSimpleCopy uses File.Copy to copy the image to the wallpaper folder, bypassing resizing, transparency, and reformatting with JPEG compression. This is useful when an image includes text and can be tailored to the device screen dimensions ahead of time. ForcesRefresh is true by default. When set to false, skips step of switching to desktop and back to force the wallpaper to change. Useful if changing wallpaper when about to hide MyExperience (otherwise, jarring to switch back and forth, when going to the desktop anyway).
- Added MonitorKeyboardLock property to NotificationAction to allow protocol to specify whether to monitor the registry for change in locking status; by default, is false. I have some question about whether the registry checking may sometimes cause a phone to freeze. I haven't seen it in any of my devices, but I have received a few reports of MyExperience freezing on phones running this code. In case the registry is the cause, I have changed the feature to be optional (done only if the property is set to true in the protocol).
- Added new XML example (MyExperience_HaveUserSetRAndomStartEndTimes.XML) that demonstrates how to setup custom sensor settings based on user response
- Added properties to the MessageAction and the SurveyAction to allow a few customization options, particularly for running MyExperience with user-initiated surveys. Re-introduced AlwaysOnTop property for the SurveyAction, using the OnDeactivate method of the SurveyForm. If true (false by default), the SurveyForm will re-activate and stay on top, even if the user presses the home key or end-call key. Note that this setting may be problematic if widgets (such as the Camera/Video widget) need to be shown over the SurveyForm. Added a ShowTwoOptions property to the MessageAction to allow for left and right softkey options on that form. Also added an AlwaysOnTop property, which may be especially useful when the MessageAction is employed as an always-up form where the user can initiate survey entry. Both of these properties are false by default.