250 likes | 337 Views
Cloud Formations for Curriculum Transformation. Tech-read “Mashing up Services for Students”. Alex Lee & Steve Nisbet, Learning & Research Technology. MMU http://lrt.mmu.ac.uk. Why change what we do?. National Student Survey - we’ve actually asked students what they think
E N D
Cloud Formations for Curriculum Transformation Tech-read “Mashing up Services for Students” Alex Lee & Steve Nisbet, Learning & Research Technology. MMU http://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?
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence Core distributed VLE architecture news, events assessments, enrolments Exam papers, digitized materials Learning Objects resource lists timetables news, events moodle.mmu.ac.uk email, storage
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence Consistent mashups for every Unit Unit Code MMU ID Unit Area Timetable Unit Code MMU ID Hand-ins & marks Unit Code Podcasts Unit Code Reading Lists provisioning Unit Code Past Papers Scanned articles On/off-campus media Unit Code MMU ID Enrolments
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!)
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence Service-oriented architecture getMoodleAreas getMoodleAnnouncements getMoodleEvents getEvents getResourcesgetEnrolments getAssessments getCurriculumDetails getFeeStatus REST REST SOAP apis.mmu REST Podcast Producer REST SOAP REST
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence getResources web service Lists tagged with Unit code REST Individual items extracted from RDF & XHTML getResources called with: moodleauth usermoodle course id (unit code)datetime stampsecurity token Custom block + To buy (3) Uploads tagged with Unit code + Essential (8) apis.mmu + Further (12) SOAP REST + Podcasts (4) Web-service searchby Unit returns matching items + Exam papers (4) Search by Unit codereturns RSS feedof matching podcasts getResources returns:Atom feed with SSO item links(item provenance maintained in source element) Podcast Producer REST Podcasts tagged with Unit code
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 • /staff-blogs • LRT on twitter • twitter.com/MMULRT/lrtstaff
Creating a REST Web Service in VS2008 • 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:
<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 Interface Edit 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 Way string 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/"); XmlNodeListxnList = homeAreaXml.SelectNodes("//entry"); foreach (XmlNodexn in xnList) { //do something! }
Reading XML or RSS – The LINQ Way var items = from item in feed.Items where true orderbyitem.LastUpdatedTime.Date descending select item; foreach (SyndicationItem item in items) { //do something! }
Outputting RSS SyndicationFeedresourcesFeed = 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 Atom Rss20FeedFormatter rss = new Rss20FeedFormatter(feed); return rss;