Category Archives: development

The app is with beta testers

We advertised for beta testers on the University Portal Service. 18 people requested to join the beta and about 10 have downloaded the application. We are using the TestFlight service to manage testers and distribute the application.

Beta testers create an account on the site and then register their device. We can then create a provisioning profile that allows the app run on their device outside of the App Store. We upload a version of the application to Testflight and notify the testers that the app is ready to download.


Last month I was lucky enough to attend the BiblioHack event at Queen Mary, University of London, 13th – 14th June, 2012.

BiblioHack was a two day event on hacking and sharing ideas about open bibliographic metadata. I joined a group that was working on the BibServer software. I wanted to extend the m-biblio software so that I could export my references to BibSoup, an instance of the BibServer software.

This involved:

  • Supporting the BibJSON data format.
  • Updating the user interface in the ‘Export’ part of the application.
  • Adding an user interface to capture and manage information needed to interact with BibSoup.
  • Add code to handle the interaction with the BibSoup server.

This turned out to be a really productive exercise.

I though the code for handling the export of data was well designed so that it was easy to add support for additional export format. My confidence wasn’t justified :). After trying to update the UI on Wednesday afternoon, I decided to spend the evening completely refactoring that part of the application. I was then in a much better position on Thursday to implement code that could send a bibliography to BibServer. At one point Mark MacGillivray of Cottage Labs was updating the BibServer software while I was updating the m-biblio software. We were *almost* there when we ran out of time. At the moment, I can send a bibliography to BibSoup and it will accept it, but BibSoup fails to display it. I’m not sure what the issue is and I’m waiting for Mark to have time to look at the issue from the BibSoup end.

Despite failing at the last hurdle, the m-biblio code for exporting was in a much better shape than before. In addition, I suspect getting the data to appear in BibSoup will be a simple fix.

Oh, I was interviewed at the event ..

DevCSI Bibliohack Interview: Mike Jones from UKOLN on Vimeo.

Sources of Bibliographic Data

For the app to work well it needs to reference reliable sources of bibliographic data. Already in progress is some code that is capable of pulling bibliographic data from the University’s library system Aleph via the XService API. But more are needed.

The question we need to answer is which sources to concentrate our efforts on in terms of 3rd party services to lookup ISBN numbers.

Initial feedback from members of the team and other developers in the University are as follows:

“I would rank Amazon below COPAC and British Library for bibliographic record accuracy as it is primarily for buying books which are in print, and the older out of print records are often sketchy ‘marketplace’ records.”
“Some 3rd party options.”


“I used COPAC and Amazon. However you ought to be able to use the British Library national bibliographic records now they’re open.”

These initial recommendations have given us a good starting point. We’ll discuss, test and feedback on findings in a later post.

Scanning Barcodes – supporting Telepen

One of the key pieces of information for discovering bibliographic data will be the barcodes on the books – either the barcode used by the Library at the University of Bristol or the ISBN numbers associated with the books.

It would be nice if we could take advantage of the camera on the device to scan the barcode and save the user from having to type the numbers in manually. There are a couple of libraries for scanning barcodes:

  • ZXing (Zebra Crossing) – a Java library with Android support. There is also a partial port to iOS that only supports QR Codes.
  • ZBar – a C library that has bindings for a number of languages and includes an SDK for the iPhone.

These libraries have good support for a number of formats such as UPC-A, EAN-8, Code 128 and QR Codes. However, they don’t support the proprietary telepen format that is very popular in UK academic and public libraries.

It therefore seems that one of the first key development tasks will be adapting one of the libraries to support for telepen barcodes.

Validating barcode numbers

It would be great if the app could send a barcode number to the web service without the user being forced to decide upfront what kind of barcode is being sent, e.g. a barcode used by the library or an ISBN number. Clearly, the service needs to know what kind of number it is dealing with to make a sensible decision on what bibliographic source to query.

I’m exploring the use of validators to help the service to determine what type of value we are dealing with. At the moment, the interface is pretty simple:

public interface Validator {
    boolean validate(final String value);

Basically, an implementation would take a value and determine whether or not it believes it is valid. The first implementation developed covers the barcode numbers used by the Library at the University of Bristol.

Barcodes at the University are ten digits long and follow the following format:

  • The first digit is the prefix and is always the number 1
  • The second through to the 9th digit will be from the range 0 to 9.
  • The tenth digit is the check digit and can range from 0 to 9 or be the character X

The validator can therefore declare any value it receives that is not 10 digits in length as invalid. It can also dismiss any 10 digit numbers that don’t start with 1. Beyond that we need to apply an algorithm that determines the validity of the check digit (tenth digit) against the other numbers (excluding the prefix).

Each number is multiplied against a relevant weighting in the following list: {7, 8, 4, 6, 3, 5, 2, 1}. Modulus 11 is then used on the sum of the weighted values to get a remainder. The remainder is then subtracted against 11 to get the check digit value. If the value is 10, then that is represented by the character X. Clear as mud?

So, for the barcode 1511075964, we ignore the prefix and multiply the next 8 digits against the appropriate number in the weightings list:

(5 x 7) + (1 x 8) + (1 x 4) + (0 x 6) + (7 x 3) + (5 x 5) + (9 x 2) + (6 x 1) = 117

Find the remainder:

117 % 11 = 7

Subtract from 11 to find the check digit:

11 – 7 = 4

Therefore, 1511075964 is a valid University barcode because the last number matches the check digit created by the algorithm.

ISBN 10 numbers have ten digits but use a different weighting to calculate the check digit. It will be interesting to calculate the probability of a clash – the possibility of a number being a valid University barcode number and a valid ISBN 10 number.