Supporting Orientation of People with Visual Impairment: Analysis of Large Scale Usage Data

Hernisa Kacorri, Sergio Mascetti, Andrea Gerino, Dragan Ahmetovic, Hironobu Takagi, Chieko Asakawa

Table of contents

iMove dataset

The iMove dataset, collected during the December 2015 - April 2016 period contains 771,975 log records across 17,624 unique user pseudo-identifiers. It is available as a MongoDB dump upon request. To obtain the data contact the developers at: info@everywaretechnologies.com. Please clearly state your affiliation and the intended use of the dataset in the request.

iMove preference semantics

Data structure of iMove logs

In the following sections we illustrate the data structure of iMove logs. iMove log records are represented as JSON objects:

{ 
    "_id" : ObjectId("5707d5889cf7fc690654be90"), 
    "appdata" : {
        "uuid" : "D7A50802-12E3-4A94-B997-995BAF841A54", 
        "voiceover" : true, 
        "device" : "iPhone7,2", 
        "lang" : "en-GB", 
        "appname" : "iMove", 
        "appversion" : "32"
    }, 
    "debug" : false, 
    "userdata" : {
        "Event" : "Entered", 
        "ScreenName" : "POIList-Around_me"
    },
    "timestamp" : {
        "utc" : ISODate("2016-04-08T16:00:06.993+0000"), 
        "user" : ISODate("2016-04-08T11:00:06.993+0000"), 
        "server" : ISODate("2016-04-08T16:00:08.222+0000")
    }
}

The main components of each record are:

App Data

Application data, data about the user and the device on which iMove is running, automatically populated by the logging library.

Timestamp

Timestamp object, contains three different timestamps:

User Data

User data, the application usage data, defined by the developer.

In iMove we partition user data in four different categories:

Each category specifies its own format for the userdata component.

Screen logs

Screen logs are generated when the user enters/exits a screen

{ 
    "userdata" : {
        "Event" : "Entered", 
        "ScreenName" : "POIList-Around_me"
    }

}

Possible values for the ScreenName property:

Action/Notification logs

Action logs are generated when users perform certain actions in the application or when the application notifies the user about a new address/POI/GeoNote.

{ 
    "userdata" : {
        "EventName" : "NewRoute", 
        "EventCategory" : "Actions", 
        "EventLabel" : "Foreground"
    }
}
{ 
    "userdata" : {
        "EventName" : "Location", 
        "EventCategory" : "Notifications", 
        "EventLabel" : "Background_VoiceOverON"
    }
}

Possible values for the EventName property:

Actions

Notifications

Preference logs

Preference logs are generated when users change the value of a preference.

{
    "userdata" : {
        "UserDefaults" : {
            "kPref_SayCity" : {
                "old" : false, 
                "new" : true
            }
        }
    }
}

The UserDefaults object contains one "preference" object for each preference key that has been changed. The preference object has two properties:

Possible keys for the preference object:

Exception logs

Exception logs can be automatically generated by the logging library when an exception occurs (catched == false) or manually raised by the programmer (catched == true)

{ 
    "userdata" : {
        "exception" : {
            "reason" : "-[__NSCFDictionary interruption:]: unrecognized selector sent to instance 0x17027fd40", 
            "name" : "NSInvalidArgumentException", 
            "catched" : false, 
            "callstack" : [
                "0   CoreFoundation                      0x000000018410c248  + 160", 
                "1   libobjc.A.dylib                     0x0000000195d800e4 objc_exception_throw + 60", 
                ...
            ]
        }
    }
}