<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-8504712</id><updated>2009-07-01T06:32:48.591+05:30</updated><title type='text'>PC's Blog</title><subtitle type='html'>http://www.pradeepc.net</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default?start-index=26&amp;max-results=25'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>117</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8504712.post-7868247872752555557</id><published>2007-09-11T09:25:00.000+05:30</published><updated>2007-09-11T09:28:52.848+05:30</updated><title type='text'>I moved from Wordpress</title><content type='html'>I moved from here &lt;a href="http://pradeepc.wordpress.com"&gt;to Wordpress&lt;/a&gt; last year. Now I have moved to &lt;a href="http://www.pradeepc.net/blog"&gt;my own website&lt;/a&gt; (still using &lt;a href="http://www.wordpress.org"&gt;Wordpress&lt;/a&gt; as the blogging engine).&lt;br /&gt;&lt;br /&gt;Dont forget to update your bookmarks.&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-7868247872752555557?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.pradeepc.net/blog' title='I moved from Wordpress'/><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/7868247872752555557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=7868247872752555557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/7868247872752555557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/7868247872752555557'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2007/09/i-moved-from-wordpress.html' title='I moved from Wordpress'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-4462940540735707247</id><published>2007-01-18T06:23:00.000+05:30</published><updated>2007-01-18T06:24:32.797+05:30</updated><title type='text'>I am moving to wordpress</title><content type='html'>If you need me, I will be on &lt;a href="http://pradeepc.wordpress.com"&gt;wordpress&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-4462940540735707247?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/4462940540735707247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=4462940540735707247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/4462940540735707247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/4462940540735707247'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2007/01/i-am-moving-to-wordpress.html' title='I am moving to wordpress'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-115772245601925366</id><published>2006-09-08T18:57:00.000+05:30</published><updated>2006-09-08T19:04:16.030+05:30</updated><title type='text'>IIT</title><content type='html'>You will find this funny if you havent studied in the &lt;a href="http://uncyclopedia.org/wiki/Indian_Institute_of_Technology"&gt;IIT&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-115772245601925366?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://uncyclopedia.org/wiki/Indian_Institute_of_Technology' title='IIT'/><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/115772245601925366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=115772245601925366' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/115772245601925366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/115772245601925366'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/09/iit.html' title='IIT'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-115431140644954220</id><published>2006-07-31T07:31:00.000+05:30</published><updated>2006-07-31T07:33:26.463+05:30</updated><title type='text'>Bridges of Madison County</title><content type='html'>&lt;div style="text-align: justify;"&gt;I haven't read a book in one sitting for a long long time. I like to take my time while reading books pausing every few pages and thinking over what I read till then. This is the same whether the book is fiction or non-fiction, but the pausing time is usually greater for non-fiction books, understandbly. Today I went to Minneapolis Central Library and while browsing the shelves I saw the book, "Bridges of Madison County". I had seen the movie earlier and had liked it very much, especially towards the ending scenes. I am a huge fan of Clint Eastwood and I like all his movies, so me liking this movie was no surprise. I had heard that this movie was a special case where the movie out-did the book, which usually doesnt happen.&lt;br /&gt;I took the book from the shelf and read the first few pages and I got interested. I just sat down on the floor and continued reading it. Soon I reached 50 pages and I thought I should read the book fully and so I found a comfortable chair and read the whole book in one sitting. Many a times my eyes filled with tears (it is not surprising anyway, I am a typical cancerian - emotional and sensitive).&lt;br /&gt;I finished the book just before the library closed and sat there for atleast 10 minutes pondering over the greatest love story I ever read. Contrary to popular opinion I think that, in this case also, the movie didnt reach to upto the beauty of the book. I really cant figure out what made me read a book whose story I knew fully (as I had seen the movie), yet move me so deeply. Whatever the reason I am glad that I read the book. Try it, I am sure you would too...&lt;br /&gt;&lt;br /&gt;P.S. I wrote this as a reader review for amazon.com, then thought of publishing it as a blog entry too. I think I am running out of topics to blog about, lol.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-115431140644954220?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/115431140644954220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=115431140644954220' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/115431140644954220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/115431140644954220'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/07/bridges-of-madison-county.html' title='Bridges of Madison County'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-115431053796127331</id><published>2006-07-31T07:09:00.000+05:30</published><updated>2006-07-31T07:18:58.310+05:30</updated><title type='text'>Quality service from Nerdbooks again</title><content type='html'>As you might be aware from my previous post, I am all praise for &lt;a href="http://www.nerdbooks.com"&gt;NerdBooks&lt;/a&gt;&lt;br /&gt;I ordered 3 more books from them and got them in 3 days on DHL ground shipping, with tracking numbers and all. I ordered the books on a monday morning and the books were shipped that morning itself. Arent these guys amazing !&lt;br /&gt;&lt;br /&gt;BTW, the books I ordered are :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0735621977/"&gt;Inside SQL Server 2005 : T-SQL Programming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0672325667/"&gt;Regular Expressions in 10 Minutes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0735622779/"&gt;MCTS Guide - .NET 2.0 Application Development Foundation&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;P.S. I dont own nerdbooks nor do I own any of their stocks :-))&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-115431053796127331?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/115431053796127331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=115431053796127331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/115431053796127331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/115431053796127331'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/07/quality-service-from-nerdbooks-again.html' title='Quality service from Nerdbooks again'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-115116646696648090</id><published>2006-06-24T21:53:00.000+05:30</published><updated>2006-06-24T22:00:32.913+05:30</updated><title type='text'>Nerdbooks</title><content type='html'>I bought some books from Nerdbooks and found the experience a good one. I put the order online by 12.30 or 1 pm and got a call from them by 3 to confirm the order and the books were shipped within a few hours. The books reached me by the second day along with a free T-Shirt. The packing was excellent and the books was in top condition. They usually give a discount 10% to 15% better than Amazon.&lt;br /&gt;If you are planning to buy books online, I strongly recommend &lt;a href="http://www.nerdbooks.com/"&gt;Nerdbooks&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-115116646696648090?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nerdbooks.com/' title='Nerdbooks'/><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/115116646696648090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=115116646696648090' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/115116646696648090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/115116646696648090'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/06/nerdbooks.html' title='Nerdbooks'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-114827806023973709</id><published>2006-05-22T11:36:00.000+05:30</published><updated>2006-05-22T11:37:40.250+05:30</updated><title type='text'>Myths and Truths</title><content type='html'>Something very interesting &lt;a href="http://losangeles.craigslist.com/about/best/van/152468438.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-114827806023973709?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/114827806023973709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=114827806023973709' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114827806023973709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114827806023973709'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/05/myths-and-truths.html' title='Myths and Truths'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-114817107981033032</id><published>2006-05-21T05:51:00.000+05:30</published><updated>2006-05-21T06:04:03.420+05:30</updated><title type='text'>David Blaine - The Enigma</title><content type='html'>The ultimate street magician David Blaine.&lt;br /&gt;&lt;br /&gt; &lt;embed src="http://www.metacafe.com/fplayer/22422/david_blaine_street_magic.swf" width="346" height="305" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.metacafe.com/"&gt;Metacafe&lt;/a&gt; for the video.&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-114817107981033032?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/114817107981033032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=114817107981033032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114817107981033032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114817107981033032'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/05/david-blaine-enigma.html' title='David Blaine - The Enigma'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-114764529677099232</id><published>2006-05-15T03:30:00.000+05:30</published><updated>2006-05-15T03:51:36.823+05:30</updated><title type='text'>Buy No Buy</title><content type='html'>&lt;div style="text-align: justify;"&gt;I am a huge fan of Jeffrey Richter. His latest book &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0735621632"&gt;CLR Via C#&lt;/a&gt; is getting rave reviews everywhere. I decided to buy this book online through &lt;a href="http://www.buy.com"&gt;buy.com&lt;/a&gt; but my choice of seller turned out to be very bad -  a long wait till the book was shipped, a long wait till I find that the shipment is lost, another long wait to get the refund. I just dont understand why people cant just run their business satisfactorily (notice I didnt even say "run it well"), especially in these days of cut-throat competition.&lt;br /&gt;I ordered &lt;a href="http://www.informit.com/title/0321246756"&gt;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries&lt;/a&gt; by Brad Abrams, Krzysztof Cwalina from &lt;a href="http://www.informit.com"&gt;informit&lt;/a&gt;, which they shipped on the next day and was delivered on the 4th day and the shipping was FREE.&lt;br /&gt;So if you are going to buy.com to save a few dollars compared to &lt;a href="http://www.amazon.com"&gt;amazon&lt;/a&gt; or other reputed sellers, I would recommend you shell out the extra few bucks for a better shopping experience.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-114764529677099232?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/114764529677099232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=114764529677099232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114764529677099232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114764529677099232'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/05/buy-no-buy.html' title='Buy No Buy'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-114758290360193701</id><published>2006-05-14T10:26:00.000+05:30</published><updated>2006-05-14T10:31:44.166+05:30</updated><title type='text'>Un-Tag Me !</title><content type='html'>My tagboard being a "huge success" I decided to remove it from the blog. Now my cute photo comes on the top of the right panel, positively increasing the traffic of girls to my blog.&lt;br /&gt;Regular visitors might have also noticed that I have added a Google link panel to the top. It consists of 3 sections : Searches, Webpages and News. These are NOT ads, but they show links to related searches, webpages and news respectively. Check it out.&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-114758290360193701?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/114758290360193701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=114758290360193701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114758290360193701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114758290360193701'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/05/un-tag-me.html' title='Un-Tag Me !'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-114378184743320253</id><published>2006-03-31T10:25:00.000+05:30</published><updated>2006-03-31T10:49:39.830+05:30</updated><title type='text'>Bangalore - A Flash Back</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;On March 15th 2006, I bid goodbye to Tavant after a period of almost 2 years. There were happy moments and sad moments; and times when I was proud and never wanted to leave Tavant and there were times when I wanted to flee at the earliest chance. But as the wheels of time roll by we all have to move on. And I am moving on.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Binil had introduced me to Tavant and its excellent work culture long before I joined Tavant. When Binil comes to Mavelikara for vacation we used to have long chats on topics ranging from cricket, politics and other bullshit to programming and the internet. He could talk endlessly on any topic beneath the sun, and he sure has his own opinion about everything. He vast knowledge on certain topics are pretty impressive and his logical &amp; analytical way of thinking has influenced my thought process significantly. When Tavant had a vacancy in Microsoft Technologies open, I sent him my resume. He gave me an idea on the type of questions they asked at Tavant and what kind of people they are looking out for. I was very low on confidence but he gave me a lot of encouragement. He had taken a lot of pain to get me hired in Tavant, and I owe a lot to him for his brotherly affection and continious encouragement which helped me good when the going was tough. He is one helluva friend to have - I owe him a lot.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;When I first came to Bangalore I lived with Binil and his friends in Wilson Garden. The original members of that house were Girish, Sanju, Ajith &amp;amp; Binil and the guest members were Vineeth, Hari, Jibu, Vijith and Me. Girish &amp; Sanju were working at Sun, while Ajith, Binil, Vineeth &amp;amp; Me were at Tavant. Hari &amp; Jibu were hunting for jobs and Vijith, who was Vineeth's roommate &amp;amp; colleague at Oracle, Hyderabad was working temporarily at Oracle, Bangalore. On the days where there was cricket match on TV, there would be more guests (Syam, Tinu etc) and the fun would be even more. There would be usually two groups - Sachin supporters &amp; Ganguly supporters. A war of words follows which usually ends by both groups declaring themselves victorious, even when Sachin and Ganguly were out for duck :-D. We used to go to Purple Haze at times and we will get drunk to our nose and sing songs on the way back. One night on the way back we got down from the rickshaw half way to our house and walked the rest singing songs, howling and making all sorts of noises. It was pure bliss, the life in Wilson Garden.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;I joined Tavant on 20th May 2004, which was a kinda landmark day in my life. I just became the highest paid guy in my class, aaah.. :-). I was put into the Roper Team which develops softwares for companies under the Roper Scientific Group. The dev team consisted of Manas, Rajesh and me. Ganesh Suryanarayana was the Tech Lead and Gautam Kumar the Project Manager. Manas is one of the nicest guys I have ever met and very trustworthy. Rajesh is always very helpful and known for his extreme frugal nature ;-). It was a closed knit team and we had a pretty easy going schedule. It was during my early days that we had a party called "Tavant Rocks !", which included the Quarterly Excellence Awards and some cultural activities. There was plenty of beer and I got a real kick after which there was plenty of dancing and fun allround. I dropped a plate with food on the floor which gave me a neat drunkard image. I remember Ganesh telling me the next day that I shouldnt be drinking to a point where I lose my consciousness. LOL. There were several parties in Tavant after that but the first one was the best, IMO. Probably just my biased view. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;In the meantime Vineeth and me moved to a house in BTM and Vijith joined us when he moved to Bangalore permanently after joining Infosys. Soon the members at Wilson Garden dispersed and Binil joined us. Sanju &amp; Girish took a house in Santhinagar near their office along with Hari. Jibu got married and went to Dubai. Ajith had moved with some of his friends just after he came back from onsite. I lived there till Vineeth got married and then moved to Madiwala with my college-day-friends. Binil took another house on his own.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;A guy called Sailesh joined Roper for a brief period and just before he left, Biju joined us. Biju is a real hardworker and is fun to be with. Sony also joined our team as soon as we started on the Saguaro project. Sony is a free spirited guy and is very helpful when we need him the most. He is a good friend to have. Jorge Ochoa-Lions and Austin Blanco were our points of contact on the Saguaro project, which we were developing for Photometrics, a Roper company. Jorge (pronounced hor-hey, but in India he accepts it when somebody calls him George, LOL) is the most charming man I have ever met. He is a very understanding guy and always pleasant and we feel immediately at home with him. Austin is a bundle of energy and he seems to enjoy every second of his life, irrespective of the circumstances. Both of them took great pains to make us understand their requirements and they helped to get a much better grip on image processing domain. It was a great pleasure working with them and I am going to miss the tele-conference calls with them. Roper is a better team, thanks to Jorge and Austin. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;We had a team outing to Kemmanagundi along with the LBAC team. Roper had only a few members and Gautam was managing both the projects so it made sense to club both teams for the outing. Unfortunately Manas couldnt come for the outing because he had to go to his native at that time. The trip was a memorable one. We came to interact with and made friends with many of the LBAC guys (and gals). Sure enough it was a great experience and lots of fun - rope climbing, trekking, playing games etc etc. I wish we had this year's team outing before I left.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;In April 2005 Manas, Rajesh &amp;amp; me attended a training at MediaCybernetics (another Roper company) located at Silverspring, Maryland. It was my first trip to US of A. The training was good and we got an opportunity to meet the legendary John, Pierre &amp; Trey, the guys who developed the IQL Image Processing Library which we were using in our project. We couldnt meet Craig since he was working from his home (in Seattle if I remember correctly). Guys from other Roper companies were also attending the training including Jacob Wilbrink of Gatan, who was our point of contact for a project we had developed earlier. Apart from attending the training, we also visted the White House (which was open to public on the day we visited it), Lincoln Memorial, World War II Memorial (and several other war memorials too - America has fought a lot of wars) and many museums. We also visted the Arlington Cemetery where we witnessed the Change of Gaurds at the Tomb of the Unknown Soldier. America is a beautiful place.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;At Tavant I made some great friends including Sajeesh Sankaran, Vinod Varghese, Suresh Nambrath, Eldho Syriac, Ajith Prabhakar, Jenish Joy, Vijay G, Nisha Glory, Nandakumar Devi, Vikas Sasidharan, Subin P, Anish Joyson, Justin Joseph the list goes on... Some of these guys have left Tavant before I did, but I do keep in touch with most of them. I treasure the friendships I found in my days at Tavant.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;I had purchased the domain name www.pradeepc.net and hosted it with deltawebhosting. On the same server I started a forum called WeaselZone [http://www.weaselzone.com] which was intended as a hangout for IT people. But unfortunately it did not flourish. One of the reasons was that in my immediate circle there were only a few people who were members of Forums and knew its value. So the members I managed to pull in in the early stage were not able to contribute much for the growth of WeaselZone. Actually many of my friends didnt even join due to their lack of knowledge of the concept of an internet forum. Another reason was that some people who were interested in such activities didnt have internet access from their office which severely limited their contribution. After this failure, I ventured into the mailing list arena. The idea was to forum a group of keralites working in the IT field. The mailing list was called e-keralites and was created as a google groups [http://groups.google.com/group/e-keralites]. It was my team mate Rajesh who suggested the name for the groups. I managed to pull in around 50 members initially from my friends circle. I started a referral scheme where the member who referred the most number of friends would receive a free t-shirt. This helped to pull in some members and soon we were really on our way. The number of mails started to increase, which posed some problems. Some people were sending forwards which was vehemently opposed by others. I used to send periodic mails suggesting that we limit the number of forwards sent to the groups. This didnt do much good and as a result some members quit from the groups. We were moving into a state of chaos. We had a month when we had above 300 mails in a month, an average of 10 mails per day ! I was forced to ban all forwards to the groups which hurt some sentiments, but now I think it was a good decision. We have a website http://www.e-keralites.com where members would be able to see the details of all members of the groups. Anish Joyson won the t-shirt for the highest number of referrals (about 25 people). Now the list is more matured with more than 260 members and the future looks promising.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Outside Tavant my life was with my old college mates - Ajith, Deepak, Jacob, Aby, Moncy &amp;amp; Tonio. Deepak has recently moved to Chennai. The main activities in our house are little fights, pulling each other's legs, being nostalgic about our college days and drinking beer and the associated demos. On weekends we sometimes indulge ourselves by a movie at the PVR followed by dinner at Transit or KFC. Our house owner, Mr.Thomas John, and his wife, who lives upstairs are very kind and caring folks. Devi amma, our cook, has 10 tongues and we all wake up listening to her rants about anything and everything. Sometimes she can be very irritating, but her motherly affection towards us shines through. She calls Moncy as Jinju, Aby as Avi (or Idi) and Tonio as Ravi. Jacob provides a lot of entertainment by lying outrageously to Devi amma about us. For eg, he once told her that Aby is married, his wife is in Gulf and they are living separately to make as much money as possible. Devi amma believes it all when Jacob tells her these lies. We pulled a similar trick on him by telling Devi amma that he was caught by Police for indecent behaviour with girls. It was great living with you guys, I will miss you all a lot.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Looking back, it was like a view through a kaledeioscope - moments of joy and exhilaration, moments of melancholy and tears, friends and soulmates, the traffic jams, evenings at The Forum, movies at PVR, fish burger from Transit, books at Gangaram's and eating a lot of dust - my life in Bangalore. Some things to forget and a lot unforgettable.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;P.S. What I wrote above probably varies in some respect to what actually happened, because what we see are exactly that - just what we saw, a 3-D version of what really happened. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-114378184743320253?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/114378184743320253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=114378184743320253' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114378184743320253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114378184743320253'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/03/bangalore-flash-back.html' title='Bangalore - A Flash Back'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-114232042340701044</id><published>2006-03-14T12:36:00.000+05:30</published><updated>2006-03-14T12:43:43.406+05:30</updated><title type='text'>Tag Me !</title><content type='html'>I have created a tag board for my site. Well, it will be more correct if I say I added a tag board, because I didnt create it myself, but I am using a free service by &lt;a href="http://cbox.ws/"&gt;cbox&lt;/a&gt;. It is very easy to set it up and it looks pretty cool too. The basic service is free, but if you want &lt;a href="http://cbox.ws/features.php"&gt;premium service&lt;/a&gt; you can pay them a nominal sum of $2 to get a tagboard which is ad-free, has archiving capability, online counter, banning etc etc.&lt;br /&gt;Let me see if anyone is putting up any comments in my tagboard :-)&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-114232042340701044?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/114232042340701044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=114232042340701044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114232042340701044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114232042340701044'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/03/tag-me.html' title='Tag Me !'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-114119217448496506</id><published>2006-03-01T11:18:00.000+05:30</published><updated>2006-03-01T11:19:34.496+05:30</updated><title type='text'>Yet Another Blog</title><content type='html'>I have created yet another blog &lt;a href="http://www.pradeepc.net/weblog"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-114119217448496506?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/114119217448496506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=114119217448496506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114119217448496506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/114119217448496506'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/03/yet-another-blog.html' title='Yet Another Blog'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-113627402651898357</id><published>2006-01-03T13:10:00.000+05:30</published><updated>2006-01-03T13:10:26.523+05:30</updated><title type='text'>New Blog</title><content type='html'>I plan to shift my blog to my own website:&lt;br/&gt;&lt;a href="http://www.pradeepc.net/blog"&gt;http://www.pradeepc.net/blog&lt;/a&gt;&lt;br/&gt;So if you find no updates here, you know where to look ;-)&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-113627402651898357?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/113627402651898357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=113627402651898357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/113627402651898357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/113627402651898357'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2006/01/new-blog.html' title='New Blog'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-113212998572192357</id><published>2005-11-16T14:03:00.000+05:30</published><updated>2005-11-16T14:03:05.723+05:30</updated><title type='text'>Blog using MS Word Part 2</title><content type='html'>That worked fine. Cool!&lt;br/&gt;See details here: &lt;br/&gt;http://help.blogger.com/bin/answer.py?answer=1180&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-113212998572192357?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/113212998572192357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=113212998572192357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/113212998572192357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/113212998572192357'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/11/blog-using-ms-word-part-2.html' title='Blog using MS Word Part 2'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-113212982169456341</id><published>2005-11-16T14:00:00.000+05:30</published><updated>2005-11-16T14:00:22.590+05:30</updated><title type='text'>Blog using MS Word</title><content type='html'>Blogger has a cool feature now to write your blogs in MS Word and directly publish it. I am just testing this feature.&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-113212982169456341?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/113212982169456341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=113212982169456341' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/113212982169456341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/113212982169456341'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/11/blog-using-ms-word.html' title='Blog using MS Word'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-113093398166443496</id><published>2005-11-02T17:33:00.000+05:30</published><updated>2005-12-29T19:03:54.106+05:30</updated><title type='text'>Unit Testing - A Dialogue</title><content type='html'>&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;"Unit Testing ?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span &gt;"Yes, dear Watson. Unit Testing." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span &gt;"Never heard of it." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span &gt;"That is not too surprising for me considering the amount of time you spend debugging and fixing the code once the QA people warm up." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span &gt;"Is it some kind of magic wand which makes all those bugs disappear?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"No...not really. Considering your commendable interest in magic and stuff, I would put it this way - its more of a Guardian Angel who shines upon you while you code." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Really? Thats cool. Where and how can I obtain the services of one of these Guardian Angels?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"You cannot buy one. You should create your own, through what I call a paradigm shift." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"What is this thingy which you call a paradigm shift?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"It is called Test Driven Development." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"All these new terminologies are breaking havoc on my poor brain. First of all, please enlighten me on what a Unit Test is." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"A Unit Test is a piece of code - usually written by the developer himself during the development process itself - for testing a small and specific functionality of his application code." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"But why would anyone in his senses do that kind of a thing?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"You could know that your code does what you intend it should do, everytime." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Could you give me more context on this ?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Sure, building on a solid foundation is the only way to build anything that will stand the test of time whether it be constructing a building with 100 floors or developing an application. That is not to say that what is built on top of the foundation is not important but if you are building on top of something you had better make sure what lies beneath is trustworthy. While developing an application we usually write some methods which will be used in other methods which in turn will be used in yet other methods and so on. If your first method has some bug then all your other methods are implicitly buggy as well, even though they might not introduce any bugs on their own. You are building on a weak foundation." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"But wont I find those bugs when my application is tested after the coding is complete?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Yes, probably you would, but consider the situation in which your method works correctly for some parameters but not for others. The bug might get detected during the testing phase or after production roll-out depending on how lucky (or unlucky, if you so prefer) you are. And you surely know its least expensive, in terms of effort and money, to fix a bug at the earliest time possible." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"That is great, now tell me please, what is this test driven development ?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Now that you know what unit testing is, you almost know what test driven development is. Test driven development goes like this - You write a test first. Run it. It should fail since you havent written any functionality yet. Now add the mininum code so that the test passes. Refactor. Repeat this cycle till your method has all the required functionality and all the tests pass." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Are you meaning to tell me that I should write my test even before writing any code for the functionality." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"You couldnt be more close to the truth, dear Watson. Whenever you add a new functionality, the first step should be to write a Unit Test that anticipates and uses the new code. After you run this test which would fail, add new code and re-test to verify it. Apart from verifying that your new code works, Unit Tests force you to think in advance about the best way to write your code. By regularly following this idiom you can write solid, well-designed code." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Sounds like this Unit Testing idea is a good one." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Yes it is. But like everything good, it comes for a price." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"How is that ?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"You have to put in some effort to create the Unit Tests. The effort also includes thinking of how you want your code to work and how to test whether it does the same as well writing the actual testing code. As a one time investment you need to learn to the Test Driven Development paradigm, which is not very hard as you will soon see. Once you get the hang of it you would never want to go back to your style of programming." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"But wont it take too much time to write the tests?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"If you dont write unit tests, you would probably spend more time debugging and fixing your code. If you write unit tests, you would immediately know it if any change you make to your code broke something else. This could save you much time which you would be spending trying to find out what broke your code which was working all the me. Additionally, the unit tests acts as 'executable documentation' for your application code." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"But shouldnt the QA people be doing the testing anyway?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Yes, they should be doing it. But unit tests would be testing the code at the lowest level and actually complements the functional testing. If you have written good unit tests, there will be much less to fix in the functional testing phase." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"I guess I am convinced of having my own Guardian Angel. How do I start ?" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"You can start by making use of an infrastructure which will help you create and run Unit Tests for your code. Such frameworks are readily available today." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"I'll bet these frameworks are pretty expensive. My boss would never approve." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"If you start betting like this, I am sure you are going to lose a lot of bets. You can get Unit Testing frameworks for free." &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"Free...?!!!" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;"... as in freedom as well as free beer. I would recommend you look at NUnit. You can download a copy of the NUnit unit testing framework from &lt;/span&gt;&lt;a href="http://www.nunit.org./" target="_top"&gt;&lt;span &gt;NUnit.org&lt;/span&gt;&lt;/a&gt;&lt;span &gt;" &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span &gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-113093398166443496?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/113093398166443496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=113093398166443496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/113093398166443496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/113093398166443496'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/11/unit-testing-dialogue.html' title='Unit Testing - A Dialogue'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-112963284349316962</id><published>2005-10-18T16:17:00.000+05:30</published><updated>2005-12-29T19:05:26.096+05:30</updated><title type='text'>Modules in Visual Basic .NET</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;If you are a Visual Basic 6 programmer getting your feet wet with Visual Basic .NET, you would certainly go through an unavoidable phase which involves a mixture of happiness and sadness - the pain of finding some feature of VB6 not being supported in VB.NET and the happiness of finding that some of your other favourite features are still there. If you loved writing your functions in modules when you used to program in VB6, you can rest assured that the VB.NET team has gone some length to keep you happy.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;In case you never programmed in VB6, you would be wondering what a module is. Its a convenience offered by VB6 to write functions (you can have variables in a module too). You can access the functions (or variables) in a module just like calling global functions (or variables) i.e. by omitting the module name as prefix.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Please note that the CLR has no notion of a module. Then how come we still have modules in VB.NET? In a moment we will see how the VB.NET team manages to keep the CLR as well as the VB6 programmer happy.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Let us create a module as follows :&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Module TestModule&lt;br /&gt;Public Sub TestFunction()&lt;br /&gt;Console.WriteLine("Test function of TestModule called !")&lt;br /&gt;End Sub&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Module&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;You can call the TestFunction from outside the module in two ways:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;- TestModule.TestFunction()&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;- TestFunction&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: left"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;The first method would give us some clue as to what happens to a module when it is compiled. Yes, you are right, it will be compiled into a class and all of its members will be Shared (static). But wait, if that is the case then how is it possible to make the function call in the second way? The VB.NET team has more tricks in their bag it seems. To make it possible to call the TestFunction as if it were a global function, an attribute is applied to it - Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute. For the casual programmers this completes the illusion - the VB6 module is still there in VB.NET. The rest of us who does not believe in magic, would look under the hood and find the truth. For this purpose you will need to find a good friend in ILDASM (or a similar tool, if you so prefer). &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;Here is the declaration of our TestModule in IL :&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;.class public auto ansi sealed TestModule&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;extends [mscorlib]System.Object&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;From this declaration that we find that our module has been compiled to a class TestModule which is sealed (means NotInheritable). Thus you cannot use a module as a base class. Although not obvious from this declaration, we should be aware of two things :&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;- all members are implicitly Shared (this can be verified by looking at the IL for the function). You cannot explicitly declare a member as Shared, it will result in a compilation error.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;- you cannot create an instance of this class.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;But if you think about it again, the class is NotInheritable (sealed) and you cant create an instance of it either, which means that the class should be MustInherit (abstract). A class cannot be NotInheritable and MustInherit at the same time, but then how do we explain this apparent paradox ? The compiler pulls a trick here. The class isnt made abstract, instead the compiler just "forgets" to add a default constructor. We know that if we dont define any constructor for a class, the compiler will automatically add one for you (the default constructor). In the case of Modules, VB.NET wont allow you to write a constructor manually. Neither will it add a constructor automatically for you when it compiles the module. It is the absence of the constructor that prevents the creation of an instance of a Module.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;If you are a C# programmer, you would have but one doubt - how can you use a VB.NET Module from C#?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;If you expose a Module from a VB.NET library and use it in a C# project, we wouldnt have any problem if we just call the functions like we are calling static functions declared in a class. We are forced to use the Type prefix (the name of the Module) unlike in VB.NET where we could simply invoke the function by omitting the module name. We cant create an instance of the the Module, just like in VB.NET.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;If you think that all is well with Modules, then you havent heard the full story. If we have 2 modules in your project and both contain functions with same name and signature, then we are forced to prefix the Module name to resolve the ambiguity. This issue is caught by the compiler and is not much of a problem. But you we could get in trouble if there are two functions of same name and signature in two modules which reside in different assemblies. The compiler would look in the modules of the current assembly for a match before it would look in external assemblies. This makes perfect sense but can catch us off gaurd if we arent aware of the possiblity, especially if multiple developers work on the same module. It would be better to prefix the Module name to prevent such problems - we might end up calling a function in a Module in the local assembly when we really wanted to call a function residing in a Module in an outside assembly. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-112963284349316962?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/112963284349316962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=112963284349316962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112963284349316962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112963284349316962'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/10/modules-in-visual-basic-net.html' title='Modules in Visual Basic .NET'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-112903691299386419</id><published>2005-10-11T18:51:00.000+05:30</published><updated>2005-12-29T19:06:21.290+05:30</updated><title type='text'>Event driven programming with Visual Basic .NET</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="FONT-STYLE: italic" &gt;If you are a C# developer with no knowledge of Visual Basic.NET, probably you would like to read &lt;/span&gt;&lt;a style="FONT-STYLE: italic; FONT-FAMILY: courier new" href="http://pradeepc.blogspot.com/2005/10/interested-in-me-subscribe-please.html"&gt;&lt;span &gt;this&lt;/span&gt;&lt;/a&gt;&lt;span style="FONT-STYLE: italic" &gt; instead.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;If you have programmed in C# and VB.NET you would have noticed that the languages are very similar and there exists a line-to-line correlation with the same program written in these languages. In fact many people say that C# is just VB.NET with curly brackets (or vice-versa if you prefer). Many tools exist that provide translation from VB.NET to C# and viceversa at a good accuracy. But when I wrote my eventhandling tutorial in C#, I decided that a VB.NET version is also needed because there is some difference between the two, albeit on a superficial layer.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;EventHandling mechanism in VB.NET provides better flexibility than that of C#. Although the underlying paradigm remains same, the VB.NET compiler provides some shortcuts which can be a real convenience (it actually depends on the developer's mindset whether it is actually a convenience or not).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;There are 2 ways by which a Publisher can publish an event and 2 ways to handle it. The first method is to declare a delegate and an event seperately.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Namespace VBEvents&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Class Publisher&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Delegate Sub StateChangedEventhandler(ByVal sender As Object, ByVal args As EventArgs)&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Event StateChanged As StateChangedEventhandler&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Sub CauseStateChange()&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Console.WriteLine("Publisher going to raise event")&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;RaiseEvent StateChanged(Me, EventArgs.Empty)&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Class&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Namespace&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;Here we can see that there is a Delegate that defines the eventhandler's signature and a Event of the same type as the delegate. To raise an event we use the RaiseEvent keyword. Everything straightforward so far. Now lets see the second method.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Namespace VBEvents&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Class AnotherPublisher&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Event StateChanged(ByVal sender As Object, ByVal args As EventArgs)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Sub CauseStateChange()&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Console.WriteLine("AnotherPublisher going to raise event")&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;RaiseEvent StateChanged(Me, EventArgs.Empty)&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Class&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Namespace&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here we combined the the delegate and event declaration into one as&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Event StateChanged(ByVal sender As Object, ByVal args As EventArgs)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;Note that this is a convenience provided by the VB.NET compiler and that the IL produced as similar in either cases. The compiler automatically creates a delegate for you and names it by appending "EventHandler" to the Event's name. Thus the final outcome is one and the same. This method is not available in C#.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Now lets look at the subscription process. The first method is to subscribe is shown here :&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Namespace VBEvents&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Class Subscriber&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Private m_Pub As Publisher&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Sub New(ByVal pub As Publisher)&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;m_Pub = pub&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,102,0)"&gt;'subscribe&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;AddHandler pub.StateChanged, AddressOf pubEventHandler&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Private Sub pubEventHandler(ByVal sender As Object, ByVal args As EventArgs)&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Console.WriteLine("Handled event raised by " &amp; sender.GetType().ToString())&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Sub RemovePubHandling()&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,102,0)"&gt;'unsubscribe&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;RemoveHandler m_Pub.StateChanged, AddressOf pubEventHandler&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Class&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Namespace&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;Here we use AddHandler to subscribe to an event and RemoveHandler to unsubscribe.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;The second method uses the WithEvents keyword on a reference to the publisher to tell the compiler that we are interested in handling the events that this publisher would raise. To specify which method acts as the eventhandler for which event, we use the "handles" keyword.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Namespace VBEvents&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Class AnotherSubscriber&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Private WithEvents m_anotherPub As AnotherPublisher&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Sub New(ByVal anotherpub As AnotherPublisher)&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;m_anotherPub = anotherpub&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,102,0)"&gt;'eventhandler for StateChanged event&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Private Sub pubEventHandler(ByVal sender As Object, ByVal args As EventArgs) Handles m_anotherPub.StateChanged&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Console.WriteLine("Handled event raised by " &amp;amp; sender.GetType().ToString())&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;Public Sub RemoveAnotherPubHandling()&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;RemoveHandler m_anotherPub.StateChanged, AddressOf pubEventHandler&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Class&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;End Namespace&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;The difference between these two methods is that in the second method the subscription is done statically (i.e.its hardcoded that a procedure will act as the eventhandler for a particular event while in the first method we can dynamically choose the eventhandler. The unsubscription process is same for either methods. Note that you can assign different instances of the publisher class to the withevents variable thereby handling events raised by different objects. But the downside is that there is a performance problem associated with assignment to a withevents variable. For more details on this, see Jeff Richter's most excellent book - Applied Microsoft.NET Programming with VisualBasic.NET.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;If you were really paying attention you should be wondering how the "Withevents" does its trick. If we make assignment to a WithEvents variable, how will the compiler subscriber to that instance and unsubscribe from the previous instance that the variable referred to? To see whats really happening load up ILDASM (which should be your best friend if you want to see whats happening under the hood) and you can see that the compiler adds two methods to access the withevents variable. If your withevents variable is named m_Pub, the methods will be named get_m_Pub and set_m_Pub. When you make an assignment to a withevents variable, the compiler will check whether the variable currently refers some instance or not. If it refers to some instance, we unsubscribe from that instance and then subscribe to the new instance (this is what creates the performance problem which I referred to in the last paragraph).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;C# makes use of the overloaded += and -= operators for subscription while VB.NET uses AddHandler and RemoveHandler for the same purpose. If you use ILDASM, we can see that the compiler creates two procedures in the publisher class behind your back for the subscription and unsubscription processes. If you event is named myEvent, the procedures will be called add_myEvent and remove_myEvent.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;P.S. I know the code formatting sucks, but it would be a hell of a job to manually format it, but maybe I would do it some other time&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-112903691299386419?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/112903691299386419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=112903691299386419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112903691299386419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112903691299386419'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/10/event-driven-programming-with-visual_11.html' title='Event driven programming with Visual Basic .NET'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-112892452142987277</id><published>2005-10-10T11:30:00.000+05:30</published><updated>2006-04-02T10:16:20.863+05:30</updated><title type='text'>The Tipping Point</title><content type='html'>&lt;div style="COLOR: rgb(102,102,102)"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="COLOR: rgb(102,0,0); FONT-STYLE: italic"&gt;I wrote this some months ago, but forgot to publish it at that time.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;It has been quite some time since a read a book from start to finish. In fact it has been years. Last week, Abhishek and Prasanth had come to Bangalore and I went to The Forum with them. In LandMark I saw a low priced edition of &lt;/span&gt;&lt;a href="http://www.amazon.com/gp/product/0316346624/"&gt;&lt;span style="color:#000000;"&gt;The Tipping Point&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;. I have been seeing &lt;/span&gt;&lt;a href="http://www.amazon.com/gp/product/0316172324/"&gt;&lt;span style="color:#000000;"&gt;Blink&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.amazon.com/gp/product/0316172324/"&gt;&lt;span style="color:#000000;"&gt;: The Power of Thinking without Thinking&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; on the top sellers list for quite some time and I knew that The Tipping Point was written by the same author (&lt;/span&gt;&lt;a href="http://www.amazon.com/exec/obidos/search-handle-url/index=books&amp;amp;field-author-exact=Malcolm%20Gladwell"&gt;&lt;span style="color:#000000;"&gt;Malcolm Gladwell&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;). So I thought I would give the book a try. I was planning to go home on 31st, so anyway I would be getting some time to read.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;I started reading the book on that evening itself. After reading through the first few pages, i was not quite impressed. But soon the book started picking momentum. The book has something special about it, there is no cute jugglery with words, it is written in a very straightforward manner without the slightest attempt to make himself sound smart.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;The core of the book is an explanation of how epidemics get started. An epidemic is not be taken only in the medical sense, it also refers to how all of a sudden certain behavioural patterns emerge which produce a sweeping change. The previous sentence actually doesnt do justice to the contents. It is almost like a thriller story, the author first mentions about an epidemic and analyzes the causes that we associate with the epidemic. Then the twist comes - slowly we are put into an entirely different perspective which sometimes leaves us spell-bound, the facts sometimes so strange that we cant even believe it.&lt;br /&gt;&lt;br /&gt;This book presents a very interesting read. As I mentioned earlier, I read this book from cover-to-cover in 2-3 days, something which I havent done in years. I would give it 4.5 stars out of 5.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-112892452142987277?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/112892452142987277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=112892452142987277' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112892452142987277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112892452142987277'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/10/tipping-point.html' title='The Tipping Point'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-112877226301946921</id><published>2005-10-08T17:15:00.000+05:30</published><updated>2005-12-29T19:09:02.213+05:30</updated><title type='text'>Amazon Review</title><content type='html'>&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;span &gt;I spend a lot of time reading the reviews of books at &lt;/span&gt;&lt;a href="http://www.amazon.com/"&gt;&lt;span &gt;Amazon&lt;/span&gt;&lt;/a&gt;&lt;span &gt;. That gives a better idea of what books to buy if I'm interested in learning about a particular topic. I wouldnt say that all reviews are correct or would be made with an impartial mindset, but in general you would get an overall impression of the book. Several times I was tempted to write a review myself, but I always kept postponing it. This week I did it. I wrote my first review for C.J.Date's Database In Depth. You can see the review &lt;/span&gt;&lt;a style="FONT-FAMILY: courier new" href="http://www.amazon.com/gp/product/0596100124/"&gt;&lt;span &gt;here&lt;/span&gt;&lt;/a&gt;&lt;span &gt;. The book is simply great. I would highly recommend it to all of those who are working with databases or would like to have a good knowledge of Relational Theory.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-112877226301946921?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/112877226301946921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=112877226301946921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112877226301946921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112877226301946921'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/10/amazon-review.html' title='Amazon Review'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-112866924100656531</id><published>2005-10-07T12:31:00.000+05:30</published><updated>2005-12-29T19:28:16.890+05:30</updated><title type='text'>Interested in me ? Subscribe please !</title><content type='html'>&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;The contents of this blog may not interest you as did its title, because its a technical one. I have decided to include more technical articles (inspite of the fact that there are gazillion tech blogs out there) not because I think this one is going to be better than them but just because it would help me understand things in a better way. So my technical rants are just for my own benefit. If anyone else gets something useful out of these blogs, that would be a real pleasant bonus. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;I was also confused as to how my approach should be. Should I write it in such a way that non-techies would also understand it ? Or should I aim at the developers who have atleast a general idea of what a class is? Although I would like to go the first way, there are atleast three reasons I am forced to go with the second option.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;1)I dont think non-techies would like to dig deep into the .NET trenches irrespective of the way I present things. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;2)Most of the people who read my blog are technical people.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;3)I wouldnt be able to do justice to the real topic at hand, if I have to write so much explaining the context to the layman which is so painfully obvious to techies. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;The title of this blog might have given a clue to what this blog is going to be. Its about programming with events. I just would like to assume that you would be knowing what an event is. If you dont, there aint much use reading the rest of this anyway.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Events are a convenience for modern programming. I will show here how to implement event handling mechanism in C#. Delegates are an integral part of the .NET framework and play a key role in the event handling mechanism. Put simply, delegates are type-safe function pointers. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Let us assume there is a Publisher class which raise an event and a Subscriber class is interested in that event.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;using System;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;class Publisher&lt;br /&gt;{&lt;br /&gt;private int _state = 0;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;public delegate void StateChangeEventHandler(Object sender,EventArgs args);&lt;br /&gt;public event StateChangeEventHandler StateChanged;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;public int State&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;return _state;&lt;br /&gt;}&lt;br /&gt;set&lt;br /&gt;{&lt;br /&gt;_state = value;&lt;br /&gt;if(StateChanged != null)&lt;br /&gt;StateChanged(this,EventArgs.Empty);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;The above code can be explained as follows. The publisher class contains 2 key members which allows it to raise events. One is a delegate and the other is the event. The delegate specifies the signature for the event handler methods. Two conventions are usually followed here. First one is regarding the delegate name - it should end with EventHandler. The convention for the event handler signature is to have 2 parameters and the return type as void. The first parameter will be the object that raises the event (the source of the event or in other words, an instance of the publisher). The second parameter will be an instance of a System.EventArgs class or a class that derives from it. There is a well defined logic in this convention. The obvious advantage is the resulting consistency among event handlers. Also, the choice of the first parameter as the event source allows a single event handler to handle events from multiple sources. The event handler can examine the parameter to determine which object raised the event. The requirement for this to work is that the signature specified by the 2 delegates should be same.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;In our Publisher class we have an event called StateChanged which will be raised when the State property changes. To raise the event we use this code :&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;StateChanged(this,new EventArgs());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;But the problem is that if no objects have subscribed to this event, you will get a NullReferenceException. To prevent that we need a check :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;if(StateChanged != null)&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;&lt;span style="COLOR: rgb(0,102,0)"&gt;//raise event&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;Usually we would keep the above code in a separate method like:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;private void OnStateChanged(EventArgs e)&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;if(StateChanged != null)&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;StateChanged(this,e);&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;For additional flexibility we can make this method protected virtual so that derived types can have some control over the firing of events.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;protected virtual void OnStateChanged(EventArgs e)&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;if(StateChanged != null)&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;StateChanged(this,e);&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;Now our Publisher class will look like this :&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;using System;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;class Publisher&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;private int _state = 0;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;public delegate void StateChangeEventHandler(Object sender,EventArgs args);&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;public event StateChangeEventHandler StateChanged;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;public int State&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;get&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;return _state;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;set&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;_state = value;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;OnStateChanged(EventArgs.Empty);&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;}&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;protected virtual void OnStateChanged(EventArgs e)&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;if(StateChanged != null)&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;StateChanged(this,e);&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;}&lt;span style="COLOR: rgb(0,102,0)"&gt;//~end of Publisher class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;Now that we know how to publish and raise events, we can look at how to setup a subscriber.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;class Subscriber&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;public void Subscribe(Publisher pub)&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;pub.StateChanged += new Publisher.StateChangeEventHandler(pub_StateChanged);&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;public void UnSubscribe(Publisher pub)&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;pub.StateChanged -= new Publisher.StateChangeEventHandler(pub_StateChanged);&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;private void pub_StateChanged(Object sender,EventArgs args)&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;Console.WriteLine(sender.GetType().ToString() + "'s State Changed !");&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)" &gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;&lt;span &gt;}&lt;/span&gt;&lt;span style="COLOR: rgb(0,102,0)" &gt;//~end of Subscriber class&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;The code is mostly self explanatory. The Subscribe and UnSubscribe methods show how we can subscribe to and unscribe from events using the += and -= overloaded operators. For the eventhandler the name of the method can be anything (the convention is 'object_event') but the signature of the event handler should conform to the signature specified by the delegate.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;We can have static events if we so prefer. If you subscribe to a static event, you will receive notifications from all instances of the Publisher class and if you unsubscribe you will recieve notifications from none. You dont need an instance of the Publisher class to subscribe to a static event. Note that nothing prevents the eventhandler function itself from being a static function.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;As a point of interest, it should be mentioned that an event is implemented by a multicast delegate. To handle multiple subscribers it would internally maintain a list of subscribers.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;If you didnt guess it till now, the event mechanism follows the Observer design pattern (see Design Patterns by the GoF).&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span &gt;&lt;span style="COLOR: rgb(153,0,0);font-size:85%;" &gt;P.S. Sorry about the formatting, I tried my best though :-)&lt;/span&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-112866924100656531?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/112866924100656531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=112866924100656531' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112866924100656531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112866924100656531'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/10/interested-in-me-subscribe-please.html' title='Interested in me ? Subscribe please !'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-112841778572538380</id><published>2005-10-04T14:49:00.000+05:30</published><updated>2005-10-18T16:25:33.563+05:30</updated><title type='text'>Shocking News !</title><content type='html'>&lt;p  style="text-align: justify; color: rgb(0, 0, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;The most shocking incident I have heard in recent times. I got this mail from a friend. Read On....&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Hi!&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: justify; color: rgb(0, 0, 102);"&gt;  &lt;/div&gt; &lt;p  style="text-align: justify; color: rgb(0, 0, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;I would like to bring to notice a certain injustice that I have subjected to at the Bangalore Railway Station (Majestic). On September 30 (Friday), 2005, I had been to the station to see off my fiance and her mother. They took the Karnataka Express (Train #2627) to Jhansi at 6:30 pm. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: justify; color: rgb(0, 0, 102);"&gt;  &lt;/div&gt; &lt;p  style="text-align: justify; color: rgb(0, 0, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;On my way out I was asked to present my platform ticket by a railway official. On producing the same, the TT turned around and told me "What if I say that you haven't given me the ticket?" Before I could react, he along with his colleague pushed me into the adjacent enquiry cabin and physically manhandled me. I was slapped several times, my spectacles were grabbed and deliberately crushed by foot, and my phone was flung away from me. The RPF comprising of one RPF and four constables, appeared on the scene. The surrounding public was whisked away. None of the railway police officials cared to listen to me and they started hitting me indiscriminately with lathis. They dragged me out, and all the 4 constables continued hitting me with lathis from Platform 1 to Platform 3/5, till we reached the station master's cabin. Racist abuses and threats were made on the way. At the station master's cabin, I was told that I have been charged with a non-bailable offence and would be behind bars for 15 days. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: justify; color: rgb(0, 0, 102);"&gt; &lt;/div&gt; &lt;p  style="text-align: justify; color: rgb(0, 0, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:10;"&gt;Not for a single moment was I allowed to speak. All of a sudden a stranger came to the scene and he claimed that he was there to help me. Having lost all my physical strength and mental senses, I was happy to see some sort of help. He, claiming to be V Srinivas from Infosys, talked to the officials and the railway police in Kannada. He told me that the only way I was to get out was if I was willing to pay my way through. Being in no state to make a rational choice, I gave him my ATM card and pin. He took one of the RPF chaps along with him and said he would clear the matter. He returned some time later saying that everything was okay now. &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: justify; color: rgb(0, 0, 102);"&gt;  &lt;/div&gt; &lt;p  style="text-align: justify; color: rgb(0, 0, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:10;"&gt;I was asked to sign a statement which said that I hit the police and TT in a drunken state. I refused. Finally, they pressurized me to write that I did not produce a platform ticket when asked. I wrote the same and then V Srinivas took me out of the station. He joined me in an auto and took me to the ICICI ATM at Anand Rao circle. He withdrew Rs. 15000 from my ATM and got back. he took the cash under the pretext that while helping me he had left his wallet in the train he had left behind and that he would return the same through his ICICI Internet account. Having broken down mentally I did not realise that I was being cheated. He then took me to a Samsung showroom and tried purchasing a cellphone worth Rs. 18500 with my card. It was only then that I realised what was happening. I grabbed my card back, caught him by the collar, snatched my cash that lay in his pocket, and got into a running auto. &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: justify; color: rgb(0, 0, 102);"&gt; &lt;/div&gt; &lt;p  style="text-align: justify; color: rgb(0, 0, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: justify; color: rgb(0, 0, 102);"&gt; &lt;/div&gt; &lt;p  style="text-align: justify; color: rgb(0, 0, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:10;"&gt;I have now realized that all of this was a plan. There is a strong nexus between the railway officials, the railway police and the fraudster. The railway officials identify a victim who they think is well-to-do, the RPF beat that individual till he has no physical or mental well-being. Then this fraud chap comes on to the scene, takes advantage of the situation, and takes all your cash away. Also, this series of events generally occurs on the last day of the month as they know that the salary gets credited on this day. (This strikes me now because the self-proclaimed Infy employee, V Srinivas, clearly asked me whether I had received my salary. He said that he just wanted to find out if there was cash enough to tackle the case.) &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: justify; color: rgb(0, 0, 102);"&gt;  &lt;/div&gt; &lt;p  style="text-align: justify; color: rgb(0, 0, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:10;"&gt;Now three days hence, I have tried to run from pillar to post. I have been forced to miss office hours in my effort to get justice. But I don't want to give up the fight midway. If any of you are in the media, or have friends/relatives who are in the industry, I'd like to speak with them about this in greater detail. I can be reached on 09886179319 or 08030933067. I believe it would catalyze my efforts. &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: justify; color: rgb(0, 0, 102);"&gt;  &lt;/div&gt; &lt;p  style="text-align: justify; color: rgb(0, 0, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;Also, please pass this  email to all the people who reside in Bangalore, so that they don't fall into  the same trap.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: justify; color: rgb(0, 0, 102);"&gt;    &lt;/div&gt; &lt;div style="text-align: justify;"&gt;&lt;span style=";font-size:85%;color:black;"  &gt;&lt;span style="font-size:10;"&gt;Regards,&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-size:85%;color:black;"  &gt;&lt;span style="font-size:10;"&gt;Nimish V  Adani&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-size:85%;color:black;"  &gt;&lt;span style="font-size:10;"&gt;IIML Batch of  2003&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-size:85%;color:black;"  &gt;&lt;span style="font-size:10;"&gt;ITBHU Batch of  2001&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;p  class="MsoNormal" style="font-family:courier new;"&gt;&lt;span style=";font-size:85%;color:black;"  &gt;&lt;span style=";font-size:10;color:black;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-112841778572538380?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/112841778572538380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=112841778572538380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112841778572538380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112841778572538380'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/10/shocking-news.html' title='Shocking News !'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-112799900602551086</id><published>2005-09-29T17:46:00.000+05:30</published><updated>2005-09-29T18:37:10.763+05:30</updated><title type='text'>Leap Of Faith</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Finding out whether a year is a leap year or not can be a bit tricky. Till quite recently I thought that any year evenly divisible by 4 was a leap year. Not quite so. There is more to it. As a first criteria the year should be divisible by 4. If its not divisible by 4, its not a leap year. If the year is &lt;span style="font-style: italic;"&gt;also&lt;/span&gt; divisible by 100 (i.e. in addition to being divisible by 4) then you have something more to worry about; else you are done - its a leap year. The something more you have to worry about is that the year should also be divisible by 400, else its not a leap year.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;The concept of leap year was introduced because the actual time taken by earth to go around the sun (called sidereal year) is not exactly 365 days but 365.25635 days. So once in every 4 years we add a day to that year (so that it will have 366 days) and we call it a leap year. But the fun doesnt end there. Adding 1 day every 4 years introduces some error which is taken care by stipulating that every year divisible by 100 is a leap year if and only if it is also divisible by 400.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt; &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;Use this logic for determining whether a year is a leap year or not :&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:verdana;" &gt;IsLeapYear = ((Year Mod 4 = 0) AND (Year Mod 100 &lt;&gt; 0) OR (Year Mod 400 = 0))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-112799900602551086?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/112799900602551086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=112799900602551086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112799900602551086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/112799900602551086'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/09/leap-of-faith.html' title='Leap Of Faith'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8504712.post-111985573528249734</id><published>2005-06-27T12:28:00.000+05:30</published><updated>2005-06-27T12:32:15.286+05:30</updated><title type='text'>Happy Birthday to Me....</title><content type='html'>&lt;span style="font-family: courier new; color: rgb(0, 0, 0);font-size:85%;" &gt;I am 27 years old now :-)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://www.pradeepc.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8504712-111985573528249734?l=pradeepc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pradeepc.blogspot.com/feeds/111985573528249734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8504712&amp;postID=111985573528249734' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/111985573528249734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8504712/posts/default/111985573528249734'/><link rel='alternate' type='text/html' href='http://pradeepc.blogspot.com/2005/06/happy-birthday-to-me.html' title='Happy Birthday to Me....'/><author><name>PC</name><uri>http://www.blogger.com/profile/03618786309009673364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04796726521267978589'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry></feed>