DS106 test

This is just a test to see if DS106 rss is working

Posted in ds106 | 1 Comment

Video as product

Reading this posting on Hybrid Pedagogy recently, reminded me of some of the material on the History of the Open University website.

The OU started broadcasting on BBC2 in January 1971, originally in the early evening and on Saturday and Sunday mornings, as that’s when students were most able to watch the programmes live (and there were no property restoration shows to displace). In the 198os amd 1990s video recorders became more widespread, and in 1990 broadcasting moved to the night, with students recording programmes and watching them later – the programmes were avalable for students when convenient and a form of interaction (rewinding, pausing, etc) became possible. In the early 2000s video material began to be distrubuted to students via CD and DVD, with the last course-related broadcast made in 2006. Since 2008 video material has been made widely available via iTunesU, YouTube and Open Learn.

That history, along with Audrey Watters’ recollections, demonstrates the three Is model discussed in this report from the RECall project – image (the moving image), interactivity (pausing, rewinding) and integration (adding other tools). Watters criticisms suggests failings in the last of these, with students left feeling isolated, and her comment about the failure of community is particularly interesting. Here the OU, with tutor groups, Associate Lecturers and a long history of facilitating distance learning has an advantage.

My biggest interest is in the RECall model is the fourth I – input. The relative ease of video production and sharing afforded by current hardware (phones, cameras) and software allows us to move from the video as content model presented above (and, as Watters describes, perpetuated by MOOCs) to video as product and my interest lies in how this can help to foster the sense of community found lacking by Watters.

Posted in Uncategorized | Tagged , | Leave a comment

Yes minister

Looking at the questions in the poll used as evidence by Michael Gove to dissuade teachers in England from striking (story here: http://www.guardian.co.uk/politics/2013/jul/24/michael-gove-teachers-union-strikes, and results here: http://www.populus.co.uk/uploads/130720%20Performance%20Related%20Pay%20Results.pdf) I was reminded of this: http://youtu.be/G0ZZJXw4MTA.

Is it a coincidence that the founder of the polling company is ‘currently on leave of absence and is serving as Director of Strategy to the Prime Minister’.?

Lastly, my favourite comment under the story has a Gove-like ring to it:
‘Evidence? What of? Am I required to have “evidence” before I can have an opinion? This is another way of trying to shut down debate; you are a supporter of freedom of speech I assume?’. I might try this with my supervisor.

Posted in Uncategorized | Tagged | Leave a comment

HTML5 video analytics

I recently helped out an MSc student who, as part of his research into the ‘flipped’ classroom, wanted to look at how students interact with video ‘lectures’. HTML5 allows you to record when events (such as the user clicking play, pause, seek, etc) happen so I wrote some JavaScript that recorded these events and the times that they occurred.

The HTML5 video link is as follows:

<video id="videoplayer" width="600" height="480" controls="controls" type="video/mp4" onplay="javascript: countPlay();" onpause="javascript: countPause();" onseeking="javascript: countSeek();">
  <source id="video_id_here" type="video/mp4" src="video_file_here.mp4" /> 
<script src="video_analytics.js" type="text/javascript"></script>

A timer is set up on the user entering the page

var time = Math.round(new Date().getTime()/1000); <!--this gets the time the page was opened-->

and the timing of every video event is then recorded (by adding the time into an array). In addition, the time of each event in the video playback is recorded (again to an array). The timings of play, pause and seek events are also recorded separately, in case they are useful. One thing to note is that seek events where the user drags the play head along the timeline (rather than clicking on the timeline) record multiple events, so the code disregards any seek events that are recorded within a second of the previously recorded value (deciding on a second was pretty arbitrary, but it cuts out some uneccesary data).

The code is as follows (it includes some validation that the user has input their details – this was so we could track different users and can be deleted if not required):

<!-- the various functions called in the video player -->
<!--create some variables-->   
var fileName;   
var vfile = document.getElementById('videoplayer');
var vsrc = vfile.getElementsByTagName('source')[0];   
var videoID = vsrc.id;      
var userNameSet = new Boolean();   
userNameSet = false;   

function getUserName(){    
var userName = document.getElementById('username').value;    
userNameSet = true;    
fileName = videoID+'-'+userName+'-'+fullDate;       

var eventCount = 0;  //stores how many times any event happens   
var eventArray = new Array(); //an array to store which type of event occured   
var eventTime = new Array(); //an array to store the actual time that any event occurs   
var eventVideoTime = new Array(); //an array to store the playback time any video event occurs      

var playCount = 0;    //stores how many times play has been hit   
var playTime = new Array();  //an array to store the playback time that play was hit   
var playEventTime = new Array();  //an array to store the actual time that play was hit 
var pauseCount = 0;   //stores how many times pause has been hit   
var pauseTime = new Array(); //an array to store the playback time that pause was hit   
var pauseEventTime = new Array();  //an array to store the actual time that play was hit
var seekCount=0;  //stores how many times seek has been hit   
var seekTime = new Array(); //an array to store the playback time that seek was hit   
var seekEventTime = new Array();  //an array to store the actual time that seek was hit             

function countPlay(){        // this function adds times to the count of events and the count of plays        
if (userNameSet == false){vfile.pause();    
alert("Please input your username");}       
eventArray[eventCount] = "Play,"; //records that this was a play event     
eventTime[eventCount] = ((Math.round(new Date().getTime()/1000)-time)); <!-- gets time in seconds user has been on page when event occured and adds it to event array  -->     
eventVideoTime[eventCount] = Math.round(videoplayer.currentTime*100)/100; <!-- gets current time from video player, rounds it to 2dp and adds it to event array -->         
playCount++;  //adds one to a count everytime play is pressed     
playEventTime[playCount] = eventTime[eventCount]; <!-- gets actual time play was hit and stores it in  play array -->     
playTime[playCount] = eventVideoTime[eventCount]; <!-- gets current time from video player, rounds it to 2dp and adds it to play array -->         

function countPause(){   <!-- as above but for pause button -->        
eventArray[eventCount] = "Pause,";     
eventTime[eventCount] = ((Math.round(new Date().getTime()/1000)-time));     
eventVideoTime[eventCount] = Math.round(videoplayer.currentTime*100)/100;         
pauseCount++;     pauseEventTime[pauseCount] = eventTime[eventCount];     
pauseTime[pauseCount] = eventVideoTime[eventCount];         

function countSeek(){  <!-- as for play and pause except if there is less than 1 sec ond between events it isn't included, diue to multiple results when drag is used -->      
var seekPageTime = ((Math.round(new Date().getTime()/1000)-time)); <!-- gets time in seconds user has been on page when event occured and stores it in variable  -->     
if (seekCount==1){           <!-- if first time seek has been hit values are stored as for play and pause above-->        
eventArray[eventCount] = "Seek,";     
eventTime[eventCount] = seekPageTime;     
eventVideoTime[eventCount] = Math.round(videoplayer.currentTime*100)/100;          
seekEventTime[seekCount] = seekPageTime;          
seekTime[seekCount] = eventVideoTime[eventCount];    
var counter = seekEventTime.length-1; //get length of seek events array       
if  ((seekPageTime - seekEventTime[(seekEventTime.length-1)]) >= 1 || (seekEventTime[(seekEventTime.length-1)])- seekPageTime >=1) <!-- if current value varies by more than 1 second from last stored value    
seekEventTime[counter] = seekPageTime;     
seekTime[counter] = Math.round(videoplayer.currentTime*100)/100;               
eventArray[eventCount] = "Seek,";     
eventTime[eventCount] = ((Math.round(new Date().getTime()/1000)-time)); <!-- gets actual time event occured -->     
eventVideoTime[eventCount] = seekTime[counter]; <!-- gets current time from video player, rounds it to 2dp and adds it to array -->          

The code executes on the user leaving the page (using ‘onbeforeunload’) and outputs all of the recorded data, via a php file, to a csv file, which allows it to be analysed using Excel. The following graph, output from Excel, shows a plot of a user viewing a video with time elapsed shown on the x axis and video playback time on the y axis:


Play events are shown by a rising line, seek events by a steep rising or falling line and pause events by a flat line, so this user started watching the video at about 13 seconds on the page, got about 10 seconds into the video and then did a seek to about 36 seconds in, paused at around 75 seconds on the video timeline and did a seek back to 10 seconds and then another to 160 seconds. After playing the video for about 10 seconds they then seeked back to around 55 seconds on the timeline before leaving the page after 63 seconds.

The idea here is that, by recording students’ interactions with individual videos, we can analyse the data and look for patterns, for example, we can look for sections in the video where students go back and watch the material more than once, perhaps suggesting content that they find difficult, or parts that they choose to skip over.

Posted in Uncategorized | Tagged , , | Leave a comment