Why Indians are good in software ?


I’m prompted to write this article, after I read this piece of information from a blog – Once the founder of Infosys, NarayanaMurthy was asked this question -“Why are Indians good at software”?

He answers as, “we are grateful to the British who came and taught us math, and science and software, that’s why we are good at it”.


This made me ponder on why India is natural choice for Software development for the world. It’s my inference that, Indians are specialized as a population to solve problems in subtle and complex problem domains. Here are the supporting observations, (other than cheap labour facilitated by currency exchange ratio ) –

  1. Many Hindu religious structures more than a millennium old, could not have been made without knowledge of advanced mathematics and engineering methods.
  2. Indians on average, are shorter and thinner than Europeans or Africans, which hints at many thousands of generations of civilized living (which took out out the need for physical exertion for survival)
  3. Every modern scientific discovery in Europe occurred only after Europeans discovered India. Before finding route to India, Europeans believed earth was a plane. (Refer : http://en.wikipedia.org/wiki/Vasco_da_Gama, http://en.wikipedia.org/wiki/East_India_Company and http://www.physicsoftheuniverse.com/dates.html).
  4. Cultural order – Indian/Chinese population has much lesser entropies (like divorces, same sex marriages, animal sex etc !), when compared to the West – which clearly hints to a strong cultural knowledge acquired and passed on through many thousand years of civilization.
  5. The whole world acknowledges that the decimal system originated in India (for that matter, even calculus and idea of  relative time scales).
  6. Sanskrit, the language of Vedas, is highly efficient and precise (compared to current European languages which have many ambiguities), hinting to the higher algorithmic aptitude of the society which created and used it.
  7. Mahabharatha war, (documented by Indian scriptures to have occurred before 5100 years, as per scientifically consistent Vedic calendar), clearly describes ability of learnt men then to calculate auspicious planetary positions.
  8. The Sanskrit poetic history also describes many conversations where people debate on the unity and interaction of individual consciousness with cosmic consciousness. Even during present days, human discussions seldom get more abstract that that :)



Ant-apt-repo : An ant task to create apt repository from .deb files

This is a simple Ant task (hosted here) to create an apt repository from within an Ant project. It is ported from the maven plugin – theoweiss/apt-repo.

This task is usually used with the debian package creation task ant-deb.


    <taskdef name="aptrepo" classname="com.codemarvels.ant.aptrepotask.AptRepoTask" >
            <fileset dir="lib/ant/apt-repo" ><!--all jar files in this project is expected to be found here -->
                 <include name="*.jar"/>
<target name="createRepository">
  <aptrepo repoDir="${debian.folder}/output/repository"/> <!-- keep all .deb files in this folder -->


  • Keep all .deb files you want to publish, in the repoDir folder.
  • The package listings will be created in the same folder, which can then be published using a web-server as a debian repository. (The URL to this folder will be the repository URL to be added to sources list)

How to use old an android phone as a wireless speaker ?

I recently converted an otherwise useless old android phone into wireless speakers (complementing an old wired 2.1 speaker-set I had).

The setup needs two phones, a 2.1 speakerSet and WiFi network. After searching and trying many Apps from PlayStore, this is what worked for me –

  1. In the old phone –
    1. Open Play Store.
    2. Search and Install SoundSeeder Speaker. (Free version. Note – Free version will auto disconnect after 15 mins of usage, after which you will have to pause and play again from your controller phone)
    3. Open SoundSeeder Speaker. Provide a unique name when prompted. Eg. “My wireless Speaker”
    4. Open settings (Android details button => Menu Opens => Settings).
    5. Make sure “Auto Connect” and “Stay Awake” are checked.
    6. Return to Android home.
    7. Open phone’s WIFI settings.
    8. In the advanced settings=> “Wi-Fi Sleep policy”, make sure the phone WiFi is always awake.
    9. Connect the speakers to this phone.
  2. In the current phone (using which you intend to play audio and control the speakers) –
    1. Open Play Store.
    2. Search and install SoundSeeder Player. (Free version)
    3. Open SoundSeeder Player. Provide a name for the device when prompted.
    4. Click on the speaker icon on top right corner.
    5. Click search Icon in the UI that opens.
    6. The name of the phone you configured before is displayed. Add it.
    7. Add your favorite songs to the player by clicking the Music Icon. Play one file and confirm its getting played on your speakers.

Thats it. You should be able to stream songs from your phone to the speakers via your old phone.

Note – Again, the free version does disconnect around every 15 mins, after which the controller phone has to pause and restart the music.

Sylvester–Gallai theorem – the intuitive proof

This article presents an effort to use Induction in geometry to prove Sylvester Gallois Theorum.

Theorem statement can be viewed here

For the proof, let us rephrase the theorem as follows –
(1) Given a finite set of points in Euclidian space such that any line passing through two of the points passes through at least one more of them, all points have to be collinear.

Let n be the finite number of points in the given set.

Base case:
Let n=3,
Given 3 points, such that a line containing two of them passes through one more of them, they are by definition, collinear.
Thus (1) is true for n=3.
Induction step
P(k) :
Let (1) be true for a given k points set.

For an external point in the same space to pass through any line passing through two of the points in the k-points set in P(k), it has to pass through the line passing through all of them.
Thus the only way to expand the given set of k points to a set of k+1 number of points, is to include an external point which is collinear with the existing points.
Hence all k+1 points of the expanded set are collinear.

Thus if (1) is true for n=k, then it is true for n=k+1

Thus by principle of induction, (1) is true for all n>=3.

Bring Tab bar to top of terminal in Konsole

Tab selector (tab bar) can be made to appear on the top side of terminal in Konsole  as follows –

  1. Menu Bar => Settings => Configure Konsole
  2. Select TabBar pane
  3. Set “Tab bar position” to “Above Terminal Area”

As you might have noticed now, you can make Konsole open new tabs adjacent to current tab by setting “New tab behavior” to “Put New Tab After current tab”

How to remove URL forwarding to Yahoo Search by or through Search.Conduit

Problem: The URLs including development/local ones are forwarded to Yahoo Search page by a Conduit plugin via their search.conduit portal (as seen from status bar message)

Reason: Spyware by Conduit (Anything that changes the settings of your computer without explicitly asking you, and sends out information from your computer without letting you know – is a spyware/malware indeed)

Fix: Available here : “http://www.techsupportall.com/how-to-remove-conduit-search/” (Download and run Adware-Removal-Tool-v3.8.exe from there. Verified working.)

AppFuse jetty:run throws error “ZipException: invalid distance too far back”

Problem: When running mvn jetty:run to launch jetty, Appfuse throws error “java.util.zip.ZipException: invalid distance too far back”

Reason: One of the jars in maven repository is corrupted.

Fix: (Kind of nuke all, but works)

  1. Delete repository folder from .m2 folder : rm -r ~/.m2/repository
  2. Add any local jars you may have added to repository
  3. From AppFuse project folder, run : mvn:jetty-run


  1. Find the offending jar from the exception stacktrace.
  2. Delete the folder containing the jar inside ~/.m2/repository
  3. Run “mvn install” or mvn:jetty-run.