GSoC 2013: Week 10 of Grandham project

Last week I’ve been working on admin review feature to incorporate the new changes happened in the user end.

Screen Shot 2013-08-26 at 1.56.09 AM

With the addition of in-place editing feature, admins can now approve minor edits by actually looking the difference. They also have options to replace author/publisher if the previously set author was different.

Along with that, we now have an option to upload book cover. It can be found in ‘Add new book’ form. In the long run, it will be also appearing under each book cover(in book page) where user can upload a cover just like they edit other information.

Screen Shot 2013-08-26 at 2.03.44 AM

GSoC 2013: Week 8 of Grandham project

Last weekly I mainly worked on Search feature and admin interfaces. Here’s a quick review:

  • Experimented with various search engines like Sphinx, Ferret, etc and finally decided to use Solr with sunspot gem as it worked well with unicorn data without any configuration.
  • Wrote a general search backend interface for Grandham. We can plugin other search engines anytime as long as it communicated the way Grandham needs it.
  • Added Admin interfaces managing Authors and Publishers.

GSoC 2013: Week 7 of Grandham project

I couldn’t post the weekly updates regularly for the last two times since I was kept more busy than I had expected and the festive holiday that came in between. Here’s a quick review of what happened during the 7th week of GSoC.

  • Grandham got an UI revamp!
  • Integrated new theme.
  • Separate books / authors / publishers lists were implemented
  • Updated user sign in / sign up pages
  • Integrated database clear and fixed failing specs (It’s green now, yay!)

GSoC 2013: Week 6 of Grandham project

This week I’ve been mostly fixing bugs, refactoring code and building admin features. Grandham has built in checks to avoid duplication in Authors/Publishers now.

Submission Review Interface Grandham review page

We have a new interface this week –  A screen to review crowdsourced information submissions. Administrators can use this feature to control the information displayed to user. Currently every review item has 3 actions – Approve, Archive or Comment. Out of these, ‘Comment’ is a new feature which needs to be implemented. It will be helpful for the task force to generate discussions around specific submissions.


After a couple of rounds of refactoring, Grandham got a Code Climate score of 4.0 from 1.61! :)

GSoC 2013: Week 5 of Grandham project

Last week, I implemented different parts of the application including the basics of user authorization. Also did a work on refactoring the code base, our tests are clean now.

New features

We now have a page to display information of a specific book, which can be navigated from the books list. This page will eventually contain all the information, including location information and links to download the entire MARC data.

User authorization has been added to Grandham using the gem ‘devise’. Devise provides beautiful forms required for various user-authorization needs, I customized them to work with the look and feel for Grandham. Some of them are here:

Grandham sign in 2Grandham registration




(Social login needs to be implemented in coming weeks)

Our test suite was starting to clutter and due to a problem in factories the CI has been failing randomly. I’ve refactored the test suite and now it all works fine.


In other news, we have switched the browser to run tests from selenium – firefox to poltergeist – phantomjs. It helps us to run tests faster. Also I’ve updated our API and data import script.

GSoC 2013: Week 4 of Grandham project

Last week, I worked on edit book feature and design mockups.

Edit book feature

As you know from previous posts, we have Submission model to store every contribution from users. When an user submits a correction or an edit, it gets stored as a new Submission in submissions table which needs approval from task force to live. ‘Edit’ component of this feature was implented last week.

We have a few routes associated with this feature.

The following route is to post details for adding a new book. It requires language_id (language short code such as ML or EN) to associate the book to that language. Grandham creates new Submission and a new Book instance (with auto generated grandham_id) if submission to this route was successful.

 POST language_submissions_path - /language/:language_id/submissions

Next route is the edit book feature’s route. It requires book_id (grandham_id of the book) to accept information. It creates just a new Submission for the exising book. This submission will be available for task force to approve.

 POST book_submissions_path - /books/:book_id/submissions

Design mockups

Like I mentioned in one of my previous posts, I had drawn the design mockups for basic features of Grandham. The application will be in a state to go live when the features in design mockups are done.


We now have a live instance of app running in Heroku –

GSoC 2013: Week 1 of Grandham project

The first week of development which started on 17th of June essentially comprises requirement analysis, planning and API implementation.

Requirement Analysis

Though the basic requirements for Grandham were discussed a month before, it was necessary to have more clarity on the subject. I had a series of discussions with mentors on various aspects of application, especially on how this project would attract information from contributors of different competency. It was sorted out that normal user could provide just the basic information such as Title, Author(s), Publisher(s), Year, Pages, Edition and Description. Advanced users, who are competent with MARC21 format could contribute advanced bibliographic information through a specially designed interface.

As mentioned in the previous post, we had a meeting with Sri K. H. Hussain. Apart from inspiring and guiding us, he made us aware about the importance of having an API and integration with various library systems in existence. I especially remember seeing a live instance of Koha and its super complex MARC21 data input form. It will be really great if it could consume Grandham API and vice versa so that we would have proper data sharing between two information resources.


I had little confusions around how to store information. I was thinking of extracting basic information from complex MARC21 data to display in individual books page. But since it was decided that users feed them differently, we could easily store basic information separately and use them. Separate data models to store information as Key/Value pair were written, but I removed them all for the sake of readability and easiness. It was this period when we decided to integrate Bootswatch for front end CSS framework.

API Implementation

Books and Fields API were written during period using jbuilder. The data importer script was updated to meet the changes in the application.

GSoC 2013: Updates on Grandham project

A couple of weeks before, We (Anivar, Manoj and me) had a meetup with Sri K. H. Hussain who is a pioneer in library science. He has worked in many projects including earlier version of Grandham ( and has been a member of its task force. He offered guidance for development and his inspiring vision for this project helped us to fix the goals.

(The trip for the meetup was fun. Though it was for Google ‘Summer’ of Code, we got drenched in the heavy monsoon of Kerala ;))

Meanwhile the coding period for GSoC had started, It was time to fasten the development process and get the project up as fast as possible. I had drawn few design mockups and have started implementing them.

2. Single book 3. Add new book (Basic fields) 4. Sign Up 5. Sign In 6. Task force moderation 1. Home









Most of these designs are just helpers to assist in development to get the backend and features done. We will do proper styling and UX enhancements after implementing the backend.

Currently the application has the following features,

  • Basic books listing and API
  • Bootswatch integration
  • Dynamic URLs in Navbar according to the language selected
  • Add book form
  • Edit book (which would save the data as as a new revision)
  • Decent test coverage

Live instance of the application in development is running here –

Regarding the representation of binary MARC21 data in relational database, we had decided to convert it to MARCXML and then it shouldn’t be a problem to store. It needs a bit more research on how many attributes and data fields it would take to completely express MARC data, hoping to write a separate post on that later.

That’s all for now. Happy hacking, folks!

Hello Google Summer of Code 2013

GSoC 2013This summer I’m contributing to Swathanthra Malayalam Computing through Google Summer of Code 2013 by developing an application called Grandham, a bibliography data project. I’ve three mentors for this project, namely Anivar Aravind, Mahesh Mukundan and Baiju Muthukadan.

Grandham is essentially a web application to find, contribute and share bibliographic information. It will be serving as an enhanced version of the live application we have now – The new application will have support for multiple languages, MARC21 data format, RESTful API, Internationalization and a lot more.

May 27 – June 17 is Community Bonding Period and I’m using this time to discuss and finalize various parts of application with mentors. So far we have decided how the application should collect information from users and how it should organize and store them internally. We need to strictly follow a scalable architecture and avoid internal data duplications.

The project is being built with Ruby on Rails web framework and MySQL as database. The first phase of development includes designing the rest of application and completion of basic API. It’s pretty exciting to build this project, You can follow the development at githubHappy Hacking!