I have been getting many emails regarding isbn.net.in since I put it out 9 months ago. For example:

Hi Swaroop,
I am following your blog for last year.
I have visited and used ur isbn.net.in service. It is a good idea.

To easy of mobile phone buyers, I wanna create a application like isbn.net.in for the mobile phone availability and comparison.

Can i do this as a Final year project? Is it take that much work?
To create that what should I know!

I have knowledge in Open source softwares, LAMP and basic python (From A Byte of Python).

and this:

Hi Swaroop,

Love your site isbn.net.in!

I am planning to start an online bookstore to sell used books. I need help to acquire book info like title, author etc. based on ISBN. Will you be able to help? Do you have an API that I can use? I see that you use Amazon. I was not sure if Amazon would have the details for books published in India. Please let me know your thoughts. Appreciate your help.

I actually wrote isbn.net.in as a means of learning Ruby, so I had written some hacked-up code using Sinatra. As it was my first Ruby project, the code was very amateurish and was not something I wanted to share.

Since so many people have been asking how it works, I decided it would be easier to just open source it. I took this opportunity to rewrite it using Rails 3 and try out Heroku as well. So, voila, Rails 3, Heroku and using MongoDB for tracking background jobs (to do the screen scraping) means a brand new isbn.net.in that is now live.

And the source code is now at https://github.com/swaroopch/isbnnetin (Note that this software requires Memcached and MongoDB to run).

The code is under an Apache license, so use it as you please.

Now that the source code is out there, there are some contributions that can make the site better:

  • Detection of ‘out of stock’ / delivery time
  • Detection of extra shipping charges / other hidden charges
  • Mobile version
  • Any improvements to the web design at all (I suck at UI design)

I would love any help on the above. If you’re interested, please fork away and when you’re ready, send me a pull request on GitHub :-)

Still Spreading

I am surprised to still see the response to isbn.net.in, mainly because I do zero marketing, and yet I still get 1-2 emails per day about it. That is amazing considering that the site has been there for nearly nine months and I didn’t do much other than write a blog post about it. I don’t tweet it or facebook it and all that jazz. I guess it’s a case of “Build it and they will come”?

For example, it was featured in startup articles, it was even mentioned in interviews of new online ecommerce stores that are coming up.

My favorite part is that people are using it as a bookmark URL (which was a use case that I had in mind), see @xrivatsan, @PurpleFoodie and @Shalin10

And I get emails and tweets when the site used to go down for even a few hours!

Oh, and thanks for all the feedback:

Shashank ND says:

“isbn.net.in saves a ton of time when trying to buy books online. Indian e commerce needs more of them. Thank you @swaroopch.””isbn.net.in saves a ton of time when trying to buy books online. Indian e commerce needs more of them. Thank you @swaroopch.”

Swaroop Hegde says:

“Been searching for Kochan’s Objective-C book for a day now but hitting out of stock everywhere. And oh, Kudos to @SwaroopCH’s isbn.net.in”

Nandan Dubey says:

“http://isbn.net.in/ best site to compare price of the books visit it once before buying any online books”

Vinay says:

isbn.net.in is one simple and great site which is give you the best prices online. Great service for book lovers

The greatest flattery, though, is when it has inspired many other book price comparison websites.

For example, take the story behind mySmartPrice:

I chanced upon a book price search engine by Swaroop through a post on Flipkart. I will always remain thankful for that since I have gained a lot of insight by going through his blog. If you intend to ever start your startup then do subscribe to his blog.

A lot of users of Swaroop’s project liked the product. However many of them were asking for a way to start with the title of the book instead of the isbn number. I guess Swaroop has not made the changes since it was not his idea to start with and he might be busy with his new job at Infibeam. Coincidentally I am on the exit mode from my job to get into the startup phase.

One of the biggest inspirations for working on this project has been my own desire to prove to myself that I continue to be a geek even 5 years after I stopped coding to go to IIM Bangalore. There are many improvements that are required even now and I will talk about them in future posts. However I am already proud of the product that I have.

I will close this post by wishing myself and MySmartPrice luck and by thanking Tapas for introducing me to the wonderful blog of Swaroop and Swaroop for providing me such a nice homework to bring out the coder in me

There have been other sites such as MyDiscountBay that also seem to have taken inspiration from isbn.net.in. Update: confirmed via twitter.

And we seem to be spawning many more.

The irony is that I myself was inspired by isbn.nu. We all stand on the shoulders of giants :-)

Oh, and isbn.net.in is certainly just a side project, definitely not meant as a competition to these startups.

The single biggest crib that I hear is that one needs to know the ISBN number to use isbn.net.in – it seems that most people forget that I have a bookmarklet which solves that problem, sigh. I really don’t see the need to make a completely new search engine when all these ecommerce sites are already putting in effort to make a great search engine. But I guess people want everything online and don’t want to even use a browser feature, such is the Net effect! (If you do have an idea in mind how to solve this, as I mentioned before, fork away ;-))

This was my list of updates about isbn.net.in. Feedback welcome!

Update: Someone has written a Flipkart to isbn.net.in link greasemonkey script. Nice to see people building on top of isbn.net.in! On the same note, if you ever want to get the prices from isbn.net.in, just append .json to the URLs, example http://isbn.net.in/0142000280.json for the JSON data of the prices.

I find it surprising on how little time coders spend on their development environment (the “dev env”). And especially, I find it amusing that I can find, refactor and test code way faster than the Netbeans IDE users in my office, with just a shell and Vim setup.

So why is a good dev env necessary? Because we do searching, refactoring, editing and updating of code much more than appending fresh code, and this also applies to code that you wrote half an hour ago, because you will want to quickly refactor it when a new constraint, a new requirement, a new design or a new idea comes to your mind.

I learned this lesson while I was writing my Vim book. Since then, I have been investing quite a bit of time on my vimrc file, heavily customized to my liking.

To give one very quick example – I like the cursor to always be at the middle of the window (as opposed to at the bottom of the screen when you’re scrolling down), so that I can see the lines of code before and after the current line. To achieve this, you simply set scrolloff=999 and you’re done. A one-line setting, but it makes a world of difference in usage.

Extrapolate this to dozens of customizations and you have just optimized your environment for lesser time at the keyboard, lesser time fighting the editor, and more time on the actual code. You do not want to break your flow of thought because you’re unable to quickly switch between the right files (say, between the controller and the view files), and so on. [1]

These customizations are stored in .vim and .bashrc files, collectively referred to as “dotfiles”. I have been asked quite a few times by readers of my book to share my dotfiles, but I was not comfortable to share it because I felt it was too hacked up and did not have a good “base”.

So when I came across bash-it and vim-addon-manager, I knew they were good foundations and a good excuse for me to overhaul my bash and vim setups.

And lo, behold, my dotbash and dotvim repos (on GitHub).

These are my actual working environments at office and on my personal laptop, so if you don’t agree with some of my defaults, fork away.

Now, on to what is interesting about my setup…

What bash-it provides

bash-it provides great defaults and aliases, right from .. as a shortcut for cd .. and ... for cd ../.. to bash completion setups for git, rake, etc., and of course, a gorgeous theme to use:

Bash prompt

The best part though is it’s neat organization into aliases, completion, custom, lib, plugins, themes and template folders. That makes a big difference in the long run, for the same reasons why a cleanly modularized codebase is better than one giant script.

And it will get various new features over time contributed by the community, example, completion of server names for ssh.

What vim-addon-manager provides

vim-addon-manager provides a super-simple way to install plugins into separate folders and then use them all, instead of lumping all of them together into a .vim folder. Just add the name of a new Vim plugin to the list of plugins you want to load, and it will automatically fetch the plugin and install it for you! This makes it easy to play around with new plugins as well as a simple way of having the latest version of the Vim plugins.

I use vim-addon-manager, but there are alternatives – others prefer pathogen.vim and there is also Vimana which gives you an apt-get-like command to search for Vim plugins. Choose your weapon.

There are caveats to vim-addon-manager, mainly that all plugins don’t seamlessly work with it. For example, I couldn’t get pyflakes.vim to work with it, so I had to unzip pyflakes into my regular .vim directory to use it.

My Bash customizations

Ever since I saw gemedit, I wanted something like that for Python eggs, and I realized that it was easy because Python modules have a __file__ attribute that I can use, and I created my own egg_edit command to do the same trick. Similarly, I have my own sync command with the settings that I prefer, etc.

tmux setup

tmux is a modern alternative to GNU Screen which is a common arsenal in any Unix coder’s war-chest. I prefer to use tmux because it makes it easy to script sessions which makes it super-easy to start a new session working on a project. For example:

Put this as flask-boilerplate-tmux.bash into the custom folder of your bash-it/dotbash folder, and then you can run flask-boilerplate-tmux any time to start a new session to work on the flask-boilerplate codebase! ( Update : Check out Teamocil which will allow you to do the same with a simple yaml config file )

I have a highly customized tmux configuration which sets many good default settings, especially starting the numbering of the windows from 1 (switching between 0 and 1 is painfully because they are at the opposite ends of the keyboard).


A good Bash plugin to use is autojump which monitors which directories you spend most of your time in, and then makes it easy to jump to your most favorite directories using a simple j command.

Don’t forget to use jumpstat to see which are those directories. Also, bash-it/dotbash provides a command called rh that does something similar.

Note that I have started using autojump only recently, so I don’t have as much experience using it as the other tools.

My Vim customizations

I have a fairly customized vimrc, right from changing the status line to providing shortcuts like :A to copy the full buffer to the clipboard and :B for vice-versa, which I find it very useful in situations such as I am writing this article in Vim and can quickly copy/paste into WordPress when I am done with the draft. I also have a o shortcut to open a URL that the cursor is on, and many other goodies.

Vim plugins I use

There are three Vim plugins which are must-have for me:

First is command-t.vim which is a “fuzzy finder” to quickly jump to another file under the current directory.


Second is ack.vim which allows you to intelligently grep your source code for patterns and then jump to each occurrence in a split-window fashion.

My favorite feature is that I can search my code with :Ack --python or :Ack --ruby and it will ignore all the JavaScript libraries which can have the same variable or function names.


Third is conque shell which allows you to to create a split window which can be any interpreter prompt.

The best part is that you can use a shortcut e (assuming the default mapleader) to send the visually selected text to the interpreter prompt as if it was copy-pasted and it will execute it! This is incredibly helpful when you want to iterate the development of a multi-line function or fragment of code and you find extracting that code to a separate file and editing that file to be a pain (The interpreter prompts are designed for playing around with one-liners, they are simply not built for multi-line code).


I have the following lines in my vimrc to quickly create ConqueShell sessions:

command Shell :set nolist | ConqueTermSplit bash
command PythonShell :set nolist | ConqueTermSplit python

So, I quickly run PythonShell to create a new session.

Setups by others

For other Vim setups, see the Janus repo on GitHub which is used by Yehuda Katz himself. You’ll find many more on the dotfiles website.


I’m hoping this article will help Vimmers and Bash users to broaden their usage and help them be more productive, the same intention behind my Vim book:

“I used to play with vim for years. I think this book would have to save me much time if it was written 10 years ago! Anyways, thank you for this amazing work you are doing.”

— turky_samy (at) hotmail (dot) fr

If you like what you have read so far, then go ahead and install dotbash and install dotvim.

Bottom line:

“Give me six hours to chop down a tree and I will spend the first four sharpening the axe.”

— Abraham Lincoln

[1] The flip side though is that I have been told “You’re the most mysterious guy in this office. No one understands what you’re doing when we see you coding.” Heh. Hopefully, it is not as mysterious after this article.