30 August 2008


I'm the top UK-based GoodReads librarian in August 2008:

28 August 2008

Nigella's Caramel Croissant Pudding

This is good, I made it last night. A bit heavy, but quick and easy. I think you could probably add raisins to have a bit more flavour.

26 August 2008

Shelfari bought by Amazon

I just noticed this blog post; so Amazon finally bought one of the new wave of literary social-networking sites I recently listed. I wonder whether they'll now do with Shelfari the sort of thing I suggested for aNobii.

I guess this might be a blow for LibraryThing, GoodReads and aNobii (but it might actually be the kiss of death for Shelfari if it's reduced to an Amazon shopwindow). However, as these things go, we might now see a move from an Amazon competitor to buy or partner with one of the other services.

Me, I don't care: the only service with a serious API is GoodReads, so I'll stick with it :)

GrEstimator - the web version

I finally bit the bullet and put online an interactive version of my GrEstimator script (which will soon see a new release, by the way).

The GrEstimator Web Service is currently very basic. You provide an email, a GoodReads ID and a shelf (or tag) you want to estimate, and the system will email the result (expressed in a currency of your choice, calculated with exchange rates from WebserviceX's Currency Converter).

The tool is beta ("almost alpha" really), so be gentle and let me know if it dies on you :)

Known issues:

  • you have to provide a numerical GoodReads ID, which is the one appearing at the end of the URL when you look up a user (e.g. "http://www.goodreads.com/user/show/1383164"). I've asked to be authorized to look up an ID by providing an email, and I'm waiting for the response; once I'm allowed, you'll be able to just provide the email you use with GR.
  • you cannot estimate more than 200 books on a shelf; this is a limitation of the GoodReads API.
  • books not listed on Amazon will be ignored.
  • it currently spawns a thread for each estimate. I have to implement a system of queues to limit the amount of threads running at any given time, just in (the remote) case the service becomes popular.
  • you cannot choose the output currency, it's USD only. This will be fixed soon with a new option. Fixed.
  • the result is based on average prices. I'll soon add an option to say if you want that or rather the maximum potential price (which really tends to be funny). Fixed.
  • the service does go through all the Amazon locales (.com, .co.uk, .de, .fr, .ca, .jp in this order) but only if item lookup fails on the previous locale. This means that, if I find a book on .com marked as unavailable, I will still consider it as "found" and won't repeat the lookup on a different locale. I actually just realized this as I was writing the post, it will be fixed very soon. Fixed.
Also on my TODO list:
  • producing a "blog badge".
  • pulling prices from somewhere else than Amazon.
  • an "update" feature of some sort would be nice.

24 August 2008

Bookmarklet to search Stockport Library (LibraryLookup)

I've always been a fan of the LibraryLookup project; it's a simple tool that, given an address containing a ISBN (e.g. an Amazon page), it will search your local library catalogue so that you can see if the book is available.

Unfortunately, the Bookmarklet Generator option for Talis-based systems doesn't work for my local library in Stockport (UK), so I googled a bit and found this post on a Talis blog, which gave me the correct syntax.

So, here's the resulting bookmarklet (drag and drop the link on your bookmark toolbar, check this link if you don't know how to): Stockport Library.

23 August 2008

The aNobii API is just a joke.

With the aNobii API, you can't retrieve the ISBN of a book. Seriously. This means there is no chance to use it to develop any serious mashup, so I'm abandoning the service.

I feel for my Italian friends, locked in such a hacked-together platform.

21 August 2008

How much is your bookshelf worth?

Just for fun, I wrote a little python script that will pull a feed of books from GoodReads and calculate their total worth according to Amazon.


The script allows for shelf-specific filtering and supports different Amazon locales, with output configurable to be in any currency. Due to a limitation in the GoodReads API, it will estimate only the first 200 books.

You can see it in action using the web-based version

Download: GR_Estimator 1.1

  • Release 1.1
    • Added support for multiple currencies
    • fixed a few bugs
  • Release 1.0
    • Initial release

Note to self

If you ever have to implement a service that needs the user location, don't rely on the address (messy, error-prone due to misspelling, nonstandard across countries...). Just use a GoogleMap widget and then store the coordinates, plus a free-form text field if you really need the address (e.g. for mailing etc).

This system will scale effortlessly and it will be much simpler to implement lookups like "people near you in a 5-miles radius". You might want to store the country in a separate field for i18n purposes, but even with that, you will have 3 fields (coordinates, free-form address, country) vs umpteen (house/flat number, block name, two or three lines which might not even be enough for some users, town, city, district, postcode with format differing by country etc etc...) which are very hard to use in a geo-aware way.

(This presumes that you are starting from scratch; if you have to bidirectionally interface with legacy systems, chances are that you'll need to stick with the bad ol' stuff).

19 August 2008

A lil' script

Since my itch is now scratched, I might as well make the code available: GenBooks 1.0 is the little script I used to generate my list of books by pulling my "favourites" shelf on GoodReads. It works with python templates and even embeds your Amazon Associate ID. Requires Python 2.5 (because it uses the new ETree module) and the Python Imaging Library 1.1.x. There is no license, it's all public domain. Have fun.

My favourite books...

... are now listed here. I generated the list while playing around with the GoodReads API and the Python Imaging Library. I'm trying to think of something else to build with the GR API... any suggestions?

17 August 2008

Pythonaro, oh-oh-oh

As you might have noticed I've moved this blog under pythonaro.com, and to celebrate the event I'm abandoning the blogger-supplied template. Things will break for a few weeks, bear with me.

16 August 2008

Tag your f***ing books!

After a few days wandering around "literary" social-networking sites, I'm feeling a bit frustrated by how people interpret their participation in a very solipsistic way. Listing your own books is half the fun, I get it, but certainly the other half is hooking up with other like-minded bookworm geeks; you should put in a little effort to make your shelf accessible to them. Why then few can be bothered to tag their books? Without tags, I'm left to dig through hundreds of items I don't care about, whereas even a little classification (like separating novels and non-fiction, or fantasy and contemporary) would go a long way to help me define that you like the same sort of harrypotterish works I (might or might not) enjoy.

So please, if you are serious about this sort of sites, try to tag your books, even a little bit. Splitting your shelf in groups containing less than 100 items would already be enough, especially if your collection contains 200+ editions of books blatantly plagiarizing JRR Tolkien.

The uncommon reader

The Uncommon Reader One of the best short stories I've read in the last few years, The Uncommon Reader by Alan Bennett is an entertaining parable on the pros and cons of being a citizen of the "republic of letters", explored through the eyes of the modern monarch by definition, Elizabeth II, the Queen of England. What is "the act of reading"? Is it purely selfish? Does it really improve one's life? How would it affect a person, especially one who is the very embodiment of life and action of an entire country? Is the act of writing a necessary consequence? This little page-turner will entertain and engage even the casual reader, and would be perfectly suited for a couple of hours to spare between opening a swimming-bath and having luncheon with the Archbishop of Canterbury.

15 August 2008

django on jython

You can now run Django on Jython, as announced by Leonardo Muñoz. Lovely. I really should go back hacking django a bit.

14 August 2008

"Which social-literary networking site should I choose?"

After a few days wasted switching between various sites, I have to pick one (or two, max) and stick with it, so I tried to determine which one had more chances to survive in the long run.

Data from Compete.com seems to say that GoodReads is winning the battle on literary social networking.

Librarything, despite a huge head-start (years), seems to be in decline, even though attention data suggests that the remaining members spend a bit more time on the site than the average GR member.

Note how aNobii seems to be such a minor player, even though it's the dominant application in Italy and probably lists more books than its competitors; I wonder if Compete's data is skewed towards US/UK visitors. It has to be said that aNobii is showing more velocity though, so it will be interesting to see how things fare in a few months.

Shelfari is also in the mix, still below Librarything but growing fast. The site is very well presented, but I hated that it used Yet Another Format to import books (apparently, more oriented to listing the condition of your books, which I guess has to be expected from a site backed by ABEbooks), and I couldn't be bothered to try it.


Shelfari: "If you exported your file from another site and Shelfari failed to import your library and if the file has a different extension than .txt, please change the file extension to .txt."

... because we are too lazy to do it for you.

Export your books from aNobii to GoodReads

This is a quick & dirty hack to translate your book data from the CSV file produced by aNobii to the format accepted by GoodReads (and LibraryThing, apparently). The main advantages of this approach are that you will maintain your reviews and rating, and if GoodReads fails to find a book it will tell you the title (whereas if you just use a list of ISBNs, it won't).
Cons: I couldn't be bothered to mess with strptime, so you might lose your reading date; also, all your books will be imported with the default status ("read" for me).

You can download the script from here, it works with Python 2.4 and 2.5 (probably 2.3 as well). Feel free to improve it, I scratched my itch so I'm happy as it is.

UPDATE 2012-04-12: Alper Çugun updated and improved the script; if you plan to actually use it, please get his version from his Github repo.

This should have been a review of LibraryThing...

... but I discovered that the site will only allow "free" accounts to enter 200 books, which is peanuts. Unsubscribed.

12 August 2008

Amazon should buy aNobii and let people use their Associate ID

My wishlist is growing exponentially since I started browsing my friends' pages on aNobii. It works better than the usual "spookily accurate" recommendation systems you find on shopping sites, because your friends' ratings carry much more weight than the simple act of buying an object (which is over-rated by bookshops, since they often don't have actual feedback).

I guess aNobii tries to make its money acting as referral from those same bookshops, I wonder how much they actually make. It would be really powerful if they allowed people to have their own referral ID embedded in "buy" links, so that I make money if my friend buys a book I recommended. I guess that, for this to really happen, Amazon should buy out aNobii (a small Hong Kong startup, from what I understand) and possibly rewrite it from scratch, but it would be a fantastic move.

10 August 2008

aNobii vs GoodReads

I've recently signed up to two book-listing, social-networking, web-2.0 sites, aNobii and GoodReads. The fundamental idea is shared by the two: you list and rate your books, then hook up with friends and fellow readers. Thoughts:

  • GoodReads is quite English-oriented; despite being able to distinguish between languages, the amount of non-English books is quite small. aNobii's catalogue is much better, possibly because it's the biggest player and so it attracts a larger crowd. This is more or less why I switched from GR to aN: several books that I had to manually add to GR were already in aN, and my friends were also there already. As it turns out, this is just due to the specific audience: aNobii's population is overwhelmingly Italian, so Italian books are easier to find there because they have already been added.
  • Adding a book to your list is fairly easy in both systems, but aN has several different interfaces so it feels somehow more adaptable to your own style. However, if the book is not listed or you want to edit details for an existing book, it's a pain in the neck to do it in aN, whereas it's much more easy to do in GR.
  • Annoyingly, if you mass-import lists of books, both sites aNobii won't tell you which ones failed to be added, so finding them becomes a game of patience. I know there are at least 5 books which are now in my GR account but aN failed to identify. aN also has a webpage-scraping feature that fails miserably on GR's pages. GR will report the failed books, as long as you supply the books' titles in the uploaded file -- if you only send ISBNs, it will not tell you which ones failed.
  • Consistency in metadata is clearly a challenge for both. aN annoyingly differentiates between title and "subtitle", so "serial" books end up all over the place. For example, "Batman: The Killing Joke" (which is a self-contained graphic novel) could (and does) end up as "Batman"/"The Killing Joke", "The Killing Joke"/"Batman vol.XYZ", or "Batman: The Killing Joke"/"vol. XYZ" (and obviously "Vol.X", "vol. X", "Volume X"...). Since in several UI screens only the title is displayed, it can become difficult to differentiate (I have several "Batman" listed, but which is "The Killing Joke" and which is "The Dark Knight Returns"?). GR doesn't feature this split, so it's easier for users to self-enforce consistency, somehow. This said, GR encourages you to add random details in parentheses appended to the end of the title, for example the particular imprint (e.g. "Il Fu Mattia Pascal (Classici Moderni)"), or version, or what you feel like mentioning, so it also adds an unnecessary random element.
  • GR's metadata includes binding, but it's an arbitrary and case-sensitive field, so you can have "hardcover", "Hardcover" and "Hard Cover" as three different modes. It would be much more useful to have a pre-populated listbox with the most common values, plus an "Other" option that will allow you to enter an arbitrary value.
  • GR's rating is 6-levels deep (from 0 stars to 5), aN's is only 4-levels (from 1 to 4 stars).
  • They both allow you to tag books with arbitrary words. In GR, tagging (or "shelving") is everything: it's what you do to distinguish "read" from "unread", for example; there is no mass-tagging feature yet, which is annoying, but it's faster to tag a single book from the master ("your shelf") view than it is in aN. Vice-versa, aN is much better when you want to tag several books at once, but a bit laborious if you want to tag a book from the master view (you have to go in "book view" first). Also, you can see aN was not built on tags like GR, it's clearly a feature which was added later in the application life.
  • aN has loads of features to define how you got hold of the book (even listing shops and libraries), and has an in-built lending/trading exchange, whereas GR only has a generic checkbox to mark the book as "I'd be willing to send/swap".
  • Both allow you to review books. Somehow it feels a more central concept in GR, whereas in aN you are pushed to define when/how you read the book rather than reviewing it.
  • The "social" features are a bit different. In both you have groups and friends, but aN also has (presumably American) "Neighbors", which is an euphemism for "stalked": people you don't know but you want to track anyway. The social aspect seems really more "inbuilt" in aN, which will show your "compatibility level" with friends and try to match you with people with similar shelves.
  • GR gives more relevance to authors, who can have their own page (and presumably some extra features). Just to name one, Neil Gaiman uses GoodReads.
  • Both have some sort of facility for bloggers. aNobii lets you use your Amazon associate ID, which is nice; however it's up to you to do all the CSS magic to integrate the widget with the look&feel of the blog.
  • aNobii is broken in Konqueror. GoodReads doesn't officially support Konqueror, but it works nonetheless (probably because they tested it in Safari, which is very similar).
  • aNobii's API is ridiculously useless, it doesn't even return ISBNs. GoodReads' API is much better, easier to work with and more complete.
  • All in all, GR seems to be more about listing and tagging your books, whereas aN is more about matching you with people with similar books/tastes/favourite bookshop.
So hum, there is no clear winner. aN looks slightly more feature-rich than GR, but GR feels more "open" than aN. Currently, my profile on GoodReads is less complete than my page on aNobii, but I'll try to keep them synchronized as much as possible. I've abandoned aNobii, mainly because it's a dead-end: it's very difficult to get any info out of it, the API is just a joke, and feeds are incomplete.

01 August 2008

It Only Works Because You're Here

New MJ Hibbett! And "GRATE" as usual!