Sunday, September 25, 2011

Good to know about Indian coins

I read this information about Indian coins in one Consumer magazine.
Indian coins are mainly produced in four cities:- Delhi,Mumbai, Hyderabad and Kolkata. The production in city puts an identification mark under the year of issue. Coins produced in:
1. Delhi - have a dot
2. Mumbai - have a diamond
3. Hyderabad - have a star
4. Kolkata - nothing beneath the year.

http://www.oceanofweb.com/interesting/facts-indian-coins.html

Tuesday, July 26, 2011

Alluring nature and Indian village farms

The rain is in full swing here and my friends of Shivashourya trekkers, Mumbai recently had a Panhalgad to Pavankhind - Vishalgad 2011 Padabhraman activity trek. They also visited waterfall in Marleshwar on their return journey. The trek was as usual fantastic. Unfortunately I was not able to join them due to some reasons. However, they sent the photographs to me. The photos reminded me of my last year visit (Paalakhi mohim) to the same place. I am sharing some beautiful nature snaps that my friends shared with me.







I remember one very good quote from John Muir about the nature - "Climb the mountains and get their good tidings. Nature's peace will flow into you as sunshine flows into trees. The winds will blow their own freshness into you, and the storms their energy, while cares will drop off like autumn leaves !"

Monday, July 25, 2011

Contributing to ScaffoldHub.org

Few months back, my colleague Pat Shaughnessy launched ScaffoldHub.org. It is a collection of Rails scaffold generators contributed by members of the Rails community.

The basic idea behind this website is to take rails standard scaffolding one step farther; it’s a gallery of different variations on the simple CRUD app that the standard Rails scaffold generator produces. Each of these is called a "scaffold."

Each scaffold might use a certain JQuery plugin (e.g. autocomplete or date picker) or Rails gem (e.g. Paperclip or Will Paginate). This is a great way to get a jump start on learning how to use that particular plugin or gem with Rails. In seconds you see something working in your app, and then you can take a look at the generated scaffolding code in detail to see how it works and adapt it to your needs.

Thanks Pat for building this site ! Pat has also written a nice blog about how to contribute a scaffold @contributing-a-new-scaffold-to-scaffoldhub

I contributed 3 scaffolds to Scaffoldhub.org. Initially, it took me some time to contribute my first scaffold to this site, however for rest of my scaffolds, it was really quick as I already knew the steps.

Here are my 3 scaffolds that you may want to try :-
(1) ClearableTextField - Standard Rails scaffolding with JQuery Clearable Text Field plugin. It shows up a cross icon to clear value when user inputs something in a form field and the icon disappears when you clear the field.

(2) WheelColorPicker - JQuery Wheel Color Picker scaffold adds color picker functionality to HTML form inputs in the round color wheel fashion. The Wheel Color Picker dialog appears as user focuses the input.

(3) Cleditor - The cleditor scaffold is based on CLEditor jQuery plugin which provides a lightweight, full featured, cross browser HTML editor that can be easily added into any web site.

Saturday, July 2, 2011

Something good to read !

After a long time, I got a chance to read two wonderful books - 'The old man and his God' and 'Wise and Otherwise'. The books are written by Sudha Murthy. She has shared her own real life experiences in such a beautiful narrative way that they touch your heart. The most important thing behind narrating these incidences is to pass on a specific message to the reader so that he/she can think over it, can relate the stories to his/her own life experiences and last but not the least can act upon it.

The stories such as freedom of speech, the journey, two faces of poverty, the grateful tenant, an old man's ageless wisdom, forgetting our own history, a bond betrayed on rakhi day, light as many candles as possible, bahut kuch hota hain, Salaam Namaste, crisis of confidence, etc. teach us many things. I am sharing some good thoughts from this book.

----
This is the reply that an old man from Kalahandi forest gave to Sudha Murthy when she showed him some Indian currency :
"This is just a piece of paper. For this paper, people fight, go away from our ancestral land,leave our forest and go to cities. Have we not led a complete life without the piece of paper? Our ancestors did. We are children of God, settled here happily without this paper. This is God's land. Nobody owns this land. No river is created by us. No mountain is made by us. The wind does not listen to us. The rain does not ask our permission. These are gifts of God. How can we 'sell' or 'buy' land, I do not understand. When nothing is yours, then how can you make such transactions?"
The writer ends this chapter with following question: Who is more civilized- this wise old man in the forest or those of us with our fingers on the pulse of the Internet?

----
Everybody should know his/her own capacity and strength. One should also know one's limitations. It is more difficult to recognize our weaknesses than our strengths. Don't aim for the sky. Keep your feet firmly on the ground and work around you. There is so much misery and gloom, but it is better to light a single candle than to remain in darkness. Try to light as many candles as possible.

----
Education means more than scoring good marks in exams or receiving certificates. Life is an exam where the syllabus is unknown and question papers are not set. Nor are there model answer papers. There are various types of questions that can come from any direction, but one should not run away. Education and financial independence are tools that can help us face difficulties, but confidence must be developed throughout life.

----
Each patient is precious. If a patient dies, it is just one more hospital death for the doctor. But for the unfortunate family, it is a permanent loss.

There are a lot of good messages like above ones in these two books. I am sure I have lit a small candle of interest into your minds, and you are certainly going to read these books if you haven't already. Happy reading ! :-)

Thursday, April 14, 2011

LogFileTailer - simple sinatra app

It is never too late to contribute. Following on my year 2009 post - sinatra - web application framework in ruby, I recently pushed that code to github @http://github.com/NiranjanSarade/LogFileTailer

Tuesday, April 12, 2011

Converting Unix newlines (LF) to Windows newlines (CR\LF)

In one of my earlier projects, I faced an issue with newline characters in csv file. The csv file generated on a unix system was uploaded to Windows system through sftp. However, the program on the Windows server was not able to parse the file properly as the csv file contained Unix newlines (LF) instead of Windows newlines (CR\LF) at the end of each line.

The problem is UNIX/Linux uses a Line Feed character (\n) as a line terminator while Windows uses Carriage Return\Line Feed pairs (\r\n).

For those who want to know what is the exact difference between CR, LF and EOL characters, here is a brief description :-

The Carriage Return (CR) character (0x0D, \r) moves the cursor to the beginning of the line without advancing to the next line. This character is used as a new line character in Commodore and Early Macintosh operating systems (OS-9 and earlier).

The Line Feed (LF) character (0x0A, \n) moves the cursor down to the next line without returning to the beginning of the line. This character is used as a new line character in UNIX based systems (Linux, Mac OSX, etc)

The End of Line (EOL) character (0x0D0A, \r\n) is actually two ASCII characters and is a combination of the CR and LF characters. It moves the cursor both down to the next line and to the beginning of that line. This character is used as a new line character in most other non-Unix operating systems including Microsoft Windows, Symbian OS and others.

I was able to resolve this issue with 'Sed' (Stream Editor). (http://www.grymoire.com/Unix/Sed.html)


The command matches the regexp pattern ($ - ending position of line or the position just before a string-ending newline) and replaces it with '\r' (Carriage Return). So the end result would be conversion from '\n' to '\r\n' which will support windows new line format.

Friday, April 8, 2011

Setting up Oracle XE locally for your Rails app

I recently pushed 'database_initializer.rb' to github @http://github.com/NiranjanSarade/oracle_xe_database_initializer. Please check its README for more information.

This can be used to set up your schema and other database objects in your local Oracle XE database. The script assumes that you have following set up on your machine :-

1. Oracle client
2. activerecord-oracle_enhanced-adapter gem
3. Oracle XE (http://www.oracle.com/technetwork/database/express-edition/downloads/index.html)

Thursday, March 24, 2011

Approach for Oracle view unit testing with Rspec

A View in Oracle and in other database systems is simply the representation of a SQL statement (select query). It provides access to a subset of columns from one or more tables.

In a rails migration, when you incorporate a view definition which represents data from multiple tables with multiple joins and multiple conditions, how will you ensure that the view is fetching the data that it is supposed to fetch? How will you test the view logic?

And here, Unit Testing plays a very important role. Today, I am going to tell you the simple approach that we can follow for unit testing the view definition with Rspec.

First, with rails convention, you will create the model class (which maps to the view name) extending ActiveRecord::Base.
You will then set up the test data as you generally set for testing other model methods. (You can use factory_girl or simple model methods)
The purpose is to unit test each and every column data of the view according to the joins and the conditions. It all depends on the view logic that you have written according to your business requirement. The view definition can include decode statements, group by/ order by clauses, oracle aggregator functions e.g. sum, max, etc., function calls from the view sql, if-else logic to name a few.

With this, you have all the unit level requirement specs ready for your view which you can validate by running your Rspecs. Simple but succinct ! Isn't it ?

Monday, March 21, 2011

Installing windows platform specific gem libxml-ruby with Bundler

I was facing some issue in installing 'libxml-ruby' gem on my windows machine with bundler. The entry in the Gemfile was :-

gem 'libxml-ruby', '1.1.3', :require => 'libxml'

This works perfect on unix machines, but fails on windows machine (which is my local development platform) during building native libraries.

The DevKit has already been set up on my machine. So I tried doing gem install first :-


So, I mentioned the platform while doing gem install and it worked as below :-

D:\>gem install libxml-ruby -v=1.1.3 --platform x86-mswin32-60
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
Successfully installed libxml-ruby-1.1.3-x86-mswin32-60
1 gem installed
Installing ri documentation for libxml-ruby-1.1.3-x86-mswin32-60...
Installing RDoc documentation for libxml-ruby-1.1.3-x86-mswin32-60...
D:\>


However, with bundle install, it gave the same error on the windows machine : ERROR: Failed to build gem native extension.
I tried specifying Gemfile :platforms option - 'mswin', 'mingw' for Windows platform, but it did not work.

Finally, the :path parameter rescued me out of the pain. With :path parameter, you can specify that a gem is located in a particular location on the file system. The ':path' option requires that the directory in question either contains a '.gemspec' for the gem, or that you specify an explicit version that bundler should use. So the bundler uses the gem from the source specified in the path and it resolved my issue with installing libxml-ruby gem with bundler on windows machine. The steps that I followed :-

(1) Download the libxml-ruby-1.1.3-x86-mswin32-60.gem gem from http://rubyforge.org/frs/?group_id=494 and do gem install
OR
gem install libxml-ruby -v=1.1.3 --platform x86-mswin32-60

(2)From app_root>gem unpack libxml-ruby-1.1.3-x86-mswin32-60

(3) Gemfile.lock :-

gem 'libxml-ruby-1.1.3-x86-mswin32-60', '1.1.3', :require => 'libxml', :path => 'vendor/gems/libxml-ruby-1.1.3-x86-mswin32-60'

(4) Now, when you execute bundle install, it will bundle the gem from the source specified in the :path -

Using libxml-ruby-1.1.3-x86-mswin32-60 (1.1.3) from source at vendor/gems/libxml-ruby-1.1.3-x86-mswin32-60

Wednesday, March 16, 2011

Moving on to Bundler to manage my Rails 2.3.9 app's gem dependencies

Recently I faced some gem dependency issues on one of our servers where we have a good amount of rails applications. (more Rails 2.3.x apps as compared to a couple of Rails 3.0.x apps). (This was a cruise box used by all apps to execute rspecs and generate metric_fu reports after you commit your code - Continuous Integration concept :-)

My app was using Rails 2.3.9, and due to some reason, I did not get a chance earlier to move my application to use Bundler for managing all the gem dependencies. Finally, I made it :-)

I followed 2 links :-
http://gembundler.com/
http://gouravtiwari.blogspot.com/2011/03/bundler-with-rails-222.html

Since then, I have not faced any gem dependency issues on any of the boxes.
So what are you waiting for ? If you haven't done it till date, do it now ... or you will spend (waste?) time in resolving weird gem dependency issues ... :-)

A good learning for me !