Digital examinations of the future using HTML5 Sjoerd Mulder, GOTO - - PowerPoint PPT Presentation

digital examinations of the future using html5
SMART_READER_LITE
LIVE PREVIEW

Digital examinations of the future using HTML5 Sjoerd Mulder, GOTO - - PowerPoint PPT Presentation

Digital examinations of the future using HTML5 Sjoerd Mulder, GOTO Amsterdam 24-04-2012 Front-end engineer at Orange11 Digital examinations? Central Exam System (CES) Project College voor Examens Cito: content delivery DUO: infrastructure,


slide-1
SLIDE 1

Digital examinations of the future using HTML5

Sjoerd Mulder, GOTO Amsterdam 24-04-2012 Front-end engineer at Orange11

slide-2
SLIDE 2

Digital examinations?

slide-3
SLIDE 3

Central Exam System (CES) Project

College voor Examens Cito: content delivery DUO: infrastructure, storage, logistics Orange11: end-user interface Multi-year project

Successor of the ExamenTester from Cito

Special requirements

availability, security, cross-platform, open-source

slide-4
SLIDE 4

History: Cito ExamenTester

In use since 2004 Windows desktop only

slide-5
SLIDE 5
slide-6
SLIDE 6

Requirements / features

High concurrent system, 30.000+ concurrent users No server sessions Lock-down client

slide-7
SLIDE 7

Next-generation application

Greenfield 2014+ Open standards Consistent cross-platform interface

Which technology would you choose?

Adobe Flex / Flash Microsoft Silverlight HTML5

slide-8
SLIDE 8

Technology stack

Server: Java, Java Servlet 3.0, StAX Spring MVC (REST), Freemarker Client: HTML5, SVG, CSS3, Javascript jQuery, jQuery UI RequireJS, Spine (MVC), Mustache Major part of rendering logic is done client-side

slide-9
SLIDE 9

IMS Question and Test Interoperability (QTI)

XML standard for the representation of test content and results IMS Global Learning Consortium

<orderInteraction responseIdentifier="RESPONSE" shuffle="true"> <prompt> The following F1 drivers finished on the podium in the first ever Grand Prix of Bahrain. Can you rearrange them into the correct finishin g order? </prompt> <simpleChoice identifier="A">Rubens Barrichello</simpleChoice> <simpleChoice identifier="B">Jenson Button</simpleChoice> <simpleChoice identifier="C" fixed="true">Michael Schumacher</simpleC hoice> </orderInteraction> <responseDeclaration identifier="RESPONSE" cardinality="ordered" baseType="identifier"> <correctResponse> <value>C</value> <value>A</value> <value>B</value> </correctResponse> </responseDeclaration>

slide-10
SLIDE 10

Screenshot (orderInteraction)

The following F1 drivers finished on the podium in the first ever Grand Prix of Bahrain. Can you rearrange them into the correct finishing order? Jenson Button Rubens Barrichello Michael Schumacher <responseVariable xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1" identifier="RESPONSE" cardinality="ordered" baseType="identifier" choiceSequence="DriverB DriverA DriverC"><candidateResponse> <value>DriverB</value><value>DriverA</value><value>DriverC</value> </candidateResponse></responseVariable>

slide-11
SLIDE 11

Live example (choiceInteraction)

Which of the following elements are used to form water? Carbon Helium Hydrogen Oxygen Chlorine Nitrogen <responseVariable xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1" identifier="RESPONSE" cardinality="multiple" baseType="identifier" choiceSequence="C He H O Cl N"><candidateResponse/></responseVariable>

slide-12
SLIDE 12

Let's do a short exam...

slide-13
SLIDE 13

How did we build it?

slide-14
SLIDE 14

Architecture overview

slide-15
SLIDE 15

Rendering Engine

It's more than just a script Dependency Management MVC Minimize inter-dependencies HTML = markup, CSS = styling, Javascript = logic A class shouldn't do private stuff with an other class Don't

$('<div style="border:1px solid #9f0;">Hi</div>').appendTo('.someClass ');

slide-16
SLIDE 16

RequireJS: dependency management

//main.js require(["DepA"], function callback(DepA) { //The following line will alert "Hello world" var item = new DepA('world'); }); //DepC.js define(["DepA", "DepB"], function callback(DepA, DepB){ //Do something with DepA and DepB return DepA.extend(DepB); }); //DepA.js define(function callback() { var privateProperty = "Some value never exposed"; var MyClass = function(name) { //constructor alert("Hello " + name); }; return MyClass; });

slide-17
SLIDE 17
slide-18
SLIDE 18

Spine: model view controller pattern

define(['ces-data', 'spine', 'model/notepad' ], function (data, Spine, NotepadModel) { var Notepad = Spine.Controller.sub({ elements: { "textarea": "textarea" }, events: { "keyup": "handleChange", "change": "handleChange" }, init: function() { NotepadModel.bind('refresh', this.update); NotepadModel.fetch(); }, update: function(){ if (NotepadModel.exists(data.vraagId)) { var model = NotepadModel.find(data.vraagId); this.textarea.val(model.contents); } }, handleChange: function(event) { var model = NotepadModel.getExistingOrNew(data.vraagId); model.contents = this.textarea.val(); model.save(); } }); return Notepad; });

slide-19
SLIDE 19

Notepad model

define(['spine', 'model/persistable'], function(Spine, Persistable){ var NotepadModel = Spine.Model.sub({}, { /** * Gets an existing or new record */ getExistingOrNew: function(id) { if (NotepadModel.exists(id)) { return NotepadModel.find(id) } return new NotepadModel({id: id}); } }); NotepadModel.configure("Notepad", "contents"); NotepadModel.extend(Persistable); return NotepadModel; });

slide-20
SLIDE 20

QTI Delivery Engine

define(['imsqti_v2p1/abstract/bodyElement'], function(BodyElement){ /** * The prompt element is stating the actual question, it will be * transformed into a HTML P tag * @name imsqti_v2p1.Prompt * @extends imsqti_v2p1.abstract.BodyElement */ var Prompt = BodyElement.sub(/** @lends imsqti_v2p1.Prompt.prototype */{ tag: 'p' }); return Prompt; }); <orderInteraction responseIdentifier="RESPONSE" shuffle="true"> <prompt> The following F1 drivers finished on the podium in the first ever Grand Prix of Bahrain. Can you rearrange them into the correct finishin g order? </prompt> <simpleChoice identifier="A">Rubens Barrichello</simpleChoice> <simpleChoice identifier="B">Jenson Button</simpleChoice> <simpleChoice identifier="C" fixed="true">Michael Schumacher</simpleC hoice> </orderInteraction>

slide-21
SLIDE 21

Summary

You can develop desktop-like apps in a browser Don't stop using standards and best practices An end-user interface is "that thing" people see

Treat it with respect, take it's code serious!

slide-22
SLIDE 22

The browser is a great development platform, maybe the only platform for applications in the future?

Want more information about QTI & the delivery engine? Visit our stand to view the demo, contact us at qti@orange11.nl,

  • r visit our website www.orange11.nl
slide-23
SLIDE 23