Tuesday, February 26, 2008

MyExperience Version 0.8.1 Released

You can download version 0.8.1 of MyExperience here. The direct link to the default download package (which does not include source code) is here.

The Release Notes
- There was a bug in NotificationForm with regards to how Snooze was handled. I rewrote NotificationAction and NotificationForm such that the snooze functionality is now handled by NotificationAction outside of the modal dialog. This is probably how it should have been from the beginning. One relevant note is that NotificationAction assumes it is being called by a thread other than the UI thread.
- Fixed a bug in the GLOBALS subsection of the MyExperience.XML file where they appropriate values were not being seen by the application.
- Wrote a hack to force the MainForm to hide. For some reason, a simple this.Hide() or this.Visible=false; call will not work in MainForm. The menubar and titlebar refuse to hide. My hack basically grabs a handle to the desktop window and forces that to the top window.
- Added menu to LoadedSensorsForm to view properties (you could do this before by pressing the select button but that was nonintuitive)
- Added ability to slightly customize the MainForm via Global settings (e.g., you can set the left menu name, you can disable the debug menus from showing, you can disable exiting the program). The end goal, however, is still to make MainForm customization a first level object in the XML file.
- Set this.ControlBox = false on all relevant forms. This takes away the (X) in the upper-right hand corner on PocketPC devices
- Minor change to RandomTimeSensor, added readonly CurrentTimeBlock property
- Fixed LogViewerForm on PocketPCs
- Fixed GlobalsForm property view issue
- Can now access running actions from the AvailableActionsForm
- Fixed NullReferenceException bug in PropertyForm
- Added MspInstantActivitySensor whose state is a tuple where the string is the currently sensed activity and the int is the confidence score (e.g., "Walking, 89" or "Bicycling, 72"). This sensor can update its activity inference four times per second.
- Added MspMessage to create a more object oriented hierarchy around the MSP string messages received over bluetooth from the MSP device.
- Added two hsa_defs.txt files which is used by the MspHumanScaleActivitySensor. This sensor, unlike MspInstantActivitySensor, applies smoothing to activity states (thus it recognizes activities at the "human scale" rather than micro scale).
- Made sure that all connections received from Roam.SqlCe.SqlCeConnectionManager were immediately closed after usage of that connection completed. On the desktop, when using SQL lib, the correct operation is to grab a SQL connection, run a sql command (or a series of sql commands) and then immediately close the connection. On the mobile, because there is no SQL connection pool, the appropriate operation is to keep connections open as long as possible. This is because opening a connection on the mobile can take 1-2 seconds. This is not efficient. Thus, in Roam (http://www.sourceforge.net/projects/roam) I implemented my own SQL connection pool, which is also thread safe. A discussion about connection pooling and SQL thread safety on the mobile can be found on my csharponphone blog at http://csharponphone.blogspot.com/2007/01/keeping-sqlceconnection-open-and-thread.html (which was written more than a year ago now)
- Added some new debug views (e.g., one for viewing SQL information, one for viewing thread information)
- Added DownloadAction that can download an artifact (e.g., music file, image, etc.) based on a provided URL. We are currently using this in UbiGreen to download images.
- Added new overloaded SaveBinaryData method to Action class that takes in a Stream (rather than a byte array)
- Updated amount of DEBUG level logging that the DatabasePopulator class outputs. This should better help us track down issues people are having when MyExperience first starts. I also added more verbse INFO level logging to the Initialize method of MyExperienceFramework, which is automatically shown on the SplashScreen.
- Updated both the AudioRecorder and the CameraWidget so that they are more immune to accidental "double click" or "double keypress" issues.
- The AudioRecorder now has a _minimumRecordTime field (this has not been exposed as a property, however)
- Added RunningSensorCount property to SensorManager
- Updated way Globals closes its SqlConnection (it checks to see if the connection was already open on the current thread before closing it)
- Fixed a bug in SendSmsAction that was causing an exception whenever the empty constructor was used
- Added SaveResult enum that ScreenShotAction, DownloadAction, and others use as their action result
- Added MspWindowActivitySensor which just uses a moving window average for smoothing
- Added refresh menu item to LoadedSensorsForm
- Added CurrentStateDuration and PreviousStateDuration properties to Sensor
- Added new Question script type: OnCreate, which executes when the question is created
- Exposed GetQuestion in SurveyEngine such that a question can call "GetQuestion()" to get a reference to itself

No comments: