Cloud Formations for Curriculum Transformation
Tech-read “Mashing up Services for Students”
Alex Lee & Steve Nisbet, Learning & Research Technology. MMUhttp://lrt.mmu.ac.uk
Why change what we do?• National Student Survey - we’ve actually asked students what they think
– Lots of things they don’t like– They Do like the IT (certainly @ MMU in the main), more tech savvy?
• Some Unsurprising results perhaps –– Don’t make me think– Do give me what I want– I want it now!
EQAL
• EQAL – Complete review of teaching, support and administration of the University. Awareness of the need for change and new tools
Considerations for a solution• Students require (recurring themes):
– Immediacy– Personalisation– Simplicity and ease in finding the information they want– A core set of vital information to help them study and take part in their course
• Research from Initial developments, lessons learned– Student Portal – Background services for WebCT (alex?)
• Identification of needs, software and partners– What do students actually need?– Who /what can best provide (sometimes – choice is limited) the information
• How can we tap into the software solutions to provide immediacy, personalisation in a seamless manner, simple for the student?
moodle.mmu.ac.uk
Core distributed VLE architecture
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence
Past PapersScanned articlesOn/off-campus media
Unit Code
Reading Lists Unit Code
Unit Code
Podcasts
Hand-ins & marksUnit Code
MMU ID
Unit Area TimetableUnit Code
MMU ID
EnrolmentsUnit Code
MMU ID
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence
provisioning
Consistent mashups for every Unit
The key Problems then…
• How do we mash it all up?– Systems often incompatible with each other– Corporate buy-in (we need that data)– Common enforced tags (student id,unit_id)– Get around the incompatibilities• XML as a transit• SSO (permissions, authorization and so on)
Services model• Separate service oriented support platform
– Eases the load on the mainline platform– Aggregates many different and occasionally incompatible database driven systems and
delivers a standard output of XML based information for consuming blocks/plugins on the mainline
– Portable data - isolated from major platform changes (should still work fine in Moodle 2 – doesn’t rely on schema changes Etc.)
– standard architecture (render anything not quite standard)– Can be used to deliver to other platforms (W2C Widgets -> phones, CMS etc)– Clear set of logs and statistics – better measurement of use– DR / resiliency potentially easier, but requires excellent network connections and hosting
(shameless ULCC plug folks!)
Service-oriented architecture
SOAP
REST
REST Podcast
Producer
REST
REST
SOAP
apis.mmu
getMoodleAreasgetMoodleAnnouncementsgetMoodleEventsgetEventsgetResourcesgetEnrolmentsgetAssessmentsgetCurriculumDetailsgetFeeStatus
REST
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence
getResources web service
SOAP
REST
REST Podcast
Producer
REST apis.mmu
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence
Individual it
ems
extra
cted fr
om
RDF & XHTML
Lists tagged with Unit code
Podcasts tagged with Unit code
Search by Unit code
returns RSS feed
of matching podcasts
Uploads tagged with Unit code
Web-service searchby Unit returns matching items
Custom block
+ To buy (3)
+ Essential (8)
+ Further (12)
+ Podcasts (4)
+ Exam papers (4)
getResources returns:Atom feed with SSO item links(item provenance maintained in source element)
getResources called with: moodle auth usermoodle course id (unit code)datetime stampsecurity token
PC Availability Web Service
Rest Web Service Overview
• Can be accessed over http in a browser• Allows focus on data!• Very quick to develop • Quick development time means innovation can happen quickly• MMU web services output data in XML, RSS, and Atom• Turns inconsistent formats into standard compliant formats• Access data around firewalls and across networks – access anywhere
REST Web Service Overview
• Can develop in a variety of languages – MMU use C# • Strict syntax – good for critical services
• What version of .NET?• Cool software or addons:• Use SoapUI to check SOAP services to consume in .NET!• LinqPad• PasteXML as XElement
Consuming RSS in Moodle Block require_once($CFG->libdir .'/rsslib.php'); require_once(MAGPIE_DIR .'rss_fetch.inc'); if (!defined('MAGPIE_OUTPUT_ENCODING')) { define('MAGPIE_OUTPUT_ENCODING', 'utf-8'); // see bug 3107 } ob_start(); $rss = fetch_rss(‘http://apis.mmu.ac.uk/Service1.svc/getResources?’.
‘getResources?person=' . $USER->id . '&unit=' . $COURSE->shortname); $rsserror = ob_get_contents(); ob_end_clean(); if ($rss === false) {
//handle error} foreach ($rss->items as $item) {
//process the RSS!}
Personalised! Tagged!
Results & Stats
• In 227 days the web services have had 6,445,204 hits
• getWebCTAreas 2,426,383• getWebCTAnnouncements 1,600,768• getFeeStatus 768,057• getPCAvailability 306,403 This is only by
widgets and My Mobile does not count My MMU getFeeEmail 3,506 (i.e. number of students who have requested full details)
Useful Links
• lrt.mmu.ac.uk/– /w2c = W2C widget developments
Questions?
•Create a new project in Visual Studio with WCF Service Application Template• Edit the config.xml file• Delete the <service> and <servicebehavoiur> nodes• Add the following code:
Creating a REST Web Service in VS2008
<service name="uk.ac.mmu.Service1" behaviorConfiguration="uk.ac.mmu.Service1Behavior"> <endpoint address="" binding="wsHttpBinding" contract="uk.ac.mmu.IService1"> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<endpointBehaviors> <behavior name="webHttp"> <webHttp/> </behavior> </serviceBehaviors></endpointBehaviors>
Create the InterfaceEdit Iservice.cs
using System.ServiceModel.Web;
[OperationContract, WebGet(UriTemplate = "getResources?person={user}&unit={unit}", ResponseFormat = WebMessageFormat.Xml)]
Rss20FeedFormatter GetResourcesRss( string user, string unit);
Reading XML – Simple Waystring token = GetMD5Hash(developer + date + sharedsecret);
egXml.Load('Service1.svc/getResources?person=' + person + 'unit=' + unit + 'developer=' + dev + 'dtm=' + date + 'token=' + token);
nsm.AddNamespace("mmu", "http://apis.mmu.ac.uk/");
XmlNodeList xnList = homeAreaXml.SelectNodes("//entry");
foreach (XmlNode xn in xnList){
//do something!}
Reading XML or RSS – The LINQ Way
var items = from item in feed.Items where true orderby item.LastUpdatedTime.Date descending select item;
foreach (SyndicationItem item in items) {
//do something!}
Outputting RSS SyndicationFeed resourcesFeed = new SyndicationFeed( "Resources for " + unit, "", null); Collection<SyndicationItem> items = new Collection<SyndicationItem>();
item = new SyndicationItem( title1 , description1, new Uri(buyItemsFeed) ); items.Add(item);item = new SyndicationItem( title2 , description2, new Uri(essentialItemsFeed) ); items.Add(item);resourcesFeed.Items = items;
//choose between outputting as RSS or AtomRss20FeedFormatter rss = new Rss20FeedFormatter(feed);
return rss;
Top Related