How much math you need for programming

December 5, 2014 at 10:47 am | Posted in art, Hacking, Patterns, Programming | Leave a comment
Tags: , , , , , , , , ,

Whenever I wanted to learn Algorithms, Mathematics used there somehow seemed to be an obstacle. I admit my Math is not that good but it ain’t that bad either but this “ain’t bad” level of knowledge was not enough to compete in interviews with the Big Four when it comes to their level of Algorithms and the time and space complexities involved and comparisons of sorting and searching techniques. I needed to learn all these and in that search I came across several articles written on Mathematics required for programming. When it comes to programming, most loudly known math-proponent is Steve Yegge. Here is what I have found on Math required for programming:

  1. Steve Summit notes on Math (author of brilliantly written C-FAQs)
  2. Steve Yegge who has written two articles Math Everyday and Math for Programmers
  3. Eric S. Raymond talks about how much math you need to become a Hacker
  4. Paul Graham on Math
  5. Evan Miller’s article as reply to 3 authors above
  6. Steven Noble wrote an article as reply to Evan Miller’s example of calculating fibonacci numbers

If you do not read all of those above then you might miss the intent of my blog post. As per Steve Summit, Eric Raymond and Paul Graham, you do not need to focus much on Math to become a brilliant programmer, a hacker (Wikipedia definition and Eric Raymond’s article on definition of a hacker). Steven Noble says you should learn a little bit of Math and Evan Miller somehow seems to agree with all of them with a bit of twist. I myself started programming just for the love of it.

Since 2009, I am programming professionally mostly in C, sometimes in C++ and almost always on Linux and sometimes on UNIX. My passion for programming has made me read and write code in many different languages where I had to learn different ways of thinking. Writing code is easy, thinking along the lines of the paradigm on the top of which a particular language was modeled is a tough, daunting and very time consuming task. What I have experienced is: Computer Programming is not Math. Let me say it again, computer programming is not Math and will never be. You want to learn computer programming, then learn computer programming. Do not flip through Math books, read whatever is written on a particular newsgroup (comp.lang.c, comp.lang.lisp for example). Use a news reader like Pan:

http://pan.rebelbase.com/

Read about all the software that came from GNU and use Linux distro exclusively for everyday tasks (I prefer a distro with least amount of binary blob). If you are learning lot of Math because you want to learn computer programming then you are confused and headed in the wrong direction and you will not learn much of programming.

As computer programmers, we write programs, but why? We write programs to solve problems of this world. That is what computer programmers do, they solve problems.

Now what does does a mathematician do? He tries to understand nature and uses mathematics as a language to do that. Mathematics has helped solved many problems of this world. Look at what Quantum Physics, a branch of physics that has literally changed our millennia old assumptions about atoms, is heavily dependent on Math. Math is everywhere, from chemical industry to societal problems we use Statistics. Take any part of your daily life and you will see how deeply it is influenced my Math. Math has been used as the most prominent vehicle not only to understand nature but also to solve problems of this world. There is a reason for this, all these properties are just inherent in Math.

I was not good at Math, so I was trying to solve the problems I was facing everyday as a programmer using my intuition, common-sense, flow-charts and more other kinds of diagrams. This went on for few years and I came up with some rules and ideas on which I was building a model to solve problems. Building up this model had one aim: to be extremely clear and very brief on what the problem is and same for solution. I was creating a model, to which you will feed a problem as input and it will produce a solution as output using English language, flow charts and lot of other kinds of diagrams I created. This model had certain assumptions, rules and conditions, which again were very clear. Clarity and simplicity were high on agenda. It was a kind of a general, abstract mechanism to be applied to problems to get solutions. Now a few months back, after I read all these Math articles I came across one more article from Evan Miller titled Don’t Kill Math which was actually written in response to Kill Math by Bret Victor.

These two article hit me very hard. First, Bret was trying to do the same thing I was trying from few years, though he was more successful than me in producing something. I could never come up with some solid model which could have been used by everyone and here is Bret who has already done that. Was I happy, yes, because I found what I was looking for and I was ready to follow Bret’s footsteps but I never did. Why?

There was a reason I could never come up up with a solid model. I always thought it lacked something. No matter what I did and how much I worked on it, I always felt that something very fundamental and basic is lacking. Whenever I studied Schrodinger equation, Maxwell’s equation, Newton’s laws, Kepler’s laws, The Uncertainty Principle or Shulba-Sutras, I always felt that all those equations are complete but my model does not. Both of these articles Kill Math and Dont’ Kill Math made me realize what is that completeness. It is the properties of Mathematics mentioned in Don’t Kill Math. The questions Evan asked in this article and the way he has explained in very simple and basic details, concluded my search for a model. Math is a terse, succinct and concise method to solve problems and understand a phenomenon. These brutal characteristics are inherent to Math, just like soul is inherent to every being. With Math you can solve problems in a much shorter and better way than not using it.

This brings me to a very basic question: Why did I hate math? It was the way math was taught to me in school and college. I was taught rote-math, not real math. It is the fault of school, fault of our education system, not of the student. Coming back to the primary question of whether we need Math for becoming a great programmer, this is how tho world solved its problems in beginning:

math-1

Then came Math and this is what most mathematicians did:

math-2

And this what almost all computer-programmers/software-engineers/developers do:

math-3

Evan Miller says you can become first rate hacker without using a lot of Math and I think he is right and that is in agreement with all other authors. The point he stressed was role of Math in solving problems of this world, that Math is brutally efficient in solving real world problems. As programmers, we solve problems, but if we solve problems using Math and then apply programming solutions to the mathematical model of the solution, then we can have some amazing ways of providing better solutions that will make our lives easier as a programmer (kind of side-effect):

math-4

I conclude this blog-post with:

  • You do not need math to become a first-rate programmer because we do not use much of Math directly. If you want to become programmer then learn programming. Computer programming is very different from mathematics, and as a computer programmer you have to focus more on how to write better programs, how to think in a particular paradigm (e.g functional, OO, Generic, Procedural, logical, declarative etc), find better ways to create software, you need to understand design-patterns, not to mention learning and using C for few years will add new dimension to your thinking. All these are not related to math in anyway. You need to learn these first and it will take you few years before you get a grip at them and then you can learn Math if you want. Read Introduction to Progrmming using Emacs Lisp by Roberrt J. Chassell to know how the problem of creating a customizable, self-documenting, ever-extensible real-time display text-editor was solved. Read GNU Make Manual and find out why does it need M4 and Autoconf.
  • Math is the most widely used vehicle to understand the nature and solve problems of this world. We can learn more ways of solving problems by learning mathematical methods. I myself have started studying probability because like Steve Yegge said, once you understand Math then you can look at the problem and see whether it a probability problem, calculus problem or statistical problem etc. Math is related to the nature of the problem, not nature of software, software has its own methods and tools of solving problems, keep that in mind.

Copyright © 2014 Arnuld Uttre, Hyderabad, Telangana – 500017 (INDIA)
Licensed Under Creative Commons Attribution-NoDerivs 3.0 license (a.k.a. CC BY-ND)

The Emacs Way of understanding Humans and Computers

November 30, 2014 at 10:28 pm | Posted in Patterns | 1 Comment
Tags: , , , ,

I was using gNewSense frow sometime now and one thing about softwares endorsed or created by FSF is that you get to know some amazing ideas or some incredible ways of solving some problems that you never came across before and you might never come across anywhere. For example, take icecat, it comes default with libreJS add-on installed. Generally we think an OS can control your machine and then you. After using libreJS I see how you can use javascript in a web-browser to control the user, without giving any hint at all. User will use his computer for 10 years and for those 10 years he will not have slightest of the idea that he is being controlled. Then I came across duckduckgo search engine and then ThinkPenguin router with 100% Freedom and then h-node  and now gNewSense.

When I used Emacs first time, in year 2006, after few weeks of usage I came across The GNU Project (open Emacs and press “Ctrl-h g”). That one keystroke changed my life. I got hooked onto Linux forever (or GNU/Linux as RMS calls it). Since last few years, I have never used/installed any proprietary OS on my machine, my machine runs only on Linux, yes, no other OS, only and only Linux (something that majority of Software Engineering students and professionals are always scared to do). Just few months back I came across gNewSense and from there I came across one gNewSense BlogPost, an introductory book on programming in Emacs Lisp written by Robert J. Chassell. For those who don’t know, Emacs is one of the most (if not the most) advanced text editors available. If you make a list of top 20 software ever created with best design ideas then Emacs will be one of them (and Apache web server will be there too along with several software starting with letter “g” 😉 ). Emacs is written using Emacs Lisp (a dialect of Lisp) while some parts are written in C for portability/efficiency reasons. I am using Emacs all the time for writing code but I do admit I hardly make effective use of it. I think I use may be 10% of its power. I always wanted to learn more and the book written by Robert seemed like a decent start. I am already writing code from few years now and Robert mentioned that it is “not for experienced programmers” but I am reading it anyway because I always wanted to understand Emacs and then this book is so interesting and engaging and I can not seem to put it down. It is as much interesting as The Man Who Sold The Moon . Whenever I will come across some idea that I will like then I will post about it here. So, here is the first design idea I really loved (I assume you are familiar with some dialect of Lisp. If not, then just read 17 pages of first chapter of Robert’s book. That will be more than enough. Do not worry, it will not take much time to read those)

  • You want to evaluate something written in Emacs Lisp? Just open Emacs, put cursor at the end of the variable or function name or the closing parenthesis or whatever you want to evaluate and press “C-x C-e” and you got the answer. That’s it, that is how simple it is in Emacs.
  • File and Buffer are two different entities. File is what permanently stored on your computer’s hard disk whereas a buffer is inside Emacs which will go away as soon as you exit Emacs. A buffer visits the file or is a pointer to the file, not the actual file. You want to save changes into the file then just save the buffer and changes will be written to the file.
  • This one is most interesting. switch-to-buffer is an Emacs Lisp function that helps you in switching to another buffer. Generally when you look at any editor (Notepad, Notepad++ or gedit etc. for example) , you usually look at the file you are editing. If you switch to another file then you will see only and only this another file and previous file will not be visible. Previous file is open but it is not visible and hidden in the editor). What I mean is you can see only one file in front of you, not two (I am not talking about splitting-frames). Within Emacs code, switch-to-buffer is less used than set-buffer. Why? … Because computer does not need eyes to see like we humans do. When a a computer program needs to work on a buffer/file, it does not need to see it, visibility is not needed. switch-to-buffer was designed for humans and it does two things:
    • It switches to the new buffer .
    • It switches the buffer “displayed” in the window with new one.

You can easily guess now that set-buffer only walks the first step, it switches the program to other buffer while buffer on the screen remains unchanged.  Doesn’t this concept feel like one of the rules of the creation of this Universe while still being so simple and straightforward. 


Copyright © 2014 Arnuld Uttre, Hyderabad, Telangana – 500017 (INDIA)

Licensed Under Creative Commons Attribution-NoDerivs 3.0 license (a.k.a. CC BY-ND)

The UNIX Effect (Blindfolds Removed)

July 21, 2007 at 11:10 am | Posted in Hacking, History, Programming | 9 Comments
Tags: , , , , , , , , , ,

I wrote this article in July of 2007, just a few months ago, but things I have described here I started to feel in December of 2006. I lost many of the thoughts that crossed my mind during those 7 months time but I never took time to write them down, someday just out of frustration with my education system, I just sat and wrote down the things I felt and that’s why this blog.

My interactions with the computer started when I took admission into Bachelors of Science at SD College, sector-32 Chandigarh in year 2000 and they threw a junk we call Windows, onto my face. I was very much happy with it and even 14 computers at Computer-Lab of college ran Windows 98. In 2006, when I started to use Fedora I did not even know that a kernel named Linux exists, at that time I already passed my Bachelors and did 2 years of selling of personal loans. I wanted to use Fedora because I wanted to sell my old Celeron 600 MHz hardware.

STRANGE? Well, here is the full sentence:

I wanted to use Fedora because I wanted to sell my old Celeron 600 MHz PC. My old PC always gave me weird, difficult to understand and impossible to solve problems. And one day when I was still a salesman, talking to my friend “Dinesh” about my hardware problems. Now Dinesh was a brilliant hardware-guy. At that time his work included selling, maintaining and repairing computer hardware and he was an ace at his work. He even modified some hardware to do some amazing things. Dinesh told me something, then communication happened like this:

me: Dinesh, I want to sell my old 600 MHc PC, it has 256 MB RAM with 20 GB hard disk.

Dinesh: Why you want to sell ? it looks ok to me.

me: No, it is not OK, it is running form last 4 years and hence it had worn out so it gives me lots and lots of hardware problems.

Dinesh: So you want to sell it because of the problems you have?

me: YES, 100%

Dinesh: Can you explain the problems to me ?

me: Yes, it is old 600 MHz Celeron processor and it hangs when i am working. At that time I have to reboot which solves the problem. Sometimes I have to reboot 4 times a day. Sometimes an application just crashes in the middle and no matter how much you click the icon in Start menu, it does not run but reboot solves this problem. Also I have to reinstall drivers for the external modem of D-Link at EVERY boot because it get blocked every time I shut-off and boot the computer. There must be some problem with its connection on Motherboard. Weird HANGS solved on reboots, hence my hard-disk is corrupt.

There is also an anti-virus problem. I get weird VIRUSES when I connect to internet and Norton Anti Virus says they are not viruses. Also Norton Anti-Virus Firewall just does not work, somebody cracked into my computer and disconnected me form the net 😦

Dinesh: You use WIndowsXP, right ?

me: How you know? I did not tell you.

Dinesh: Arnuld, your computer hangs/freezes because Windows hangs, there is no problem in Celeron processor or your motherboard. OK.. these are the only problems you have?

me: NO, 3 more. My WindowsXP Home CD had stopped booting. I installed from it 3 months ago, it was bootable at that time and now it does not boot. 2: my Window 2000 Advanced Server CD had lost some files. I installed from it successfully on 6 different computers of my friends and mine too but today it says “can not find ….. file” . 3: sometimes when I start my computer I get a blue-screen rather than Windows, saying something like “0x7777865 dumping hard-disk” . I format the disk and reinstall Windows and problem solved, I do so 3 times a month as I have this problem nearly every week. I am sure both my CD-Writer and CD-ROM have gone crazy. How can a CD loose files ?

Dinesh: Hmm….. these are your *major* problems ?

me: Yes

Dinesh: Ok, Windows is the problem. Your hardware looks OK.

me: How do you know? you never even saw my PC.

Dinesh: Its your own will, if you want to solve the problems install Linux.

me: I am graduate in computers from #4 ranked University in India, why can’t I solve the problems.

Dinesh: All those graduate are idiots

me: How ?

Dinesh: Buy Red Hat Linux, that will tell you.

me: Red Hat Linux. what is that? I heard UNIX, is it the next version of UNIX?

Dinesh: It is an OS. not UNIX but it is like-UNIX

Me: OS … ??? but if I install it then how will my computer run. You need Windows to run a computer.

Dinesh: An OS runs a computer and Windows is a quality-less OS

Me: don’t disrespect Bill Gates. He is nice and brilliant guy who made computers run. The man who told this world how to create “icons” and “shortcuts”. The man who made computers possible. You can not even listen a song, watch video or check YAHOO mail without Windows. We use internet everyday and Bill Gates is the one who created Internet Explorer to use the internet. Without Internet Explorer you can not use internet.

Dinesh: An OS is the thing that runs a hardware, your computer. Windows is a cheap class OS. By the way, you use a Browser to use net. Not Operating System

me: So what exactly can i do with *your* so called OS?

Dinesh: You can create icons, shortcuts, listen to the songs and check YAHOO mail and best of all you can watch your favorite The Matrix.

me: WHAT? I can watch The Matrix on Red Hat Linux? Ok, whatever but will Red Hat Linux solve my hardware-problems?

Dinesh: Yes, because your problems are not hardware specific.

me: It will solve my hang problem, I can watch movies, do internet and create documents. You must be joking.

me: So this Red Hat thing is the solution ?

Dinesh: Yes

me: BTW, what is the full-form of OS?

Dinesh: Operating System

me: It is strange to hear that a computer can run without Windows. I wish I could believe that.

Dinesh: Linux will turn upside-down whatever you know about computers. An advice beforehand, it is painful.

me: Red Hat Linux. right ?

Dinesh: Yes, use it.

me: from where i can get it and for how much ?

Dinesh: From a book shop it costs around 400 rupees, along with a book (50 rupees = $1)

me: W…H…A…T… just 400 rupees. It must be crap then. Look, WindowsXP original CD costs more than 10,000 rupees(IIRC, it was 20,000) and that is why it is best of the best . Bill Gates has done lots of hard work to create this new Universe called Windows. he made run computers, he is the next after GOD.

…..400 rupees…. huh… must be a crap.

Dinesh: arnuld ?

me: …… (silent)…….. (silent)… OK, tell me the name of the book shop.

Next, I went to buy the Red Hat Linux at book shop and after 8 hours of search I was back to his home. It was evening, 6 PM I guess and I entered his home.

Dinesh: I don’t see any book in your hands. You did not buy Linux?

me: I did not find any book in the whole market

Dinesh: You sure

me: yes. All I see are books on Fedora Core 2, I didn’t see any book on Red Hat Linux.

Dinesh: Fedora Core is the Red Hat Linux. They have changed the name.

Poor me. I got Fedora Core 2 and installed it and never looked back, though 1st 6 months were a big PITA (Pain In The Ass 🙂 ) here is my journey :

Windows 98 -> Windows 2000 professional -> Windows 2000 advanced server -> WindowsXP -> Fedora Core -> Debian -> Arch -> Foresight -> UTUTO -> BLAG -> FreeBSD -> KATEOS -> PLD -> gnewSense -> Gentoo -> Fedora -> DragonFlyBSD -> Frugalware -> OpenBSD -> Gentoo -> Arch

I still want to use Gentoo, it is amazing distro but really don’t like its USE flags approach. My Desktop to command-line transition is like this:

Widnows -> KDE (14 days) -> GNOME (1.5 years) -> Xfce -> Ratpoison -> WIndowmaker -> sawfish -> Windowmaker -> Fvwm -> Windowmaker -> Ratpoison -> wmii

Windows is the one i used for the longest time, 3 years at University + 1 year at home, BUT that is the *fault* of Indian Educations system which exists to ruin the life of software students. 4 years of Windows, still used and loved and took great-pride in “point-&-click” Desktops when in reality I had zero idea of anything at all & 1.5 years with GNU and no Desktops, no fancy icons but only “wmii” and urxvt and here is mine good looking modifications from ~/.stumpwmrc:

;; -*-lisp-*-;;;; change what package(in-package :stumpwm)

;; setting a high-debug level(setf stumpwm::*debug-level* 10)
;; run some shell commands
(run-shell-command “feh –bg-scale /home/arnuld/.local/wallpapers/background_stump”)

;; setting window colors
(setf *focus-color* “green”)

(setf *unfocus-color “black”)
;; change the “prefix key”

;; that useless Super key can be used here
;; 🙂

(set-prefix-key (kbd “s-p”))
;; bind some keys
(define-key *root-map* (kbd “c”) “exec urxvt”)

(define-key *root-map* (kbd “f”) “exec firefox”)
(define-key *root-map* (kbd “x”) “exec xchat”)

(define-key *root-map* (kbd “m”) “exec limewire”)
;; screen locker

(define-key *root-map* (kbd “C-l”) “exec xlock”)
;; hook begins

;;
;; hook from “male” at IRC chaannel #stumpwm

;; this will show the curent group name when you will switch the group
(defun focus-group (newg oldg)

(declare (ignore oldg))
(message “:: ~a ::” (group-name newg)))
;; macro for faster startups

(defmacro replace-hook (hook fn)
`(remove-hook, hook, fn)

`(add-hook, hook, fn))
(replace-hook *focus-group-hook* ‘focus-group)

;;

;; hook ended

Any Windows user will go crazy if I show him this file and tell him what it does. He might even kill me if I tell him that a Desktop consists of Window system and Window Manager along with a File-Manager and I only use Window Manager on my computer and that is tiling one.

For 1st 6 months, I kept my system in dual-booting mode with WindowsXP and always asking to my friends for Windows based software because I thought Linux can not replace Windows. See, I do not have any Media player, I can not run Kundli and WINAMP on Linux. but after 6 months I had some courage and got rid of Windows and for next 3 months completely used Fedora. I did not hear any single song, no videos because I did not have internet then and when internet hit my town, on the 1st day I downloaded XINE 🙂 . Today I am dual booting my computer with HURD and Arch and I am willing to become a full time programmer only because of: Ken Thompson, DMR and RMS, the UNIX and the GNU. if there was no UNIX then there could not be any GNU Operating System and if there was no GPL a.k.a GNU a.k.a RMS, I could never even thought of becoming a programmer because that way, UNIX could never have been available as a Free Desktop OS.

I always hated computers because computers give weird and unsolvable problems. Am i right? of course not, computers do not give problems, Windows does and Windows is excellent at that. If there is another person to whom I want to say thanks then that is my friend “Dinesh”. He does not even know that I have a blog and I have mentioned him here but he guided me into the correct direction. His one answer changed the course of my life.

Why did I become a salesman, rather than doing Post-Graduation because I had weird problems and why I had weird problems because 20 computers at the computer lab of my college used Windows 98 and today my college has a biggy-big IT block running 250 computers with 3 computer-labs on 2nd and 3rd floors of IT block and all run WindowsXP now.

What happens when a person gets his hands on a computer: he installs Windows. Because he has no mentor and no internet.  What if I say you are lazy because you got a friend like Dinesh who wanted to show you the path but you never trusted him.

What happens when a frustrated Windows user searches for a solution to his problems: he installs Red Hat Linux (and in near Future he comes to know that he is using GNU Operating System not Linux). But how the hell I heard about UNIX? At one corner of my University’s syllabus there was a line saying: UNIX fundamentals. I asked my teachers:

me: Sir, what is UNIX ?

teacher: It’s not for you.

me: No Sir, it is in our syllabus, see: “UNIX Fundamentals – B.Sc 3rd year”

and next he gave me the “you can not use it, 1st learn Windows” look. I asked another teacher and he gave me: “Windows is the prerequisite for UNIX”. I asked another teacher we had at that time and she said “this is of no use to you.” I said I want to become a brilliant programmer, she said “ok, the 1st learn Windows properly and she advised to buy 670 rupees worth of book on DOS”….aaarghhhhh….

I asked one of my classmates, the Brilliant C Programmer. (that was *exactly* what whole class called him – “Brilliant C Programmer”). And he advised me to stay away from UNIX by saying this UNIX is not for programmers, all companies use Windows so you must use Windows and worse part is UNIX has no tools, no mouse, no audio player, no VC++, UNIX has only black screen which is for Ph.D. guys with gray beards a.k.a theoretical-world, definitely not for young programmers and practical people and then he showed me his name waving across the monitor and said, this is HTML programming.

I ask you what you will do as a young, 19 year old student who has not touched the world yet. He takes admission into a university for a better future. Whom you will trust, of course, your teachers, the college environment and then the top-performing C Programmers in your class who always say “make sure you use #include <conio.h> from Standard Library” …….

….WTF…..

Now as a normal user of GNU, I know much more about my hardware, above all I *know* what is an OS, I know that my audio card is VIA VT8237 and it uses VIA82xx driver to play the sound and my ethernet card uses via-rhine form kernel and 192.168.0.2 is its IP address and 192.168.0.1 is the gatway. Hey I also know I am a C++ programmer, most Post-Graduates of my college say I am a VC++ programmer 😀

Latest incident:

Just last week, an M.Sc (Computer Science) student entered into the cyber-cafe where I was taking some print-outs of HURD installation guide . That cyber-cafe’s owner was much impressed with me as I told him Linux can solve his virus/spyware and sudden-freeze problems. when that student asked to take print-outs of some C++ programs and their output, the owner pointed his finger towards me “that’s the guy who can help you, the computer graduate guy – arnuld”. here is the interesting conversation:

M.Sc. boy: Do you have VC++ language installed on this computer

me: brother, there is no language named VC++

(he started to laugh)

me: What exactly you want ?

M.Sc. boy: VC++ Programming Language

me: There is no programming language named VC++

M.Sc. boy: What the heck? I used that language for 2 years at my college

me: hmm…. you want C++ Programming language

M.Sc. boy: No C++, but VC++ programming language.

me: I think, you want some C++ compiler so that you can compile some C++ programs and take the print outs of source code and output?

M.Sc. boy: yes, I want print-outs for my project but I want VC++ programming language, not C++ programming language. VC++ is better than C++

me: There is no programming language named VC++

(…M.Sc. boy got angry at me.. )

M.Sc. boy: You are a stupid graduate. My professor said to me that I need VC++ programming language to pass my exams and complete this project. He said not to use C++.

me: 😀

So now it was my turn to laugh and I was ROTFL.


Copyright © 2006, 2007, 2008 Arnuld Fraser, #331/type-2/sector-1, Naya Nangal, Distt. – Ropar, Punjab (INDIA) – 140126

Verbatim copying and distribution of this entire article are permitted worldwide, without royalty, in any medium, provided this notice, and the copyright notice, are preserved.

Blog at WordPress.com.
Entries and comments feeds.