FMIRO CCU’s public z39.50 server running on Koha ILS achieves 100% reliability on IRSpy.

Hosted by L2C2 Technologies, FMIRO becomes the 5th Indian entry into IRSpy’s global z39.50 directory.

We are happy to announce the z39.50 service of FMIRO CCU (FOSMA Maritime Institute & Research Organisation, Kolkata branch) has achieved 100% reliability as an open access z39.50 search target for bibliographic materials related to maritime and ship operations. With this, FMIRO CCU becomes the fifth publicly announced z39.50 server from India which is listed on IRSpy service provided by Index Data.

FMIRO CCU’s nascent library is hosted on L2C2 Technologies‘s cloud platform using Koha ILS. The FMIRO OPAC is available at : The collection at FMIRO is a specialized collection focused solely on topics related to maritime, marine engineering, ship building, ship operations and nautical sciences. It is still a very small collection that is quite literally growing by the day.

Host connection reliability

Host connection reliability measures the reliability of the target only in its ability to respond to connections: the display indicates the number of successful connections in the last two months, the total number of attempted connections in that time, and the percentage of successful connections. For example, reliability of 9/15 = 60% indicates that fifteen attempts have been made to connect to the server in the last two months, of which nine (60%) have been successful. [1]

About IRSpy

IRSpy maintains a global registry of information retrieval targets, about 1295 as per recent count (, supporting protocols like ANSI/NISO Z39.50 (ISO 23950) and SRU/SRW web services.

About Index Data

Short answer: The guys who publish the Zebra indexing engine and YAZ toolkit and software libraries.

Long answer: Since 1994, Index Data has offered software development, consulting and integration with a focus on search. Our pioneering involvement in open source and open standards dates back to the first release of the YAZ toolkit for Z39.50 in 1995. [2]


[1] IRSpy help: info/reliability

[1] About Index Data

The 5-Minute Series: Setting default messaging preferences for SMS alerts.

Presenting an use-case requiring setting the default messaging preference for SMS alerts sent by Koha.

The problem

Earlier in the day, my professional colleague and friend Joydeep Chanda asked a question. His Koha v3.22.10 installation (at Gurudas College Library) had turned on SMS alert service for its users. The library being a long time Koha user, presented a challenge. He had ~ 6000+ users, so now he and his staff had the unenviable task of having to update the smsalertnumber field in the borrowers table for these 6000+ users. I pointed him to a recent Facebook post by another friend Vimal Kumar Vazaphally. That solved part of his problem, but he still had to choose the default types of SMS messages to be delivered.


So, I pointed him to another post by Vimal – “Use of borrowers-force-messaging-defaults script“. But after a while he complained that while the borrowers-force-messaging-defaults script did set the SMS options, it also enabled *all* of them, he wanted SMS send option to be set only for CHECK-IN and CHECK-OUT.

Description of borrowers-force-messaging-defaults as included in its source:

If the EnhancedMessagingPreferences syspref is enabled after borrowers have been created in the DB, those borrowers won’t have messaging transport preferences default values as defined for their borrower category. So you would have to modify each borrower one by one if you would like to send them ‘Hold Filled’ notice for example.

This script create transport preferences for all existing borrowers and set them to default values defined for the category they belong to.

The solution

The answer lies in correctly assigning advanced messaging preferences by default to a patron category *and then* running the borrowers-force-messaging-defaults script. In order for the patron category edit page display the “Default messaging preferences for this patron category” sub-form, the system preference EnhancedMessagingPreferences needs to be enabled.

The Steps

  1. Check if the EnhancedMessagingPreferences is enabled. If not, then enable it.
  2. Go to Home -> Administration -> Patron categories and select the category to edit.
  3. Scroll down the Modify category form to the “Default messaging preferences for this patron category” section.
  4. Select the checkboxes against the SMSes you want to be sent by default for that category.
  5. Save the changes
  6. Go to a command line terminal and run the borrowers-force-messaging-defaults script. This will ensure that only the defaults are set.


See also:

[1] “Koha and key lessons of using transactional SMS in India” by L2C2 Technologies

[2] Press release about setting up of SMS alert service at Gurudas College Library.

[3] SMS-Send-IN-Unicel-0.01 at CPAN

Koha quick tip : Duplicating a bibliographic record for a multi-volume book

Yesterday a young colleague called up with a query. She wanted to know how she could create separate bib records for a multiple volume book (e.g. “The Complete Works of Swami Vivekananda” which comes in 8 volumes) by editing the following volume specific info:

  1. ISBN;
  2. page count and physical description;
  3. price;
  4. date of copyright / publication;

while keeping other common information same across the records.

I told her that do this, she would first need to catalog at least *one* volume (preferably the first volume) of the book and then simply duplicating the record and changing the fields she needed to change in each case. This feature is well-documented in the Koha Manual under “Duplicating Records” inside the chapter on Cataloging. Continue reading “Koha quick tip : Duplicating a bibliographic record for a multi-volume book”

FMIRO Kolkata partners with L2C2 Technologies to automate their new library.

FOSMA Maritime Institute & Research Organisation (FMIRO) selects L2C2 Technologies’ Koha support

We are pleased to extend a warm welcome to the newest member of our growing client-partner family in Eastern India – FOSMA Maritime Institute & Research Organisation (FMIRO), Kolkata, a maritime training institute. FMIRO Kolkata has gone live on Koha ILS 16.11 series on L2C2 Technologies‘s cloud hosting platform.


The Foreign Ship-owners Representatives and Ship Managers Association (FOSMA) was established in India in 1989 to represent foreign owners and ship managers operating in India. Taking in to account that the education, training and competence standards of seafarers is of primary concern and priority of all ship managers in India, the Association established a special purpose vehicle – “FOSMA MARITIME INSTITUTE AND RESEARCH ORGANISATION” (FMIRO), as a non-profit organization under section 25 of the Companies Act, 1958 (now Section 8 of the Companies Act, 2013).


When “sex” prevents a Koha ILS installation

This is a true story from a recently concluded Koha workshop. There were roughly ~30+ participants and about 15 – 18 computers for their “hands-on” sessions. The instructor-led “how to install Koha 16.11 on Ubuntu 14.04.5” was going along smoothly. However, suddenly all hell broke loose! Everyone, including the instructor were stumped right at nearly the last leg of ‘sudo apt-get install koha-common‘. The install would not complete due to three missing files. First the repos were changed and re-tried. Well… no go! That’s when I noticed that the error was 403 forbidden. Woah! I tried to manually download the files off the repos using a browser and all it said was an “Access denied!” error coming from the Squid proxy.

A closer look at the files gave the game away. The university’s content filtering rules on the Squid proxy was the cause. Apparently the files: (a) libmoosex-markasmethods-perl (b) libmoosex-nonmoose-perl and (c) libwww-youtube-download-perl were being blocked from being fetched. The first two were triggering a false positive on the pornographic filter (the “sex” in libmoosex) and the third was hitting the keyword filter “youtube”, since Youtube was blocked on campus!!!

With no easy way to work around the proxy for connectivity, I manually downloaded the three files using a standby unfiltered link on a single computer. Next I transferred the files on to a pen drive and manually copied them over into each system’s /var/cache/apt/archives and thus fooling apt-get into thinking the files were already downloaded by it. And that is how we saved the day! 😉


If you are planning a Koha installfest at an educational institution, please ensure that their content filtering proxy rules are tweaked before actually going ahead with the workshop.

DCB & BI Library, University of Kerala chooses L2C2 Technologies’ Koha hosting service

DCB & BI Library, University of Kerala goes online with Koha Integrated Library System.

We are pleased to welcome the Department of Computational Biology & Bioinformatics, University of Kerala as our newest client-partner from “God’s own country” aka Kerala – the southern most state of India. Earlier the library was running Koha 3.22 on an in-house (on campus) server. With this move, they are now fully hosted on the cloud and are running on the latest major stable version of Koha i.e. on 16.11.x series.

About DCB & BI

The Centre for Bioinformatics, established in 2005 and upgraded as the Department of Computational Biology and Bioinformatics in 2011, is a new generation inter-disciplinary as well as multidisciplinary teaching & research Department of University of Kerala, India. The centre offers a two-year innovative MSc (Computational Biology) programme and also 2 one-year MPhil programmes in (i) Bioinformatics (ii) Computer Aided Drug Design. The Department has researchers with vivid backgrounds (Electrical Engineers, Mathematicians, Physicists, Biotechnologists, Botanists, Bio-chemists, Computer scientists are some of them). The Department has its own premises with state of the art informatics laboratory and also a molecular biology and bio-electronics laboratory which provide a balanced training to multidisciplinary talents that the centre attracts. The Department library having a stock of over 2425 specialized books.

The Director is Dr. Achuthsankar S. Nair, who has lead the department since its inception and presently has 6 lecturers, an Emeritus Professor (Dr. Oommen V. Oommen), one Post Doctoral Fellow, half a dozen Project Fellows, 19 full-time research scholars and at any time, 30-40 masters students. The Department also has 2 adjunct Professors, in addition to visiting faculty and Erudite visitors [Prof. Dr. Johann Deisenhofer (Nobel Laureate – 1988) visited the Department on Dec 1-3, 2010, Prof. Martin Chalfie (Nobel Laureate-2008) visited on Jan 5-7, 2011, followed by Prof. Anders Liljas (Nobel Prize Committee Member) on Jan 20-26, 2011.

The Department is situated in the beautiful and green Kariavattom Campus made greener by the department’s “Trees for 2100 AD” initiative.

Source : DCB & BI website

Accessing the OPAC

While the online public access catalogue (OPAC) is presently available at, this will change in a few days once the dedicated domain procurement process is completed.

Don Bosco School, Park Circus partners with L2C2 Technologies to take their library catalogue online

The first K12 school in eastern India to adopt cloud hosted Koha ILS for their library.

It is our pleasure to welcome Don Bosco School, Park Circus, Kolkata as the newest member of our client-partner family in the eastern India. To the best of our knowledge, Don Bosco School is the first K12 school in entire eastern India to move to a cloud based Koha ILS installation. We thank Fr. Bikash Mondal, the principal, Fr. Anil Toppo (Asst Principal) and other officials at DBPC as well as Sri Anup Choudhury the young, enterprising librarian of the senior section, for their forward thinking.

About Don Bosco School (Park Circus)

Located at 23, Darga Road, Kolkata, India, is an all-boys English medium school imparting education from first through twelfth grade. Established in 1958, it is run by the Salesians of Don Bosco, which is a minority institution within the Catholic Church. The school operates under the Indian Certificate of Secondary Education board. The school officially opened on 15 January 1958 with an intake of 460 boys. The school now has an enrollment of 3000 students. It celebrated its golden jubilee in 2008. [1]


[1] Source:,_Park_Circus

Installing SMS::Send::IN::eSMS send driver for Koha ILS

An easy peasy HOWTO along with a few under-the-hood details explained.

Step #1 : Installing the SMS::Send::IN::eSMS module from CPAN

Login as a sudo user and start the CPAN shell using the command sudo perl -MCPAN -e shell. Install the driver by typing in install SMS::Send::IN::eSMS. If everything works OK, you should see output on screen similar to this:

cpan[1]> install SMS::Send:IN::eSMS
Reading '/root/.cpan/Metadata'
  Database was generated on Thu, 09 Feb 2017 09:41:03 GMT
Running install for module 'SMS::Send::IN::eSMS'
Checksum for /root/.cpan/sources/authors/id/I/IN/INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz ok
Scanning cache /root/.cpan/build for sizes
Configuring I/IN/INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for SMS::Send::IN::eSMS
Writing MYMETA.yml and MYMETA.json
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- OK
Running make for I/IN/INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz
cp lib/SMS/Send/IN/ blib/lib/SMS/Send/IN/
Manifying blib/man3/SMS::Send::IN::eSMS.3pm
  /usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 PERL_USE_UNSAFE_INC=1 /usr/bin/perl "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/checkloginpass.t .. ok
t/checkmsgdest.t .... ok
t/compile.t ......... ok
t/liveaccttest.t .... skipped: No login information available, skipping all tests.
t/pod-coverage.t .... ok
t/pod.t ............. ok
All tests successful.
Files=6, Tests=16,  1 wallclock secs ( 0.09 usr  0.00 sys +  0.99 cusr  0.07 csys =  1.15 CPU)
Result: PASS
  /usr/bin/make test -- OK
Running make install
Installing /usr/local/share/perl/5.20.2/SMS/Send/IN/
Installing /usr/local/man/man3/SMS::Send::IN::eSMS.3pm
Appending installation info to /usr/local/lib/x86_64-linux-gnu/perl/5.20.2/perllocal.pod
  /usr/bin/make install  -- OK


With the SMS::Send::IN::eSMS module installed, we’ll now set up the Koha side of things.

Step #2 : Making a one-line change to Koha’s

Assumption : That you are using a .deb package based installation. If you are using a git or a tarball installation you probably do not need this guide. 🙂

The code in file /usr/share/koha/lib/C4/ is what Koha uses to communicate with the SMS provider (in this case eSMS Kerala from KSITM) via the send driver. This code is capable of accepting two parameters i.e. (a) username and (b) password of the user with the SMS service provider via whom the user wants to send out the messages. However due to Telecom Regulatory Authority of India (TRAI) rules, in India we need to use three parameters, the third one being a mandatory, 6-character, nationally unique senderid allotted to every bulk transactional SMS sender in India. As of version 16.11 Koha can not handle this AS-IS.

Therefore, to make SMS work with Koha in India, we need to make a one-line change to the code. Look for the following code around line no. 80 of the file /usr/share/koha/lib/C4/

# Create a sender
$sender = SMS::Send->new( $driver,
                          _login    => C4::Context->preference('SMSSendUsername'),
                          _password => C4::Context->preference('SMSSendPassword'),

Add the following line : _senderid => C4::Context->preference('SMSSendSenderID'),, so that the code looks like this:

# Create a sender
$sender = SMS::Send->new( $driver,
                          _login    => C4::Context->preference('SMSSendUsername'),
                          _password => C4::Context->preference('SMSSendPassword'),
                          _senderid => C4::Context->preference('SMSSendSenderID'),

Save and close the file. Now login into the staff client and add the four necessary system preferences – (a) SMSSendDriver, (b) SMSSendUsername, (c) SMSSendPassword and (d) SMSSendSenderID. Now, if you are on Koha 3.22 or higher version (i.e. 16.05 or 16.11), you will find the first three under Patron preferences and you only need to create the last one i.e. SMSSendSenderID to complete the setup.



However, if you are still using Koha 3.18.x or 3.20.x series then you will need to create three Local use preferences i.e. SMSSendUsername, SMSSendPassword and SMSSendSenderID. Either way, set these four parameters to your actual settings and you are ready to go start using the installed driver.

N.B.This behaviour will change from Koha 17.05 onward (estimated release date May 2017) when the bug number 13029 – “Allow to pass additional parameters to SMS::Send drivers” becomes generally available as part of the stable releases.

Troubleshooting #1 – Missing ‘make’

‘Make’ is required to configure and install the driver. So, if you see an error that reads as

Running make for I/IN/INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz
Can't exec "/usr/bin/make": No such file or directory at /usr/local/share/perl/5                                                                                                             .20.2/CPAN/ line 2197.
  /usr/bin/make -- NOT OK
  No such file or directory
Failed during this command:
 INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz         : make NO

Exit from cpan by using the command exit and from the command line install make by entering the command sudo apt-get install make. Once make is installed, run sudo perl -MCPAN -e shell and then proceed with driver installation using the command install SMS::Send::IN::eSMS.

Troubleshooting #2 – CPAN index is out of date

After typing in the command ‘install SMS::Send::IN::eSMS‘ if you find yourself facing the error Warning: Cannot install SMS::Send::IN::eSMS, don’t know what it is., DO NOT panic! It happened to us on one of our test servers too 🙂

It simply means your CPAN index metadata is out-of-date, and you need to refresh the index by running the command ‘reload index‘. After the updated index is fetched, re-run the command install SMS::Send::IN::eSMS. It will work this time.

Good news for Koha users in Kerala : SMS Send driver for eSMS Kerala service released as Free Software (FOSS)

ANNOUNCEMENT: L2C2 Technologies has released the SMS::Send::IN::eSMS driver required by Koha ILS users using the eSMS Kerala service provided by the Kerala State IT Mission under a Free Software license. The development of the driver was made possible by the funding support of the State Librarian, State Central Library, Thiruvananthapurm (Trivandrum), Kerala, with KELTRON (Kerala State Electronics Development Corporation Ltd) acting as the facilitator. Any Koha library in the state of Kerala who are eligible to use the eSMS Kerala SMS service (provided by KSITM) can now freely implement SMS support using this driver.

With this release, it becomes the second open source regional SMS::Send driver now available to Indian Koha users that can be freely downloaded from the Comprehensive Perl Archive Network or CPAN.

Sending SMSes from Koha

For a long time now Koha has supported sending of SMS (short message service) text messages to library patrons and users about account creation, issue, return, fines, holds, overdues, purchase suggestions etc. To send out SMSes from Koha, we have to use the SMS service of a bulk transactional SMS service provider who provides that service.

What are SMS::Send drivers and why does Koha need them?

In order to communicate with the service provider’s messaging sending interface (also called messaging API), Koha uses a type of software called “SMS::Send driver”. The “catch” being that each service provider requires a different SMS Send driver. Sort of like the SIM card in our cellphones e.g. if we wish to use a Vodafone number we must have a Vodafone SIM card. However, unlike a SIM card the SMS::Send driver which is a software module written in the PERL language is not provided by the SMS service provider. Either one has to use a Free & Open Source send driver that already exists OR one has to write one by referring to (usually) the HTTP API of the SMS provider.

About eSMS Kerala

eSMS is an exclusive SMS Gateway established by the Kerala State IT Mission for use by various government departments for providing departmental services over mobile phones.

Downloading the driver

The SMS::Send::IN:eSMS driver can directly downloaded from CPAN by visiting or from L2C2 Technologies’s public repository on Github at

See also

1. “Koha and key lessons of using transactional SMS in India” –

Adding autocomplete support to MARC21 260 / 264 (imprint) fields in Koha

Adding auto-complete feature to Koha’s MARC21 260 / 264 field (Imprint – place, name of publisher, distributor etc) as a cataloging aid.

As per LC’s AACR2 (as well as RDA) instructions, the imprint information as captured in MARC21 field 260 (AACR2) and 264 (RDA) should be *transcribed* and not *recorded* using the principle – “Take What You See and Accept What You Get” [1]. As a result, the 260$a (place) and 260$b (publisher, distributor etc) are usually not handled as fields whose values are controlled using authorized values.

Up until 2001, the 260 field was a NR field. It was made repeatable to accomodate frequent publisher name changes.

Since the 260$a and 260$b are not usually guided by authorized values, it is noted (at least in the Indian sub continent context) that catalogers often make typographical errors while transcribing the data, e.g. “Pearson Education” may be inadvertantly added as “Peerson Education” or as even as “Pearshon education”, while “Kolkata” may have been entered both as “Kolkata” as well as “Kolkatta” or even as “Kolkhata”. Without authority control of the field, this cataloging quality check is often overlooked. Errors like this often end up affecting the result of advanced searches or custom SQL reports.

Luckily for us, Koha ILS uses jquery extensively while (via jquery-ui) provides for nice autocomplete widgets, like the ones we see in action when we type in part of the borrower’s name in patron search (checkout) or in the authoritiy headings search, where entering 3 characters triggers the AJAX based lookup with the option to select one of the offered list *OR* to type in our own.

AJAX stands for “Asynchronous Javascript and XML”. In simple terms it encompasses a set of web development technique that allows us to fetch and load data from a remote server into our currently open page, without requiring us to refresh / reload the page. [2]

Recently a client requested that we offer them a way to look up publisher names and place names (for field 260) already entered into their Koha instance, without having to type it all in every time. For example in their database they already had the following publisher names entered – “Pearson Education, Prentice Hall India, PacktPub, Press Trust of India” etc. Now they if they encountered an item that was from these publishers they should be able to pull up a list just by entering “P” into the 260$b field and then be able to select the one applicable. And if they encountered a publisher name say “Penguin Books”, they should be able to type it in as well.

Koha 16.11 ships with 3 (three) different scripts that show us how to achieve this. You can find out which ones these are by using the command `locate`. NOTE: You may be required to run `sudo updatedb` once before locate finds the files. For our requirement we modeled our script which we’ll call on /usr/share/koha/intranet/cgi-bin/cataloguing/ You can grab a copy of from L2C2’s github repo here [3]. The script returns a JSON based result set if results matching your input is found.

Remember that **every** script that Koha executes, needs it executable bit set, and so does this one. Therefore, do *not* forget to set the executable bit for the script with `sudo chmod a+x /usr/share/koha/intranet/cgi-bin/cataloguing/` before you proceed to the next step.

Step #2 : Enabling the fields

With the script in place, we now need to turn to IntranetUserJS system preference and enter the following jquery snippet to enable autocomplete in 260$a and 260$b :

  $( '[id^="tag_260_subfield_a"]' ).autocomplete({
    source: function(request, response) {
        url: "/cgi-bin/koha/cataloguing/",
        dataType: "json",
        data: {
          term: request.term,
          table: "biblioitems",
          field: "place"
        success: function(data) {
          response( $.map( data, function( item ) {
            return {
              label: item.fieldvalue,
              value: item.fieldvalue
    minLength: 1,
  $( '[id^="tag_260_subfield_b"]' ).autocomplete({
    source: function(request, response) {
        url: "/cgi-bin/koha/cataloguing/",
        dataType: "json",
        data: {
          term: request.term,
          table: "biblioitems",
          field: "publishercode"
        success: function(data) {
          response( $.map( data, function( item ) {
            return {
              label: item.fieldvalue,
              value: item.fieldvalue
    minLength: 1,

A video of autocomplete in action


By tweaking the script or even by completely re-writing it to use the various search functions shipped by Koha inside its /usr/share/koha/lib directory on a .deb package based installation, you can do so much more than possible with this simple hack. Happy hacking! 🙂 [4]