40
FHO Fachhochschule Ostschweiz Unleashing Interaction XAPI and Moodle SAMOO Meeting Luzern 12. Feb. 2016 @phish108 @htwblc

Unleashing Interaction - XAPI and Moodle

Embed Size (px)

Citation preview

Page 1: Unleashing Interaction - XAPI and Moodle

FHO Fachhochschule Ostschweiz

Unleashing Interaction XAPI and Moodle

SAMOO Meeting Luzern 12. Feb. 2016

@phish108 @htwblc

Page 2: Unleashing Interaction - XAPI and Moodle

XAPI and Moodle §  XAPI Plug-in

§  Exposes Moodle Logs as XAPI Streams (Read only LRS)

§  PowerTLA Drop-In §  Full XAPI LRS with Document Support §  Configurable User Identification §  Authorization Layer for Tools and Users §  Client-side API

my baby!

Page 3: Unleashing Interaction - XAPI and Moodle

Why do I want XAPI?

§  Document student activities (E-Portfolios) §  More flexible assessment §  Gamification §  Personalised OER §  Tool integration

LMS plugins are too complicated for building cool solutions

Page 4: Unleashing Interaction - XAPI and Moodle

Activity Activity Activity Activity Activity

Activity Streams and Statements

Context

Actor Verb

Object

Result Time Authority

UUID

Page 5: Unleashing Interaction - XAPI and Moodle

The Basic XAPI Process

Page 6: Unleashing Interaction - XAPI and Moodle

Senses learner activity

Makes VLEs respond

Sensor Networks

Page 7: Unleashing Interaction - XAPI and Moodle

Senses learner activity

Access a resource Take a test

Post on a forum

Update a Wiki page

Upload an assignment

LMS Sensors

click

scroll

comment

align

Page 8: Unleashing Interaction - XAPI and Moodle

Senses learner activity

GPS Light conditions

Display orientation Noise levels

Temperature

Tactile (shake, turn)

More Sensors

NFC

Page 9: Unleashing Interaction - XAPI and Moodle

Unlock a resource

Example Actuators

Makes VLEs respond

Evaluate test scores

Provide an assignment

Update Portfolio

Message updates

Provide feedback

Page 10: Unleashing Interaction - XAPI and Moodle

XAPI allows us to implement crazy complex learning environments

VLEDigital Library

Mobile App VLE

LRS

LRS

Sensor Network

Mobile App

LRS

Sensor Network

Mobile App

LRS

LocalSensor Network

Mobile App

LRSLocal

Sensor Network

VLE

LRS

VLE

LRS

VLE

LRS

Sensors

Output Actuators

Mobler Cards App LMS E-Portfolio System

LRS LRS LRSSensor Network

E-Portfolio System

LRS

E-Portfolio System

LRS

SCORM

Mobile App

LRS

LocalSensor Network

Simulation

LRSLocal

Sensor Network

VLE

LRS

VLE

LRS

E-Portfolio System

LRS

HR-Mangement

System

LRS

SCORM

PLE VLE

LRS

LRS

VLE

LRS

CMI /LRS

CMI /LRSContent

Interaction Script

Proxy Content

DRM

Just a few settings I toyed with

Page 11: Unleashing Interaction - XAPI and Moodle

simple is best ... XAPI & Interactive Content

Educational Resource

LRS

ActuatorSensor

Page 12: Unleashing Interaction - XAPI and Moodle

XAPI & Interactive Content

You have to code interactive resources HTML and JavaScript are mandatory

Moodle Theme

Client XAPI

Moodle UI API

Educational Resource

Resource Logic(JavaScript)

Moodle Server

Moodle Logging

API

XAPI LRS

Moodle Services

Moodle Auth API

Page 13: Unleashing Interaction - XAPI and Moodle

Educational Design and Privacy Issues with Moodle Moodle does not offer a privilege system that supports student collaboration §  Logs are tool- and teacher-centric §  Each activity can have separate privilege sets §  Privileges are not object orientated §  Privileges are agnostic towards social relations Hence, PowerTLA has no collaboration support

Page 14: Unleashing Interaction - XAPI and Moodle

A Word on SCORM-style CMI

AICC CMI (Computer Managed Instruction) New CMI-5 defines XAPI extensions and runtime requirements §  Not always smartly, but it’s mainly for aviation people …

New CMI-5 concerns no longer client APIs

Page 15: Unleashing Interaction - XAPI and Moodle

Let’s have a closer look at the PowerTLA Client XAPI

Page 16: Unleashing Interaction - XAPI and Moodle

PowerTLA Client XAPI §  Event-based API discovery §  Abstracts and exposes XAPI Logic

§  Context management §  Documents §  Provides meaningful default values

§  Actors (default: yourself) §  Objects (default: the page you’re on)

§  Long-running and nested activities

Page 17: Unleashing Interaction - XAPI and Moodle

PowerTLA Client XAPI Interfaces (WIP) lrs.setActor(actorObject)lrs.unsetActor()//ContextManagementlrs.startContext(contextObject)lrs.endContext(contextObject)lrs.clearContext()contextObject=lrs.getContext()//ActivityManagementactionUUID=lrs.startAction(verb,[objectURL])actionUUID=lrs.recordAction(verb,[objectURL],[result])lrs.finishAction(actionUUID,[result])activityStream=lrs.getStream()activityStatement=lrs.lastAction()//StateDocumentslrs.setStateDoc(actionUUID,activityStateData)activityStateData=lrs.getStateDoc(actionUUID)

lrs.ready(function())lrs.enableAutoFinish()lrs.disableAutoFinish()//LRSCommunicationlrs.fetchMyActions(filter,function(stream))lrs.fetchUserActions(filter,function(stream))lrs.fetchActions(filter,function(stream))lrs.fetchState(function(stateDoc),objectId,actionUUID,actorObject)lrs.push()lrs.pushStream()lrs.pushState()//ClientPersistencylrs.store()lrs.load()lrs.flush()

Page 18: Unleashing Interaction - XAPI and Moodle

PowerTLA turns the good old Page-Module into Activities

The magic

happens here

Page 19: Unleashing Interaction - XAPI and Moodle

Simple Interaction Tracking <pclass="clickTargetbtn-largebtn-primaryspan4"type="button">Clickhere</p><scripttype="text/javascript"src="/tla/js/rsd.js"></script><scripttype="text/javascript"src="/tla/js/lrs.js"></script><scripttype="text/javascript">varverbClick='http://xapi.ch/verb/gui/click';lrs&&lrs.ready(function(){//initsensor$(".clickTarget").click(sensorFunction);});functionsensorFunction(){lrs.recordAction(verbClick);lrs.push();}</script>

Load the PowerTLA

API

Resource Logic

Normal HTML

Page 20: Unleashing Interaction - XAPI and Moodle

Simple Interaction Tracking <pclass="clickTargetbtn-largebtn-primaryspan4"type="button">Clickhere</p><scripttype="text/javascript"src="/tla/js/rsd.js"></script><scripttype="text/javascript"src="/tla/js/lrs.js"></script><scripttype="text/javascript">varverbClick='http://xapi.ch/verb/gui/click';lrs&&lrs.ready(function(){//initsensor$(".clickTarget").click(sensorFunction);});functionsensorFunction(){lrs.recordAction(verbClick);lrs.push();}</script>

Verify that PowerTLA is available

Init the Interaction

Sensor

Record the Interaction

Tell Moodle

Our XAPI Verb

Page 21: Unleashing Interaction - XAPI and Moodle

Reusing Past Interactions varverbClick='http://xapi.ch/verb/gui/click';lrs&&lrs.ready(function(){lrs.fetchMyActions({verb:verbCLick,object:document.location.href},actuatorFunction);$(".clickTarget").click(sensorFunction);});functionactuatorFunction(){$("#myActionCount").text(lrs.getStream().length);}functionsensorFunction(){lrs.recordAction(verbClick);actuatorFunction();lrs.push();}

Fetch the personal activities from Moodle

Filter only our XAPI verb

Filter only the current page

Look at the activities

Update the actuator

Page 22: Unleashing Interaction - XAPI and Moodle

Our XAPI Click Counter Actuator

updated with every visit

Click Sensor

Page 23: Unleashing Interaction - XAPI and Moodle

The Activity Stream [{"id":"3909970f-0b50-401f-9e12-0511435b8721","timestamp":"2016-02-12T09:30:54.869Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/YTxpSdh"},"verb":{"id":"http://xapi.ch/verb/gui/click"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=51"},"stored":"2016-02-12T10:30:55+0100"},{"id":"ba0f8385-a642-499f-ab4b-3a8e4707412d","timestamp":"2016-02-12T10:48:34.900Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/YTxpSdh"},"verb":{"id":"http://xapi.ch/verb/gui/click"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=51"},"stored":"2016-02-12T11:48:35+0100"},{"id":"d17760fc-db1b-4ce6-900c-387f6a3bb24f“,"timestamp":"2016-02-12T13:52:52.711Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/YTxpSdh"},"verb":{"id":"http://xapi.ch/verb/gui/click"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=51"},"stored":"2016-02-12T14:52:51+0100"}]

Let‘s look at this statement

Page 24: Unleashing Interaction - XAPI and Moodle

The Statement more Readable { "timestamp" : "2016-02-12T09:30:54.869Z", "object" : { "id" : "https://mdl-tst.htwchur.ch/mod/page/view.php?id=51" }, "id" : "3909970f-0b50-401f-9e12-0511435b8721", "actor" : { "openid" : "https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/YTxpSdh", "objectType" : "Agent" }, "stored" : "2016-02-12T10:30:55+0100", "verb" : { "id" : "http://xapi.ch/verb/gui/click" } },

The page we looked at

PowerTLA controlled Student-ID

Our XAPI verb

All this has been generated by this JavaScript

lrs.recordAction(verbClic

k);

Student Time

Moodle Time

Page 25: Unleashing Interaction - XAPI and Moodle

Use Activities from other Resources

varverbClick='http://xapi.ch/verb/gui/click';lrs&&lrs.ready(function(){lrs.fetchMyActions({verb:verCLick,object:document.location.href},actuatorFunction);}); functionactuatorFunction(){varactivityStream=lrs.getStream();$("#myActionCount").text(activityStream.length);//wecannowanalysetheindividualobjectsintheactivityStream...}

Remove the object filter to get all clicks

Page 26: Unleashing Interaction - XAPI and Moodle

The Result are Cross Activity Analytics

Page 27: Unleashing Interaction - XAPI and Moodle

The Activity Stream [...,{"id":"3a09a0d3-471d-4d82-8213-842c37996697","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/YTxpSdh"},"verb":{"id":"http://xapi.ch/verb/gui/click"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=50"},"stored":"2016-02-11T21:43:21+0100","timestamp":"2016-02-11T20:43:21.694Z"},{"id":"3909970f-0b50-401f-9e12-0511435b8721","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/YTxpSdh"},"verb":{"id":"http://xapi.ch/verb/gui/click"},"timestamp":"2016-02-12T09:30:54.869Z","stored":"2016-02-12T10:30:55+0100","object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=51"}},...]

Click on Page 50

Click on Page 51

Page 28: Unleashing Interaction - XAPI and Moodle

Complex Interactions – Nested Activities

mainUUID=lrs.startAction(mainActionVerb);lrs.startContext({"statement":mainUUID});lrs.recordAction(nestedActionVerb);lrs.recordAction(nestedActionVerb);lrs.recordAction(nestedActionVerb);lrs.endContext({"statement":mainUUID});lrs.finishAction(mainUUID);lrs.push();

Automaticaly link all following actions to

the main activity

Wrap things up and gather the results

Page 29: Unleashing Interaction - XAPI and Moodle

Complex Interactions In Practice Brainstorming+Categorisation Activity

The activity is just 1 interactive Moodle page

Page 30: Unleashing Interaction - XAPI and Moodle

Complex Interactions In Practice Step 1: Brainstorming

Students enter their ideas

Students mark when they are

ready to proceed

Page 31: Unleashing Interaction - XAPI and Moodle

Complex Interactions In Practice Step 2: Categorisation

Student ideas are expanded with

predefined terms

Students drag&drop the ideas into

predefined categories

Students mark when they are

finshed

Page 32: Unleashing Interaction - XAPI and Moodle

Complex Interactions In Practice Step 3: Feedback

Immediate Feedback and

Results

Provided Ideas Categorisation Accuracy

Page 33: Unleashing Interaction - XAPI and Moodle

Complex Interactions In Practice Step 4: Flow-control (when visiting the page again)

Students can perform the activity

only once

Students & teachers can look

at the results

Page 34: Unleashing Interaction - XAPI and Moodle

The Activity Stream [{"id":"e3118f32-3753-4700-bb6a-4e1b5f939e13","timestamp":"2016-02-13T02:08:05.844Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/creative/ideacontribute"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/input":"ETHLET"}}},{"id":"c905bac8-89d9-470d-94e7-44ad88744e76","timestamp":"2016-02-13T02:08:10.059Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/creative/ideacontribute"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/input":"MoodleCafé"}}},{"id":"cc5f752f-7e5c-4360-91f9-d28fd1d3df43","timestamp":"2016-02-13T02:08:14.750Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/reflective/ideaassociate"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/associate":["block1","SAMOO"]}}},{"id":"3457f69f-fcf1-4bd0-b0fb-a72923b6bbd5","timestamp":"2016-02-13T02:08:16.157Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/reflective/ideaassociate"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/associate":["block2","MoodleMoots"]}}},{"id":"35010d0b-a5fd-4154-bebb-c77d79f0f448","timestamp":"2016-02-13T02:08:17.245Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/reflective/ideaassociate"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/associate":["block3","HTWBLC"]}}},{"id":"147037b6-8b0d-492e-a21a-80ff5378c774","timestamp":"2016-02-13T02:08:18.446Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/reflective/ideaassociate"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/associate":["block2","Blackboard"]}}},{"id":"ec488973-a632-4347-85a5-1a0b6aa21f96","timestamp":"2016-02-13T02:08:19.805Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/reflective/ideaassociate"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/associate":["block1","MoodlePartners"]}}},{"id":"bc396eb8-d881-4d75-ba56-21c96fb646c6","timestamp":"2016-02-13T02:08:21.069Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/reflective/ideaassociate"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/associate":["block3","ETHLET"]}}},{"id":"a87d2abb-e79d-47ed-bc69-665012077cc8","timestamp":"2016-02-13T02:08:23.212Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/reflective/ideaassociate"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/associate":["block3","MoodleUserAssociation"]}}},{"id":"2bbb7a0b-7e43-447f-addf-fabf98954033","timestamp":"2016-02-13T02:08:25.501Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/reflective/ideaassociate"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"result":{"extensions":{"http://mobinaut.io/xapi/result/associate":["block2","MoodleCafé"]}}},{"id":"b68b9c22-de8b-4b4c-b6d2-88883b291d66","timestamp":"2016-02-13T02:08:05.842Z","actor":{"objectType":"Agent","openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx"},"verb":{"id":"http://mobinaut.org/xapi/verb/creative/brainstormassign+state"},"object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"result":{"duration":"PT0H0M21S"}}]

11 activities recorded in the example

Page 35: Unleashing Interaction - XAPI and Moodle

Nested Activities from Step 1 {"id":"e3118f32-3753-4700-bb6a-4e1b5f939e13","object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"result":{"extensions":{"http://mobinaut.io/xapi/result/input":"ETHLET"}},"actor":{"openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx","objectType":"Agent"},"verb":{"id":"http://mobinaut.org/xapi/verb/creative/ideacontribute"},"timestamp":"2016-02-13T02:08:05.844Z","context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"}}

Student Input Result

Link the framing activity via its ID

The kind of activity

lrs.startContext()creates the context for all following activities

Passed to lrs.recordAction()

Page 36: Unleashing Interaction - XAPI and Moodle

Nested Activities from Step 2 {"id":"147037b6-8b0d-492e-a21a-80ff5378c774","object":{"id":"https://mdl-tst.htwchur.ch/mod/page/view.php?id=53"},"result":{"extensions":{"http://mobinaut.io/xapi/result/associate":["block2“,"Blackboard“]}},"verb":{"id":"http://mobinaut.org/xapi/verb/reflective/ideaassociate"},"actor":{"openid":"https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx","objectType":"Agent"},"context":{"statement":"b68b9c22-de8b-4b4c-b6d2-88883b291d66"},"timestamp":"2016-02-13T02:08:18.446Z"}

Categorisation Result

Link the framing activity via its ID

The kind of activity

Page 37: Unleashing Interaction - XAPI and Moodle

The Framing Activity { "result" : { "duration" : "PT0H0M21S" }, "actor" : { "openid" : "https://mdl-tst.htwchur.ch/tla/restservice/identity/profile.php/user/-FDKeRx", "objectType" : "Agent" }, "object" : { "id" : "https://mdl-tst.htwchur.ch/mod/page/view.php?id=53" }, "id" : "b68b9c22-de8b-4b4c-b6d2-88883b291d66", "verb" : { "id" : "http://mobinaut.org/xapi/verb/creative/brainstormassign+state" }, "timestamp" : "2016-02-13T02:08:05.842Z" }

The ID for the result document

The verb tells us that there is a state

document

lrs.startAction()& lrs.finishAction()

automatically produce the activity‘s duration

Page 38: Unleashing Interaction - XAPI and Moodle

The Activty State Document {"correcterms":3,"ownterms":["ETHLET","MoodleCafé"],"association":{"block1":[{"value":"SAMOO","match":1},{"value":"MoodlePartners","match":0}],"block2":[{"value":"MoodleMoots","match":0},{"value":"Blackboard","match":1},{"value":"MoodleCafé","match":0}],"block3":[{"value":"HTWBLC","match":0},{"value":"ETHLET","match":0},{"value":"MoodleUserAssociation","match":1}]}}

Assessment Result

Brainstorming Result

Correct Categorisation

Wrong Categorisation

The state document stores what the activity needs

Page 39: Unleashing Interaction - XAPI and Moodle

Conclusions §  XAPI allows us to create lightweight activities

for Moodle

§  The PowerTLA Client XAPI simplifies the activity tracking for interactive resources

§  The most complex part is the interaction design not the experience tracking

Page 40: Unleashing Interaction - XAPI and Moodle

FHO Fachhochschule Ostschweiz

Christian Glahn Blended Learning Center @phish108 @htwblc

http://www.htwchur.chhttp://xapi.ch

https://github.com/phish108/PowerTLA