Building the infinite library
One of my favourite films is Prospero's Books [1991] by Peter Greenway. It has these very luscious descriptions of these books which contain all knowledge. In many ways this project to visualise Amazon books was an attempt to visualise all human knowledge. All our ideas, all our views all our stories, all our concerns what makes us human all listed out. It would be pretty cool to see everything at once - the entirety of human knowledge. To survey the sum of humanities intellectual achievements.
Naturally you can’t if you think about the of number books in Amazon then that are more books than a pixels on a computer screen. The trick here was to work hierarchically, show categories and sub categories then only show the books when you get close enough to them. This was a variant of ‘level of detail’ rendering a trick used in many 3d games for a long time.
Zooming interface
The key to the project became the ‘zooming’ interface. In many ways it could not be simpler. The mouse wheel lets the used zoom in or out of the point selected by the position of the mouse. We did some experiments and it quite quickly became a very natural interface gesture. The interface also included dragging but very rapidly we noticed we just tended to zoom out move and zoom in. This was all knocked up in Java version 1.3? lets the user have mouse wheel message, very cool we could construct the whole thing as a web-page applet.
As far was we can tell the use of the scroll wheel mouse to orchestrate the zooming appears to be a unique contribution. There are other ‘zooming’ interfaces out there but the naturalness of using the interface appears to be novel.
After using the mouse wheel one of the project members decided to try this using the ‘two fingered’ drag on the Mac lap top mouse pad and discovered that this too was a very natural way to ‘move’ in the ‘depth’. We divided the code up, one class handles generic zooming and a derived class handles a more special ‘folder’ class. These could be folders of Amazon book categories or folders on a hard drive or UCL library (if they every let us see their stock data ha ha ha).
Hacking Amazon
The next stage was too read all the books on Amazon. Not as simple as you might think. Yes Amazon provide a nice XMLy interface but you can only make one call to Amazon once in every second. Reading the entire catalogue at this stage would take over a few months ( longer than the life time of the project). I signed up for a Amazon developer key and started to hack over the interface. We might not get every book but we could ask how many books where in each leaf category. I down loaded the general catalogue from http://www.browsenodes.com (thanks!) and then scanned each leaf entry for the number of books in that category. This would then make each leaf as big as the number of books which Amazon claimed they had in that area. Remember the number of books in Amazon keeps changing daily so this is a picture not a 100% accurate book keeping exercise.
Scanning Amazon took a week of having a machine keep asking ‘how many books in browsenode X?’. For this we could grab the ISBNs of the first 10 books ‘for free’(without a second call). This was enough to give an over view plus an idea of what the final version might look like.
By the way if you do scan everything then you get one big problem. The data would be several hundreds of megabytes and that’s not including the images.
Laying out
As made clear we wanted to have each category reflect the number of books it contained. The process was relatively simple ( in retrospect) each book was given a fixed size. Books where grouped in to deci-shelves ( amazon puts 10 books per page). Deci-shelves where grouped to fit into the category. The layout of the deci-shelves was done to approximate a golden ratio. That is the ratio of the height to the width was approximated to a the golden ratio and so be most visually pleasing and fit nicely (if possible) into a screen/window.
This leaves a large number of semi-reguar shapes to put together in some pleasing way avoiding as many gaps as possible. A precise description would take another web page (or a paper) but when done you get what you see (obviously).
Colours and Colors
One of the problems with ‘narrow’ navigation gives you a locational problem. We thought it would be good to give each primary(top level) category it’s own colour. Within a category the tone (saturation to colour buffs) changes to indicate depth or nested ness.