Bebop v1.1 is now available.

Today, a new version of Bebop has been released, and I wanted to write a short blog post to explain a couple of things that have changed, and why.

After feedback from several users in the WordPress/Github community who have been using v1.0 and v1.0.1, Bebop version 1.1 is here. This version improves functionality and performance, as well as providing some bug fixes.

Comments from feedback suggested that users might want to import content directly to the activity stream. So we built an option into Bebop which allows the OER verification process to change from user authentication to no authentication at the push of a button. This means the admin can decide whether content needs to be verified by users before it appears in the activity stream. If the admin does not want content to be verified, it is added to the activity stream as soon as it is imported into Bebop.

Other feedback highlighted some small bugs which have been fixed. As a result Bebop is now much more reliable, and people are starting to use and trust the plugin. Incredibly, Bebop has been downloaded almost 100 times.

For a full list of changes, please see the Changelog on

As hinted to above, user input, evaluation and reviews have had quite an impact on Bebop. Hopefully people will continue to make valuable contributions, and hopefully I will be able to comply!

There is still some work to do on Bebop. We are yet to import content from Bebop into our Staff Directory, but this will be coming soon, at least as a proof of concept. It requires some changes to how our staff directory works, and is also reliant on a BuddyPress ‘profile editor’, which we need to finish implementing.

Bebop v1.0 goes live!

Bebop Goes Live!
I am proud to announce that Bebop version 1 is now live on, and can be downloaded from (or directly through the “search installed plugins” section of a WordPress site). You can also checkout the code repository on Github. This is a fairly early release considering this is a rapid innovation project which still has 6 weeks to go; but we decided we wanted to gather some feedback for improvements before the project comes to an end.

The features released in version 1 are pretty much inline with what we wanted Bebop to achieve at the beginning of the project. This of course, focusses on the aggregation of user OER content into BuddyPress profiles. We have also managed to extend the original specification somewhat, by allowing multiple feeds to be linked for one user. This allows content to be aggregated from multiple accounts into a single BuddyPress profile, which could be incredibly useful for academics who want to share content from more than one group.

Bebop is now producing multiple RSS feeds for each user. Content is published individually for each OER provider (such as SlideShare or Vimeo) which allows users to export specific content into other systems. All of the users OER content can also be imported, and the RSS feed allows up to 250 items to be exported.

A new version (1.1) of Bebop is already being developed, which will feature a more ‘WordPressy’ feel to it, with additional functionality for the discovery of user RSS feeds, as well as some important bug fixes and performance updates. The twitter extension will also be updated, following the release of updated Twitter API’s.

OER Reuse
Another aspect of this project was to see how we could reuse the OER content collected by Bebop for other purposes. To accomplish this, we have decided we shall add a ‘Teaching Resources’ tab to our Directory which will automatically import and display contentfrom our BuddyPress platform. This will be made possible by through the use of the RSS feeds which Bebop creates, as described above. We will be working on this over the next couple of weeks.

Technical Issues
I would like to take this opportunity to explain some of the technical issues we have faced when developing Bebop. The initial problem we faced was using WordPress/ BuddyPress as a development platform. Having never developed using the rather unique code structure WordPress uses, it was slightly confusing and difficult at first. Fortunately, WordPress is documented rather well, so problems were solved relatively quickly. BuddyPress is not documented as well as WordPress, and it was often difficult to find answers and solutions to problems. Thankfully, Joss had recognised this potential issue before the project began, and enlisted the help of Boone Gorges, a BuddyPress lead developer. Boone’s help and technical guidance has been invaluable on many occasions.

The second technical issue which we found particularly challenging was importing data into Bebop. This may sound strange considering this was the main focus of the project, but let me explain. The main issue was every OER provider does things differently. RSS feeds, OAuth API, API’s returning XML, API’s returning serialised PHP, etc. This posed problems when trying to standardise how the extensions in Bebop work, while trying to keep things as simple as possible. In the end, we decided it was best to have a custom import script which would create a standard array of data for each OER. This data is then passed into another function which deals with all the nitty gritty validation, content checks, and database queries. This turned a rather complicated and messy process into a simple 2 stage process, which is essentially find and sort and then pass it into the processing function.

A problem which I foresee in the future is keeping Bebop up to date. The main concern here is when updated API’s are released. For example, the Twitter API’s have just been updated, and the Twitter API Bebop currently uses will be depreciated within the next 6 months. While we will be able to update API’s up until the project ends in the middle of October, it will be a little more difficult to keep Bebop up to date once the project ends.

More extensions, more content.

To summarise he past week, it has been a rather busy and productive one! I have been concentrating on producing more extensions for bebop, which will allow more high quality content to be pulled into WordPress and BuddyPress. Three extensions have been developed this week in total, enabling images from Flickr and video’s form Vimeo to be imported into BuddyPress. A third extension provides generic RSS support, pulling in content from RSS feeds from around the web. This means we now have a rich library of content providers, including the following:

  • Flickr
  • Vimeo
  • Twitter
  • YouTube
  • SlideShare
  • RSS feeds from the web

Unfortunately, we have still heard nothing from the people at JORUM, in regards to readiness of their API’s. However, if you think there is another source of OER content that we should have an extension for, please get in contact with us ASAP!.

The next phase of the project includes a little more development. We aim to produce RSS feeds for the content we have pulled in from the resources above, so we use the data elsewhere, for instance our staff academic profiles. Once this is sorted, we can shift our focus onto documentation, so people can learn what bebop is for, and how it can be used effectively.

Slideshare API, oembed support.

Having not posted a progress log for a couple of weeks, people are probably wondering what we have been doing. Well, we have done a lot of work on bringing our code ‘up to standard’ in terms of WordPress coding standards, fixing over 2000 ‘errors’ in the process. That took a while, but it had to be done, and will now be much easier to maintain.

We have also been working on our extensions platform, which should allow people to create extensions in a short period of time, regardless of whether they are using an RSS, OAuth API or standard API data source. We have began compartmentalising the import scripts, which should essentially allow anyone to copy an import structure from another extension to their own extension, for which the data source functions in a similar way. The last sentance will make much more sense when we get round to writing our documentation. It is then a simple matter of pointing some variables at data, and voila. More data in the database. More sharing. More caring.

We have also cracked oembed, allowing API’s which support the standard to display content directly in the activity feeds.

Oh, and we also made a SlideShare extension, which can be used to pull in content from SlideShare, and all the user has to do is enter their SlideShare username.

Over the coming weeks we have two tasks; Make some more extensions for the more popular OER providers (It’s a shame JORUM don’t seem to have their API up and running yet) and produce custom RSS feeds so the data collected from Bebop can be consumed into other services, such as our Staff Directory. This will also provide a way for people to follow content posted by people as it is added to Bebop.

Don’t forget to check out the photos and leave us some feedback.

Dev8ed – Birmingham, 29th – 30th of May 2012

Having finishing my last exam on Monday, I made my way down to Birmingham for the Dev8ed Conference, with two of my colleagues, Alex Bilbie and Jamie Mahoney from the University of Lincoln. Jamie is working on an ongoing project called ON Course, while Alex is about to start the new Linkey project, which involves tying OAuth to other authentication protocols, such as SAML. All of these projects are funded by JISC.

Dev8ed is a JISC funded event which involved people from a variety of JISC projects. During the two days, there was a selection of workshops and lightening talks on subjects ranging from the publishing of OER’s to the use of Personal Learning Envionments (PLE’s). Alex even presented his traditional and famous HTML5 talk.

I went to Dev8ed with two main objectives. The first objective was to attend all the workshops on the learning registry/JORUM and PublishOER, As well as have some developer time which I could devote to installing the LifeStream and BuddyStream WordPress plugins. This would give me the opportunity to evaluate how they are used and how they work, in order to identify if and how they can be used in the bebop project.


The first workshop I attended was based around the JORUM project. This workshop was interesting because it was based upon one of the OER’s providers that are of interest to the bebop project. The workshop focussed mostly on how the JORUM project was created, and how it can be useful to other projects in the future. We hope to utilise JORUM as an OER provider, and will feed resulting OER results into our university BuddyPress profiles.

I also attended a workshop based around the publishOER project, which opened my mind as to how OER’s can be published and shared. While this has no direct link to the bebop project, it was still a very interesting workshop which allowed me to understand some of the factors involved with the publication of OER’s.

Alex Bilbie presented the key new features of HTML5 and CSS3, such as new tags, form elements, providing brief examples of their use. These new standards will be utilised in bebop where necessary to create a more semantically rich plugin.


The second objective was to install the LifeStream and BuddyStream plugins onto the installation of WordPress I created in my previous blog post. We had previously identified the LifeStream and BuddyStream plugins as potentially useful for the bebop project, so I wanted to fully evaluate how each of these plugins are used to determine how i might be able to use parts of them in this project.


Lifestream is a plugin which pulls RSS feeds from multiple sources together, and places them into the WordPress activity stream. The RSS feeds are configured in the admin panel, and hence are more to do with the owner of the blog than anything else. This means that individual user RSS feeds cannot be imported into WordPress, only the generic feeds for the blog owner can be utilised. The bebop plugin which we will be developing over the coming weeks/months will need RSS feeds for multiple users, and hence the LifeStream plugin isn’t really what we are looking for in terms of usability. However, there is nothing to stop us from creating a plugin which utilises RSS feeds based which can be used by individual users. If I am honest, the LifeStream file-system is also rather complicated and bloated for what is a pretty simple task.


Unlike LifeStream, BuddyStream is integrated into BuddyPress. BuddyStream also utilised data API’s to provide user specific content feeds, powered by a CRON script. This allows individual users to pull data in from other sources such as Twitter. While social networking is not in the scope of bebop, BuddyStream provides a structure which is exactly what we are looking to do with bebop. The only difference is that instead of pulling in social networking content, we will be pulling in user specific OER content to enrich our BuddyPress profiles. We will therefore use data from both RSS and API sources for the bebop plugin from as many OER providers as we can.

The evaluation of these plugins has provided me with a good idea of how I can structure the bebop plugin and what features it should have. The next stage of the project is to set up the development environment, which will take place next week. The development environment will use a set of tools established by the LNCD department, including the Jenkins continuous integration server and PivitalTracker.

More to follow in the coming weeks.