And so it came to pass that the campus was divided.

The LMS had given way to the VLE and some little control was given over to the instructors that they might upload some of their own content to the VLE, yet woe betide any who tried to add their own embed codes or script tags, for verily it is evil and the devil’s own work…

And in the dark recesses of the campus, the student masses were mocked with paltry trifles thrown to them in the form of a simple blogging engine, that they might chat amongst each other and feel as if their voice was being heard…

But over time, the blogging engine did grow in stature until such a day that it was revealed in its fullest glory, and verily did the VLE cower beneath the great majesty of that which came to be known as the WP_LE…

…or something like that…

Three posts, from three players, who just cobbled together something that could well work at institutional scale…

  1. New digs for UMW Blogs, or the anatomy of a redesign: an “anatomy of the redesign of UMW Blogs” (WordPress MU), describing sitewide aggregation, tagclounds and all sorts of groovy stuff on the homepage, along with courses, support and contact pages;
  2. Reuse, resources, re-whatever…: showing how Mediawiki can now be used in all sort of ways to feed wiki content into WordPress… (just think about it: this is the bliki concept working for real on two best-of-breed, open source plaforms…);
  3. Batch adding users to a WordPress site: “import users into a site. All you need to provide is a username and email address for each student and it will create the account, generate a password, assign the specified user Role, and send an email to the student so they can login”…

So what do we have here? WordPress MU and Mediawiki working together to provide a sitewide, integrated publish platform. The multi-user import “doesn’t create blogs for each student” but I think that’s something that could be fixed easily enough, if required…

Thus far, we’ve been pretty quiet here at the OU on the WordPress and Mediawiki front, although both platfroms are used internally… but just before the summer, as one of the final OpenLearn projects, we got the folks over at Isotoma to put together a couple of WordPress and WordPress MU widgets.

Hopefully we’ll be making them available soon, along with some demo sites, but for now, here’s a tease of what we’ve pulled together.

Now you may or may not remember the the Reverend’s edupunkery that resulted in Proud Spammer of Open University Courses, a demo of how to import an OpenLearn unit content RSS feed into a WordPress blog…?

Well we’ve run with that idea – and generalised it a little – so that you can take any of the OpenLearn topic/subject area feeds (that list a set of units in a particular topic) and set up each of the courses itemised in the list with its own WordPress MU blog. Automatically. At the click of a button. What this means is that if you want to create collection of course unit blogs using OpenLearn units, you can do it in one go…

Now there are a few issues with some of the links that are pulled into the blogs from the OpenLearn feeds, and there’s some dodgy bits of script that need thinking about, but at the very least we now have a bulk spamming of OpenLearn courses tool… And if we can get a fix going with the imported, internal unit blog links, and maybe some automated blog tagging and categorising done at import time, then there is plenty of scope for emergent uncourse link mapping across and between OpenLearn WP MU course units…

Using separate WordPress MU blogs to publish unchanging “static” courses is one thing of course – the blog environment makes it easy to comment and publicly annotate each separate unit page. But compare these fixed, unchanging blog courses with how you might consume a blogged (un)course the first time it was presented… Assuming that pages were posted as they were written over the life of the course, you get each new section as new post in your feed reader every day or two…

So step in an old favourite of mine – daily feeds. (Anyone remember the OpenLearn_daily experiment that would deliver an OpenLearn unit via a feed over several days, relative to the day you first subscribed to it?) Our second offerin is a daily feeds widget for WordPress. Subscribe to a daily feed, and you’ll get one item a day from a static course unit blog in your feed reader, starting with the first item in the course unit on the first day.

Taking the two widgets together, we can effectively create a version of OpenLearn in which each OpenLearn unit will be delivered via its own WP MU blog, and each unit capable of being consumed via a daily feed…

A couple of people have been trying out the widgets already, and if anyone else would like a “private release” copy of the code to play with before we post it openly, please get in touch….

Rehashing Old Tools to Look at CCK08

I haven’t posted for a few days (nothing to write about, sigh….) so here’s a cheap’n’lazy post reusing a couple of old visual demos (edupunk chatter, More Hyperbolic Tree Visualisations – delicious URL History: Users by Tag) to look at what’s happening around the use of the CCK08 tag that’s being used to annotate – in a distributed way – the Connectivism and Connective Knowledge online course

For example, here’s a view of people who have been using the cck08 tag on delicious:

People twittering mentions of cck08:

And here’s how people have been tagging the Connectivism and Connective Knowledge course homepage on delicious (along with te people who’ve been using those tags).

The next step is to move from hierarchical info displays (such as the above) to mining networks – grous of people who are talking about the same URLs on delicious and twitter, and maybe even blogging about CCK08 too…

OU Library iGoogle Gadgets

Just over a month ago, the OU web team released a “Fact of the Day” Google gadget that publishes an interesting fact from an OpenLearn course once a day, along with a link to the OpenLearn course that it came from.

(By the by, compare the offical press release with Laura’s post…)

The OU Library just announced a couple of OU Library iGoogle gadgets too (though I think they have been around for some time…)…

…but whereas the Fact of the Day widget is pretty neat, err, erm, err…

Here’s the new books widget. The Library produces an RSS feed of new books for a whole host of different topic areas. So you can pick your topic and view the new book titles in a gadget on your Google personal page, right…?

Err – well, you can pick a topic area from the gadget…

…and when you click “Go” you’re taken to the Library web page listing the new books for that topic area in a new tab…


[Lots of stuff deleted about broken code that gives more or less blank pages when you click through on “Art History” at least; HTTP POST rather than GET (I don’t want to have to header trace to debug their crappy code) etc etc]

I have to admit I’m a little confused as to who would want to work this way… All the gadget does is give you lots of bookmarks to other pages. It’s not regularly (not ever) bringing any content to me that I can consume within my Google personal page environment… (That said, it’s probably typical of the sort of widget I developed when I first started thinking about such things…and before lots of AJAX toolkits were around…)

This could be so, so much better… For a start, much simpler, and probably more relevant…

For example, given a feed URL, you can construct another URL that will add the feed to your iGoogle page.

Given a URL like this:
just do this:
which takes you to a page like this:

where you can get a widget like this:

Personally, I’d do something about the feed title…

It’s not too hard to write a branded widget that will display the feed contents, or maybe a more elaborate one that will pull in book covers.

For example, here’s an old old old old example of an alternative display – a carousel (described here, in a post from two years ago: Displaying New Library Books):

Admittedly, you’re faced with the issue of how to make the URLs known to the user. But you could generate a URL from a form on th Library gadget page, and assign it to an “add to Google” image button easily enough.

And the other widget – the Library catalogue search…?

Let’s just say that in the same way as the ‘new books’ widget is really just a list of links hidden in a drop down box, so the catalogue search tool is actually just a redirecting search box. Run a query and you’re sent to the Voyager catalogue search results page, rather than having the results pulled back to you in the gadget on the Google personal page.

(I know, a lot of search widgets are like that (I’ve done more than a few myself in years gone by), but things have moved on and I think I’d really expect the results to be pulled back into the widget nowadays…)

PS okay, I’m being harsh, it’s been a long crappy day, I maybe shouldn’t post this… maybe the widgets will get loads of installs, and loads of traffic going to the Library site… I wonder if they’re checking the web stats to see, maybe because they found out how to add Google Analytics tracking to a Google gadget? And I wonder what success/failure metrics they’re using?

PPS okay, okay – I apologise for the above post, Library folks. The widgets are a good effort – keep up the good work. I’ll be interested to see how you iterate the design of these widgets over the next few weeks, and what new wonders you have in store for us all… :-) Have a think about how users might actually use these widgets, and have a look at whether it may be appropriate to pull content back into the widget using an AJAX call, rather than sending the user away from their personal page to a Library web page. If you can find any users, ask them what they think, and how they’re using the widget. Use web stats/analytics to confirm (or deny) what they’re saying (users lie… ;-). And keep trying stuff out… my machine is littered with dead code and my Google personal page covered in broken and unusable widgets that I’ve built myself. Evolution requires failure…and continual reinvention ;-)

The Obligatory Google Chrome Post – Sort Of…

Okay, so I’m a few days behind the rest of the web posting on this (though I tweeted it early;-), and I have to admit I still haven’t tried the Google Chrome browser out yet (it’s such a chore booting into Windows…), so here are some thoughts based on a reading of the the comic book and a viewing of the launch announcement.

Why Chrome? And how might it play out? (I’m not suggesting things were planned this way…) Here’s where you get to see how dazed and confused I am, and how very wrong I can be about stuff ;-)

First up – Chrome is for mobile devices, right? It may not have been designed for that purpose, but the tab view looks pretty odd to me, going against O/S UI style guides for pretty much everything. Each tab in its own process makes sense for mobile devices, where multiple parallel applications may be running at any time, but only one is in view. Rumbling’s around the web suggest Chrome for Android is on its way in a future Android release…

Secondly, Google Chrome draws heavily on Google Gears. Google Gears provides the browser with it’s own database, so the browser can store lots of state locally. (Does Gears also provide a lite, local webserver?) Google Gears lets you use web apps offline, and store lots of state without making a call on the host computer’s o/s…

So I’m guessing that Chrome would work well as a virtual appliance…? That is, it’s something that can be popped into a Jumpbox appliance, for example, and run…. anywhere…like from a live CD or bootable USB key (a “live USB”)? That is, run it as a “live virtual appliance”. So you don’t need a host operating system, just a boot manager? Or if all your apps are in the cloud, you just need a machine that runs Chrome (maybe with Flash and Silverlight plugins too).

Chrome lets you create standalone “desktop web apps” in the form of “single application browsers” – a preloaded tab that “runs” Gmail or Google docs, for example, (or equally, I guess, Zoho web applications), just as if they were any other desktop application. The browser becomes a container for applications. If you can run the browser, you can run the app. If you can run the browser in a virtual appliance (or on a mobile device – UI issues aside), you can run the app…

Chrome makes use of open source components – the layout engine, Javascript engine, Gears and so on. Open source presumably makes anti-trust claims harder to put together if the browser starts to take market share; if other browser developers use the code, it legitimises it, as well as increasing the developer community.

On the usability side, the major thing that jumped out at me was that there’s a single search’n’address “omnibox” within each tab. Compare that to current browsers, where the address bar and search box are separate and above the line of selectable tabs.

It’s worth noting here that many people don’t really understand the address bar and the browser search box – they just get to Google any way they can and type stuff into the Google search box: keywords, URLs, brandnames, cut’n’pasted natural language text, anything and everything…

What the omnibox appears to do is to provide a blend of Google Suggest, browser history suggest/URL autocompletion, (and maybe ultimately Google personal browsing history?) and automagically acquired site specific opensearch helpers within a single user entry text box. (I love psychic/ESP searchboxes… I even experimented with using one on searchfeedr, I think?) I guess it also makes migration of the browser easier to a mobile device – each tab satisfies most of the common UI requirements of a single window browser?

A couple of other things that struck me while pondering the above:
– what’s with the URL for the comicbook? http://www.google.com/googlebooks/chrome/ What else can we expect to appear on http://www.google.com/googlebooks/?
– has Google taken an interest in any of the virtual appliance players – Parallels, VMware, Jumpbox etc etc?

Managing Time in Yahoo Pipes

In the previous post – OU News Tracking – I briefly described how to get a Yahoo pipe to output a “pubDate” timestamp in the “correct” RSS standard format:

Here’s the full expression (actually, a PHP strftime expression) for outputting the date in the required RFC 822 date-time format: %a, %d %b %Y %H:%M:%S %z

The Date Builder block is being applied to a particular field (cdate) in every feed item, and assigning the results to the y:published tag. But what exactly is it outputting? A special datetime object, that’s what:

The Date Builder module is actually quite flexible in what it accepts – in the above pipe, cdate contains values like “21 August 2008”, but it can do much more than that…

For example, take the case of the THES search pipe, also described in the previous post. The pipe constructs a query that searches the Times Higher from the current date back to the start of the year. Heres what the query looks like in the original search form:

And here’s what the URL it generates looks like:


sday is “start date”, emth is “end month”, and so on…

Posting the URL into the Pipe URL builder separates out the different arguments nicely:

You’ll notice I’ve hardcoded the sday and smth to the January 1st, but the other date elements are wired in from a datetime object that has been set to the current date:

Terms like “now” also work…

Taken together, the two date/time related blocks allow you to manipulate time constructs quite easily within the Yahoo pipe :-)

OU News Tracking

A couple of days ago, Stuart pointed me to Quarkbase, a one stop shop for looking at various web stats, counts and rankings for a particular domain (here’s the open.ac.uk domain on quarkbase, for example; see also: the Silobreaker view of the OU), which reminded me that I hadn’t created a version of the media release related news stories tracker that won me a gift voucher at IWMW2008 ;-)

So here it is: OU Media release effectiveness tracker pipe.

And to make it a little more palatable, here’s a view of the same in a Dipity timeline (which will also have the benefit of aggregating these items over time): OU media release effectiveness tracker timeline.

I also had a mess around trying to see how I could improve the implementation (one was was to add the “sort by date” flag to the Google news AJAX call (News Search Specific Arguments)), but then, of course, I got sidetracked… because it seemed that the Google News source I was using to search for news stories didn’t cover the THES (Times Higher Education Supplement).

My first thought was to use a Yahoo pipe to call a normal Google search, limited by domain to http://www.timeshighereducation.co.uk/: OU THES Search (via Google).

But that was a bit hit and miss, and didn’t necessarily return the most recent results… so instead I created a pipe to search over the last month of the THES for stories that mention “open university” and then scrape the THES search results page: OU THES Scraper.

If you want to see how it works, clone the pipe and edit it…

One reusable component of the pipe is this fragment that will make sure the date is in the correct format for an RSS feed (if it isn’t in the right format, Dipity may well ignore it…):

Here’s the full expression (actually, a PHP strftime expression) for outputting the date in the required RFC 822 date-time format: %a, %d %b %Y %H:%M:%S %z

To view the OU in the THES tracker over time, I’ve fed it into another Dipity timeline: OU in the THES.

(I’ve also added the THES stories to the OUseful “OU in the news” tab at http://ouseful.open.ac.uk/.)

Going back to the media release effectiveness tracker, even if I was to add the THES as another news source, the coverage of that service would still be rather sparse. For a more comprehensive version, it would be better to plug in to something like the LexisNexis API and search their full range of indexed news from newspapers, trade magazines and so on… That said, I’m not sure if we have a license to use that API, and/or a key for it? But then again, that’s not really my job… ;-)

HTML Tables and the Data Web

Some time ago now, I wrote a post about progressive enhancement of HTML web pages, including some examples of how HTML data tables could be enhanced to provide graphical views of the data contained in them.

I’m not sure if anyone is actively maintaining progressive enhancement browser extensions (I haven’t checked) but here are a couple more possible enhancements released as part of the Google visualisation API, as described in Table Formatters make Visualization tables even nicer:

A couple of other options allow you to colour a table cell according to value (an implementation of the ‘format cell on value’ function you find in many spreadsheets), and a formatter that will “format numeric columns by defining the number of decimal digits, how negative values are displayed and more”, such as adding a prefix or suffix to each number.

I’m not sure if these features are included in the QGoogleVisualizationAPI Google visualisation API PHP wrapper yet, though?

Also in my feed reader recently was this post on Search Engines Extracting Table Data on the Web, which asks:

what if Google focused upon taking information from tables that contain meaningful data (as opposed to tables that might be used on a web page to control the formatting of part or all of a page)?

What if it took all those data filled tables, and created a separate database just for them, and tried to understand which of those tables might be related to each other? What if it then allowed for people to search through that data, or combine the data in those tables with other data that those people own, or that they found elsewhere on the Web?

and then links to a couple of recent papers on the topic.

It strikes me that Javascript/CSS libraries could really help out here – for example structures like Google’s Visualisation API Table component and Yahoo’s UI Library DataTable (which makes it trivial to create sortable tables in your web page, as this example demonstrates: YUI Sortable Data Tables).

Both of these provide a programmatic way (that is, a Javascript way) of representing tabular data and then displaying it in a table in a well defined way.

So I wonder, will the regular, formalised display of tabular data make it easier to scrape the data back out of the table? That is, could we define GRDDL like transformations that ‘undo’ the datatable-to-HTML-table conversions, and map back from HTML tables to e.g. a JSON, XML or javascript datatable representations of the data?

Once we get the data out of the HTML table and into a more abstract datatable representation, might we then be able to use the Javascript data representation as a ‘database table’ and run queries on it? That is, if we have data described using one of these datatable representations, could we run SQL like queries on it in the page, for example by using TrimQuery, which provides a SQL-like query language that can be run against javascript objects?

Alternatively, could we map the data contained in a “regular” Google or Yahoo UI table to a Google spreadsheets like format – in which case, we might be able to use the Google Visualisation API Query Language? (I’m not sure if the Query Language can be applied directly to Google datatable objects?)

It’s not too hard then to imagine a browser extension that can be used to overlay a SQL-like query engine on top of pages containing Yahoo or Google datatables, essentially turning the page into a queryable database? Maybe even Ubiquity could be used to support this?