events inspiration

StoryCube Cairn

“A group converges on a location to build a StoryCube Cairn”

On Wednesday, Simon Pope, Gordon Joly, and Stefan Szczelkun joined us in the Proboscis studio, to talk about the StoryCube Cairn project, and embark on a group walk using a QR coded cube and a mobile phone as wayfinding devices.

Before the event, we were asked to devise walking routes to create individual cubes, each side featuring a QR code, linking to a particular geographic spot on an online mapping service (Google Maps, OpenStreetMap, etc) – a start point, four waypoints, and a destination. Using an API Gordon coded, and the bookleteer API, entering the six location URL’s automatically generated a StoryCube. My route, based around memorials and tributes in different forms is available here.

Meeting just after 2.00pm, Simon and Gordon gave a summary of the project, and a recap of the development process so far. We talked about the current limitations of Google Maps when creating the cubes, particularly the inability to share manually added, user designated routes with other people (they require two waypoints to locate the route), and had some interesting ideas regarding the next stage of the project. What about a mix of map links, audio files and videos – an interactive tour, scanning QR codes near points of interest to access audio descriptions and related videos? Or, a quasi treasure hunt, requiring players to obtain QR code stickers for the cubes (discouraging them from scanning all the codes at once – cheating!)  from certain spots to get the next destination?

We decided to use Simon’s cube for our first trial, his route focusing on locations acted on by “centrifugal and centripetal” forces – each point “acting as an attractor of sorts, which in some instances cannot be reached, yet which pulls the walker towards it”.

After departing from the studio, Giles scanned the first code to get our start point – the ramp under West Smithfield. Once there, we scanned the next spot, the middle of Charterhouse Square. All was going smoothly. However, after reaching the third spot, the omnimous brick circle in Golden Lane estate (the “Unplace” we featured in the City As Material: Streetscapes event), we were unable to load the next, despite trying with numerous phones – bad signal, or bad omen? Despite this, we were afforded time to ponder its unusual acoustic properties once again, and plot a cunning plan to subvert this synchronised failing of technologies… cheat!

Simon told us his next waypoint, the Curve Gallery in the Barbican Centre, which we arrived at via its winding walkways (after ceremonially scanning the code we missed). Another hurdle faced us here, as to gain entry to the exhibition, we were expected to don quarantine-esque shoe covers, and couldn’t enter as a group. Bah. The penultimate spot, another circle, on Monkwell Street, beckoned.

From there we were awarded our destination, the Museum of London, or more specifically, outside its entrance. Here, we asked if we were able to get into the recently renovated green space below, and were told “perhaps, but you might not be able to get back up!”. Rather than risk it, we retired to the pub right next door, content in a mostly successful first run of a StoryCube Cairn route.

We’re brimming with ideas for what might be possible next. Until then, view all our routes, and download the cubes yourself here.

news publishing on demand updates & improvements

bookleteer API

Just before Christmas we implemented a major new feature on bookleteer – an API (application programming interface) enabling eBooks and StoryCubes to be generated by users direct from their own web applications and stored in or downloaded from their bookleteer accounts.

Realising Tangible Souvenirs
This has been a long-cherished ambition for us – harking back to plans we made for linking the earlier Diffusion Generator to our Urban Tapestries public authoring and mapping platform in 2004 – where we imagined people being able to select or collate material on Urban Tapestries by theme or around a geographic place and outputting it in different paper formats (Diffusion eBooks, postcards and posters). This was the origin of our concept for creating tangible souvenirs from digital experiences – bridging different media (online/offline, digital/analogue) with the different capabilities that people have. Our experiences of working with local communities in social housing and other contexts showed us how important it is not just to be able to share things in many ways, but to tailor a range of modes of interaction to the capabilities and capacities of the people who had the knowledge and experience to share, but not necessarily the familiarity with web and mobile technologies to be engaged by the opportunities we saw them offering.

We’ve continued to develop our tangible souvenir concept through other projects – such as the Sensory Threads prototype – but the bookleteer API now represents a crucial milestone for us in building the links between our earlier work on public authoring and media scavenging and the current ecosystem of web technologies and public/open data initiatives. We hope to see lots of exciting ideas building on the first experiments – bookcubes – we commissioned from James Bridle last spring. Look out too for some forthcoming experiments by Simon Pope & Gordon Joly.

Accessing the API
Access to the API is limited for the time being to Alpha Club members and guest testers whilst we put it through its paces and explore how it can be used (our resources are rather limited for supporting it). We’re hoping to organise some events in 2011 where people can come along and explore what they might do with the API. In the meantime, if you’re taking part in Culture Hack Day this weekend (January 15th & 16th) then you can ask to test it out using the special account we’ve created for participants (ask the organisers for access details on the day).

If you do have an exciting idea for mashing up the bookleteer API with your own web service or public data please do get in touch, we’d love to hear from you and see how we can help.

examples inspiration making

James Bridle: Bookcubes and bookleteer API

A set of Bookcubes generated using the bookleteer API

James Bridle of was one of the participants at the Pitch Up and Publish: Augmented Reading a couple of weeks ago, and he talked a little about the idea of books as symbols and the related BookCube project he’d done using the bookleteer API.

Here, I’ll just give a summary of the project. James has written a post on describing the project which I really recommend you to read because it’s seriously interesting and covers more topics than I describe here…

James started with the idea that the lifespan of a book looks something like the drawing in the image above. There is a short period of the book-as-object acting as it’s own advertisement, then a period of time where you are reading the book and taking in the content, then during the final, and longest, amount of time the book-as-object acts as a souvenir of the reading period.

James has already begun to address the idea of digital souvenirs for eBooks with his bkkeepr project and with the bookleteer API he extended this to create automatically generated Bookcubes. These cubes display the information collected by bkkeepr and includes an image of the book cover. Over time James imagines the Bookcubes to build up on your shelf as a visible and tangible souvenir of your eBook reading. For bookleteer, this is an interesting tangent – instead of being an object to read it becomes an object that marks the fact that reading has taken place – and the content becomes separated from the form.


James Bridle : residency part 1

I used Bookleteer’s Storycube API to make physical souvenirs of ebooks, as described in my post on Bookcubes. In this post I’ll run through the code used to manipulate Bkkeepr data and send it to the API.

Bkkeepr pulls a bunch of data out, which includes your username, the book cover image, the book’s title and author, the dates you started and finished reading it, and the number of bookmarks you made in it.

The Storycube API only accepts images, not text, so if you want text you’re going to have to build it into images. Here’s a useful piece of code for creating images with text on the fly, using the GD Graphics library which is built into most versions of PHP. It’s not pretty, but it’s useful for quick prototyping of data into images:

$im = @imagecreatetruecolor(156, 156)
or die(‘Cannot Initialize new GD image stream’);
$grey = imagecolorallocate($im, 231, 231, 231);
imagefilledrectangle($im, 0, 0, 156, 156, $grey);
$text_color = imagecolorallocate($im, 0, 0, 0);
imagestring($im, 3, 10, 35, $title, $text_color);
imagestring($im, 3, 75, 50, ‘by’, $text_color);
imagestring($im, 3, 10, 65, $author, $text_color);

This code creates a new image of 156 x 156 pixels, colours it grey, then writes some text (“Title” by “Author”) in black across three lines, before saving the images to the ‘cubes’ directory, and wiping the temporary image. All these functions are well documented at – mostly, you just supply the text or colour for insertion, and a couple of reference points.

Exactly the same process is followed to write the start date, finish date (if applicable) and bookmarks panel:

$im = @imagecreatetruecolor(156, 156)
or die(‘Cannot Initialize new GD image stream’);
$grey = imagecolorallocate($im, 231, 231, 231);
imagefilledrectangle($im, 0, 0, 156, 156, $grey);
$text_color = imagecolorallocate($im, 0, 0, 0);
imagestring($im, 3, 10, 30, ‘Started:’, $text_color);
imagestring($im, 3, 10, 45, $started, $text_color);
if ($finished !== ‘0000-00-00 00:00:00’) {
imagestring($im, 3, 10, 70, ‘Finished:’, $text_color);
imagestring($im, 3, 10, 85, $finished, $text_color);
imagestring($im, 3, 10, 105, ‘Bookmarks: ‘.$bookmarks_num, $text_color);
$im = imagerotate($im, 180, 0);

Note that here we also use imagerotate() to spin this panel 180° so that it’s the same orientation as the book cover panel.

The next step is to send the completed panels to the Storycube API. First we need to get an authentication token:

$username = ‘USERNAME’;
$password = ‘PASSWORD’;
$token = file_get_contents(‘’.$username.’&password=’.$password);

Then complete a request array, including the authentication token, and send this via curl to Bookleteer:

‘title’=>$title.’ by ‘.$author,

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,’’);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS,$fields);
$result=curl_exec ($curl);
$content_type=curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
curl_close ($curl);

Note that the path to the images in the request array are prefaced by ‘@’ – this is because curl needs to upload the images to the remote server, and also means those need to be local paths: you can’t send a URL. All images to be sent need to be stored locally – which is done here by calling Amazon for the cover image and saving it locally (cubes/cover-image.jpg).

The Storycube API returns either a pdf, or an error code. So we check which it is via the content-type, and if all is well we save the file with a unique timestamp and offer it for download, or we print the error message:

if ($content_type == ‘application/pdf’) {
$filename = ‘bookcube-‘.time().’.pdf’;
$fp = fopen(‘cubes/’.$filename, ‘w’);
fwrite($fp, $result);
echo ‘Done: Download‘;
else {
echo $result;

And that’s it.
James Bridle, April 2010


Bookleteer Virtual Residencies

Since the alpha version of bookleteer went live last September we’ve been discussing with a number of friends and colleagues what we can do to demonstrate the API (Application Programming Interface) – which allows other applications, sites and systems to interface directly with the Generator, the engine behind which generates the PDF files for eBooks & StoryCubes.

Following several years of successful residencies with writers and artists using the old Diffusion Generator to create and publish eBooks of their own, we decided to offer two ‘virtual residencies’ a year to creative individuals to play with the API and show what can be done with it – creating eBooks and StoryCubes from other data sets and web applications.

Our first two virtual residents are James Bridle and Simon Pope. James has already used the API to interface with his own project, bkkeepr to create ‘bookcubes’ (more details to follow in a separate post) and Simon is working on a project combining walking, cairns and StoryCubes.

Whilst bookleteer is in alpha, access to the API will be private – though we welcome people to get in touch who have a specific use in mind and would like to test it out. We’ll be commissioning two further virtual residencies later this year.