<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Total ReCal</title>
	<atom:link href="http://blog.totalrecal.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.totalrecal.org</link>
	<description></description>
	<lastBuildDate>Thu, 17 Feb 2011 11:33:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<atom:link rel='hub' href='http://blog.totalrecal.org/?pushpress=hub'/>
<cloud domain='blog.totalrecal.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Glad you like it :-)</title>
		<link>http://blog.totalrecal.org/2011/02/17/glad-you-like-it/</link>
		<comments>http://blog.totalrecal.org/2011/02/17/glad-you-like-it/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 11:33:31 +0000</pubDate>
		<dc:creator>Joss Winn</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=182</guid>
		<description><![CDATA[#TotalRecal done a cracking job on joining up systems (rapid innovation strand) &#8211; awesome calendaring system http://bit.ly/dPGEXp #jiscfsdless than a minute ago via TweetDeckandystewandystew Thanks, Andy! (Community Facilitator for the JISC Flexible Service Delivery (FSD) Programme)]]></description>
			<content:encoded><![CDATA[<p><!-- https://twitter.com/andystew/status/38029048244342784 --><br />
<style type='text/css'>.bbpBox38029048244342780 {background:url(http://a2.twimg.com/profile_background_images/65364601/Twitter-Background.png) #212121;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
<div class='bbpBox38029048244342780'>
<p class='bbpTweet'><a href="http://twitter.com/search?q=%23TotalRecal" title="#TotalRecal" class="tweet-url hashtag" rel="nofollow">#TotalRecal</a> done a cracking job on joining up systems (rapid innovation strand) &#8211; awesome calendaring system <a href="http://bit.ly/dPGEXp" rel="nofollow">http://bit.ly/dPGEXp</a> <a href="http://twitter.com/search?q=%23jiscfsd" title="#jiscfsd" class="tweet-url hashtag" rel="nofollow">#jiscfsd</a><span class='timestamp'><a title='Thu Feb 17 00:16:46 +0000 2011' href='https://twitter.com/andystew/status/38029048244342784'>less than a minute ago</a> via <a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/andystew'><img src='http://a2.twimg.com/profile_images/891847882/EKFWikJpB01e-Bnl4U9niAca7oRQj3qV3IStxc84rKo__normal.jpg' /></a><strong><a href='http://twitter.com/andystew'>andystew</a></strong><br/>andystew</span></span></p>
</div>
<p> <!-- end of tweet --></p>
<p>Thanks, Andy! (Community Facilitator for the JISC Flexible Service Delivery (FSD) Programme)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2011/02/17/glad-you-like-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rough roadmap</title>
		<link>http://blog.totalrecal.org/2011/02/10/rough-roadmap/</link>
		<comments>http://blog.totalrecal.org/2011/02/10/rough-roadmap/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 16:00:29 +0000</pubDate>
		<dc:creator>Joss Winn</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[roadmap]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=180</guid>
		<description><![CDATA[Here&#8217;s our rough roadmap (in approximate order) over the next 2/3 weeks: 1. Event/calendar sharing 2. Public calendars 3. Epic source code clean up (and source code release) 4. Properly set up http://calendar.lincoln.ac.uk 5. Integrate library return dates 6. Open to everyone (7. Rewrite OAuth/SSO to use SQL + Windows server) Future desirables (in no [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s our rough roadmap (in approximate order) over the next 2/3 weeks:</p>
<p>1. Event/calendar sharing<br />
2. Public calendars<br />
3. Epic source code clean up (and source code release)<br />
4. Properly set up http://calendar.lincoln.ac.uk<br />
5. Integrate library return dates<br />
6. Open to everyone<br />
(7. Rewrite OAuth/SSO to use SQL + Windows server)</p>
<p>Future desirables (in no specific order)</p>
<p>1) Mobile site<br />
2) Improve IE compatibility<br />
3) CalDav<br />
4) Further integrations with other services &#8211; posters.lincoln.ac.uk,  room bookings (likely to be our summer project), Jerome, etc<br />
5) Revamp and bulk up our Nucleus APIs</p>
<p>Fun, fun, fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2011/02/10/rough-roadmap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Total ReCal &#8211; the Web Application</title>
		<link>http://blog.totalrecal.org/2011/02/02/introducing-total-recal-the-web-application/</link>
		<comments>http://blog.totalrecal.org/2011/02/02/introducing-total-recal-the-web-application/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 12:37:45 +0000</pubDate>
		<dc:creator>Alex Bilbie</dc:creator>
				<category><![CDATA[The Technology]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[ARIA]]></category>
		<category><![CDATA[CalDav]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=144</guid>
		<description><![CDATA[Building on our experience from developing the Common Web Design (CWD), we present the CWDx 1.0, designed specifically for awesome web based applications. CWDx is 100% HTML5 and CSS3, includes extensive WIA-ARIA mark-up for accessibility, is Ajax driven and is wonderfully minimalistic. The application is build using the CodeIgniter 2.0 PHP framework, and uses MongoDB [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_175" class="wp-caption aligncenter" style="width: 460px"><a href="http://blog.totalrecal.org/files/2011/01/Screen-shot-2011-02-02-at-11.42.43.png"><img class="size-large wp-image-175" title="Total ReCal interface" src="http://blog.totalrecal.org/files/2011/01/Screen-shot-2011-02-02-at-11.42.43-1024x633.png" alt="" width="450" height="278" /></a><p class="wp-caption-text">Total ReCal interface</p></div>
<p>Building on our experience from developing the <a href="http://thecwd.blogs.lincoln.ac.uk/">Common Web Design</a> (<a href="http://cwd.online.lincoln.ac.uk/">CWD</a>), we present the CWDx 1.0, designed specifically for awesome web based applications.</p>
<p>CWDx is 100% HTML5 and CSS3, includes extensive WIA-ARIA mark-up for accessibility, is Ajax driven and is wonderfully minimalistic.</p>
<p>The application is build using the<a href="http://codeigniter.com"> CodeIgniter 2.0 PHP framework</a>, and uses <a href="http://mongodb.org">MongoDB</a> as the database. The front end uses <a href="http://jquery.com">jQuery</a>, <a href="http://jqueryui.com">jQuery UI</a> and a number of functions from <a href="http://phpjs.org/">PHP.js</a>.</p>
<p>The calendar itself is an amazing jQuery plugin called <a href="http://arshaw.com/fullcalendar/">FullCalendar</a> which emulates a lot of Google Calendar&#8217;s functionality.</p>
<p>Currently students can view their academic timetable and if they have any, their Blackboard assignment deadlines. Both staff and students also have their own calendar which they can write to. Everyone can subscribe to their calendar on a mobile device or in another application such as Google Calendar.</p>
<p>In the next few weeks users will have access to their library book return dates, will be able to create new calendars and share events, and we&#8217;re currently developing a <a href="http://en.wikipedia.org/wiki/Caldav">CalDav</a> system that will allow true event syncing across multiple devices and applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2011/02/02/introducing-total-recal-the-web-application/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>150 beta testers of the &#8216;My Calendar&#8217; service</title>
		<link>http://blog.totalrecal.org/2011/01/25/150-beta-testers-of-the-my-calendar-service/</link>
		<comments>http://blog.totalrecal.org/2011/01/25/150-beta-testers-of-the-my-calendar-service/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 11:36:21 +0000</pubDate>
		<dc:creator>Joss Winn</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=168</guid>
		<description><![CDATA[A significant milestone. Here&#8217;s the email that went out to 150 people who have signed up to beta test Total ReCal/My Calendar.]]></description>
			<content:encoded><![CDATA[<p>A significant milestone. Here&#8217;s the email that went out to 150 people who have signed up to beta test Total ReCal/My Calendar.</p>
<p><a href="http://blog.totalrecal.org/files/2011/01/Selection_001.png"><img class="aligncenter size-full wp-image-169" title="Beta testing email" src="http://blog.totalrecal.org/files/2011/01/Selection_001.png" alt="" width="611" height="896" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2011/01/25/150-beta-testers-of-the-my-calendar-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benefits: Administrative Staff</title>
		<link>http://blog.totalrecal.org/2011/01/14/benefits-admin-support-staff/</link>
		<comments>http://blog.totalrecal.org/2011/01/14/benefits-admin-support-staff/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 10:21:40 +0000</pubDate>
		<dc:creator>Nick Jackson</dc:creator>
				<category><![CDATA[Surveys & Analysis]]></category>
		<category><![CDATA[changes]]></category>
		<category><![CDATA[Nucleus]]></category>
		<category><![CDATA[reporting]]></category>
		<category><![CDATA[staff]]></category>
		<category><![CDATA[timetabling]]></category>
		<category><![CDATA[updating]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=152</guid>
		<description><![CDATA[Behind the academic side of the University lies an army of support and administrative staff. It&#8217;s their job to look after the bits and pieces which let the University actually function, and Total ReCal was built not only to help students and academic staff get on with their life but also to make the business [...]]]></description>
			<content:encoded><![CDATA[<p>Behind the academic side of the University lies an army of support and administrative staff. It&#8217;s their job to look after the bits and pieces which let the University actually function, and Total ReCal was built not only to help students and academic staff get on with their life but also to make the business of supporting them easier.</p>
<p>First of all, Total ReCal helps staff by making any updates to calendar information replicate around the system as rapidly as possible. Since our Nucleus events platform serves as a single source of information any updates directly on Nucleus are instantaneously reflected in views on the data, and even changes to imported data such as timetables and assessments are shown a lot faster than before. A reduced lag time between making a change and systems updating means that it&#8217;s easier to make changes and cancellations to events, and that more people are likely to be informed of those changes. For some alterations we even have change detection which can be hooked into notification systems such as text, making cancelling a lecture and notifying students a simple operation.</p>
<p>There&#8217;s also a related benefit to the rapid updating of information in that Total ReCal (or, more accurately, Nucleus) represents a single location for calendaring data, meaning that it&#8217;s a lot easier to draw on collated data. This may initially seem like a somewhat &#8216;fluffy&#8217; feature which will never be used, but with a little bit of thought it&#8217;s easy to see how it can help drive decisions. For example, we can draw pretty graphs of room usage over time and spot peaks and troughs, enabling smarter timetabling. We can detect collisions across disparate systems, reducing confusion over resource allocation. We can monitor assessment &#8216;pile-up&#8217; to help spread the workload of students more evenly. In short we gain the ability to draw up reports on just about anything in real-time.</p>
<p>Finally – and most importantly – Total ReCal will make it easier to do things the &#8216;right&#8217; way (ie by managing events centrally) rather than by groups or departments going off and doing their own thing. Where in the past things such as induction timetables were managed by departments and distributed (literally) as a gigantic Word document it&#8217;s now easier for everybody involved to just use Total ReCal and to distribute the result over My Calendar. Students can be forcibly added to calendars such as induction or exams, and our code takes care of all the hard work of making sure your events don&#8217;t collide with another. Even better, there&#8217;s no real deadline for content creation because there&#8217;s no publishing deadline. Change the event centrally and the change ripples out to all the users and other systems relying on calendar data within minutes.</p>
<p>We hope that within a year Total ReCal will have prompted students to demand that their departments use centralised timetabling and assessment deadline management, leading to a more unified, reliable, easy to use and just better looking life.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2011/01/14/benefits-admin-support-staff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benefits: Academic Staff</title>
		<link>http://blog.totalrecal.org/2011/01/10/benefits-academic-staff/</link>
		<comments>http://blog.totalrecal.org/2011/01/10/benefits-academic-staff/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 09:50:24 +0000</pubDate>
		<dc:creator>Nick Jackson</dc:creator>
				<category><![CDATA[Surveys & Analysis]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=146</guid>
		<description><![CDATA[Total ReCal is aimed most directly at the students, there&#8217;s no denying it. However, universities are complex places with more special interest groups than you can shake a stick at. We affectionately refer to these people as &#8220;academics&#8221;, and this blog post is about how Total ReCal and My Calendar will help them. One of [...]]]></description>
			<content:encoded><![CDATA[<p>Total ReCal is aimed most directly at the students, there&#8217;s no denying it. However, universities are complex places with more special interest groups than you can shake a stick at. We affectionately refer to these people as &#8220;academics&#8221;, and this blog post is about how Total ReCal and My Calendar will help them.</p>
<p>One of the main activities of academics is often teaching, be it lectures, seminars or smaller groups. At the moment we have a staff timetable which can be used to see where teaching happens, but My Calendar provides a much smoother interface to the same data. Once we&#8217;re sure the basic functionality is in place we can then go a step further, giving the academic access to information such as attendee lists directly from within the application. It&#8217;s a small thing, but we think it&#8217;s helpful.</p>
<p>Another big thing that we&#8217;ve heard time and time again from academics is that they very easily forget to return library books. In an ideal world everybody would jot down due dates in their calendar, but when you&#8217;re trying to manage everything else it just isn&#8217;t practical. My Calendar will solve this by making book due dates seamlessly available from the same place, automatically taking into account renewals. We&#8217;ll even put a &#8216;renew it now&#8217; button straight in the calendar for the times when you just can&#8217;t be bothered walking to the library to return a text.</p>
<p>&#8220;But wait,&#8221; I hear you cry. &#8220;Academics don&#8217;t have time to visit yet another website to see things, otherwise these problems wouldn&#8217;t exist.&#8221; Well, we&#8217;ve solved that as well. My Calendar also sports industry-standard iCalendar outputs for everything, making it a breeze to load information straight into the calendaring tool of your choice and keep it updated with zero effort. Almost all smartphones support it, and the vast majority of desktop calendaring applications do as well. We&#8217;ll be providing in-depth instructions on how to get yourself synchronised at launch time.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2011/01/10/benefits-academic-staff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benefits: The Student Side</title>
		<link>http://blog.totalrecal.org/2011/01/06/benefits-the-student-side/</link>
		<comments>http://blog.totalrecal.org/2011/01/06/benefits-the-student-side/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 15:54:26 +0000</pubDate>
		<dc:creator>Nick Jackson</dc:creator>
				<category><![CDATA[Surveys & Analysis]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[benefits]]></category>
		<category><![CDATA[students]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=147</guid>
		<description><![CDATA[As Total ReCal nears completion, we&#8217;re preparing to open the beta to our pilot group and I&#8217;m starting to throw together our promotional materials it&#8217;s time to start writing up bits and pieces of our analysis. Contrary to popular belief this isn&#8217;t an incredibly dry, boring process which will make you all want to cry [...]]]></description>
			<content:encoded><![CDATA[<p>As Total ReCal nears completion, we&#8217;re preparing to open the beta to our pilot group and I&#8217;m starting to throw together our promotional materials it&#8217;s time to start writing up bits and pieces of our analysis. Contrary to popular belief this isn&#8217;t an incredibly dry, boring process which will make you all want to cry but a chance to show you just how damn cool this is going to be, how it will make life easier, and how the work we&#8217;ve done can help other institutions up and down the country to drag themselves out of the mire of multiple calendaring systems. First in line: how Total ReCal will benefit students at the University of Lincoln.</p>
<p>In the past, students at Lincoln have used a wide variety of different systems to organise their lives. It&#8217;s not uncommon throughout the course of a year to have an induction/reinduction timetable, your academic timetable (which changes regularly), an exam timetable (or two), a list of assessment deadlines, a calendar of meetings with seminar groups or tutors, book due dates, club or society events you want to attend, guest lectures, skills training timetables, a list of gigs you want to see at the Engine Shed and a personal calendar on top of all that. With tens of different systems all trying to tell you when and where you need to be it&#8217;s far to easy to miss something or double book yourself. The consequences of mucking up your calendar can range from the mildly annoying through to putting your degree at risk.</p>
<p>Total ReCal (or, as we&#8217;re naming it for Lincoln, My Calendar) is the first step towards tidying up some of this mess by dragging as many of these systems as we can together into one. The benefits of this unification are readily apparent, when the University moved exam timetables from a single massive schedule into personal timetables the response was overwhelmingly positive. Even small reductions in the number of disparate systems which are required are welcomed with open arms by a student body who are increasingly overwhelmed by the sheer volume of information they are presented with. The reasoning why is simple – it&#8217;s a lot harder to miss something important if everything is kept in one place.</p>
<p><span id="more-147"></span>There&#8217;s another massive benefit to My Calendar as well: the ability to subscribe to your calendar and any changes using any method which supports the industry standard iCalendar format. This is used by almost everything which tries to share calendar information, and allows students to seamlessly and effortlessly import their University calendar into whatever they use to organise their personal lives. Windows Live Calendar, Google Calendar, Outlook, iCal and more desktop applications have support built right in. Even better, so do Android phones, Windows Phone 7 handsets, iPhones and many more smartphones. This means that straight out of the box there is a large portion of the student body who can keep their academic timetable, due dates and more right where they want them. Our initial user survey shows that a large portion of students own either a compatible smartphone or something such as an iPod Touch (which also supports the standard), and that a similarly sized chunk goes to the effort of transcribing their academic timetable into whatever they use to manage their time.</p>
<p>My Calendar also features our fanatical dedication to usability, and as a result is built to not only look easy on the eye but also to work happily alongside assistive technologies or on small screens. This is a distinct benefit over the present systems, which variously don&#8217;t work on some browsers, aren&#8217;t assistive technology friendly, require the user to be on a PC or are just plain ungainly to use. We&#8217;re also working alongside various groups and people from around the University to ensure we keep up to date with the latest in usability, and have some intensive testing lined up to make sure it&#8217;s as simple and friendly to use as possible. We hope that this &#8216;pick up and go&#8217; approach will let students find their feet as far as timetabling goes a lot faster than at the moment, by presenting a more familiar interface to calendars. Once they&#8217;re happy with the system, it then goes a step further by allowing customisation of exactly what&#8217;s displayed and how.</p>
<p>That&#8217;s about it for the student benefits which we perceive, although it&#8217;s likely that more will appear as people find new and exciting ways to use the service. Stay tuned for how Total ReCal and My Calendar will benefit staff, both those using it for time management and those on the administrative side.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2011/01/06/benefits-the-student-side/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This isn&#8217;t your grandmother&#8217;s API permissions control layer&#8230;</title>
		<link>http://blog.totalrecal.org/2010/11/26/this-isnt-your-grandmothers-api-permissions-control-layer/</link>
		<comments>http://blog.totalrecal.org/2010/11/26/this-isnt-your-grandmothers-api-permissions-control-layer/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 14:44:27 +0000</pubDate>
		<dc:creator>Nick Jackson</dc:creator>
				<category><![CDATA[Design & Planning]]></category>
		<category><![CDATA[The Technology]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Nucleus]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[permissions]]></category>
		<category><![CDATA[rate limit]]></category>
		<category><![CDATA[reliability]]></category>
		<category><![CDATA[scopes]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[tokens]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=138</guid>
		<description><![CDATA[I&#8217;m guessing your grandmother probably didn&#8217;t have an API permissions control layer, but if she did this wouldn&#8217;t be it. This post is mostly about Nucleus, our name for the storage layer which drives the Total ReCal components. The only way to communicate with Nucleus is over our RESTful API. This comes as somewhat of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m guessing your grandmother probably didn&#8217;t have an API permissions control layer, but if she did this wouldn&#8217;t be it.</p>
<p>This post is mostly about Nucleus, our name for the storage layer which drives the Total ReCal components. The only way to communicate with Nucleus is over our RESTful API. This comes as somewhat of a shock to some people who believe that the way to move data around is a batch script with direct database access, but I digress&#8230;</p>
<p>What I&#8217;m going to try to do here is summarise just how epically confusing our permissions handling system for Nucleus is, mostly for the benefit of Alex and myself who (over the next week or so) will be trying to implement this layer without breaking anything important. It&#8217;s really, really essential that we get this done before we start promoting the service because of a few simple reasons:</p>
<ul>
<li>Data security is important, and we don&#8217;t want anybody being able to read everything without permission.</li>
<li>Data security is important, and we don&#8217;t want anybody being able to write all over the place without permission.</li>
<li>Changing this kind of thing on a live service is like trying to change the engine block on a Formula 1 car whilst it&#8217;s racing.</li>
<li>We need to be able to guarantee the system can hold up to DoS attacks or runaway processes hammering the APIs.</li>
<li>People are already asking for access to this data for important things, like their final year projects.</li>
</ul>
<p>So, where to go from here? Let&#8217;s take a look at everything which will be going on in the finished version.</p>
<h3>Server Rate Limiting</h3>
<p>Even before the Nucleus code kicks in, the server is fine-tuned to avoid overloading from any IP address or hostname. Using a combination of the OS firewall and the web server configuration overall request rates and bandwidth usage is kept below thresholds to ensure that the server is never overloaded. Due to the RESTful nature of the API (in which each request <em>must</em> represent a complete transaction) we have no requirement to ensure server affinity, so if the load gets too heavy we can easily scale horizontally using pretty much any load balancer.</p>
<p>To keep the pipes clear for our &#8216;essential&#8217; services we do maintain a whitelist of IPs which have higher (but still not uncapped) limits.</p>
<h3>Key Based Access</h3>
<p>The only way to access any data in Nucleus is with an access token, issued by our OAuth system. These come in two flavours, either a user token (which grants permission for a specific user), or an autonomous token (which is issued at an application level, and is &#8216;anonymous&#8217;). The very first thing that happens with any request is that the token it gives is validated. No token, no access. Invalid token, no access. Revoked token, no access. To keep things nice and fast we store the token lookup table in memory with a cache of a few minutes, since most requests occur in &#8216;bursts&#8217;.</p>
<p><span id="more-138"></span><br />
<h3>Key Rate Limiting</h3>
<p>Key Rate Limiting Rate limiting is an important part of keeping things going. Unlike the server-based rate limiting which affects IP addresses and hostnames, key based limitation prevents one application or user from going overboard with their requests. Each key is limited to a certain volume of requests per hour, the exact volume varying depending on the type of key. Individual user keys have relatively few, through to whitelisted internal applications which have extremely high caps.</p>
<p>Like Twitter we&#8217;re also implementing smart rate limiting, which will globally reduce API limits in times of unusually high demand such as freshers&#8217; week. We&#8217;d rather that everybody can access some data than nobody can access any. To give people an idea what&#8217;s going on all responses will include information on how many requests per hour they&#8217;re allowed and how many they&#8217;ve used, letting applications &#8216;budget&#8217; accordingly.</p>
<h3>Scoping</h3>
<p>Scoping is the next level of permissions, now that we&#8217;ve made sure the system making the request isn&#8217;t abusing the system and has a valid token. Scoping is quite hard to wrap your brain around, but once you&#8217;ve got it then it makes a lot of sense. In short, access tokens are given &#8216;scopes&#8217; which define the type of data they&#8217;re allowed to ask for, but not necessarily what within that scope they are allowed to subsequently access. This means, for example, that a user can grant an application permission to look at their events but not other data such as their contact details. When an application is registered with us we decide which scopes are valid for its autonomous token, and when a user grants permission using OAuth they are clearly told which scopes the application is asking for. After all, you don&#8217;t want an automatic book renewing application being able to take a look at your home contact address.</p>
<p>Every request to Nucleus exists within a scope, and we make sure that the access token which is given actually has permission to access that scope of data. In the case of events we have a variety of scopes including public (just the name, start/end times and location of events in publicly timetabled spaces), basic (the same details, but including personal events as well) and full (The whole set of data, including things like attendee lists for lectures). There are also some scopes governing if a key is valid to write events, making sure that an application designed to give you a nice calendar view can&#8217;t instead fill your schedule with rubbish.</p>
<h3>Object Permissions</h3>
<p>Now we&#8217;re getting into the meat and potatoes of permissions, designed to simultaneously give the ability to set sweeping permissions at a high level and really, really accurate permissions at the object level. Permissions are similar to scopes in that there is a predefined list, but they differ in that they tell Nucleus how any given key can interact with any specific object. They are used to make sure that one user can&#8217;t go fiddling with another&#8217;s data, or to stop a runaway application from accidentally overwriting data it doesn&#8217;t own.</p>
<p>As an example, an application designed to show your upcoming events would have passed rate limiting, had its key validated, and been checked to have the &#8216;basic&#8217; scope to read events. Object permissions say <em>which</em> of those events it can actually see, and this is where it gets really complicated.</p>
<h4>Global Type Permissions</h4>
<p>Some permissions are granted for every single object of a given type (such as every event), and these are known as global type permissions. An example is the &#8216;inherent&#8217; permissions which are available to any valid key within the scope, such as the ability to read public data.</p>
<p>We can grant global type permissions either to all keys (a &#8216;universal&#8217; permission), or to specific applications, groups or users. Whilst this is unlikely to occur in practice (and would be bad practice even if we did), it does allow us to build &#8216;god&#8217; applications which are capable of performing actions across the board.</p>
<h4>Universal Object Permissions</h4>
<p>Alongside global type permissions we can approach the problem of mass permissions from the object end. Universal Object Permissions are stored along with the object, and are permissions which are available to any key. This type of permission finds itself suited to things such as public events, where we want to give anybody permission to see the details regardless of if they&#8217;ve been manually added.</p>
<h4>Specific Object Permissions</h4>
<p>The most restrictive type of permission is a specific object permission. These are a one-to-one relationship between an application, a group or a user which grants permissions for one object. An example would be a private event, which you wouldn&#8217;t want anybody else to be able to see (although if it&#8217;s occurring in a publicly timetabled space everybody will be able to see that an event is there, just not what it is). In this case the object would just have one specific permission granting you the ability to read and modify it.</p>
<p>Specific permissions also come in handy with shared events. The system would allow for you to grant specific users the ability to see an event, for example just inviting your study group to share a room booking.</p>
<h3>Multiple Permissions</h3>
<p>All permissions are standalone, there is no inherent hierarchy. They also stack neatly regardless of which route the permission is granted by, so it&#8217;s entirely possible that you may have a global read public data permission, a universal read details permission granted to your group, and a final specific permission allowing you to modify an event.</p>
<h3>Wow&#8230;</h3>
<p>That&#8217;s a high-level overview of what&#8217;s going on to make sure Nucleus is solid enough to stand up to a hammering whilst making sure that people can&#8217;t be naughty and at the same time being flexible enough to fine-tune permissions.</p>
<p>The API will prevent people from &#8216;orphaning&#8217; events without permissions, as well as provide a route for reading and setting permissions (with permissions controlling who can set permissions&#8230;) and making sure that sensible permissions are set by default so that you can&#8217;t accidentally create an event you can&#8217;t then control.</p>
<p>Epic Permissions. Coming in the next couple of weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2010/11/26/this-isnt-your-grandmothers-api-permissions-control-layer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update</title>
		<link>http://blog.totalrecal.org/2010/11/17/update/</link>
		<comments>http://blog.totalrecal.org/2010/11/17/update/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 14:29:03 +0000</pubDate>
		<dc:creator>Alex Bilbie</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[Blackboard]]></category>
		<category><![CDATA[CEMIS]]></category>
		<category><![CDATA[CWD]]></category>
		<category><![CDATA[CWDx]]></category>
		<category><![CDATA[Nucleus]]></category>
		<category><![CDATA[OAuth]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=132</guid>
		<description><![CDATA[This has been a big month for Total ReCal. We&#8217;ve now perfected our event importers for Blackboard assignments and academic timetables, and we&#8217;ve started working on the main web application (screenshots too). We&#8217;ve also launched a beta registration page for interested staff and students to sign up for early access. Finally, our Talis Keystone service [...]]]></description>
			<content:encoded><![CDATA[<p>This has been a big month for Total ReCal. We&#8217;ve now perfected our event importers for Blackboard assignments and academic timetables, and we&#8217;ve started working on the main web application (screenshots too). We&#8217;ve also launched a <a href="http://blog.totalrecal.org/beta-registration/">beta registration page</a> for interested staff and students to sign up for early access. Finally, our Talis Keystone service that the University has recently  purchased will be in place very soon meaning we can also start importing  book return dates for staff and students.</p>
<p>After numerous code re-writes we&#8217;ve got a rock solid API for adding, updating and deleting events in our Nucleus data store. Our import code has also had many updates to support logging of changes to events which will be invaluable to students to keep them up to date. Once the main Total ReCal application has been developed we&#8217;re going to sit down and work out how we&#8217;re going to best make use of these logs.</p>
<p>When a lecturer calls in sick the central timetabling department isn&#8217;t informed (unless it will affect lecturers for a long period of time). Therefore based on our current nightly timetable imports we won&#8217;t find out about any changes. We&#8217;re going to develop a tool for faculty administration staff to make changes to events as they&#8217;re going to be more aware of what the situation is day to day. This means that we can then inform students of changes that day as soon as someone changes it.</p>
<p>In terms of the front end, I&#8217;ve forked our <a href="http://thecwd.blogs.lincoln.ac.uk/">common web design</a>, called it &#8216;common web design x&#8217;, made it fluid to adapt to browser size, made it completely semantic HTML5 based, and taken the concept of progressive enhancement to new levels. It will also make use of our new OAuth 2.0 based single sign on service that I&#8217;ve written and it will automatically adapt to mobile layouts.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2010/11/17/update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving Forward</title>
		<link>http://blog.totalrecal.org/2010/10/26/moving-forward/</link>
		<comments>http://blog.totalrecal.org/2010/10/26/moving-forward/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 10:40:09 +0000</pubDate>
		<dc:creator>Alex Bilbie</dc:creator>
				<category><![CDATA[Design & Planning]]></category>
		<category><![CDATA[Blackboard]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[Service Oriented Architecture]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Timetables]]></category>

		<guid isPermaLink="false">http://totalrecal.blogs.lincoln.ac.uk/?p=110</guid>
		<description><![CDATA[Over the past week we&#8217;ve worked tirelessly to perfect our timetable import code and we&#8217;ve now got a system that is working with real data. A select few students have now been given access to iCal feeds for both their timetables and their Blackboard assignments and the Library is hoping to have their Talis Keystone [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past week we&#8217;ve worked tirelessly to perfect our timetable import code and we&#8217;ve now got a system that is working with real data. A select few students have now been given access to iCal feeds for both their timetables and their Blackboard assignments and the Library is hoping to have their Talis Keystone system in place very soon meaning we can start producing feeds of people&#8217;s book return dates.</p>
<p>Our next big job is to move away from bulk imports of data and instead start developing code that will go through and validate and verify events. So this could be looking for changes in the time of events or verifying that the right students are seeing the right events (in the event of a student changing course for example). With these changes logged we can then tackle one of the top requests that students have of the University and that is to be better informed of changes to their timetables.</p>
<p>The main timetables are produced by the Registry department however they aren&#8217;t informed if a lecturer is ill on a particular day, and in any case timetables aren&#8217;t updated currently until the following morning, so we&#8217;re planning on developing a tool for faculty offices to use so that they can make individual amendments to timetables when rooms need changing or lectures have been cancelled so that students can be informed sooner.</p>
<p>The logging of these changes will be important for Blackboard too. Certain schools and faculties like the idea of personalised assignment calendars however their own internal policies don&#8217;t allow staff to set deadlines inside Blackboard because deadlines may be changed by lecturers and senior staff aren&#8217;t informed. This is why the Computing School for example release a huge Excel spreadsheet of deadlines because it means only two people have access to change deadlines. We don&#8217;t want to be in a situation where we have to create individual departments their own tools to manage assignment deadlines, we&#8217;d prefer everyone used Blackboard and so with the ability to log changes to events what we could do is delay the update of the deadline in the student calendars for 24 or 48 hours giving senior staff a period in which to change it back to the original date or leave it (i.e. approve the change).</p>
<p>Our plan over the next few weeks is to perfect our API for querying events, give more students access to the their iCal feeds and also start developing the front end calendar application.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.totalrecal.org/2010/10/26/moving-forward/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

