Mobile - TTRSS themeAfter my last post on ‘Thieving Feedly’, which got a lovely follow up on The Digital River, I mentioned that I’d uninstalled the Feedly Android app. That left a hole in my feed consumption ways which I think I’ve now filled. Below is a screenshot of how I’m now consuming my feeds. Those from the Google Reader good old days might recognise it. Yep if you can’t replace Google Reader then the best solution for me is to recreate it and this post outlines how I did it.

...continue reading


Mike Caulfield has posted an interesting reflection:

Identity is now maintained on our phones. ... Our portal is our app screen. Our network isn’t Facebook or Google or Twitter. It’s the phone address book that is the union of those three imports. And on the phone we stop dreaming about “If only there was a service that integrated functions of Twitter, Gmail, and Snapchat!” Because there is a service that integrates that — your phone’s notifications screen ...continue reading


One of the themes I expect to see for 2010 is more collaborative real-time interaction web applications.

was my bold prediction at the beginning of 2010 (who would want to be a futurologist ;). Mike Caulfield recently highlighted how the WebRTC specification, which permits real-time communication (audio, video, chat, screen interaction) in your browser with a bit of JavaScript and opens the opportunity for educators to more easily breakaway from learning designs created to fit traditional webinar platforms. As Mike highlights: ...continue reading

Share this post on:
| | |
Posted in Infrastructure on by .


Last week I was at the MOOC Research Initiative Conference in Texas. The organisers (George Siemens, Amy Collier, Tanya Joosten and others) should stand up and take a bow for a fantastic event. I’m still digesting my thoughts from the event which was full of extremes and at times completely surreal. I leave Arlington with memories of going from being baked at 28C to –10C icestorms; memories of trekking down the freeway with some of the best minds in EdTech trying to make it back to our hotel, spending time with people I’ve long respected including a couple of hours in the company of Martin Weller and Jim Groom the result of which was: ...continue reading

1 Comment

A recent thought I’ve been pondering is the default closed approach to education. It’s interesting to reflect how the physical structure of the classroom with walls and doors gets replicated online with firewalls and logins. I can appreciate that in part this is needed to create a closed environment where the student feels safe and secure, but it is also has other factors like license to share copyrighted work or terms of license for learning platforms. It’s ironic that the ‘MOOC as a Service’ (MaaS/xMaaS) offering for Coursera, et al., whilst are open to register still default to a closed mode*, studying in their place under their terms. Even FutureLearn which is designed on social learning principles seems to only consider social in the system. ...continue reading


It seems that the only blog posts I write recently are about presentations … My latest outing is to the Jisc RSC Scotland ‘Open Education’ event which was a joint meeting of SMUG, SCOT-BUG, Learning Technologists', Scottish e-Assessment and Open Badges Forums. Originally I was billed to talk with my former colleague and ALT Learning Technologist of the Year Sheila MacNeill but she’s found somewhere warmer to go. Hopefully the RSC Scotland Live Stream will be behaving for her to tune in. It’s quite a line-up with Lorna Campbell and Joe Wilson giving an Open Scotland update, Sarah Currier and Jackie Graham talking about Open Repositories (no doubt including Jorum and Re:Source) and Julie Usher talking about Blackboard’s Xplor (full programme here). ...continue reading

1 Comment

Later today I’ll be presenting some thoughts on the opportunities and challenges of trying to gain actionable insight from MOOCs. My slides are below you can tune in at 15:15GMT via the ALT YouTube channel. The whole day is being streamed and recorded, the programme is here. ...continue reading


WordPress is a free and open source blogging tool and a content-management system (CMS) based on PHP and MySQL, which runs on a web hosting service. Features include a plug-in architecture and a template system. WordPress is used by more than 18.9% of the top 10 million websites as of August 2013. WordPress is the most popular blogging system in use on the Web, at more than 60 million websites [Source: Wikipedia]

WordPress is becoming much more than a blogging and content management platform. A combination of its very strong developer community, excellent documentation and solid core means it is increasingly being used as the framework for some very interesting projects. Within the education sector not only is it an excellent blogging platform but the ability to rapidly develop and evolve solutions is very powerful. As far back as 2006 I marvelled at the work Dumfries and Galloway College did turning WordPress into a campus e-Portfolio system.  One of my own interests is how WordPress can be used for an open course platform (MOOC, if you prefer). The advantage in both of these examples is that you are not restricted by the VLE in both functionality and availability (depending on your license agreement institutions may be restricted to registered students).

One concern I’ve had is how do you scale the use of WordPress within an institutional context? How do you go from offering one course to multiple courses? This challenge isn’t specific to just my scenario but applicable more widely. How do you go from supporting one WordPress blog to multiple blogs?

Fortunately this is something University of Lincoln have been doing for a couple of years and Joss Winn, who has led this development, kindly took some timeout to explain how they’ve gone about host over 1,800 WordPress sites (and counting). Below is the audio from our conversation embedded in a YouTube clip (mainly to add machine captions to help you with navigation – to use this visit the video and click on the transcript button image ) followed by my written up notes:

Institutional installations of WordPress - The University of Lincoln story



Joss started in 2008 with a web server to experiment with various web applications. As part of this he installed, what was then, WordPress Multi User*. Joss and his team slowly grew usage with informal awareness raising before submitting a proposal for a dedicated server and web address ( for a WordPress Multiuser Site. Since then the offer has become more formalised with the option for all staff and students to create their own WordPress powered site. Staff and students are encouraged to help themselves but technical and pedagogic support is available from the  Centre for Educational Research & Development, where the project is based, or through regular workshops. 

*Multi User was a fork of the WordPress code that allowed multiple concurrent sites from the same installation. Since WordPress version 3.0 this has been added to the core code. The trend appears to be towards calling this mode Multisite.

From early on Joss and his team were keen to experiment with the social networking plugin BuddyPress. This feature isn’t overly used by staff and students but one of the primary advantages of using it is it allows activity from across created sites to be displayed on the main landing page.

Joss highlighted one of the big advantages of their configuration is that it is one of the few University systems where users can invite others (including external institutions, consultants, members of the public) to join and collaborate on sites. With this the owner can also assign them the level of permissions they want for their site from subscriber to administrator.

Technical sits on a dedicated Red Hat server with 8Gb RAM (Joss mentioned that if you are starting out you’ll get away with 4Gb). The database (MySQL) is now hosted on a separate cluster, but initially it was on the same one. All 1,800 WordPress sites run off the same WordPress install making it easy for them to update the core software and plugins (Joss also noted that they have never had a problem with automatic upgrades).

Within a Multisite configuration the default is that all the sub-sites include the same plugins and themes. To allow more control over this Lincoln use the Multisite Plugin Manager to control which plugins are available on different sites. Initially Joss and his team freely added plugins on request and prior to this summer there were a selection of over 70 approved plugins. Recently a usage audit (there’s a plugin for that) pruned this down to 7 for all new sites phasing out the other plugins used in existing sites over time.


The current list of plugins to new sites is:

* Joss is reviewing both of these as functionality now exists in Jetpack

Whilst there is a limited selection staff can still make requests for additional plugins which are activated on a per site basis using the Multisite Plugin Manager. The usual caveat is that the plugin must be in the plugin directory although premium plugins bought by individuals are occasionally used.

Additional plugins/themes used for the administration of Multisites include (there are 35 they use in total):

  • Multisite Plugin Manager – allows administration of the plugins installed by default and on a per site basis
  • WPMU LDAP Authentication - enables Lincoln staff and students to login with University credentials and if required create new sites
  • Akismet – used to prevent spam comments ($550/year)
  • Multisite Analytics -  site wide Google Analytics tracking (individual sites can also additionally specify their own tracking code)
  • Domain Mapping – allows individual sites the ability to specify a different domain name
  • More Privacy Options – adds three extra site defined visibility options: network users only, blog members only and admins only
  • BuddyPress – primarily used to bring together activity from across the platform
  • Farms 133 theme pack – curated set of themes from WPMU Dev (WPMU Dev has an annual member subscription of $588/year. This gives you access to a collection of premium themes/plugins as well as support)
Spam and ‘brute force’ attacks

Lincoln use the Akismet service (run by Automatic who also develop/own to prevent spam comments. Joss explained previously they had used the free personal plan which permits non-commercial sites and blogs. There has been a bit of a grey area around this given the commercial nature of some University activity and they now subscribe to the Enterprise package which costs $550 a year.

Recently WordPress has become the target of brute force attacks. These hammer servers with multiple username and password combinations to gain access to sites. One reason for WordPress becoming the focus of these attacks is the relative ease in which they can be discovered (just search for ‘Powered by WordPress’). Apart from the potential security risk these attacks can act like denial of service and bring the server down. Lincoln hadn’t experienced any issues with these types of attacks.

WordPress provide guidance on hardening against brute force attacks. If Lincoln were to experience any problems because of the Multisite configuration it would be easy to apply these solutions


Initially Joss was using the Super Cache plugin but has recently switched to Alternative PHP Cache and MySQL caching. As this caused conflicts with Super Cache the plugin was removed.   

Community guideline and acceptable use

Joss has experienced very little abuse on and from early on developed Community Guidelines. The University’s general IT usage guidelines are also highlighted to users


Apart from the staff (Joss has handled most of the Lincoln project plus doing other things) and server the other oncosts are $550/year for Akismet spam protection and $588/year for membership to which specialises in multisite plugins and support (these costs work out as 60¢ a site per year)

Alternatives – Managed Hosting

When I asked Joss about Managed Hosting (Edublogs, WPEngine et al.) his main concern was not being able to run the LDAP authentication as a local application. He would also want to make sure he had the same level of control over things like plugin selection and deployment. For example Edublogs appears to have fixed list of plugins while services like WPEngine give you control over this.


So hosting your own multisite installation of WordPress is relatively possible even on a small budget. Given the flexibility of the platform there are opportunities to use it in other ways including establishing your own ‘cMOOC as a service’ empire. There is a growing list of institutions going down the WordPress Multisite route by either hosting internally or committing to a managed hosting solution. One of the big advantages of using WordPress for this, which we didn’t mention when I chatted with Joss, is that with the existing export tools it’s easy to export your site from the network onto or another WP host.

It would be interesting to hear your WordPress Multisite experiences. If you’ve used it does managed hosting work for you or has it thrown up problems? What is your institutional provision for WordPress training and support? As a multisite user are you experiencing problems with IT services imposing artificial barriers? Or more simply what current multisite plugin list?

Finally a big thank you for Joss taking time out to speak to me!


Google recently (1st October 2013) announced improved segmentation in Google Analytics using age, gender and interests

It been interesting to read some of Tony Hirst’s posts on the use of Google Analytics within education. The thread goes back to 2008 with Library Analytics but most recently Tony has writing about this in an open course context such as MOOC Platforms and the A/B Testing of Course Materials and MOOC Busting: Personal Googalytics… which looks at the  idea of collecting and feeding back performance data to users from across platforms.

When Daphne Koller was on the early Coursera push one of the aspects that caught my eye was using student generated data (aka their answers to questions) to in course design, in particular, to identify misconceptions or incorrectly set questions. To see what I mean here’s a cued clip from a presentation Koller gave at the Centre for Distance Education back in 2012.

YouTube: The Online Revolution: Education at Scale

Merging the two lines of thought I wondered if there was a way you could use Google Analytics to create a similar feedback mechanism. My starting point was Google Analytics Event tracking. From the Event Tracking documentation:

Event Tracking is a method available in the ga.js tracking code that you can use to record user interaction with website elements, such as a Flash-driven menu system. This is accomplished by attaching the method call to the particular UI element you want to track. When used this way, all user activity on such elements is calculated and displayed as Events in the Analytics reporting interface. Additionally, pageview calculations are unaffected by user activity tracked using the Event Tracking method. Finally, Event Tracking employs an object-oriented model that you can use to collect and classify different types of interaction with your web page objects.

Examples include:

  • Any Flash-driven element, like a Flash website, or a Flash Movie player
  • Embedded AJAX page elements
  • Page gadgets
  • File downloads
  • Load times for data

Essentially anything you can trigger with a bit of JavaScript is up for grabs. Looking at setting up event tracking each event can include:

  • category (required) - The name you supply for the group of objects you want to track.
  • action (required) - A string that is uniquely paired with each category, and commonly used to define the type of user interaction for the web object.
  • label (optional) - An optional string to provide additional dimensions to the event data.
  • value (optional) - An integer that you can use to provide numerical data about the user event.
  • non-interaction (optional) - A boolean that when set to true, indicates that the event hit will not be used in bounce-rate calculation.

So we can capture events and have some control over how they are described. What might we want to catch? Lets start by looking at was multiple choice questions (MCQs). Looking at the anatomy of an event this is one way we might want to encode it:

  • category: ‘MCQ’
  • action: ‘right’ or ‘wrong’
  • label: a question identifier. This needs to be unique and might be something like coursecode_module_section_question (having a consistently structured label will help filter the data later)
  • value: this is optional but as it needs to be an integer this restricts you a bit. You may want to use time taken to respond, confidence based mark etc.

I should say before you get carried away with tracking that:

The first 10 event hits sent to Google Analytics are tracked immediately, thereafter tracking is rate limited to one event hit per second.

To see how this works I’ve created this example page with a simple MCQ. This is a ‘live’ example with some crude code to push events to my Google Analytics account. You’ll notice on the page a response graph generated from the GA data. I’ll explain how that was made later.

GA Real-time eventsThe fist thing to note is that we can now see responses in real-time via the Google Analytics admin interface. The interface is not really geared for MCQs and there is a complication of who has access to the Analytics dashboard, but given that there is a Real Time Reporting API in beta a custom slice’n’dice should be possible in the future (I’ve got beta access so this might be one I revisit if/when Events get added to the API).

Similarly the Content Events report gives us access to historic data but again it has accessibility issues in terms of who has access to the Google Analytics account. On the plus side tweaking the display from the default ‘data’ view  to ‘performance’ gives a basic bar chart which is more intuitive for this type of data.

Default data view for Content > Events
Default data view for Content > Events
Performance data view for Content > Events
Performance data view for Content > Events

Segmentation and cohort analysis

There are some other built-in Google Analytics features that may also support analysis of the data including filtering:

GA Filtering

or switching from a ‘line chart’ to a ‘motion chart’ (there are limits on what can be used for x-y values so some experimentation is required) and adding event reports to custom dashboards which may pull in other GA data.

GA Motion Chart

This is where is potentially get even more interesting as the new Google Analytics Advanced Segmentation* allows you to do cohort analysis. The built-in segments are perhaps not relevant for this scenario but the custom options have lots of potential. Google provide 6 segment templates for ‘Demographics’, ‘Technology’, ‘Behavior’, ‘Data of First Visit’, ‘Traffic Sources’ and ‘E-commerce’ but it is easy for you to add custom conditions and sequences for segmentation.

GA custom conditions and sequences for segmentation

*I’m not sure if Google are still following this out but noticed the new UI and segmentation options were only available in my Google Apps GA account, my standard @gmail account not having this option.

Examples of conditions/sequences you might want to explore include combining Tony’s suggestion of using Analytics A/B testing with event tracking e.g. identifying any correlation with content to performance or if someone visiting page x did they perform better in the test. It is also worth noting that:

Previously, advanced segments were based on visits. With the new segment, a new option is provided to create user segment. In a user segment, all visits of the users who fit the segment criterias will be selected (such as specific demographics or behaviors). It will be a useful technique when you need to perform user level analysis.

This is particularly useful as “Google Analytics customers are prohibited from sending personal information to Google.” [ref]. So while named individual level analysis isn’t possible you can get down to a user level.

Distributing data

On a practical level whilst these options potentially open some interesting avenues for exploration Google Analytics account administration is still not easy. Whilst this area has been recently improved the granularity of permissions is very course, an all or nothing approach. There is a growing list of tools/add-ins that integrate with Google Analytics which let you create custom workflows for data distribution. This is an area Google appear to be working on recently announcing the Google Analytics superProxy which is a  web application that runs on Google App Engine to allow the distribution of GA data.  This uses the Google Analytics Reporting APIs to define data queries and generate data files. Along similar lines (and announced before Google) I’ve published a similar solution that works in Google Drive (Using Google Spreadsheets as a Google Analytics Data Bridge). Below is an example query I using the the MCQ example at the beginning of the post. It's currently using a very specific filter to exctract the data for all the event labels beginning EMD101_Mod1_1.1_Q1_, but if using a standardise labeling you could include results for the entire module or course. I'm also not using an segment filters. As well as using standard segments you can also use custom segments

Google Analytics Query ExporterAs I outlined in my original post there is a number of ways that these slices of Google Analytics data can be shared or consumed into other tools. In the example above the data is written (and refreshed every hour) to the sheet below, Google Sheets providing a convenient environment for sharing and querying data with the relative familiarity of a spreadsheet interface.

At this point I’d imagine some of you are wondering why go through all of this bother when your VLE is able to do similar, if not better, levels of reporting. My eye is primarily on the open education context where the institutional  VLE is usually not and option. It also potentially provides a more holistic data source where you can experiment with content and resources across your little oasis (like ocTEL).

So what do you think? Will you be event tracking your MCQs?

1 Comment

I'm not entirely sure what this post is. I started writing it on the train down to altc2013 and think it lost its focus between York and Sheffield. Essentially I wanted to write this to highlight some of the benefits of using BuddyPress as a way to capture user activity streams but at the same time some of the challenges of achieving an integrated experience using WordPress … I'll let you decide it's value and please feel free to comment (the ‘dirty code’ post will be a lot better).

For the last couple of week I’ve been working on the altc2013 conference platform. In previous years the Association for Learning Technology (ALT) had used CrowdVine to create a conference environment which allowed delegates to connect and communicate. This worked well but had a number of data bottlenecks making administration difficult. This combined with the knowledge that ALT members already have very rich networks on other sites including their own blogs and social network sites like Twitter, it was decided to opted some of the connectivist principals used in the ocTEL. The result, hopefully, is a site that replicates the CrowdVine experience with  several additional key features. These include:

In this post I’ll outline the general recipe used in the altc2013 platform, how interoperability was achieved between some existing WordPress plugins (saving the code heavy post for a latter date).

Core plugins

Starting with a self-hosted version of the blogging platform WordPress four key plugins are the basis of the site:

  • Conferencer – used to manage programme and session information
  • BuddyPress – social networking platform
  • FeedWordPress – used to pull delegate activity from 3rd party blogs and sites
  • MailPress – for daily newsletter distribution and management

The common issue when you stray away from WordPress as a blog to WordPress as a ___ is maintaining interoperability between plugins. For example Conferencer was never designed to work with BuddyPress so interfacing these plugins is required on several levels. To illustrate this below is a general interface diagram for the altc2013 platform followed by more detail about each of the main challenges that had to be overcome:

altc2013 platform integrations

Conferencer –> BuddyPress

In Conferencer the custom post type ‘session’ is used to enter and display session information. This post type  is associated with further custom post types for rooms, timeslots, speakers, tracks and sponsors. BuddyPress on the other hand doesn’t use custom post types or taxonomies, instead extending the WordPress core functionality with it’s own custom APIs, functions and features. Out of the box BuddyPress uses Groups as a way for members to cluster and collaborate. Integration between BuddyPress and Conferencer is primarily achieved by renaming Groups to Sessions (a cheap trick but it works). Doing this means when a user tries to view a Conferencer session which automatically uses a /sessions/ in the url, they are redirected to the BuddyPress group. This is achieved by creating a new page with the slug ‘sessions’ and then using this with the BuddyPress Group component (essentially duplicating the same url endpoint but relying on BuddyPress to steal priority over how the page is displayed).

WordPress Add New Page

BuddyPress settings page

At this point all we have done is trick WordPress into displaying a BuddyPress Group page. Additional code is required to hook into Conferencer session creation to generate a group in BuddyPress and create a relationship between the custom post type and group (included in the Github code shared at the end of the post). Another aspect of the integration is the Conferencer generated programme view. This includes a ‘Follow Session’, renamed from ‘Join Group’. This is done by reusing some of the existing BuddyPress functions to render a group button within the Conferencer programme.

BuddyPress <–> FeedWordPress

The FeedWordPress plugin allows the automatic collection of posts made on 3rd party sites using RSS. FeedWordPress ingeniously uses the existing WordPress Links table to maintain a list of sites it collects data from. Meanwhile within BuudyPress members can edit their own profile using defined fields. In altc2013 we use this functionality to allow delegates to register their own blogs. An interface with FeedWordPress is achieved by associating a blog feed address with the WP Links table. The added benefit of allowing users to add their own blog feeds is that we can make an association between blog feed and author. This means when a post is collected by FeedWordPress it is associated with the delegate and consequently BuddyPress associates this with an activity stream entry. 

Example activity stream entry

Reader <–> BuddyPress

The Reader isn’t a plugin in it’s own right (but I should make it), instead it’s a theme customisation I originally developed for ocTEL. All the reader does is render data collected by FeedWordPress which are in turn are just categorised blog posts. The Reader integrates with BuddyPress by using it’s native activity favouriting and by using an addition BuddyPress compatible plugin (BP Likes) also displays and records ‘likes’. This is achieved is a similar way to adding ‘Follow Session’ buttons of the Conferencer generated programme.

Reader - Favourite/Like Favourite in Activity Stream

BuddyPress <–> MailPress

MailPress is a plugin which manages the distribution of a daily newsletter of latest conference activity. The two interfaces with this and BuddyPress is the addition of link within the members notification settings to control their newsletter subscription. Given the way BuddyPress uses WordPress functionality to add additional information to various interfaces this was achieved by matching the WordPress/BuddyPress user id with a table of users maintained by MailPress. The second layer of integration was to include highlights of the BuddyPress activity stream in each newsletter. This was achieved by using existing BuddyPress functionality to render and display a custom activity summary (as used also on the homepage of the conference site.


Hopefully this post has given you some insight into what was required to create the altc2013 conference platform. Using existing open source plugins, we’ve interfaced them to create new functionality. Whilst the effectiveness of the new altc2013 conference platform is still to be evaluated we now have a basic platform to agilely respond to the needs of delegates.

A reminder that the code we’ve developed is on Github so feel free to peruse over and take in your own direction and comment on, if your an altc2013 platform user the feedback button is the best way to suggest improvements or highlight bugs, and if you are generally interested in this area the comments on this post are open