Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Cloud Formations for Curriculum Transformation<br />Tech-read “Mashing up Services for Students”<br />Alex Lee & Steve Nis...
Why change what we do?<br />National Student Survey -  we’ve actually asked students what they think<br />Lots of things t...
EQAL<br />EQAL – Complete review of teaching, support and administration of the University. Awareness of the need for chan...
Considerations for a solution<br />Students require (recurring themes):<br />Immediacy<br />Personalisation<br />Simplicit...
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence<br />Core distributed VLE architecture<br /...
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence<br />Consistent mashups for every Unit<br /...
The key Problems then…<br />How do we mash it all up?<br />Systems often incompatible with each other<br />Corporate buy-i...
Services model<br />Separate service oriented support platform<br />Eases the load on the mainline platform<br />Aggregate...
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence<br />Service-oriented architecture<br />get...
This work is licensed under a Attribution-NonCommercial-ShareAlike 2.0 licence<br />getResources web service<br />Lists ta...
PC Availability Web Service<br />
Rest Web Service Overview<br /><ul><li> 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</li></li></ul><li>REST Web Service Overview<br /><ul>...
 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</li></li></ul><li>Consuming RSS in Moodle Block<br />require_once($CFG->libdir .'/rsslib.php');<br />...
Upcoming SlideShare
Loading in …5
×

LRT MoodleMootUK11 Unconf Presentation

531 views

Published on

Describes how LRT@MMU came to understand, devise and extend various platforms with student centric data; including Moodle, W2C(http://lrt.mmu.ac.uk/w2c) Wookie Widgets,.Net,Mobile devices

Published in: Education
  • Be the first to comment

LRT MoodleMootUK11 Unconf Presentation

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

×