The benefits of code review

Our partner on the Bebop project was Boone Gorges, lead developer on the CUNY Academic Commons project and committing BuddyPress developer. We were keen to involve the Academic Commons project in Bebop due to their in-depth knowledge of BuddyPress and great success in using it within a university. Boone offered extrememely valuable review and guidance to Dale McKeown, the main developer working on Bebop. Prior to Bebop, Dale had not developed for either WordPress or BuddyPress, and Boone’s feedback on his work proved very helpful. With permission, we’re publishing the raw email exchanges between Dale and Boone to demonstrate the value that an experienced developer of a particular technology can bring to a project. Although we’ve been using WordPress at Lincoln since 2008, we have done relatively little bespoke development for our platform and the addition of Boone to the Bebop team resulted in a better quality plugin being released to the public and, just as importantly, helped improve Dale’s skills, too.

You can download the email exchange as a txt file here.

It should be of interest to developers working with WordPress/BuddyPress, but also to developers in general, who are in the positions of either mentoring or being mentored themselves. The benefits of pair-programming and code review are well known and we hope this exchange provides further evidence of why technical projects benefit from this type of external review.

BuddyPress, Bebop and building the staff directory

The Architecture

This blog post discusses the overall ouput of the Bebop project, referring back to the diagram below, which we included in our initial funding bid. Click on it to have a good look.

You might also want to open a new tab on your browser and take a look at the reference sites, too. Here’s a link to the Staff Directory home page, and here’s a link to my staff profile. You could also try searching for something, too, such as ‘prof’ or ‘Library’ or ‘science’, to see how it works.

The Directory began as a lunch-time project of Nick Jackson, who wanted to build a better phone number search tool than was then currently available. A year or so later, and it’s been adopted as the official directory of staff profiles at the university and is linked to from the lincoln.ac.uk home page.

The Directory is published to the web using the HTML5/CSS3 Common Web Design presentation framework that Alex Bilbie has developed. Over time, the CWD has integrated more and more features from other common HTML5 frameworks, so that now CWD v4 is mostly a branded Twitter Bootstrap framework that is distributed to multiple sites via Rackspace’s Content Delivery Network. Changes to the CWD are then made immediatley available to all sites to which it is served, which means that changes like our recent switch from a Minerva logo to the University Crest, can be rolled out easily.

As you can see from the diagram, the database behind the staff directory is Nucleus, our warehouse of data for application development. Nucleus is a NoSQL MongoDB database that holds a variety of non-sensitive data collections, such as basic information about people, bibliographic data, geo data about our campus buildings, curriculum data, and timetable data.

Working with BuddyPress (pre-Bebop)

To develop a phone book into a tool for managing and publishing staff profiles, we decided to use BuddyPress as an additional source of data because it already provides a convenient way for a user to update and maintain their own profile information. It is a social network afterall and people are at the heart of social networks. We’ve been running BuddyPress at Lincoln since 2009 and because all staff (and students) have access to a BuddyPress profile (here’s my example), we felt that it was a tool already available to us and that by requiring staff to use BuddyPress to maintain their profiles, they would also be exposed to the WordPress blogging platform and therefore social media in general.

BuddyPress has a fairly rudimentary form builder for profiles and having decided what information we wanted staff to fill out, we added the extra fields to the BuddyPress form. In addition to pulling in data from BuddyPress, we also pull in data via RSS from our ePrints institutional repository, so that under the Research tab you see each academic staff member’s research outputs. If they have not deposited anything in the respository (i.e. they are non-academic professional staff), the repository section of the profile won’t show at all. That is, as information from BuddyPress and ePrints is provided, the person’s profile visibly grows with the addition of new sections.

We have also experimented with displaying blog posts which the individual has written using blogs.lincoln.ac.uk. More or less any information can be added to the Directory as and when we have it. We just ‘plug it in’ to the Staff Directory block in the diagram above.

Working with BuddyPress v2 (post-Bebop)

All of this was in place prior to the Bebop project. Over the last six months Bebop has made two significant contributions to the Staff Directory. Dale has written a new profile editor for BuddyPress which provides a much more structured form for staff to use when adding information about themselves. We found that with free text fields, different people offered similar information in quite different ways and this led to a number of presentation errors when pulled into the Directory from BuddyPress. The code for our new BuddyPress profile editor is on Github and may prove a useful starting point for other organisations wishing to use BuddyPress in this way. Note that it’s not as straightforward as installing and activating the plugin. It requires additional development dependent on your specific use case.

Most notably though, the Bebop plugin has provided a way for staff to publish a curated list of their teaching resources, which can be displayed on their official Staff Directory profile. As you can see in the screenshots below, we’ve added a new ‘Teaching’ tab to the Directory and moved any ‘Teaching Resources’ from ePrints into this tab, along with any items from Bebop, such as slides on Slideshare, images on Flickr, videos on YouTube, etc. Bebop also harvests RSS feeds, so staff can create a university WordPress blog to publish their teaching resources if they wish. WordPress offers a very flexible way of publishing OERs, as we found during our ChemistryFM project. Here’s a screenshot of the Bebop plugin being used on a BuddyPress profile. The information curated here is automatically pulled into the Staff Directory profile.

A video tutorial posted on YouTube
A video tutorial posted on YouTube, displayed in my BuddyPress profile.

The images below shows a staff profile with the new ‘Teaching’ tab, where resources from Bebop will be displayed. The second screenshot, shows a teaching resource harvested by Bebop and originating from ePrints. The third image shows resources originating in Slideshare, but again, being fed to the Directory via Bebop. We still need to do work on styling the Slideshare links, so that titles are hyperlinked, rather than the raw hyperlink displaying.

Profile Home Page
A staff profile, showing the new ‘Teaching’ tab.
Staff profile with RSS import
A staff profile, showing (via RSS) a teaching resource held in our Institutional Repository.
Staff profile, showing Slideshare resources
A staff profile, showing resources held on Slideshare.

These changes to our Staff Directory have not gone live yet… but they will do soon, once we’ve migrated the existing profile data over to the new BuddyPress profiles – a task which requires a certain amount of data cleaning first. Once the new  profile editor is in use, the more structured data that staff enter will be checked against any existing data we hold and used to improve that data thereby helping to validate information which we know may not always be accurate. By giving staff a greater opportunity to directly maintain their own staff profile, we are assuming that the information will be kept more up-to-date.

In Summary…

The Bebop project has further developed our initial use of BuddyPress to provide a flexible way for staff to update and maintain their professional profiles. By processing data from a number of sources, we have re-presented it in a way that helps improve the corporate website, helps validate and update existing data about staff, and mandates staff to use a social networking tool in order to maintain their public, professional web presence. Furthermore, the Bebop plugin, provides a way for staff to link to teaching resources which they are publishing on a number of platforms and aggregate them into their staff profile, alongside information about their research and other professional responsibilities. The work of teaching is therefore given more equal standing alongside the work of research and ‘teaching in public‘ through the publication of OERs is promoted and better supported at the University of Lincoln.

Project Plan, Aims and Use Case for Bebop

The Project Plan for Bebop can be found in our original proposal. It includes:

  1. A section on the anticipated benefits and impact (“aims”) of the project
  2. An outline of the work schedule and approach
  3. A list of deliverables for the project
  4. A risk assessment and
  5. A dissemination plan.

Our primary Use Case for the project has also been published and we will add to this as we engage with users.

Currently, Dale McKeown and Dave Whitehead, who are both Developers on the project, are finishing up their exams and spending a few hours each week learning BuddyPress and WordPress development. From the end of May, both will be working primarily on Bebop until the end of the project. A user group meeting is also being planned for early June with the School of Art, Architecture and Design.

With final year exams out of the way, Dale will be attending Dev8eD along with Alex Bilbie (Linkey project) and Jamie Mahoney (ON Course project), where each of them will be talking about their work and using the time to learn from others, too.

Bebop in a nutshell

Bebop is developing BuddyPress as an institutional academic profile management tool which collects and displays a person’s Open Educational Resources.

The project has two parts: 1) We are developing BuddyPress to consume OERs using third-party feeds and APIs into academics’ profiles and, 2) investigating the possibility of BuddyPress becoming an application which produces data for re-publishing on other institutional websites and to third-party web services.

The main outcome of this work will be a plugin or set of plugins that can be used with BuddyPress to extend an individual’s profile to re-present resources that are held on disparate websites such as YouTube, Slideshare, Jorum, etc. The plugins will be open source and made available via the official WordPress.org plugin repository.

Finally, working with the CUNY Commons In A Box project, we will extend our user testing to that related project and seek advice from their staff, who are core contributors to BuddyPress. It is our intention that the work of this project, complements the overall CUNY project.

 

 

Flow diagram

 

 

 

 

RSS/Atom endpoints for user profiles on OER hosting sites

While Developers, Dale and Dave, are finishing off their third-year dissertations, I’ve been scouring potential OER services for user profile RSS and/or Atom endpoints. As Boone suggested in a recent comment, dealing with feeds can be a lot less hassle to maintain that writing a BuddyPress plugin that interacts at the API-level of multiple services.

Martin Hawksey at JISC CETIS provided this spreadsheet which pulls together information from PROD about the technologies that ukoer projects have identified they are using. There is also a useful summary of ‘ukoer sources‘. Taking the most popular 50 technologies in the PROD spreadsheet, I narrowed it down to the following ‘hosting’ platforms for OERs. Example URLs for user feeds are also given, where I could find them. It’s not always easy and I don’t have access to all platforms. If you can fill in the gaps, please leave a comment. I’ll update this post accordingly. Remember, I’m looking for feeds that record activity of individual users, ideally linking to resources they have uploaded to the/a hosting service.

Where are the user profile feeds?

  1. Moodle. Feed: ???
  2. YouTube. Feed: http://gdata.youtube.com/feeds/base/users/user_id/uploads
  3. WordPress. Feed: http://joss.blogs.lincoln.ac.uk/author/user_id/feed
  4. Slideshare. Feed: http://slideshare.net/rss/user/user_id
  5. Flickr. Feed: http://api.flickr.com/services/feeds/photos_public.gne?id=user_id&lang=en-us&format=rss_200
  6. Xerte. Feed: ??? Does it include user profiles?
  7. Facebook. Feed: ???
  8. Blackboard. Feed: ???
  9. Drupal. Feed: ??? Possibly dependent on use.
  10. Sharepoint. Feed: ??? Not version 2003, which I was able to test.
  11. Confluence. Feed: None that I could find.
  12. Vimeo. Feed: http://vimeo.com/user_id/videos/rss
  13. Mahara. Feed: None.
  14. iTunesU. Feed: None.
  15. Google docs. Feed: None.
  16. EPrints. Feed: http://eprints.lincoln.ac.uk/cgi/search/advanced?screen=Public%3A%3AEPrintSearch&_action_search=Search&_fulltext__merge=ALL&_fulltext_=&title_merge=ALL&title=&documents.title_merge=ALL&documents.title=&creators_name_merge=ALL&creators_name=&creators_id_merge=ALL&creators_id=user_id&abstract_merge=ALL&abstract=&date=&documents.description_merge=ALL&documents.description=&keywords_merge=ALL&keywords=&subjects_merge=ALL&divisions_merge=ALL&editors_name_merge=ALL&editors_name=&refereed=EITHER&publication_merge=ALL&publication=&satisfyall=ALL&order=-date%2Fcreators_name%2Ftitle
  17. webCT. Feed: ???
  18. DSpace. Feed: https://www.dspace.university.ac.uk/open-search/?scope=/&rpp=10&sort_by=0&order=DESC&query=author:%22LASTNAME,%20FIRSTNAME%22&format=rss
  19. Pebblepad. Feed: ??
  20. Joomla. Feed: ??
  21. Cloudworks. Feed: http://cloudworks.ac.uk/event/user_rss/user_id
  22. OpenJorum. Feed: Jorum is a DSpace repository but doesn’t seem to use the URL syntax I’ve been given above for DSpace.
  23. Ning. Feed: http://ning_address.com/activity/log/list?fmt=rss&screenName=user_id

But are they really OER platforms?

Personally, I have two criteria for whether the platform is suitable for hosting OERs:

  1. Can other people discover your resource on the World Wide Web? If it’s on an Intranet or walled garden that blocks search engines, it’s not an OER. Discovery is not the same as download either. I think it can still be an OER if it is discoverable but you charge for download and it is appropriately licensed for re-use, modification and re-distribution. It’s not really in the spirit of openness, but as copyright owner, you could try charging for initial access to the resource. Good luck to you!
  2. Can the resource be openly licensed? For the resource to be an OER, it must have an open license (e.g. Creative Commons) that permits re-use, modification and re-distribution. The license can be embedded in the resource, (e.g. a PPT slide that has a CC license logo on the first slide), but a platform suited to hosting OERs should allow you to display a license next to the resource and, ideally, include that license in the metadata of the resource.

So based on those two criteria (discovery and licensing) , which hosting services/platforms are ‘OER services and platforms’?

My list is:

  1. YouTube
  2. WordPress*
  3. Slideshare
  4. Flickr*
  5. Vimeo*
  6. EPrints*
  7. Jorum/DSpace
  8. Joomla
  9. Drupal
  10. Cloudworks*
  11. Ning*

The asterisk refer to what I shall call ‘attractive feeds’. That is, easy to discover and contain links to resources which the user has uploaded to the hosting platform/service. These are the kinds of feeds we’re interested in for the bebop project.