It all has started as a competence project. At Jayway we have a practice of combining competence development with developing of some useful applications that we would use in our company.
We have had under long time problems with our books. It was difficult to know what books we have, who has borrowed books, to find the specific book among many on book shelves etc.
So this project was about to find solution to these problems and at the same time contribute to competence development of the team members.
So at this time we have built following:
It is done with .Net Entity Framework: http://www.asp.net/entity-framework.
It was pretty forward and easy to build API. There were some problems with CORS (cross-origin resource sharing) which were solved by editing Web.config and adding custom headers.
API is deployed to Azure and only specific IP addresses are allowed access. Microsoft Azure SQL Database is used to store information about all our books. Database backup is managed by Azure.
We used Ionic with AngularJS to create mobile applications for Android, WinPhone 8 and iOS.
These apps were supposed to be client apps, so you can search books, scan books, borrow/return books. For barcode scanner we used Cross-platform BarcodeScanner for Cordova / PhoneGap.
At this moment hybrid apps are not distributed to Jayway people yet.
It was ported from Ionics/AngularJS app, all unnecessary parts were removed and it was customized to looks good at mobile devices as well. Login is via Google using our domain email accounts. Web app was much easier to distribute to people because it is only an URL instead of native mobile apps. Disadvantage of this solution is that there is no scanner for QR code.
It is native Android app with purpose to add new books to the library data base, edit or remove books. When you are adding a new book to the library, you first scan Bar code to get ISBN. Using ISBN a request is sent to google API to get info about the book and book form is automatically filled. Then we need to apply a self-adhesive label with QR-code to back cover of the book and scan it. QR code has information about GUID which become unique ID for the book. It is because ISBN could not be unique ID since we have sometimes several copies of the same title.
And finally we specify the placement of the book and add the book to the library.
QR code labels
Python script is developed to mass produce labels as this one below:
It is self-adhesive so it is easily applied to book cover. Guid is also human readable for easier control, no matter you have or not a scanner. Another positive side of this label is that now we know what books were processed and are imported to the database. At this moment we have imported more than 1000 books but there are more books at people’s homes which still need to be added to the library.
So how does it actually work in practice?
We have our bookshelves placed on different places in our office. Those places are numbered 1, 2, 3 etc.
Each bookshelf has its ID label as it is symbolically showed in example bellow:
Now, the first number in combination means placement, second is row and third column.
So, knowing placement of a book makes it much easier to locate it. You need to search among 20-30 books instead of thousands. And you do search in your web app to ensure the book is at the office and is not already borrowed by someone.
So when you search e.g. for some book about Python, you would get something like this:
You can see that placement is shown in the result list. We have also color coding here: green books are those that nobody has borrowed, blue books are those you have borrowed and red ones the books somebody else has borrowed (or booked).
Choosing one of them we get more information about the book:
Now we could get it from the specified place (3-5-1) and choose to borrow it.
Borrowed books are shown under ‘Return’ tab.
When returning a book, you have choice to put it on the same bookshelf it was last time on, or to edit placement.
It was a brief description of our book management system – Jay Librarian. I had great fun working in this project and I have learnt much. I hope you get inspired to make something similar in your company.