Thursday, April 09, 2009

Conveyor article on Culture 24

As lead developer of Conveyor, a web service to enable small museums and galleries to develop kiosk-based presentations, I feel justified in plugging a Culture24 article about the project.

Thursday, March 26, 2009

eHive - Odd name for a Collections Management System

Last night I went to a Culture Geeks talk about eHive, a collections management system (CMS) which the makers say is the first web based system of its kind. It was designed with small museums and galleries in mind as they often find themselves unable to use other CMSs because they're too expensive and/or they don't have the resources to manage and maintain it.

I can see the potential of this service for small museums and galleries but I'm not sure if eHive has got it right just yet. It's got a reduced set of the features that would be available in a full blown CMS, and this is a deliberate move to make the product more easy to use, but it still seems quite complex to me and this puts it somewhere in between being easy to use and being a good CMS.

Perhaps more CMS features could be sacrificed for the benefit of usability but I know how much importance museums give to correctly cataloguing their objects so I think I can understand eHive's predicament.

I would certainly recommend giving eHive a try out if you have a collection of objects that you want to catalogue and make available on the web. It's free for the first 200 objects.
I'm not sure I would have called it 'eHive' though.

Tuesday, March 24, 2009

Practical Plone 3 (pre review)

I've just started reading Practical Plone 3 which touts itself as a beginners' guide which teaches you how to get a working Plone site up and running quickly if you don't want to get involved in programming.

It's got an impressively long list of 13 authors including Martin Aspeli and Jon Stahl, with each author being responsible for individual chapters.

This seems like a good idea on the face of it as the combined knowledge and experience of that many people has got to be broader than that of a single author. But will it suffer from a lack of consistency as a result and will that affect the message?

I don't know yet but I'll post the answers here as soon as I do.

Thursday, June 28, 2007

Plone workshop, London, August 2007

For anyone interested in learning how to develop Plone sites there's a 5-day Plone workshop in London on 13-17th August 2007.

There's a fairly steep initial learning curve when it comes to developing and extending Plone. Although there's a lot of support available in the form of mailing lists, chat rooms, books and documentation on the Plone website itself, it takes quite a while on your own to get your head around such a large content management system.

That's why this workshop sounds like it would be useful to anyone with not much prior knowledge of Plone but who wants to get up to speed quickly. At nearly £1000 it's a significant investment. but I reckon it's worth it for the time it's likely to save doing it by yourself.

Plone used by Friends of the Earth

Friends of the Earth International (FOEI) unveiled their new Plone site back in April and I'm just getting round to having a look at it now. Visually it's quite plain, a little bit too blocky and it feels very flat on the page to me. I'm not a visual designer, but I probably would have at least thrown the odd gradient in there to soften it a bit.

One of the good things about Plone is the speed at which a fully functional content-managed site can be deployed but I think more effort should be put into skinning the public appearance. If nothing else, this would at least show others that it can be done. See the British Postal Museum and Archive site for example.

Interestingly, the FOEI site uses PloneMultisite to deploy content from a single editing base to multiple sites. I'm not up to speed on exactly how this product works but it sounds like something that's worth further investigation.

Thursday, June 07, 2007

ReadSpeaker in action

Following on from my ReadSpeaker without nasty page reloads post, the nice way of implementing ReadSpeaker that we developed has now gone live on the British Postal Museum and Archive's website.

Comments and suggestions about how to make it better are welcomed.

Tuesday, May 29, 2007

Demand Led Standards-based Development

I think Peter-Paul Koch's recent article on A List Apart
Evangelizing Outside the Box: Web Standards and Large Companies – ought to make more of the power that clients have in steering the progress of web standards.

The main thrust of the article, that high profile employees of large companies could and should be highly vocal evangelists for web standards in order to add momentum to the movement in general, is totally valid and I certainly wouldn't argue against it. Such evangelism is bound to have an influence on a significant number of developers who are yet to recognise the benefits of web standards.

But the incentives to adopt the good practices of their peers may not be strong enough to enduce most late adopters to put in the work to make the jump to web standards. Why should they bother if they can maintain a viable business using the same methods as they've always used?

However, if their clients demand the use of web standards, these same developers will have to adapt their methods or risk going out of business.

So its down to the larger companies (and everyone else) to educate their clients about the benefits of web standards so that, eventually, there'll be no demand for non-standards based development and anyone who doesn't adapt will become extinct.

ReadSpeaker without nasty page reloads

Readspeaker's a great service that makes it easy for any website owners to provide audio versions of their content on the fly. This is clearly preferable to re-recording content manually every time a couple of words get changed and the quality of the synthesized voice is actually very natural and lifelike.

Every implemetation of ReadSpeaker that I've seen works by providing a link near the text which, when clicked, either forces a page reload so that an audio player can be embedded or - and this is my personal anti favourite - opens a new page containing only the audio player and shrinks the browser window to the size of the player. Take a look at the O'Reilly Radar (click on the 'listen' link) or any number of examples on ReadSpeaker's site to see what I mean.

While in most cases it's probably true that having a badly implemented audio version of a page is better than no audio version, it is possible to implement ReadSpeaker in a nice, elegant and accessible way.

The reason why it's difficult to find any examples is that the ReadSpeaker documentation doesn't make it very clear that it's possible. However, it is possible to retrieve the URL of the generated mp3 file.

This means that it's possible to pass the mp3 url to an audio player that's embedded in the page when it first loads. If this is implemented with a suitable Flash mp3 player, the mp3 won't be downloaded unless the user decides to play the audio.

The way to retrieve the un-encoded URL of the mp3 is to make the following call to ReadSpeaker (if you want the URL to be encoded, set the 'type' parameter to 101):[CUSTOMER_NAME]rsone?customerid=[CUSTOMER_ID]&url=[URL_OF_PAGE_TO_READ]&type=100

where CUSTOMER_NAME and CUSTOMER_ID are supplied to you by ReadSpeaker when you open an account.

Your Flash player may be capable of using this URL as it is but if you need to pass the player an actual mp3 URL, you'll need to write a script to retrieve the URL of the mp3 up front.

Here's a Python script that I wrote for use with Plone but it should be easy to adapt to any other platform:

# Python script to retrieve the URL of an MP3 audio file from

# Import required functions
from urllib import urlopen, quote

def getReadSpeakerURL(customer_name, customer_id, page_to_read_url):
url_to_open = "" % (customer_name, customer_id, page_to_read_url)
mp3file = ''

fp = urlopen(url_to_open) # this retrieves a page containing the url of the mp3 file
mp3file = fp.readline() # this retrieves the mp3 url itself

# check for errors
except IOError:
mp3file = ''

# return two versions of the mp3 url, one with the URL encoded and one without
return (mp3file, quote(mp3file))

Then place the following HTML into any pages that you want to be ReadSpeaker-ed (this example is written for Plone so uses Template Attribute Language (TAL) syntax. Sorry if you're not familiar with this but I hope you can still follow it):

<div class="readspeaker" define="customer_name string:[CUSTOMER_NAME]; customer_id string:[CUSTOMER_ID]; rs_url_array python: here.getReadSpeakerURL(customer_name, customer_id, here.absolute_url() + '?hidereadspeaker=1'); rs_url_unquoted python:rs_url_array[0]; rs_url_quoted python:rs_url_array[1];">
<h2>Hear this page read out loud</h2>
<object type="application/x-shockwave-flash" define="flashplayer string:/flash/emff_comments.swf?src=${rs_url_quoted}" attributes="data flashplayer" align="middle" height="28" width="200">
<param value="" name="movie" attributes="value flashplayer">
<p>To hear this page read aloud, get the Flash Player from <a href="">Adobe's web site</a></p>
<p><a href="" attributes="href rs_url_unquoted">Download</a> - <a href="" attributes="href string:${here/portal_url}/help/index_html#readspeaker-help">Help</a></p>

This way you can have an accessible method of providing audio content without nasty page reloads.