Blissful

Universal
Home
Mantra
Oh Mind Due Know This?
sanskrit
Site Map
About Us
Contact Us
profane
Our EARTH
www
Nano
Philosophy
Water Fuel
Space
Alien
My Car
Pravda
Oraganic Farming
WoW
isit
ha ha ho ho he he ha ha h
why
Free Energy
Ask me no questions, and I'll tell you no lies!!!
 
 
 
 
 

 
 
 
from everthing.com
 
created by Rancid_Pickle
(idea) by Rancid_Pickle (1.8 d) (print) CC (sent writeup message "oh my god!!! absolutely wonderful") ? 10 C!s Thu Nov 16 2000 at 7:46:20


Follow these 17 guidelines to kill the logic of any sentence. Start with this familiar example:
Jack and Jill climbed up the hill to fetch a pail of water.



Use weak verbs:
Jack and Jill went up the hill to get a pail of water.

Use unfamiliar words:
Jack and Jill climbed up the hill to fetch a ewer of water.

Put introductory phrases at the beginning to push the subject back:
To fetch a pail of water, Jack and Jill climbed up the hill.

Keep the subject and the verb as far apart as possible:
Jack and Jill, to fetch a pail of water, climbed up the hill.

Put the action at the end of the sentence:
Jack and Jill, to fetch a pail of water, climbed up the hill.

Keep modifiers as far as possible from the words they modify:
Jack and Jill climbed to fetch a pail of water up the hill.

Use passive voice:
The hill was climbed by Jack and Jill so that a pail of water could be fetched.

Put the doer at the end of the sentence:
To fetch a pail of water, the hill was climbed by Jack and Jill.

Introduce false subjects:
It was Jack and Jill that climbed up the hill to fetch a pail of water.

Pile on the gobbledygook:
Jack and Jill ascended the acclivity to retrieve a vessel of Adam's ale.

Turn verbs into nouns:
Jack and Jill did the hill climb for the purpose of water retrieval.

Use unnecessary technical jargon:
Jack and Jill traversed the gradient to fetch an alembic of H2O.

Feature inappropriate precision:
John Q. Wembley and Jillian Fitzgerald climbed 1.6093 kilometers to fetch 3.785 liters of water.

Add wordy phrases:
Jack in the company of Jill climbed their way up the hill for the purpose of fetching water in the approximate amount of a pail's full.

Multiply redundant words:
Both Jack and Jill climbed all the way up to the top of the hill's summit to fetch a pail filled to its capacity with water.

Throw in clichés indiscriminately:
Jack and Jill, who need no introduction, climbed up the hill by leaps and bounds to fetch through their good offices a pail of water by hook or by crook

String lots of nouns together to form the subject:
The Jack and Jill water retrieval hill climb was achieved.
Put all 17 together:
It was the Jack and Jill H2O retrieval in an alembic vessel that was achieved via the ascent of the acclivity up to its summit in leaps and bounds through the good offices of John Q. Wembley and Jillian Fitzgerald who need no introduction.


Short one...........
 
 
She wakes me
in the middle of the night
Firm shove and then a whispered
Shhhhh, listen.
Half awake, I try and hear:
The hiss of the furnace
The scratching of mouse feet, or
the distant percussion of trashcans slam dancing fences

Tonight she wakes me to hear the rain above our ceiling
A low and persistent tapping sound
Thousands of fervent typists hard at work
Only slightly louder than her racing thoughts

Later, our fingers slide together
Finding the rhythm of the storm together
until the only sound is that long whispered

Shhhhhhh

simple paino
 
The least valuable piece on the board and I move last.

♩ ♩ musical quarter note
♪ ♪ musical eighth note
♫ ♫ musical single bar note
♬ ♬ musical double bar note
♭ ♭ flat note
♮ ♮ natural note
♯ ♯ sharp note


 
 
 
 




B L A C K
+----+----+----+----+----+----+----+----+
| R |# N#| B |# Q#| K |# #| N |# R#|
+----+----+----+----+----+----+----+----+
|# p#| |# p#| p |# p#| p |# B#| p |
+----+----+----+----+----+----+----+----+
| |# p#| |# #| |# #| p |# #|
+----+----+----+----+----+----+----+----+
|# #| |# #| |# #| |# #| |
+----+----+----+----+----+----+----+----+
| |# #| |# #| p |# #| |# #|
+----+----+----+----+----+----+----+----+
|# #| |# N#| p |# #| |# #| |
+----+----+----+----+----+----+----+----+
| p |# p#| p |# #| |# p#| p |# p#|
+----+----+----+----+----+----+----+----+
|# R#| |# B#| Q |# K#| B |# N#| R |
+----+----+----+----+----+----+----+----+
W H I T E


Record of Play
1. e4 g6
2. Nc3 b6
3. d3 Bg7
4.


--------------------------------------------------------------------------------
"Donne-moi ton petit bouton de rose, chérie"

--------------------------------------------------------------------------------
Odd fact about me: I have a Bacon number of 2.


WARNING: SPOILER AHEAD

My inefficient hello world programs writeup poses a final question (see the node for details).
 
The answer is:
It will take twenty seven doublings to reduce the execution time of the program to under one year. If performance doubles every two years then it will be possible to run the program to completion on a computer which is purchased in the year 2003 + 2*27 or 2057 (i.e. the program will finish before the end of 2057 if you start it on a newly purchased computer shortly before my hundredth birthday in January of 2057 and it won't finish before the end of 2057 if you run it on a newly purchased computer in January of 2056).

It's (just barely) possible that I'll still be alive then so please send me an e-mail when you get the result (please include in your e-mail a short description of what you've been up to lately and let me know if it's possible to boot a typical "personal computer" in under a minute yet).

Inefficient hello world programs
created by Bozyo
(idea) by Bozyo (1.4 y) (print) CC ? 1 C! Sun Sep 10 2000 at 18:04:58


When I'm bored, I often think of ways to write new inefficient "Hello, world!" programs. These are some methods I've come up with:

Making the program go through the characters of the string "Hello, world!" one by one, generating random characters until it comes up with the correct one, then displaying it.

strcat()'ing many short strings containing parts of the string "Hello, world!"

Using many #define's, I've made a hello world program where the only code that wasn't preprocessor directives was "q foo lal lol rod b n s 19 y x n g r w r x a lal n lol x bar l x rofl".

Writing "Hello, world!" to a file, then using system() to display the text in the file using cat.

Transferring "Hello, world!" character by character through a local TCP/IP socket connection, displaying each character as it is recieved.

Using a seperate thread to display each character in the string "Hello, world!"

And possibly some others that I've forgotten.


--------------------------------------------------------------------------------

(thing) by WWWWolf (1.3 y) (print) CC ? 1 C! Sun Feb 04 2001 at 15:18:58


(For sake of sanity, please don't turn this into a huuuuuge GTKYN!)

Here's my try - this uses Octave. I tried to write this (apart of the polynomial-fitting stuff) in C, but I "ran out steam" so to speak (maybe I should try this in Fortran or something...)

What it does? Well, it takes the ASCII values of the string, interprets that as a series of number (Y coordinate for X each coordinate 1, 2, 3...), finds a polynomial of 13th degree that fits the data, evaluates the polynomial for each X, converts results back to ASCII, and displays the string.

(Evaluation is done automatically by polyfit, stored to evald... Handy, that.)

To run, store this to a text file "helloworld.oct", and run it:

octave> source "helloworld.oct"
Hello world
Also, if you run it with "want_plotted=1;" before the source command, it plots a kewl graph for you with GNUPlot!

Final disclaimer: I'm not a mathematician (math is hard), but I know a doomed-to-fail programming approach when I see one. =)

Without further ado, here's the stuff...


# -*- octave -*-
# This is just about the most hideous and complicated way of printing
# "Hello World" I can think of for the moment...
# Feel free to abuse the idea.
# By Weyfour WWWWolf (Urpo Lankinen), 2001-02-04
1;

letters = toascii("Hello world");
[p, evald] = polyfit([1:11],letters,13);

if (exist("want_plotted"))
plotx = (0:0.1:25)';
polydata = [plotx, polyval(p,plotx)];

chardata = [(1:11)',letters'];

gset grid xtics ytics;
gplot [0:13] [0:255] \
chardata with points title "desired values", \
polydata with lines title "fitted curve"
endif

disp(setstr(evald))

Note that this simple "encryption" is highly unstable if you need characters other than upper-case-only or lower-case-only... In this example, if you look at the graph that it produces, the space "yanks" the graph to a wild wave. I was unable to add the exclamation point because the curve was so curved... this sort of problems could be avoided with simple change of encoding to some other that is less varied.

Then again, the whole graph thing here is pretty... absurd. AND probably someone has patented this stuff in USA because it's so obvious and sounds cool... =)

(I really should turn the polynomial evaluation and the polyfit result coefficient floats into a nice, 300-line C program that no one really can make any sense of...)



--------------------------------------------------------------------------------

(idea) by kobold (1.2 wk) (print) CC ? Thu Jul 05 2001 at 16:36:34


Many months ago, one listless Sunday afternoon, I crafted a stupidly inefficient program using the already long-winded assembly language. This is quite possibly the dumbest way to print "Hello world!" to the DOS standard output using NASM...

segment code

..start mov ax,0B800h
mov es,ax
xor di,di
mov cx,2000
mov ah,7
mov al,0
rep stosw ;Clear the screen (just to be safe!)

mov dh,0
mov dl,0
xor bh,bh
mov ah,2
int 10h ;Reset cursor to 0,0

mov ax,data
mov ds,ax

mov ax,0B800h
mov es,ax
xor di,di
mov bx,0

findchar mov cl,0 ;Search every ASCII character from 0...
cmp byte cl,[ds:_message+bx]
je print
inc cl
jmp findchar ;Until required letter is found

print mov ah,7
mov byte al,cl
stosw ;Get char and store character in stdout...

cmp bx,12 ;Check for end of string...
je end
inc bx
jmp findchar ;Then do it all over again!

end mov ax,4C00h
int 21h

segment data

_message db "Hello world!"
A similar effect could probably be achieved in less than ten lines, although saying that, the above program would probably still be more efficient than cout << "Hello world!" (at least with my POS compiler)



--------------------------------------------------------------------------------

(thing) by dabcanboulet (9.3 min) (print) CC ? 5 C!s Fri Feb 28 2003 at 7:54:46


It seems to me that any supposedly inefficient "Hello World" program which actually contains the string "Hello world\n" in its source code (excluding comments) is bogus since such a program could just print out the string directly.
Here's a program which doesn't contain the string "Hello world" anywhere except in the comments. It generates a string of twelve characters randomly selected from the set of lower and upper case letters, the space character and the newline character. It then checks if the string's MD5 checksum is equal to the hard-coded MD5 checksum of "Hello world\n". If the checksums match then it prints the string and terminates. Otherwise, it begins again with another randomly generated twelve character string.

There are 5412 or 614,787,626,176,508,399,616 twelve character strings containing the characters used by the program. If the program generates and MD5 checksums 100,000 random strings per second (roughly what a 2GHz Athlon should be capable of) then the correct string should appear in about one hundred million years.



--------------------------------------------------------------------------------

In fairness, it should be noted that this program could produce the wrong output as the MD5 checksum algorithm is known to not necessarily produce different hash values for different input values (even if the input values are as short as 16 bytes). See ariels' md5 hash function writeup for details.

The input value to the MD5 algorithm in this program is the 12 character string "Hello world\n". Since this string is four bytes shorter than the sixteen byte value computed by the MD5 function, it isn't clear if there is another different 12 character string (using the same character set as used by this program) that results in the same MD5 hash value as "Hello world\n" generates. This may not seem very important but a program which is going to run for one hundred million years really should use an algorithm which is known to be correct!

P.S. Don't try this at home . . .



--------------------------------------------------------------------------------

Here's a few questions for the cryptology folks or those with a few hundred million years of CPU cycles to burn:

An MD5 checksum is 16 bytes long. Each of the 256 different byte sequences of length one generate different MD5 checksums. On the other hand, there must be many pairs of byte sequences of length seventeen which both generate the same MD5 checksum.
Question: are there any pairs of byte sequences shorter than 16 bytes which both generate the same MD5 checksum?

if the answer is no then the program below will, eventually, produce the correct answer. If the answer is yes then more work is required before we can tell if the program necessarily eventually produces the correct answer.



Is there a second twelve character string containing characters from the set a-z, A-Z, space and newline which generates an MD5 checksum equal to the one generated for the twelve character string "Hello world\n"?
If the answer is yes then the program below might produce the wrong answer. If the answer is no then the program below will, eventually, produce the correct answer.

One last question:

Assume:
that computers will continue to get faster and faster over time and that humanity survives long enough for the algorithm illustrated by this program to run to completion.
that whatever computer the program is started on will continue to operate without interruption until the program terminates successfully.
that computers continue to increase in speed at a long term average rate of a doubling in performance every two years.
that if you start the program on a current vintage (i.e. 2003) computer then it will take exactly 100 million years to get a result.
In which year's January should the program be started (on a then current computer) in order to get the correct result as quickly as possible using a single computer?
Hint: if all of the assumptions are true then many of the folks who read this writeup in 2003 will almost certainly still be alive when it comes time to start this program. See my homenode for the answer.


--------------------------------------------------------------------------------

/*
* Print's "Hello world\n" to stdout.
*
* How it works: it generates strings of randomly selected letters,
* spaces and newline characters and computes the MD5 checksum of
* each string. Once it get's a string whose MD5 checksum matches
* the MD5 checksum of "Hello world\n", it prints the string and
* terminates.
*
* N.B. This program uses the standard srandom and random functions to
* generate the random strings. Make sure that your implementation of
* these functions has sufficient entropy to give you a decent chance
* of generating the "Hello world\n" string!
*/

/*
* md5data is a routine which computes the MD5 checksum of
* the specified data bytes and returns the 16-byte checksum
* into the 4 element array csum.
* Many MD5 implementations are available on the 'net. Pick your
* favourite one (or use the one in the md5 hash function node) and
* write an interface routine for it called md5data which takes
* the parameters described below.
*/

extern void md5data( void *data, int length, int csum[] );

/*
* pre-computed MD5 checksum of "Hello world\n"
*/

int md5[4] = { 0xf0ef7081, 0xe1539ac0, 0x0ef5b761, 0xb4fb01b3 };

main()
{
srandom(0);
while (1) {
char msg[13];
int tmp[4];
int i;
for ( i = 0; i < 12; i += 1 ) {
msg[i] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \n"[
random() % (2 * 26 + 2)
];
}
msg[12] = '\0';
md5data(msg,strlen(msg),tmp);
if ( md5[0] == tmp[0]
&& md5[1] == tmp[1]
&& md5[2] == tmp[2]
&& md5[3] == tmp[3] ) {
write(1,msg,strlen(msg));
exit(0);
}
}
}


Great!!! that it doesn’t need comments or required it ?

by dan...

 

 

 

Code-commenting is so basic and so universal that every programmer, regardless of the language that they practise, thinks that they know all there is to know and that their way is the only sensible approach (I am no different in this respect). I guess that’s why there are so many blog postings offering advice on commenting (you can add this one to the list).

Even the elite of programmer bloggers are having their say. Steve Yegge covered it and, more recently, so did Jeff Attwood. Jeff’s basic advice, that you wouldn’t need so many comments if you wrote the code to be more self-explanatory, is sound but the idea that we should be aiming for some kind of perfect code that has no need for any comments is dangerous.

It’s not a sensible goal for beginners and inexperienced developers. Tell them that they should write good code without any comments and they will deliver on the second part but struggle with the first. Even among experienced developers, assuming for a moment that it is possible to write perfect code that doesn’t require comments, there will be far fewer who are capable of this than there are who think that they are.

The other arguments against commenting are even weaker in my opinion. Yes, poor comments are …well… poor. So don’t write poor comments, write good ones. And yes, if comments become out-of-sync with the code then they are not helpful. So don’t let the comments become out-of-sync, they are part of your code and should be maintained/refactored along with the code itself.

I don’t believe that I’ve read a piece of code and thought “wow, this has far too many comments”. Unfortunately, I’ve had the opposite reaction all too often. I don’t for one moment believe that it is possible to write quality code without any comments. Take Jeff’s own example:

Here’s some code with no comments whatsoever:

r = n / 2;
while ( abs( r - (n/r) ) > t ) {
r = 0.5 * ( r + (n/r) );
}
System.out.println( "r = " + r );
Any idea what that bit of code does? It’s perfectly readable, but what the heck does it do?

Let’s add a comment.

// square root of n with Newton-Raphson approximation
r = n / 2;
while ( abs( r - (n/r) ) > t ) {
r = 0.5 * ( r + (n/r) );
}
System.out.println( "r = " + r );
That must be what I was getting at, right? Some sort of pleasant, middle-of-the-road compromise between the two polar extremes of no comments whatsoever and carefully formatted epic poems every second line of code?

Not exactly. Rather than add a comment, I’d refactor to this:

private double SquareRootApproximation(n) {
r = n / 2;
while ( abs( r - (n/r) ) > t ) {
r = 0.5 * ( r + (n/r) );
}
return r;
}
System.out.println( "r = " + SquareRootApproximation(r) );
I haven’t added a single comment, and yet this mysterious bit of code is now perfectly understandable.

Sorry Jeff, but that’s not “perfectly understandable”. I agree with extracting the square root code into a separate method with an appropriate name, but your second version (the one with the comment) was more informative since it mentioned which algorithm you were using (in your version, the maintainer is going to have to figure that out for themselves). Also, we’re still left with at least two poorly-named variables. We can forgive the use of n for the parameter since that’s kind of a convention but what the hell are r and t?

In my opinion, this is better:

/**
* Approximate the square root of n, to within the specified tolerance,
* using the Newton-Raphson method.
*/
private double approximateSquareRoot(double n, double tolerance)
{
double root = n / 2;
while (abs(root - (n / root)) > tolerance)
{
root = 0.5 * (root + (n / root));
}
return root;
}
Alternatively, if you don’t like the verbose comment at the top, you could either rename the method to something like newtonRaphsonSquareRoot (if you are happy for the method name to be tied to the implementation) or put an inline comment in the body explaining that this is the Newton-Raphson method. Any of the three variations will communicate useful extra information to the maintenance programmer, who can then Google “Newton-Raphson” if they want to find out more about it. Remember that code is written only once but read many times. It should be tailored for the reader rather than the writer.

This is all very well, but we’re still lacking some information. Why the hell is Jeff calculating square roots in this way? Why is he not using the library function? Is it because he doesn’t like the answers it gives him? Is it for performance? Who knows?

Well-written code will often answer the “what?” and “how?” questions with few or no comments, but you often also need to answer the “why?” question too. Avi Pilosof covers this in his response to Jeff’s post. Avi argues that rather than comment the code, you should comment the business justification for writing the code that way. This may mean inserting reference to particular requirements or issue reports.

So yes, favour code that is self-explanatory, but I don’t believe that you can always achieve the necessary clarity without a few well-placed comments to aid understanding. Code that is obvious to the author today is rarely obvious to the maintainer next year (or even to the author next month).

And if you still really believe that your code does not need any comments, then I hope we never have to work together.

Want more articles like this? Subscribe to the feed.
17 Responses to 'No, your code is not so great that it doesn’t need comments'
Subscribe to comments with RSS or TrackBack to 'No, your code is not so great that it doesn’t need comments'.

James said,


on July 26th, 2008 at 12:17 am

Im sorry mate but I’m with Jeff on this. And I posted why on his comments. Basically, if I’m a math dude and I see this: SquareRootApproximation(n), and scan the following code I can almost instantly figure out what it is and what it does. With a comment I would have gotten the same exact information. Not lets say I’m one of those programmers that are not current with their maths. And I see either, I’m still not going to have a clue about what’s happening and I’ll end up googling either the comment or the procedure. And I’ll end up in wikipedia reading about Newtons method. Jeff’s code is as readable as needed and had no need for comments. You may not feel the same now but when those huge LCD’s you bought to have various code windows at max height actually don’t make the experience any better because you’re looking at a gazillion comments instead of well formatted code, you’ll agree that in programming less is ALWAYS more.

Dan said,


on July 26th, 2008 at 1:07 am

James, as you can probably guess, I disagree wholeheartedly.

I don’t get what you say about Googling for Newton’s method. What are you going to use as a search string when Jeff’s not giving you any hints?

My monitor has plenty of room for a couple of lines of comments. In my experience, code is rarely as “obvious” as the author thought it was. Also most IDEs and editors will display comments in a different colour, usually a paler colour that is easily ignored if you want to focus on just the code.

And if I do find some code that is over-commented, it is easier to remove the comments than it would be to reconstruct comments that were missing but necessary.

Dan said,


on July 26th, 2008 at 1:16 am

Also, because Jeff’s code doesn’t answer the “why?” question, should I, as the maintenance programmer, replace it with a call to Math.sqrt? Seems like it would be a nice simplification, but maybe Jeff is keeping something to himself about why he did it this way?

James said,


on July 26th, 2008 at 6:09 am

Dan, I expected that much it would be no fun if you agreed with me.

What I mean is that the moment I read this: SquareRootApproximation(n) and see the code in question I either immediately know what the procedure does and how it does it, OR I just don’t get the what or the how. Now IF I don’t get it right there what will I search for? This: “square root approximation”. The result? I’ll end up in wikipedia learning what, why and how of Newtons Method (and probably a whole other bunch of stuff). This is probably the same I’ll find if you put a comment like the one you posted.

I’m not saying that comments are bad. My whole point is that 1) better written code without comments is better than crappier code with more comments 2) since my day job basically has me coding all day long, and I need to work with other people’s code, I’ve been in a situation where I’m looking at code in a maximized terminal (i use a 30inch LCD and a macbookpro at work) in a remote server and all I see is an ocean of comments, and few lines of code. In this case comments not only where a nuisance, but an obstacle 3) sometimes comments ARE necessary, like you say. But to be honest… most of the comments I see everyday in my job and in my freelancing projects, are just excuses to NOT write self explanatory code.

On the “why”:
/**
* Approximate the square root of n, to within the specified tolerance,
* using the Newton-Raphson method.
*/
This doesn’t explain why either! If your really have to explain why, you would probably use a whole screen with a comment rivaling a wikipedia article on newtons method. In my opinion the only comments that MUST explain the why are generally a block at the begging of the program, or object, or w/e, giving a broad overview.

In my case… I use comments only to summarize a very general description of what the program does and how it does it at the beginning of the source. And the only why I explain is business logic. And business logic has more to do with client requirements and obstacles, than with any logic having to with programming itself.

PD: sorry for the long post. I get carried away sometimes

James said,


on July 26th, 2008 at 6:11 am

By the way I like your site. You seem to have some good content here. I’m gonna add you to my newsfeeds And If I end up doing an article on commenting when I finish my site redesign Ill probably end up pointing everyone here. Good job on the site once again.

Jose Noheda said,


on July 26th, 2008 at 11:55 am

I must dissent as well. I practically never comment the code. JavaDoc is a whole different animal, sorry. You’re not commenting the code but providing help to other users that are not reading the code but using an IDE to invoke it or browsing some public doc repository.

Dan said,


on July 26th, 2008 at 3:07 pm

James, I think we have a basic agreement that self-explanatory code is good and that *some* comments are necessary, we’re just disagreeing on the extent of commenting that is (or should be) necessary. Also, I disagree that lots of comments is particularly harmful. Even something ridiculous like Jeff’s example of the procedure header at the beginning of his post wouldn’t really bother me. Code that needs comments and doesn’t have them is far worse.

You’re right about my comment still not explaining why, but then I don’t know why the code is written like that If it had been me writing that routine, I would have written just a single sentence to explain why I felt it was sensible to calculate square roots in that way.

Dan said,


on July 26th, 2008 at 3:09 pm

Jose, whether it is Javadoc or not is not really important in this particular example, escpecially since it is a private method. What I am arguing is important is that the information should be communicated in some way. I think we’re all in agreement that some of that information can be communicated by sensible naming of methods and variables. I’m arguing that additional information is necessary and that means adding comments (Javadoc comments, single-line comments, whatever).

Etienne said,


on July 26th, 2008 at 5:24 pm

Can’t agree more. Tell me why you did that! That’s what I run into all the time. I can usually tell what the code does, I can’t tell why it does it. Most library I find on the net suffer this. This and how to use. This square root example is probably a too simple example for people to see the value of saying why and “how to use”.

I think you point out what others seem to miss. If the comments are badly written and what was written is useless, don’t blame the fact of commenting. Blame the programmers who don’t learn how to properly communicate to other programs! That’s the right target.

“Let us change our traditional attitude to the construction of programs. Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.” - Donald Knuth



“Programming is best regarded as the process of creating works of literature, which are meant to be read.” - Donald Knuth

I spend hours fixing code written by others who were poor in commenting. Yes, if you do a comment lines count you’ll get some — mainly commented out code or idiotic comments like:

// add a and b together to get c
c = a + b

Well of course that’s an idiotic comment and not worth being there. Ok, so what should I tell the programmers when I train them — don’t write comment because that poor guy wrote that? No, I should use that as an example to say: see, tell me how that helps you. It doesn’t, ok, so this is what you should not do! And then have them drilled on expressing themselves to others, remedy their communication problems if they have one because I know that their communication problems is what is going to give me the biggest problem down the road when I have to fix someone’s code that does not tell me why and I stare at my screen trying to figure out what to change because I can’t tell if there was a management / executive decision to do it this way instead (e.g. why is a added to b, maybe I should add a1 too to it… seems like it should).

So, as I said, you nicely pointed out the correct target and I’m glad to see others thinking like that. I can’t way until I can take somebody else code and not work for hours just to understand it.

Code Zhandwa » Blog Archive » Code comments - do we need them? said,


on July 27th, 2008 at 9:26 am

[...] came across Dan’s blog entry later the same day and realized that he too makes a good point. Both sound absolutely [...]

Lincoln said,


on July 27th, 2008 at 4:33 pm

It’s my philosophy that if you find yourself writing a comment that describes what a method does, either the method does too much, or you should use that comment AS the name of the method. Try something like this:

newtonRaphsonSqRootApprox( double number, double tolerance )

And if you need to conform to a standard interface, then delegate! Delegation is your best friend.

approxSquareRoot( double number )
{
return newtonRaphsonSqRootApprox( number, 0.0001 )
}

Lincoln said,


on July 27th, 2008 at 4:36 pm

Also… if you don’t want to add a private delegated method, then consider abstracting that behavior into an Operation class that performs the square root operation. (Java for example, here)

This strategy even lets you change behavior of your square root operations at runtime, at configuration time, and it lets you extend the behavior to use other algorithms without changing your client code.

public Class NewtonRaphson implements SquareRoot
{
public long squareRoot( double num );
}

Anthony Damasco said,


on July 27th, 2008 at 4:43 pm

I agree that comments are really important, not only for your self, but for other developers. My code looks like a novel when I’m done with it, I load it up with comments.

Simon said,


on July 27th, 2008 at 8:08 pm

I totally agree with you but I also really don’t understand this whole discussion (I am coming from Jeff Atwoods article and already read some others take on it).

Even if this square root approximation was a good and general example (which it is not, because it is far to simple), it still lacks some valuable information, which is not totally evident by just briefly reading the code:

- Passing in negative values result in an endless loop. Of course you can’ compute the sq.root of a negative number, but it would be good if I knew how the function handles this (which actually might be going into an endless loop, as long as it is documented).
- Passing in zero results in a division by zero. This is a bit obscure, because it actually would be computable. Still it might be a valid limitation (say, performance reasons), but I need to know that!
- What happens with differenct values for tolerance (say, 0 or even a negative value). Currently it might result a endless loop, but again…

It really doesn’t matter how much you try to avoid to document your code. There is always so much a maintainer or user of a function might need to know, which can’t be easily extracted by the best written code.

Don’t fight it, just get better at documenting what you do. Be as concise as you can in your comments and your code.

Tristan said,


on July 28th, 2008 at 12:34 am

Most of the time the why is incorporated into the context of the program.

“Im creating a utility for a math teacher to check and make sure that the students answered his random questions correctly”. All of a sudden all of the various approximation methods do not need a why.

I have never seen a block of code, written by me, or by the coders that came before me that needed a why.

public String AesEncryption(AesKey key, String foo){}

does that really need a why? _if_ a why is needed it is needed where it is called, not at the method. Then again the context of the calling method will probably tell you why.

Matthew said,


on July 28th, 2008 at 12:51 am

I’m a poor commenter, but the truth is I’m a poor programmer too. That’s why I don’t comment. I’m never sure if I’m doing things the right way, so I wait until I’m absolutely positive that what I’m doing is going to work. By that point my mind has moved on to the next problem. I know this is bad practice but I have trouble correcting it.

Scott McNair said,


on July 28th, 2008 at 1:08 am

I don’t know how many times I’ve come back to a piece of code that I’ve written after six months or so, and then spend ten minutes to figure out where I need to do a thirty-second fix. I agree with Dan that there’s no such thing as over-commenting (unless you just get ridiculous about it).

Additionally, you should attempt to descriptively name all functions, subroutines, and input/output variables so that they can be identified on the fly.









 

DNA seen through the eyes of a coder


or


If you are a hammer, everything looks like a nail




`This is one of the coolest things I've read in a while.' -- href=http://www.livejournal.com/users/jwz/>jwz


This is just some rambling by a computer programmer about DNA.
I'm not a molecular geneticist. If you spot the inevitable
mistakes, please mail me (bert hubert) at href=mailto:ahu@ds9a.nl>ahu@ds9a.nl.


I'm not trying to force my view unto the DNA - each observation here is
quite 'uncramped'. To see where I got all this from, head to the href="#bibliography">bibliography.


Quick links: The source code, href="#pic">Position Independent Code, href="#conditional">Conditional compilation, Dead
code, bloat, comments ('junk dna')
, fork() and fork
bombs ('tumors')
, Mirroring, failover, href="#apis">Cluttered APIs, dependency hell, href="#viruses">Viruses, worms, Central
Dogma
, Binary patching
aka 'Gene therapy'
, Bug Regression, href="#rss">Reed-Solomon codes: 'Forward Error Correction', href="#holy">Holy Code, Framing errors: start and
stop bits
, Massive multiprocessing: each cell is a
universe
, Self hosting &
bootstrapping
, The Makefile, href="#bibliography">Further reading
.

Updates


3rd of January 2008:

A lot of updates are arriving since this page was linked on href="http://reddit.com">Reddit.com, I'm currently evaluating and
merging the suggested changes. Please do keep sending updates!


23rd of September 2006:

Small update on the number of genes. Some other updates have been sent to me
over the past four years, and I'll try to work them in to the page.


16th of June 2002:

Added tiny piece on the halting problem and cancer. I
think this is a new insight, but I'm not sure. On the todolist: Code reuse
through alternative splicing.


18th of May 2002:

In the meantime some people who *are* geneticists have read this and have
spotted and fixed some, but not many, mistakes. I recently added information
on the cell as a state machine and on forking and forkbombs.


24th of May 2002:

Some clarifications from the great people on #bioinformatics on OPN. Added a
bunch of pictures to lighten up the page. Added piece on the Central
Dogma
.

The source code



Is href="ftp://ftp.ensembl.org/pub/current_genbank/homo_sapiens/">here.
This not a joke. We can wonder about the license though. Maybe we should ask
the walking product of this source: href=http://www.guardian.co.uk/Archive/Article/0,4273,4403109,00.html>Craig
Venter. The source can be
viewed via a wonderful set
of perl scripts called 'href=http://www.ensembl.org/Homo_sapiens/Download/>Ensembl'. The human
genome is about 3 gigabases long, which boils down to 750
megabytes. Depressingly enough, this is only 2.8 href=http://ftp.mozilla.org/pub/mozilla/releases/>Mozilla browsers.


DNA is not like C source but more like byte-compiled code for a virtual
machine called 'the nucleus'. It is very doubtful that there is a source to
this byte compilation - what you see is all you get.




The language of DNA is digital, but not binary. Where binary encoding has 0
and 1 to work with (2 - hence the 'bi'nary), DNA has 4 positions, T, C, G
and A.


Whereas a digital byte is mostly 8 binary digits, a DNA 'byte' (called a
'codon') has three digits. Because each digit can have 4 values instead of
2, an DNA codon has 64 possible values, compared to a binary byte which has
256.



A typical example of a DNA codon is 'GCC', which encodes the amino acid
Alanine. A larger number of these amino acids combined are called a
'polypeptide' or 'protein', and these are chemically active in making a
living being.


See also href=http://www.ultranet.com/~jkimball/BiologyPages/C/Codons.html>
http://www.ultranet.com/~jkimball/BiologyPages/C/Codons.html.

Position Independent Code



Dynamically linked libraries (.so under Unix, .dll on Microsoft) code cannot
use static addresses internally because the code may appear in different
places in memory in different situations. DNA has this too, where it is
called 'transposing code':

Nearly half of the human genome is
composed of transposable elements or jumping DNA. First recognized in the
1940s by Dr. Barbara McClintock in studies of peculiar inheritance patterns
found in the colors of Indian corn, jumping DNA refers to the idea that some
stretches of DNA are unstable and "transposable," ie., they can move
around -- on and between chromosomes.


http://www.ornl.gov/hgmis/resource/people.html



Conditional compilation


src=http://whyfiles.org/034clone/images/human_chrom.gif>

Of the
20,000 to
30,000
genes
now thought to be in the human genome, most cells
express only a very small part - which makes sense, a liver cell has little
need for the DNA code that makes neurons.


But as almost all cells carry around a full copy ('distribution') of the
genome, a system is needed to #ifdef out stuff not needed. And that is just
how it works. The genetic code is full of #if/#endif statements.



This is why 'href=http://www.ultranet.com/~jkimball/BiologyPages/S/Stem_Cells.html>stem
cells' are so hot right now - these cells have the ability to
differentiate into everything. The code hasn't been #ifdeffed out
yet, so to speak.


Stated more exactly, stem cells do not have everything turned on - they are
not at once liver cells and neurons. Cells can be likened to state machines,
starting out as a stem cell. Over the lifetime of the cell, during which
time it may clone ('fork()') many times, it specializes. Each specialization
can be regarded as chosing a branch in a tree.


Each cell can make (or be induced to make) decisions about its future, which
each make it more specialized. These decisions are persistent over cloning
using transcription factors and by modifying the way DNA is stored spacially
('steric effects').


A liver cell, although it carries the genes to do so, will generally not
be able to function as a skin cell. There are some indications out there
that it is possible to 'breed' cells 'upwards' into the hierarchy, making
them pluripotent. See also href=http://www.sciencedaily.com/releases/2002/01/020131074645.htm>this
article.


Dead code, bloat, comments ('junk dna')




The genome is littered with old copies of genes and experiments that went
wrong somewhere in the recent past - say, the last half a million years.
This code is there but inactive. These are called the 'pseudo genes'.



Furthermore, 97% of your DNA is commented out. DNA is linear and read from
start to end. The parts that should not be decoded are marked very clearly,
much like C comments. The 3% that is used directly form the so called
'exons'. The comments, that come 'inbetween' are called 'introns'.



These comments are fascinating in their own right. Like C comments they have
a start marker, like /*, and a stop marker, like */. But they have some more
structure. Remember that DNA is like a tape - the comments need to be
snipped out physically! The start of a comment is almost always indicated by
the letters 'GT', which thus corresponds to /*, the end is signalled by
'AG', which is then like */.


However because of the snipping, some glue is needed to connect the code
before the comment to the code after, which makes the comments more like
html comments, which are longer: '<!--' signifies the start, '-->' the
end.



So an actual stretch of DNA with exons and introns might look like this:


ACTUAL CODE<!-- blah blah blah blah ---- blah -->ACTUAL CODE
| | | | | |
exon 1 acceptor intron 1 branch donor exon 2
(start of comment) (end of comment)


The start of the comment is clear, which is then followed by a lot of
non-coding DNA. Somewhere very near the end of the comment there is a
'branch site', which indicates that the comment will end soon. Then some
more comment follows, and then the actual terminator.


The actual cutting of the comments happens after the DNA has been
transcribed into RNA and is performed by looping the comment and bringing
the pieces of actual code close together. Then the RNA is cut at the
'branch site' near the end of the comment, after which the 'acceptor'
(comment start) and 'donator' (comment end) are connected to eachother.


Now, what are these comments good for? That discussion is part of a
holy
war
that can rival the vi/emacs one.

When comparing different species, we know that some introns show fewer code
changes than the neighboring exons. This suggests that the comments are
doing something important.


There are lots of possible explanations for the massive amount of non-coding
DNA - one of the most appealing (to a coder) has to do with 'folding
propensity'. DNA needs to be stored in a highly coiled form, but not all DNA
codes lend themselves well to this.


This may remind you of href=http://www-2.cs.cmu.edu/~412/applications/ln/lecture16.html>RLL or
MFM coding. On a hard disk, a bit is encoded
by a polarity transition or the lack thereof. A naive encoding would encode
a 0 as 'no transition' and 1 as 'a transition'.


Encoding 000000 is easy - just keep the magnetic phase unchanged for
a few micrometers. However, when decoding, uncertainty creaps in - how many
micrometers did we read? Does this correspond to 6 zeroes or 5? To prevent
this problem, data is treated such that these long stretches of no
transitions do not occur.


If we see 'no transition,no transition,transition,transition' on disk, we
can be sure that this corresponds to '0011' - it is exceedingly unlikely
that our reading process is so imprecise that this might correspond to
'00011' or '00111'. So we need to insert spacers so as to prevent too little
transitions. This is called 'Run Lengh Limiting' on magnetic media.


The thing to note is that sometimes, transitions need to be inserted to
make sure that the data can be stored reliably. Introns may do much the same
thing by making sure that the resulting code can be coiled properly.


However, this area of molecular biology is a minefield! Huge diatribes rage
about variants with exciting names like 'introns early' or 'introns late',
and massive words like 'folding propensity' and 'stem-loop potential'. I
think it best to let this discussion rage on a bit.


A fascinating link of uncertain scientific value is

http://post.queensu.ca/~forsdyke/introns.htm
.

fork() and fork bombs ('tumors')



Like with unix, cells are not 'spawned' - they are forked. All cells started
out from your ovum which has forked itself many times since. Like processes,
both halves of the fork() are (mostly) identical to begin with, but they may
from then on decide to do different things.


As with unix, great problems arise when cells keep on forking. They quickly
exhaust resources, sometimes leading to death. This is called a tumor. The
cell is riddled with 'ulimits' and 'watchdogs' to prevent this sort of thing
from happening. The number of divisions is limited by
Telomere
shortening
, for example.


A cell cannot clone unless very stringent conditions are met - a 'href=http://www.openbsd.org/>secure by default' configuration. It is
only when these safeguards fail that tumors can grow. Like with computer
security, it is hard to strike a balance between security ('no cells can
divide') and usability.


Compare this to the well known href="http://www.cs.washington.edu/homes/csk/halt.html">Halting Problem,
first described by the founder of Computer Science, href="http://www.turing.org.uk/turing/">Alan Turing. Perhaps it is as
impossible to predict if a program will ever finish as it is to create a
functional genome that cannot get cancer?


Mirroring, failover



Each DNA Helix is redundant in itself - you can see the genome as a twisted
ladder whereby each spoke contains two bases - hence the word 'basepair'. If
one of these bases is missing, it can be derived from the one on the other
side. T always binds to A, C always to G. So, we can state that the genome
is mirrored within the helix. 'RAID-1' so to speak.


Furthermore, there are two copies of each chromosome present - one from each
parent, with the notable exception of the Y chromosome, which is only
present in males. The actual details are complicated - but most genes are
thus present twice. In case one is broken or unusefully mutated, the other
independent copy is still there. This is what we would normally call
'failover'.

Cluttered APIs, dependency hell



As proteins interact in the cell, they rely on eachothers' characteristics.
It has just been shown that proteins that interact with a lot of other
proteins cannot evolve, or at least, only do so at a very slow rate. See
Nature, 28 June 2001, and M. Kimura, T. Ohta, Science, 26 April 2002.


They propose that this is because of great internal dependencies which
inhibit the changing of the 'contract' of the protein. It is also noted that
evolution does take place, but very slowly as both parts of the dependency
need to evolve in a compatible way at the same time.

Viruses, worms



Somebody recently proposed in a discussion that it would be really cool to
hack the genome and compromise it so as to insert code that would copy
itself to other genomes, using the host-body as its vehicle. 'Just like the
nimda worm!'


He shortly thereafter realised that this is exactly what biological viruses
have been doing for millions of years. And they are exceedingly good at it.


A lot of these viruses have become a fixed part of our genome and hitch a
ride with all of us. To do so, they have to hide from the virus scanner
which tries to detect foreign code and prevent it from getting into the DNA.

The Central Dogma: .c -> .o -> a.out/.exe



When scientists were still discovering the basics of genetics they were
faced with lots of different chemicals but the correlation was unclear. When
it became clear what comes from what it was hailed as a great triumph and
called 'The Central Dogma'.


This dogma tells us that DNA is used to make RNA and that RNA is used to
make proteins, which is like saying that from a .c file comes a .o object
file, which can be compiled into an executable (a.out/exe). It also tells us
that this is the only order in which information flows.


Now, the Central Dogma has recenly been tarnished somewhat. Like any billion
year old coding project, a lot of hacking has been going on, and sometimes
information flows the other way. Sometimes RNA patches the DNA and at other
times, the DNA is modified by proteines created earlier.


But generally, the dependencies are clear, so the Central Dogma remains
important.


Binary patching aka 'Gene therapy'




We can fiddle easily enough with DNA. There are companies to which you can
send an ASCII file with DNA characters, and they will synthesise the
corresponding 'output' for you. We can also splice DNA into developing
animals and plans.


It is far harder to 'patch the running executable', as any programmer can
attest. It is just like that with the genome. To change a running copy ('a
human'), you need to edit each and every relevant copy of the gene you want
to patch.


For many years, medical science has tried to patch people with SCID, or
'Severe Combined Immunodefeciency', which is a very nasty disease which
in effect disables the immune system - leading to very ill patients. It has
been clear for quite a while now which letters in the DNA need to be fixed
in order to cure these people.


Many attempts where made to patch running people, using viruses that insert
new DNA into living organisms, but this proved to be very hard. The genome
is guarded far too well for such a simple approach to work - cells guard
their code better than Microsoft!


However, recently the right virus was found which was able to breach the
protection of the genome and fix the broken characters, leading to

apparently healthy people
.


Bug Regression



When fixing a bug in a computer program, we often introduce new bugs in the
course of doing so. The genome is rife with this thing. A lot of African
Americans are immune to Malaria but instead suffer from sickle cell anemia:



In tropical regions of the world where the parasite-borne disease malaria
is prevalent, people with a single copy of a particular genetic mutation
have a survival advantage.

...


While inheriting one copy of the mutation confers a benefit, inheriting two
copies is a tragedy. Children born with two copies of the genetic mutation
have sickle cell anemia, a painful disease that affects the red blood cells.


http://www.fda.gov/fdac/features/496_sick.html


There are quite a few examples of this happening. See also the wonderful
book
'Genome' by Matt
Ridley.


Reed-Solomon codes: 'Forward Error Correction'



Like computer storage, DNA (and its intermediate 'RNA') can get corrupted.
To protect against common 'single bit errors', the encoding from individual
DNA letters to proteins is degenerate. There are 4 RNA characters, U, C, G
and A - in other words, a 'byte' is 2 bits long. Three characters correspond
to an amino acid.



6 bits could conceivably map to 64 amino acids, yet there are only 20 in
use. For example, UCU, UCC, UCA and UCG all encode for 'Serine', whereas only
UGG maps to 'Tryptophan'.


Now, it turns out that some likely 'typos' (UCU -> UCC) in the encoding lead
to an identical amino acid being expressed. For more about this fascinating
phenomenon, read
'Metamagical Themas' by Douglas
Hofstadter
.

Holy Code: href=http://www.tuxedo.org/~esr/jargon/html/entry/You-are-not-expected-to-understand-this.html>
/* you are not expected to understand this */



Some code is sacred. We may not remember who wrote it, or why - we just know
that it works. The guy who thought it up may have left the company already.
Such code is not to be tinkered with.


DNA knows the concept of the 'molecular clock'. Some parts of the genome
are actively changing and some parts are sacrosanct. A good example of the
latter are the Histone genes H3 and H4.


These genes are fundamental to the actual storage of the genome and are thus
of paramount importance. Any failure in this code rapidly leads to a
non-functioning organism.


So it is to be expected that this code isn't tinkered with and that turns
out the case. The H3 an H4 genes have a *zero* effective mutation rate in
humans. But it goes far beyond that. You share almost the exact same code
with anything from chickens to grass or moulds.



RATES OF NUCLEOTIDE SUBSTITUTION PER SITE PER 1000 MILLION YEARS BETWEEN
VARIOUS HUMAN AND RODENT PROTEINS-CODING GENES WITH DIVERGENCE SET AT
80 MILLION YEARS BASED ON FOSSIL EVIDENCE:


geneNumber of codonsEffective rate
histone 31350.00
histone 41010.00
insulin510.13
gamma interferon1362.79



href=http://www.staffs.ac.uk/schools/sciences/biology/Handbooks/evolseqphylo.htm>
http://www.staffs.ac.uk/schools/sciences/biology/Handbooks/evolseqphylo.htm



Now, it does appear that there are two ways the genome can make sure that
code does not mutate. The first way is described above: use amino acids
that are highly degenerate and making sure that those typos that DO occur
result in the same output.


Furthermore, genes can be copied earlier or later in the cell's reproductive
process, leading to more or less favourable copying conditions. Many more of
such conditions apply.


It appears as if H3 and H4 were authored very carefully as they do have a
lot of 'synonymous changes', which through the clever techniques described
above do not lead to changes in the output.

Framing errors: start and stop bits




 

...0 0000 0001   0000 0010  0000 0011 0...


This clearly describes the 8 bit values 1, 2 and 3. The spaces I added make
it clear where a byte starts and stops. Many serial devices employ stop and
start bits to encode where you start reading. If we shift this sequence
slightly:

...00 0000 0010   000 00100  000 00110 ...



It suddenly reads 2, 4, 6! To prevent this from happening in DNA there are
elaborate signals that tell the cell where to start reading. Interestingly,
there are pieces of genome that can be read from multiple starting points,
and produce useful (but different) results either way. That is what I call a
cool hack!


Each way a strand of DNA can be read is called anhref=http://bioweb.uwlax.edu/GenWeb/Molecular/Seq_Anal/Translation/translation.html>
Open Reading Frame and there are generally 6, 3 each way.

Massive multiprocessing: each cell is a universe



Now, DNA is not like a computer programming language. It really isn't. But
there are some whopping analogies. We can view each cell as a CPU, running
its own kernel. Each cell has a copy of the entire kernel, but choses to
activate only the relevant parts. Which modules or drivers it loads, so to
speak.



If a cell needs to do something ('call a function'), it whips up the right
piece of the genome and transcribes it into RNA. The RNA is then translated
into a sequence of amino acids, which together make up a protein the DNA
coded for. Now for the really cool bit :-)


This protein is tagged with a shipping address. This is a marker consisting
of several amino acids which tell the rest of the cell where this protein
needs to go. There is machinery which acts on these instructions, and
delivers the protein, which is potentially on the outside of the cell.


The delivery instruction is then stripped off and several post processing
steps may be performed, possibly activating the protein - which is good,
because you may not want to transport an active protein through places where
it should not do work.


A Cell


Self hosting & bootstrapping



If we were to destroy all existing C compilers on the planet and leave only
the code for one, we would be in great trouble. Yes, we have the C code to a
C compiler, but we need a C compiler to compile it!


In actual fact, this was solved by not writing the first C compiler in C
(duh), but in a language that was available already: B. See
here for
details about 'bootstrapping'.


The same holds for the genome. To create a new 'binary' of a specimen, a
*living* copy is required. The genome needs an elaborate toolchain in order
to deliver a living thing. The code itself is impotent. This toolchain is
commonly called 'your parents'.


It appears that RNA, which is an intermediate code between DNA and a
protein, may have been the 'B' for DNA. Which begs the question where RNA
came from. It is very interesting to note that extra-terrestial objects
often contain amino acids! See
href=http://www.google.com/search?hl=en&q=amino+acids+meteorites>http://www.google.com/search?hl=en&q=amino+acids+meteorites

The Makefile




Organisms typically start out as a single cell, which as said before
contains two entire copies of the genome. The big tarfile so to speak, with
all files extracted, ready to go. Now what?


Enter the Homeobox
genes
. Cells must be copied and assigned a purpose. The Homebox genes
start out by laying a 'top to bottom' dependency which reads 'start with the
head'. In order to make this happen, a chemical gradient is created by which
cells can sense where they are, and decide if they need to do things useful
for building a head, or for building a primordial notochord.


Only discovered in 1983, the Homebox genes are a very exciting area of
research right now. It is interesting to note that like a Makefile, 'HOX'
genes only trigger things in other genes and don't materially build things
themselves.


The homebox 'syntax' appears to be very 'holy' in the sense described above.
What happens if you copy paste the 'legs selector' part of a mouse HOX gene
into the fruitfly Homebox:



'In fact, when the mouse Hox-B6 gene is inserted in Drosophila, it can
substitute for Antennapedia and produce legs in place of antennae'


http://www.ultranet.com/~jkimball/BiologyPages/H/HomeoboxGenes.html


The fruitfly and human genomes did not branch just millions of years ago but
hundreds of millions of years ago. And you can copy paste parts
('Selectors' in the genetic language) of the Makefile and it still clicks.
Please note that the 'build a leg' routine in a fruitfly is of course
radically different from that in a mouse, but the 'selector' correctly
triggers the right instructions.


Further reading




Genome by Matt
Ridley
An amazing account of an effect each chromosome has on
our lives. Very readable yet strict in not 'dumbing down' the theory.
Contains an impressive set of references.


Source of many of the more impressive examples found on this page.



And to help Matt along in the quest he clearly sets out in his book, I would
like to state quite clearly:

Genes are not there to cause
diseases
Human
Molecular Genetics, second edition
by Tom Strachan and Andrew P. Read
Neatly fills the gap between 'primary literature' (ie, peer reviewed
academic magazines and
papers) and introductory textbooks. I'm litteraly dragging myself through
this book, constantly looking things up in order to understand everything.
If you really want to know the details about introns, exons, RNA in all its
variants, how genes cause and prevent diseases, this is the book.


href=http://www.amazon.com/exec/obidos/ASIN/0192860925>
The Selfish Gene
by Richard Dawkins

href=http://www.amazon.com/exec/obidos/search-handle-url/index%3Dbooks%26field-author%3DDawkins%2C%20Richard/>
Richard Dawkins is the
href=http://www.amazon.com/exec/obidos/search-handle-url/index%3Dbooks%26field-author%3DStevens%2C%20Richard/>
Richard Stevens
of evolution theory. Both have contributed practical work but are most
famous for their crystal clear expositions of existing theory, opening up
the world they describe to an audience of millions.


In this book, Dawkins explains evolution from a 'gene' standpoint rather
then from a 'species' standpoint. It turns out to make a lot more sense this
way and helps understand how genes power you, and not the other way around.
It is not that genes help you do what you want to do, you ARE the genes.


Also explains a lot about how genes work along the way.

href=http://www.amazon.com/exec/obidos/ASIN/0393315703>
The Blind Watchmaker : Why the Evidence of Evolution Reveals a Universe
Without Design
by Richard Dawkins

Again a book by Dawkins. More about evolution than about genes but clearly
explains how evolution can be responsible for the intricate design found in
many living things.


Again very readable and fascinating on every level.



Metamagical Themas
by Douglas
Hofstadter

This is an 'idea' book. It is filled to the brim with ideas, they simply
ooze out of the pages. Many of these ideas are about information theory,
genetics, life, intelligence, music, mathematics and people.


Clearly not a genetic textbook but has been influential in imbueing
enthousiasm for all things genetic in many people. Can often be found dirt
cheap in second hand bookstores.


Recommended.




MUCH OF WHAT INDIA AND HINDUISM ARE TODAY CAN BE UNDERSTOOD BY EXAMINING THEIR ORIGINS AND HISTORY. HERE IS A HUMBLE CHRONOLOGY THAT TELLS THE STORY OF THE SAGES, KINGS, OUTSIDE INVADERS AND INSIDE REFORMERS WHO contributed to the world's oldest living civilization and largest modern-day democracy. Hindu India has been home to twenty to thirty percent of the human race throughout most of recorded time. Her story, summarized here, is crucial to human history. The emphasis on spirituality in India's thought and history is unparalleled in human experience. The king in his court, the sage on his hill and the farmer in one of Bharat's 700,000 villages each pursues his dharma with a common ultimate purpose: spiritual enlightenment. This perspective is the source of Hinduism's resilience in the face of competing faiths and conquering armies. No other nation has faced so many invaders and endured. These invasions have brought the races of the world to a subcontinent one-third the size of the US. There are many feats of which the ancient Hindus could be proud, such as the invention of the decimal system of numbers, philosophy, linguistics, surgery, city planning and statecraft. And most useful to us in preparing this timeline: their skill in astronomy.

Dates after Buddha are subject to little dispute, while dates before Buddha have been decided as much by current opinion and politics as by scientific evidence. The overwhelming tendency of Western scholarship has been to deny the great antiquity of Hinduism. Indian scholar S.B. Roy points out that the commonly accepted chronology of German-born and Oxford University educated linguist Max Muller (1823 - 1900) is based "on the ghost story of Kathasaritasagara." Indologist Klaus K. Klostermaier agrees: "The chronology provided by Max Muller and accepted uncritically by most Western scholars is based on very shaky ground indeed." Muller admitted his covert intention to undermine Hinduism. In a letter to his wife in 1886 he wrote: "The translation of the Veda will hereafter tell to a great extent on the fate of India and on the growth of millions of souls in that country. It is the root of their religion, and to show them what the root is, I feel sure, is the only way of uprooting all that has sprung from it during the last 3,000 years.''

Contemporary researchers, such as Dr. B.G. Siddharth of B.M. Birla Science Centre, Dr. S.B. Roy, Professor Subhash Kak, Dr. N.R. Waradpande, Bhagwan Singh and Dr. David Frawley, have developed a much earlier picture of India, assembling new chronologies based on dating scriptural references by their relationship to the known precession of the equinoxes. Earth's axis of rotation "wobbles," causing constellations, as viewed from Earth, to drift at a constant rate and along a predictable course over a 25,000-year cycle. For example, a Rig Vedic verse observing winter solstice at Aries can be correlated to around 6500 BCE. Frawley states, "Precessional changes are the hallmark of Hindu astronomy. We cannot ignore them in ancient texts just because they give us dates too early for our conventional view of human history." Besides such references from scripture, there is other evidence to support these scholars' dates, such as carbon-14 dating, the discovery of Indus-Sarasvati Valley cities and the recent locating of the Sarasvati River, a prominent landmark of Vedic writings.

Many entries in this timeline prior to 600 BCE derive from the work of Dr. S.B. Roy ("Chronological Framework of Indian Protohistory - The Lower Limit") and that of David Frawley, PhD (Gods, Sages and Kings). In many cases, we have included more than one entry for an event to show the diverse postulations on its dating. For a comprehensive review of the Timeline, we were fortunate to have the scholarly assistance of Prof. Siva G. Bajpai PhD, Director of Asian Studies at California State University, who co-authored the remarkable tome, A Historical Atlas of South Asia.

Max Muller was an early evangelist of another, more invidious, dogma imposed on Hindu history: the "Aryan invasion" theory. Originally a Vedic term meaning "noble," then applied to the parent-language of Greek, Sanskrit, Latin and Germanic, the term Aryan soon referred to those who spoke that parent language - a supposed race of light-skinned Aryans. The idea of a parent race caught the imagination of 18th and 19th century European Christian scholars, who hypothesized elaborate Aryan migrations from Central Asia, west to Europe, south to Iran and India (ca 1500 BCE) and east to China - conquering local "primitive" peoples and founding the world's great civilizations. This theory holds that the Vedas, the heart and core of Sanatana Dharma, were substantially brought to India by these outsiders and only in part composed in India. Though lacking scientific evidence, this theory, like the alleged Aryan-Dravidian racial split, was accepted and promulgated as fact for three main reasons. It provided a convenient precedent for Christian British subjugation of India. It reconciled ancient Indian civilization and religious scripture with the supposed late 4000 BCE Biblical date of Creation. It created division and conflict among the peoples of India, making them vulnerable to conversion by Christian missionaries.

Many scholars today, of both East and West, believe the Rig Veda people who called themselves Aryan were indigenous to India, and that there never was an Aryan invasion. India's languages have been shown to share common ancestry in ancient Sanskrit and Tamil. Even these two apparently unrelated languages, according to current "super-family" research, have a common origin: an ancient language dubbed Nostratic.

Evidence substantiating the New Model for India's history includes the following. Rig Veda verses belie the old chronology: i.51.14-15 cites winter solstice occuring when the sun rises in Revati nakshatra, which is only possible at 6,000 bce, long before the alleged invasion. Carbon dating confirms horses in Gujarat at 2,400 bce, contradicting the claim that Aryans must have brought them to the region around 1500 BCE. NASA satellite photos prove the Sarasvati River basin is real, not myth. Fire altars excavated at Kali Bangan in Rajasthan support existence of Rig Veda culture at 2,700 bce. Kunal, a new site in Haryana, shows use of writing and silver craft in pre-Harappan India, 6-7,000 bce. Supporters of the New Model include B.G. Tilak, P.C. Sengupta, S.B. Roy, S.D. Kulkarni, Pargiter, Jagat Pati Joshi, Dikshit, K.N. Shastri, Sri Aurobindo, Hermann Jacobi, S.R. Rao, Dayananda Saraswati, Subash Kak, David Frawley and B.G. Siddharth. The New Model states that India's native peoples founded the Indus/Sarasvati River civilization, developed Sanskrit and wrote her ancient texts, that European dates are wrong, and that the dating of the Bharata War at 3139-38 bce (not 1424 bce) is the true "sheet anchor" of Indian chronology. By this school of thought, India's history goes back perhaps 10,000 years, and India is not indebted to invaders for her traditions. Evidence shows that Vedic texts, once deemed partly mythology, are Earth's oldest factual account of human experience.

How to Read the Timeline: [Not included in this web version - only in the printed edition: The thick maroon vertical line represents the flow of time. The thinner colored lines to the left indicate the duration of major dynasties. Not all are included, for at times India was divided into dozens of independent kingdoms.] Approximate dates are preceded by ca, an abbreviation for circa, which denotes "around" or "in approximately." Most dates prior to Buddha (624 bce) are considered estimates.

 

The weaver-saint Tiruvalluvar is part of Hindu history. Living in South India around 200 BCE, he wrote the ethical masterpiece Tirukural to guide humanity along the right path. Here he is etching verses onto a palm leaf, while his family spins thread and looms cloth.

-2 M Stone artifacts are made and used by hominids in North India, an area rich in animal species, including the elephant.

-500,000 Stone hand axes and other tools are used in North India.

-470,000 India's hominids are active in Tamil Nadu and Punjab.

-400,000 Soan culture in India is using primitive chopping tools.

-360,000 Fire is first controlled by homo erectus in China.

-300,000 Homo sapiens roams the Earth, from Africa to Asia.

-100,000 Homo sapiens sapiens with 20th-century man's brain size (1,450 cc) are in East Africa. Populations separate.

-75,000 Last Ice Age begins. Human population estimated at 1.7 million.

-60,000 According to genetic scientist Spencer Wells' research, televised by National Geographic, early man's first wave of migration from Africa occurred at this time to India, evidenced by the genetic makeup of Tamil Nadu's modern-day Kallar community, who are related to the Australian aborigines.

-50,000 Genetic research by Richard Villems of the Estonian Biocentre concludes that the maternal lineages of modern-day India's populations are largely unique to India, and on the order of 50,000 years old. As a result, Villems said, "I think that the Aryan Invasion theory in its classic form is dead."

-45,000 Seafaring migrations from S.E. Asia settle Indonesian Islands and Australia.

-40,000 Hunter-gatherers in Central India are living in painted rock shelters. Similar groups in Punjab camp at sites protected by windbreaks. Cave paintings found in 2002 in Banda depict a hunter riding a horse in a group hunting scene.

-30,000 American Indians spread throughout the Americas.

-10,000 Last Ice Age ends after 65,000 years; earliest signs of agriculture. World population is 4 million; India, 100,000.

-10,000 Taittiriya Brahmana 3.1.2 refers to Purvabhadrapada nakshatra's rising due east, a phenomenon occurring at this date (Dr. B.G. Siddharth of the Birla Science Institute), indicating earliest known dating of the sacred Veda.

-10,000 Vedic culture, the essence of humanity's eternal wisdom, Sanatana Dharma, lives in Himalayas at end of Ice Age.

-9000 Old Europe, Anatolia and Minoan Crete display a Goddess-centered culture reflecting a matriarchial order.

-8500 Taittiriya Samhita 6.5.3 places Pleiades asterism at winter solstice, suggesting the antiquity of this Veda.

-7500 Excavations at Neveli Cori in Turkey reveal advanced civilization with developed architecture. B.G. Siddharth believes this was a Vedic culture.

-7200 War of the Ten Kings is fought (dating by S.D. Kulkarni).

-7000 Proto-Vedic period ends. Early Vedic period begins.

-7000 Time of Manu Vaivasvata, "Father of Mankind," of Sarasvati-Drishadvati area (also said to be a South Indian monarch who sailed to the Himalayas during a great flood).

-7000 Early evidence of modern horses in the Ganga basin (Frawley).

-7000 Indus-Sarasvati area residents of Mehergarh grow barley, raise sheep and goats, store grain, entomb their dead and construct buildings of sun-baked mud bricks. (S.D. Kulkarni asserts such refinements had existed for ages, though archeology reaches only to this period.)

-6776 Start of Hindu king's lists according to Greek references that give Hindus 150 kings and a history of 6,400 years before 300 BCE; agrees with next entry.

-6500 Rig Veda verses (e.g., 1.117.22, 1.116.12, 1.84.13.5) say winter solstice begins in Aries (according to D. Frawley), giving antiquity of this section of the Vedas.

-6000 Early sites on the Sarasvati River, then India's largest, flowing west of Delhi into the Rann of Kutch; Rajasthan is a fertile region with much grassland, as described in the Rig Veda. The culture, based upon barley (yava), copper (ayas) and cattle, also reflects that of the Rig Veda.

-5500 Date of astrological observations associated with ancient events later mentioned in the Puranas (Alain Danielou).

-5500 Mehergarh villagers make baked pottery and thousands of small, clay of female figurines (interpreted to be earliest signs of Shakti worship), and are involved in long-distance trade in precious stones and sea shells.

-5000 World population, 5 million; doubles every 1,000 years.

-5000 Beginnings of Indus-Sarasvati civilizations of Harappa and Mohenjo-daro. Date derived by considering excavated archeological sites 45 feet deep. Brick fire altars exist in many houses, suggesting Vedic fire rites. Earliest signs of Siva. This mature culture lasts 3,000 years, ending around -1700.

-5000 Rice is harvested in China, with grains found in baked bricks. But its cultivation originated in Eastern India.

-4300 Traditional date for Lord Rama's time (Kulkarni's date is -5500; see also-2040, and latest dating at -500).

-4004 Archbishop Usher's (17th century) supposed date of the creation of the world, based on genealogies in the Old Testament.

-4000 Excavations from this period at Sumerian sites of Kish and Elamite Susa reveal presence of Indian imports.

-4000 India's population is 1 million.

-3928 July 25th: the earliest eclipse mentioned in the Rig Veda (according to Indian researcher Dr. Sri P.C. Sengupta).

-3761 The year of world creation in the Jewish religious calendar.

-3200 In India, a special guild of Hindu astronomers (nakshatra darshas) record in Vedic texts citations of full and new moon at winter and summer solstices and spring and fall equinoxes with reference to 27 fixed stars (nakshatras) spaced nearly equally on the moon's ecliptic (visual path across the sky). The precession of the equinoxes (caused by the mutation of the Earth's axis of rotation) makes the nakshatras appear to drift at a constant rate along a predictable course over a 25,000-year cycle. Such observations enable specialists to calculate backwards to determine the date the indicated position of moon, sun and nakshatra occurred.

-3139 Reference to vernal equinox in Rohini (middle of Taurus) from some Brahmanas, as noted by B.G. Tilak, Indian scholar and patriot. Now preferred date of Mahabharata war and life of Lord Krishna (see also -1424).

-3102 Beginning of Kali Yuga (Kali Era) in Hindu time reckoning.

-3100 Early Vedic period ends, late Vedic period begins.

-3100 Indian culture in Afghanistan and parts of Central Asia.

-3100 Aryans inhabit Iran, Iraq and Western Indus-Sarasvati Valley frontier. [Frawley describes Aryans as "a culture of spiritual knowledge." He and many Indian scholars believe 1) the Land of Seven Rivers (Sapta Sindhu) cited in the Rig Veda refers to India only, 2) the people of Indus-Sarasvati valleys and those of Rig Veda are the same, and 3) there was no Aryan invasion. Others claim the Indus-Sarasvati people were Dravidians who moved out or were displaced by incoming Aryans.]

-3000 Weaving in Europe, Near East and Indus-Sarasvati Valley is primarily coiled basketry, either spiraled or sewn.

-3000 Evidence of horses in South India.

-3000 People of Tehuacan, Mexico, are cultivating maize.

-3000 Saiva Agamas are recorded; time of the earliest Tamil Sangam (by traditional dating; see also -500).

-2700 Tolkappiyam Tamil grammar is composed (traditional dating; see also -500).

-2700 Seals of Indus-Sarasvati Valley indicate Siva worship, represented by Pashupati, Lord of Animals.

-2600 Indus-Sarasvati civilization reaches height it sustains until -1700. Spreading from Pakistan to Gujarat, Punjab and Uttar Pradesh, it is the largest of the world's three oldest civilizations, with links to Mesopotamia (possibly Crete), Afghanisthan, Central Asia and Karnataka. Harappa and Mohenjo-daro each have populations of 100,000.

-2600 Major portions of the Veda hymns are composed during the reign of Visvamitra I (Dating by S.B. Roy).

-2600 Drying up of Drishadvati River of Vedic fame, along with possible shifting of the Yamuna to flow into the Ganga.

-2600 First Egyptian Pyramid under construction.

-2500 Main period of Indus-Sarasvati cities. Atharva Veda indicates culture relies heavily on rice and cotton, which were first cultivated in India. Ninety percent of sites are along the Sarasvati, the region's agricultural bread basket. Mohenjo-daro is a large peripheral trading center. Rakhigari and Ganweriwala on the Sarasvati are as big as Mohenjo-daro. So is Dholavira in Kutch. Indus-Sarasvati sites have been found as far south as Karnataka's Godavari River and north into Afghanistan on the Amu Darya River.

-2500 Reference to vernal equinox in Krittika (Pleiades or early Taurus) from Yajur and Atharva Veda hymns and Brahmanas. This corresponds to Harappan seals that show seven women (the Krittikas) tending a fire.

-2350 Sage Gargya (born 2285), 50th in Puranic list of kings and sages, son of Garga, initiates method of reckoning successive centuries in relation to a nakshatra list he records in the Atharva Veda with Krittika as the first star. Equinox occurs at Krittikia Purnima.

-2300 Sargon founds Mesopotamian kingdom of Akkad, trades with Indus-Sarasvati Valley cities.

-2300 Indo-Europeans in Russia's Ural steppelands develop efficient spoked-wheel chariot, using 1,000-year-old horse husbandry and freight-cart technology.

-2051 Divodasa reigns to - 1961, has contact with Babylon's King Indatu (Babylonian chronology). Dating by S.B. Roy.

-2050 Vedic people are settled in Iran (Persia) and Afghanistan.

ca -2040 Prince Rama born at Ayodhya, site of future Rama temple (this and next two dates by S.B. Roy; see also -4000).

-2033 Reign of Dasaratha, father of Lord Rama. King Ravana, villain of the Ramayana, reigns in Sri Lanka.

-2000 Indo-Europeans (Celts, Teutons, Slavs, Balts, Hellens, Italics) follow social usages and beliefs that parallel early Vedic patterns.

-2000 Possible date of the first formulated Saiva Agamas.

-2000 World population: 27 million. India: 5 million or 22 percent. India has roughly one fourth of human race through much of history.

-1915 All Madurai Tamil Sangam is held at Thiruparankundram (according to traditional Tamil chronology).

-1900 Late Vedic period ends, post Vedic period begins. (Early dating; see also -1000).

-1900 Drying up of Sarasvati River, end of Indus-Sarasvati culture, end of the Vedic age. After this, the center of civilization in ancient India relocates from the Sarasvati to the Ganga, along with possible migration of Vedic peoples out of India to the Near East (perhaps giving rise to the Mitanni and Kassites, who worship Vedic Gods). The redirection of the Sutlej into the Indus causes the Indus area to flood. Climate changes make the Sarasvati region too dry for habitation. (Thought lost, its river bed is finally photographed via satellite in the 1990s.)

-1728-1686 Hammurabi, famous lawgiver, is king of Babylon.

-1500 Egyptians bury their royalty in the Valley of the Kings.

-1500 Polynesians migrate throughout Pacific islands.

-1500 Proposed date of submergence of the stone port city of Dwarka near Gujarat. Residents use iron and employ a script halfway between Harappan and Brahmi, India's ancient pre-Sanskritic alphabet. [Findings from recent excavations by Dr. S.R. Rao, larger than Mohenjo-daro. Many identify it with the Dwarka of Krishna's time, suggesting possible date of Lord Krishna. Indicates second urbanization phase of India between Indus-Sarasvati sites like Harappa and later cities on the Ganga.]

-1500 Indigenous iron technology in Dwarka and Kashmir.

-1500 Cinnamon is exported from Kerala to Middle East.

-1450 End of Rig Veda Samhita composition.

-1450 Early Upanishads are composed during the next few hundred years, also Vedangas and Sutra literature.

-1424 Mahabharata War occurs (dated from reference in the Mahabharata citing winter solstice at Dhanishtha, which occurs around this time). Reign of Kaurava king Dhritarashtra and of Pandava king Yudhishthira. Time of Sage Yajnavalkya. (See now-preferred date at -3139. Subash Kak places the battle at -2449. Others give later dates, up to 9th century BCE.)

-1424 Birth of Parikshit, grandson of Arjuna, and next king.

-1350 At Boghaz Koy, Turkey, stone inscription of the treaty with Mitanni lists as divine witnesses the Vedic Deities Mitra, Varuna, Indra and the Nasatyas (Ashvins).

-1316 Mahabharata epic poem is composed by Sage Vyasa.

-1300 Very early date (by S.B. Roy) for lifetime of Panini, whose Ashtadhyayi systematizes Sanskrit grammar in 4,000 rules. (Western scholars place him at -400 bce, or as late as 300 ce.)

-1300 Revisions are made in the materials of Mahabharata and Ramayana through 200 BCE. Puranas are edited up until 400 CE. Early smriti literature is composed over next 400 years.

-1255 King Suchi of Magadha sets forth Jyotisha Vedanga, dating it by including an astronomical note that summer solstice is in Ashlesha Nakshatra.

-1250 Moses leads 600,000 Jews out of Egypt. (Early traditional dating.)

-1200 Approximate time of the legendary Greek-Trojan War celebrated in Homer's epic poems, Iliad and Odyssey (ca -750).

-1150 Nebuchadnezzar I of Isin, king of Babylon, throws off Elamite domination.

-1000 Late Vedic period ends. Post-Vedic period begins. (Later dating, see also -1900).

-1000 World population is 50 million, doubling every 500 years.

-1000 Jewish king David (reigns to ca -962) rules a united kingdom in present-day Israel and parts of Jordan and Syria.

-950 King Hiram of Tyre in Phoenicia, in treaty with Israel's King Solomon (son of David), trades with the port of Ophir (Sanskrit: Supara) near modern Mumbai. Same trade with India goes back to Harappan era.

-950 Jewish traders arrive in India in King Solomon's merchant fleet. Later Jewish colonies find India a tolerant home.

-950 Breakdown of Sanskrit as a spoken language occurs over the next 200 years.

-900 Iron Age in India. Early sporadic use dates from at least -1500.

ca -900 Earliest records of the holy city of Varanasi (one of the world's oldest living cities) on the sacred river Ganga.

-900 Use of iron supplements bronze in Greece.

-850 The Chinese are using the 28-nakshatra zodiac called Shiu, adapted from the Hindu jyotisha system.

ca -800 Later Upanishads are recorded.

-800 Later smriti (secondary Hindu scriptures) are composed, elaborated and developed during next 1,000 years.

-776 First Olympic Games are held and documented in Greece.

-750 Prakrits (vernacular or "natural" languages) develop among India's common peoples. Already flourishing in 500 BCE , Pali and other Prakrits are chiefly known from Buddhist and Jain works composed at this time.

-750 Literary Sanskrit is refined over next 500 years, taking on its classical form.

-700 Early Smartism emerges from the syncretic Vedic brahminical (priestly caste) tradition. (It flourishes today as a liberal sect alongside Saiva, Vaishnava and Shakta sects.)

-623 - 543 Life of Siddhartha Gautama, the Buddha, born in Uttar Pradesh in a princely Shakya Saivite family. (Date by Sri Lankan Buddhists. Indian and other scholars favor -563 to - 483; Mahayanists of China and Japan prefer -566 to - 486 or later.)

-605 Nebuchadnezzar II is king of Babylon (-605 to -562). His building program makes it the world's largest and most magnificent city, slightly larger than present-day San Francisco.

ca -600 Life of Zoroaster, founder of Zoroastrianism, original religion of the Persians. His Zend Avesta, holy book of that faith, has much in common with the Rig Veda, sharing many verses. Zoroastrianism makes strong distinctions between good and evil, setting the dualistic tone of God and devil which pervades all later Western religions.

ca -600 Life of Susruta of Varanasi, the father of surgery. His ayurvedic treatises cover pulse diagnosis, hernia, cataract, cosmetic surgery, medical ethics, 121 surgical implements, antiseptics, toxicology, psychiatry, classification of burns, midwifery, surgical anesthesia, therapeutics of garlic and use of drugs to control bleeding.

ca -600 The Ajivikas, an ascetic, atheistic sect of naked sadhus is at its height, continuing in Mysore until the 14th century. Adversaries of Buddha and Mahavira, their philosophy is deterministic, holding that everything is inevitable.

ca -600 Lifetime of Lao-tzu, founder of Taoism in China, author of Tao te Ching. Its esoteric teachings of simplicity and selflessness shape Chinese life for 2,000 years and permeate the religions of Vietnam, Japan and Korea.

-599 - 527 Lifetime of Mahavira Vardhamana, 24th Tirthankara, renaissance Jain master who stresses vegetarianism, asceticism and nonviolence. (Some place him 40 years later.)

-560 In Greece, Pythagoras teaches math, music, vegetarianism and yoga, drawing from India's wisdom ways.

-551 - 478 Lifetime of Confucius, founder of Confucianism. His teachings on social ethics form the basis of Chinese education, religion and ruling-class ideology.

-518 Darius I of Persia (Iran) invades Indus Valley. This Zoroastrian ruler shows tolerance for local religions.

ca -500 Lifetime of Kapila, founder of Sankhya Darshana, one of six classical systems of Hindu philosophy.

ca -500 Dams to store water are constructed in India.

-500 World population reaches 100 million. India's population is 25 million, 15 million of whom live in the Ganga basin.

ca -500 Over the next 300 years (according to later dating by Muller) numerous secondary Hindu scriptures (smriti) are composed: Shrauta Sutras, Grihya Sutras, Dharma Sutras, Mahabharata, Ramayana and Puranas, etc.

ca -500 Tamil Sangam age (-500 to 500) begins (see -3000). Sage Agastya writes Agattiyam, first known Tamil grammar (Kulkarni places him at -8576). Tolkappiyar (Kulkarni says -2700) writes Tolkappiyam Purananuru, on grammar, stating he is recording rules on poetry, rhetoric, etc., of earlier grammarians, indicating prior high development of Tamil. Gives rules for absorbing Sanskrit words. Other Sangam Age works are the poetical Paripadal, Pattuppattu, Ettuthokai Purananuru, Akananuru, Aingurunuru, Padinenkilkanakku. Some refer to worship of Vishnu, Indra, Murugan and Supreme Siva.

ca -486 Ajatasatru (reign -486 to - 458) ascends Magadha throne.

-480 Ajita, a nastika (atheist) who teaches a purely material explanation of life and that death is final, dies.

-478 Prince Vijaya, exiled by his father, King Sinhabahu, sails from Gujarat with 700 followers. Founds Sinhalese kingdom in Sri Lanka. (From the Mahavamsa chronicle, ca 500.)

-469 - 399 Lifetime of Athenian philosopher Socrates.

-428 - 348 Lifetime of Plato, Athenian disciple of Socrates. This great philosopher founds Athens Academy in -387.

-400 Panini composes his Sanskrit grammar, the Ashtadhyayi (date by Western scholars; see Indian dates at -1300).

ca -400 Lifetime of Hippocrates, Greek physician and "Father of medicine," formulates Hippocratic oath, code of medical ethics still pledged by Western doctors.

ca -350 Rainfall is measured by Indian scientists.

-326 Alexander the Great of Macedon invades but fails to conquer Northwestern India. Soldiers' mutiny forces him to retreat and he leaves India the same year. Greeks who remain intermarry with Indians. Mutual interaction influences both civilizations. Greek sculpture impacts Hindu styles. Bactrian kingdoms later promote Greek influence.

-305 Chandragupta Maurya, founder of first pan-Indian empire (-324 to -184), expels Greek garrisons of Seleucus, founder of Seleucid Empire in Iran and Syria. At its height under Emperor Asoka (reign -273 to -232), the Mauryan Empire includes all India except the far South.

ca -302 Kautilya (Chanakya), minister to Chandragupta Maurya, writes Arthashastra, a compendium of laws, procedures and advice for running a kingdom.

-302 In Indica, Megasthenes, envoy of King Seleucus, reveals to Europe in colorful detail the wonders of Mauryan India: an opulent society with intensive agriculture, engineered irrigation and 7 castes: philosophers, farmers, soldiers, herdsmen, artisans, magistrates and counselors.

ca -300 Chinese discover cast iron, known in Europe by 1300 ce.

ca -300 Pandya kingdom (-300 to - 1700 CE) is founded, builder of many of South India's grandest temples, including Madurai Minakshi, Srirangam and Rameshwaram (ca 1600).

ca -300 Pancharatra Vaishnava sect is prominent. All later Vaishnava sects are based on the Pancharatra beliefs (formalized by Sandilya around 100 CE).

-297 Emperor Chandragupta abdicates; becomes Jain monk.

-273 Asoka, the greatest Mauryan Emperor, grandson of Chandragupta, seizes power and rules until 232. He converts to Buddhism after his brutal conquest of Kalinga in -260, and several other countries. He excels at public works, sends diplomatic missions to Syria, Egypt, Cyrene (now Libya), Epirus and Greece; and Buddhist dharma missions to Sri Lanka, China and throughout Southeast Asia. In his 40-year reign, Buddhism becomes a world power. He records his work and teaching in inscriptions, the Rock and Pillar Edicts. India's national emblem features the lion capital from his pillar at Sarnath.

-251 Emperor Asoka sends his son Mahendra (-270 to - 204) to spread Buddhism in Sri Lanka, where to this day he is revered as the national faith's founding missionary.

ca -251 The latest (Western) date for Panini's grammar. (See -1300, -400.)

ca -250 Lifetime of Maharishi Nandinatha, first known satguru in the Kailasa Parampara of the Nandinatha Sampradaya. His eight disciples are Sanatkumar, Sanakar, Sanadanar, Sananthanar, Sivayogamuni, Patanjali, Vyaghrapada and Tirumular (Sundaranatha).

ca -221 Great Wall of China is built, ultimately 2,600 miles long, the only man-made object visible from the moon.

ca -200 Lifetime of Rishi Tirumular, disciple of Maharishi Nandinatha and author of the 3,047-verse Tirumantiram, a summation of Saiva Agamas and Vedas, concisely articulating the Nandinatha Sampradaya teachings, founding South India's monistic Saiva Siddhanta school.

ca -200 Lifetime of Saint Auvaiyar of Tamil Nadu, Ganesha devotee, mystic poet and yogini (see also 800).

ca -200 Lifetime of Patanjali, shishya of Nandinatha and brother monk of Tirumular. He writes the Yoga Sutras at Chidambaram, in South India (Kulkarni dates him at -550).

ca -200 Bhogar Rishi (one of 18 Tamil siddhars) shapes from nine poisons the murti enshrined in today's Palani Hills temple in South India. He is from China or visits there.

ca -200 Lifetime of Saint Tiruvalluvar, poet-weaver who lived near present-day Chennai, author of Tirukural, "Holy Couplets," the classic Tamil work on ethics and statecraft (sworn on in today's South Indian law courts).

ca -200 Jaimini writes the Mimamsa Sutras.

ca -150 Ajanta Buddhist Caves are begun near present-day Hyderabad. Construction of 29 monasteries and galleries continues to 650 CE. Famous murals are painted 600 - 650 CE.

-145 Chola Empire (-145 to - 1300 CE) of Tamil Nadu is founded, noted for government organization and artistic accomplishment, including enormous irrigation works.

-140 Emperor Wu begins three-year reign of China; worship of the Mother Goddess, Earth, attains importance.

-130 Reign ends of Menander (Milinda), Indo-Greek king who converts to Buddhism.

-117-116 Greek navigators Eudoxus of Cyzicus and Hippalus of Alexandria discover use of monsoon winds in the direct sea traffic (rather than coast wise) to and from India. This results in the great increase of Western commerce, especially under the early Roman Empire.

-58 Vikrama Samvat Era Hindu calendar begins.

-50 Kushana Empire begins (-50 to -220 CE). This Mongolian Buddhist dynasty rules most of Indian subcontinent, Afghanistan and parts of Central Asia.

ca -10 Ilangovadikal, son of King Cheralathan of the Tamil Sangam age, writes outstanding epic Silappathikaram, classical Tamil treatise on music and dance.

-4 Jesus of Nazareth (-4 to -30 CE), founder of Christianity, is born, traditionally in Bethlehem of Judea (dates according to current Biblical scholarship).

Western calendar begins. C.E. - Common Era

10 World population is 170 million. India's is 35 million: 20.5 percent of world.

ca 50 South Indians occupy Funan, Indochina. Kaundinya, an Indian brahmin, is first king. Saivism is state religion.

53 A Christian legend places the death of Saint Thomas, one of Christ's 12 Apostles, in Chennai. But history offers no evidence he ever came to India and shows that Bharat's first Christian community was Kerala's Syrian Malabar Church, founded in 345 by Thomas of Cana.

ca 60 Emperor Ming-Ti (reign: 58 - 76) converts to Buddhism and introduces the faith in China. Brings two monks from India who erect temple at modern Honan.

69 A large Jewish community is established in Cochin.

ca 75 A Gujarat prince named Ajisaka invades Java.

78 Shaka Hindu calendar/era begins.

ca 80 Jains divide, on points of rules for monks, into the Shvetambara, "White-clad," and the Digambara, "Sky-clad."

ca 80 - 180 Lifetime of Charaka, court physician to the Kushana king, Kanishka. He formulates a code of conduct for doctors of ayurveda and writes Charaka Samhita, a manual of medicine.

ca 100 Lifetime of Sandilya, first systematic promulgator of the ancient Pancharatra doctrines. His Bhakti Sutras, devotional aphorisms on Vishnu, inspire a Vaishnava renaissance. By 900 CE the sect has left a permanent mark on many Hindu schools. (The Samhita of Sandilya and his followers, Pancharatra Agama, embodies the chief doctrines of present-day Vaishnavas.)

100 Hsuen Tsang of China establishes trade routes to India and as far west as Rome, later known as the Silk Roads. (See alternate date: 630-644).

105 Paper is invented in China.

117 The Roman Empire reaches its greatest extent.

125 Satakarni (reign: ca 106 - 130) of Andhra's Shatavahana dynasty (-70 - 225) destroys Shaka kingdom of Gujarat.

ca 175 Greek astronomer Ptolemy, known as Asura Maya in India, spreads the knowledge of solar astronomy, Surya Siddhanta, to Indian students.

180 Mexican city of Teotihuacan has 100,000 population and covers 11 square miles. Grows to 250,000 by 500 CE.

ca 200 Lifetime of Lakulisa, famed guru who leads a reformist movement within Pashupata Saivism.

ca 200 Hindu kingdoms are established in Cambodia and Malaysia.

205 - 270 Lifetime of Plotinus, Egyptian-born monistic Greek philosopher and religious genius who transforms a revival of Platonism in the Roman Empire into what present-day scholars call Neo-Platonism, greatly influencing Islamic and European thought. He teaches ahimsa, vegetarianism, karma, reincarnation and belief in a Supreme Being that is both immanent and transcendent.

ca 250 Pallava dynasty (ca 250 - 885) is established in Tamil Nadu. They erect the Kailasa Kamakshi Temple complex at the capital of Kanchi and the great 7th-century stone monuments at Mahabalipuram.

ca 275 Buddhist monastery Mahavihara is founded in Anuradhapura, capital of Sri Lanka.

350 Imperial Gupta dynasty (320 - 540) flourishes. During this "Classical Age" norms of literature, art, architecture and philosophy are established. This North Indian empire promotes both Vaishnavism and Saivism and, at its height, rules or receives tribute from nearly all India. Buddhism also thrives under tolerant Gupta rule.

ca 350 Licchavi dynasty (ca 350 - 900) establishes Hindu rule in Nepal. Small kingdom becomes the major intellectual and commercial center between South and Central Asia.

358 Huns, excellent archers and horsemen possibly of Turkish origin, invade Europe from the East.

375 Maharaja Chandragupta II Vikramaditya, greatest Hindu monarch, reigns to 413, expanding the prosperous Gupta Empire northward beyond the Indus River.


------------



It's the biggest example how great movies can make you feel for the character who is nowhere near you, and you don’t know about them and you still feel about them. That’s the magic of Paradise Now


one of the wonderful lines of director Abu-Assad about movie: "The politicians want to see it as black and white, good and evil, and art wants to see it as a human thing."


The Japanese have always loved fresh fish. But the waters close to Japan have not held many fish for decades. So to feed the Japanese population, fishing boats got bigger and went farther than ever. The farther the fishermen went, the longer it took to bring in the fish. If the return trip took more than a few days, the fish were not fresh. The Japanese did not like the taste.

To solve this problem, fishing companies installed freezers on their boats. They would catch the fish and freeze them at sea. Freezers allowed the boats to go farther and stay longer. However, the Japanese could taste the difference between fresh and frozen and they did not like frozen fish. The frozen fish brought lower price.

So fishing companies installed fish tanks. They would catch the fish and stuff them in the tanks, fin to fin. After a little thrashing around, the fish stopped moving. They were tired and dull, but alive.

Unfortunately, the Japanese could still taste the difference. Because the fish did not move for days, they lost their fresh-fish taste. The Japanese preferred the lively taste of fresh fish, not sluggish fish. So how did Japanese fishing companies solve this problem? How do they manage to get fresh-tasting fish to Japan?

To keep the fish tasting fresh, Japanese fishing companies still put the fish in the tanks. But now they add a small shark to each tank. The shark eats a few fish, but most of the fish arrive in a very lively state. The fish are challenged.

As soon as you reach your goals, such as finding a wonderful mate, starting a successful company, paying off your debts or whatever, you might lose your passion. You don't need to work so hard so you relax.

Like the Japanese fish problem, the best solution is simple. L. Ron Hubbard observed it in the early 1950's. "Man thrives, oddly enough, only in the presence of a challenging environment."

The Benefits of a Challenge: The more intelligent, persistent and competent you are, the more you enjoy a good problem. If your challenges are the correct size, and if you are steadily conquering those challenges, you are happy. You think of your challenges and get energized. You are excited to try new solutions. You have fun. You are alive!

Life's challenges are not supposed to paralyze you; they're supposed to help you discover who you are!

by --srinivas from http://josh91.blogspot.com/2008_11_01_archive.html


Who owns the media in India ?


There are several major publishing groups in India, the most prominent
among them being the Times of India Group, the Indian Express Group, the
Hindustan Times Group, The Hindu group, the Anandabazar Patrika Group, the Eenadu Group, the Malayalam Manorama Group, the Mathrubhumi group, the Sahara group, the Bhaskar group, and the Dainik Jagran group.

Let us see the ownership of different media agencies.

NDTV: A very popular TV news media is funded by Gospels of Charity in Spain that supports Communism. Recently it has developed a soft corner towards Pakistan because Pakistan President has allowed only this channel to be aired in Pakistan. Indian CEO Prannoy Roy is co-brother of Prakash Karat, General Secretary of Communist party of India.His wife and Brinda Karat are sisters.

India Today which used to be the only national weekly which supported BJP is now bought by NDTV!! Since then the tone has changed drastically and turned into Hindu bashing.

CNN-IBN: This is 100 percent funded by Southern Baptist Church with its
branches in all over the world with HQ in US. The Church annually allocates
$800 million for promotion of its channel. Its Indian head is Rajdeep
Sardesai and his wife Sagarika Ghosh.

Times group list: Times Of India, Mid-Day, Nav-Bharth Times, Stardust , Femina, Vijaya Times,Vijaya Karnataka, Times now (24- hour news channel) and many more. Times Group is owned by Bennet & Coleman. 'World Christian Council' does 80 percent of the Funding, and an Englishman and an Italian equally share balance 20 percent. The Italian Robertio Mindo is a close relative of Sonia Gandhi.

Star TV: It is run by an Australian, Robert Murdoch, who is supported by St. Peters Pontificial Church Melbourne.

Hindustan Times: Owned by Birla Group, but hands have changed since Shobana Bhartiya took over. Presently it is working in Collaboration with Times Group.

The Hindu: English daily, started over 125 years has been recently taken over by Joshua Society, Berne, Switzerland. N.Ram's wife is a Swiss national.

Indian Express: Divided into two groups. The Indian Express and new Indian Express (southern edition) .ACTS Christian Ministries have major stake in the Indian Express and latter is still with the Indian counterpart.

Eeenadu: Still to date controlled by an Indian named Ramoji Rao. Ramoji Rao is connected with film industry and owns a huge studio in Andhra Pradesh.

Andhra Jyothi: The Muslim party of Hyderabad known as MIM along with a
Congress Minister has purchased this Telugu daily very recently.

The Statesman: It is controlled by Communist Party of India. Kairali TV: It
is controlled by Communist party of India (Marxist)

Mathrubhoomi: Leaders of Muslim League and Communist leaders have major investment.

Asian Age and Deccan Chronicle: Is owned by a Saudi Arabian Company with its chief Editor M.J. Akbar.

The ownership explains the control of media in India by foreigners. The
result is obvious. 
 

  I suppose this leaves out Doordarshan and ZEE NEWS and AAJ TAK.  don't they have their own political agenda? Have your own assessment and views. If you wish to find out about the OWNERSHIP of SULEKHA--it is your headache.