//
This is a follow-up blog from the amazing Sean Putman, who originally guest blogged for us in March. You can read his first post here. Huge thanks to Sean for writing up these posts to share his real world-experience with the API.

We have a working LRS! Due to other projects, progress has been a little slow. Back in May, we got a couple solid weeks of time to work on the next step of being able to see what users are doing in the software and comparing that against what an expert would have done. When we left off, we were making statements but writing them to a text file. We now have a working LRS powered by a SQL database that can store the statements as they are produced by the system. So, let’s walk through a few topics here to get you up to speed on what we have done.

The Statements

Below is what the statements looked like when we were first producing them:

"actor:":{
		"objectType":"Agent",
		"name":"First Last",
		"mbox":"mailto:user@example.com"
	},
	"verb":{
		"id":"http://URI"
		"display":{
			"en-US":"interacted"
		}
	},
	"object":{
		"id":"http://automesh",
		"definition":{
			"name":{
				"en-US":"automesh"
			},
			"description":{
				"en-US":"Panel Description Goes Here"
			}
		}
	}

You can see we are missing a couple of things, namely for us the URI and the time stamp. So, the first thing we did was create the simple web page here that has our URIs for one of the verbs we are using: created.

Property Description Type
id http://www.altairhyperworks.com/training/verbs/created.htm id
name {“en-US”:”created”} Language Map
display {“en-US”:”created”} Language Map
description {en-US”:”A verb specifying that the user has created an entity from within a panel Language Map

Interacted, the other verb, was available through the ADL so we set the URL to the ADL repository.
Now that we have that set, here is what the statements looked like:

{
	"actor:":{
		"objectType":"Agent",
		"name":"",
		"mbox":"mailto:"
	},
	"verb":{
		"id":"http://adlnet.gov/expapi/verbs/interacted/"
		"display":{
			"en-US":"interacted"
		}
	},
	"object":{
		"id":"http://delete",
		"definition":{
			"name":{
				"en-US":"delete"
			},
			"description":{
				"en-US":"Panel Description Goes Here"
			}
		}
	},
	"timestamp":"2013-07-29 16:31:44"
}
{
	"actor:":{
		"objectType": "Agent",
		"name":"",
		"mbox":"mailto:"
	},
	"verb":{
		"id":"http://www.altairhyperworks.com/training/verbs/created.htm"
		"display":{
			"en-US":"created"
		}
	},
	"object":{
		"id":"http://*viewset",
		"definition":{
			"name":{
				"en-US":"*viewset"
			},
			"description":{
				"en-US":"Star Command Description Goes Here"
			}
		}
	},
	"timestamp":"2013-07-29 16:31:45"
}

You can see we are displaying the URL for the verb URI. Finally, we needed to add the timestamp. This will help us gauge how much time it takes the user to perform a task. So, in the TCL file we were able to pull the time from the computer and display it in the statement. That got us to what we think are good statements for our system. Next, we needed to store them.

The LRS

I am very fortunate to have a very good database guy that works with me. He went through the xAPI spec and made tables in the database for each item that can be written in a statement. So if we ever want to expand to store more items from the statements, we already have the infrastructure built. As I stated in the first post, we are starting small and will work our way up to more complex statements as necessary. Now that we are storing the statements, we needed to display them. We built an HTML page that will display the statements in real-time. Now as we are writing to the database, we are displaying them in the web page as you can see in the image.

 SP_tincanscreenshot

We are super excited to be at this stage where we are seeing the statements being generated real-time.

The Next Step

We are now at the point that we have distributed the TCL file to many people to start using in their day-to-day activities in the software. We feel that this will help us find the patterns that we need to build higher-level activity statements. What I mean by that is although all the clicks are great, as we compare them to one another, we get a good idea of what the user is doing. On a higher level, we can tie these click patterns into context-style activities which really starts to give us a feel for what the user is trying to do. Our first goal is certification testing using the xAPI. Comparing clicks to clicks to see if the user did the right thing. We are going to accomplish this be creating a Gantt chart of the clicks which will allow for an easy visual comparison. Our ultimate goal, to be realized in the next 4-6 weeks, is to provide recommendations to the user as they use the software. We think using the activity statements is the way to do that. Build the clicks into a pattern and use those patterns to recommend pertinent help when people need it. We would love to hear your thoughts on the path we are taking and where we are going. Stay tuned, as the next month is going to be exciting!