<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1316088623950599264</id><updated>2011-09-06T20:28:45.672-07:00</updated><category term='malware'/><category term='botnets'/><category term='ack'/><category term='python backup utility'/><category term='trojan'/><category term='Wubi'/><category term='Java trivia'/><category term='better than grep'/><category term='Linux with windows'/><category term='perl'/><title type='text'>In pursuit of Happiness</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-1885865073731038045</id><published>2011-09-06T20:28:00.000-07:00</published><updated>2011-09-06T20:28:45.680-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python backup utility'/><title type='text'>I am back with the backup!</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;All I wanted was a very simple tool - I give it the list of directories I care about and run it daily with my USB hard drive attached and it quietly backs up only files/folders that have changed since the last time&lt;br /&gt;&lt;br /&gt;Goal for the long weekend was to learn enough python to write myself a  backup utility.The official backup utility I am supposed to use on my  work laptop is not user friendly ( or maybe it is and I just haven't  bothered to learn about it - who knows).&lt;br /&gt;&lt;br /&gt;Mission Accomplished ( Though being very new to Python I am not really sure how ugly/inefficient this program looks to decent python programmers)&amp;nbsp; - Here is the &lt;a href="http://pastie.org/2495193"&gt;code &lt;/a&gt;if you like to see/use ( Disclaimer: Use at your own risk)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-1885865073731038045?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/1885865073731038045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=1885865073731038045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/1885865073731038045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/1885865073731038045'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2011/09/i-am-back-with-backup.html' title='I am back with the backup!'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-3566965928104959264</id><published>2010-02-12T02:58:00.000-08:00</published><updated>2010-02-12T02:58:26.568-08:00</updated><title type='text'>Morals and Ethics</title><content type='html'>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; So I have had this discussion on morals and ethics with a friend of mine multiple times.It really boils down to what is right versus what is wrong.I guess to truly answer that if such a question is a valid question at all or if it is a valid question then does the question have a valid unambiguous answer - we need to know all of reality.Which includes questions like why we exist and what is the purpose of our existence.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Religion tried to show us the reality but in my opinion failed miserably.Science is attempting to uncover the same reality now but I think we are far far from really understanding all of it.I base this opinion not from any deep understanding of the current state of science but by a reasonable guess that we humans think with our brains and everything around us suggests that these brains were mean't more for making sense of the senses as a better survival mechanism than to understand the underlying mechanism of nature.If our brains were mean't to understand the real nature of nature ,we would probably have senses to detect everything from microwaves to&amp;nbsp; gravity waves instead of having pretty much the same set of senses as a dog or a cat or a donkey&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I think it is too pompous of we humans to think we are somehow more "special".Yeah we probably are the smartest species on Earth but then probably for a more smarter Species than us, the difference between we Humans and Chimpanzees is probably the same difference we see between let's say a Star Fish and a Gold Fish.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Think about it we have so many animal traits, we are frickin way too territorial. and have no qualms in killing people in the name of patriotism.Of course we use maps to mark our territory and not pee on the trees - so some improvement there from animals. Like animals we primarily care for our species over anything else - we don't mind de-foresting and killing other animals in the process to accomodate humans,killing such big Elephants for just their tusks, killing tigers for their skin and the list goes on. And of course within our own species we operate in packs&amp;nbsp; and whenever one pack gets to dominate other it will - In India the upper castes did all sorts of brutality against the lower castes, in the west the whites did that to blacks ,the English Empire went and fucked around with so many countries in the name of "culturizing" the "barbarians" and the list is endless.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The last of the animalish trait that is probably only in humans is enforcing their views on others.Clearly every major religion in this world which was backed by rich people at one point or other tried to trash other religions,some countries can have nuclear weapons but if other countries try to pursue them they are rogue states - maybe what they say is right maybe not, now people tell that capitalism is a better thing over socialism but then who knows.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Not that I am being judgemental and saying the above said behaviour is right or wrong.All I am saying is we really don't have all the facts and we are way to influenced by our hard wired natures&amp;nbsp; to even understand whether a question like "What is right and what is wrong" is even valid or not.And I don't believe I will ever&amp;nbsp; be able to answer that question in my lifetime&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; But as a temporary band aid kinda fix - I like to believe that all things peaceful are right and all things violent and hurtful (physical or mental) to others are wrong (parly because I am a bit of a wuss and have fought (physical or verbal)&amp;nbsp; with a grand total of 1 person&amp;nbsp; in my 30 years and that too happened only once and lasted for 5 mins max and I ended up having my spectacles broken (of course other than my wife and mother with whom I seem to fight on a regular basis :-) ) )&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And yeah I dislike everything that is propoganda-ish where one person tries to influence or potray a wrong impression to the other by deliberating giving wrong information or half information.I just like my cold facts please.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And the people who I like the most are guys&amp;nbsp; and gals who do science for the sake of science and help others for the sake of helping others&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-3566965928104959264?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/3566965928104959264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=3566965928104959264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3566965928104959264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3566965928104959264'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2010/02/morals-and-ethics.html' title='Morals and Ethics'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-4299455706003258509</id><published>2010-02-07T21:54:00.000-08:00</published><updated>2010-02-07T21:54:43.683-08:00</updated><title type='text'>TCS Hack</title><content type='html'>So today India's biggest IT company TCS (Tata Consultancy Services) was "hacked".The idiots on internet wasted no time in calling out - it is India's biggest IT company and they got hacked and they are so pathetic and blah blah blah.&lt;br /&gt;&lt;br /&gt;It was apparently a DNS hijack which basically means that the TCS servers themselves weren't compromised but the DNS server cache was somehow compromised to point it to the attackers ip.I don't know enough about it to understand if TCS could have taken any sort of preventive action on such attacks are not.&lt;br /&gt;&lt;br /&gt;But here is a very nice article&amp;nbsp; that explains &lt;a href="http://www.securesphere.net/download/papers/dnsspoof.htm"&gt;DNS spoofing &lt;/a&gt;, talks about a couple of techniques of doing it and&amp;nbsp; even gives step by step instructions for doing it&amp;nbsp; in one way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-4299455706003258509?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/4299455706003258509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=4299455706003258509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4299455706003258509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4299455706003258509'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2010/02/tcs-hack.html' title='TCS Hack'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-5156229097980123535</id><published>2010-02-02T03:36:00.000-08:00</published><updated>2010-02-02T03:36:34.795-08:00</updated><title type='text'>Wireshark and Java API for packet sniffing</title><content type='html'>Here is a &lt;a href="http://www.comptechdoc.org/independent/networking/guide/index.html"&gt;nice tutorial&lt;/a&gt; I found on the web for basics of networking.It gave a decent very high level overview of Network Topology, OSI Layers, Protocols&amp;nbsp; and Routing.&lt;br /&gt;&lt;br /&gt;If you want to look more on how your network traffic looks you can try a packet sniffer called &lt;a href="http://www.wireshark.org/"&gt;wireshark&lt;/a&gt;.Works extremely well for me on both Windows and Linux(Ubuntu).Wireshark is open source software that depends on another open source package called &lt;a href="http://www.tcpdump.org/"&gt;libpcap&lt;/a&gt;.You can set filters in wireshark on pretty much anything so you see only those packets for example show only ARP packets, Show only DNS requests requesting for facebook.com etc. If you are on a ethernet network, it is probably based on CDMA/CD so if you sniff your Network Interface Card in promiscous mode you will pick up not just packets meant for you but probably also other packets on the wire&lt;br /&gt;&lt;br /&gt;If you like to use Java for packet sniffing , there is also an open source API for that - &lt;a href="http://netresearch.ics.uci.edu/kfujii/jpcap/doc/"&gt;JpCap&lt;/a&gt; .It basically is against based on libpcap and has tons of native calls.Nothing like trying to debug a ArrayIndexOutOfBoundsException you get from within the native code ! :-)&lt;br /&gt;&lt;br /&gt;Anyways here is what I had to do to be able to run the code from eclipse on my Ubuntu&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;sudo apt-get install build-essential (for libpcap compilation)&lt;/li&gt;&lt;li&gt;sudo apt-get install (for libpcap compilation)&lt;/li&gt;&lt;li&gt;sudo apt-get install bison (for libpcap compilation)&lt;/li&gt;&lt;li&gt;sudo apt-get install autoconf (for libpcap compilation)&lt;/li&gt;&lt;li&gt;Then get libcap from &lt;a href="http://www.tcpdump.org/#current"&gt;here&lt;/a&gt;&amp;nbsp; &lt;/li&gt;&lt;li&gt;Then pretty much ran ./autoconf, ./configure, ./make and sudo make install from within the libcap source directory&lt;/li&gt;&lt;li&gt;sudo apt-get Install openjdk6&lt;/li&gt;&lt;li&gt;sudo apt-get install eclipse &lt;/li&gt;&lt;li&gt;Download the source for jpcap from &lt;a href="http://netresearch.ics.uci.edu/kfujii/jpcap/doc/download.html"&gt;here.&lt;/a&gt; &lt;/li&gt;&lt;li&gt;The source has both Java and C code, so if you want to get it into eclipse, create a regular Java project and just copy the Java files under the src folder and dump the rest directly under the Project folder itself.&lt;/li&gt;&lt;li&gt;You'll need to compile the C code first into object code.I had to update the makefile to use -fPIC flags for gcc.This is needed apparently if you are running on 64 bit machine else gcc will complain.&lt;/li&gt;&lt;li&gt;copied libjpcap.so from above step to here /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/libjpcap.so&lt;/li&gt;&lt;li&gt;sudo cp *libpcap* /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/&lt;/li&gt;&lt;li&gt;Run eclipse with root priveleges i.e. sudo eclipse to launch the IDE&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-5156229097980123535?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/5156229097980123535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=5156229097980123535' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5156229097980123535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5156229097980123535'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2010/02/wireshark-and-java-api-for-packet.html' title='Wireshark and Java API for packet sniffing'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-8074192615558070109</id><published>2010-02-02T03:05:00.000-08:00</published><updated>2010-02-02T03:45:12.656-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='trojan'/><category scheme='http://www.blogger.com/atom/ns#' term='botnets'/><title type='text'>Botnets</title><content type='html'>If you still think that cyber crime is just over hyped and not that serious like real crime&amp;nbsp; and "hacking" is just done by a bunch of smart kids who have disproportionate amount of free time - think again! check this video out from Google Tech Talks &lt;a href="http://www.youtube.com/watch?v=2GdqoQJa6r4"&gt;How to Steal a Botnet and What Can Happen When You Do&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a &lt;a href="http://www.catonmat.net/blog/how-to-steal-a-botnet-video-lecture-review/"&gt;text summary&lt;/a&gt; from another blog.&lt;span style="font-size: small;"&gt;The UCSB folks took control of the botnet by figuring out the domain name generation algorithm and then creating the domains before the bad guys could create it.Of course once the bad guys figured out, they changed the domain generation algorithm code and downloaded the new version on the infected machines.The interesting part was I watched this video around the time Google - China stand off was going on and then the video also mentions Torpig downloads a list of about 200 banks from around the world to launch its phishing attacks and then they mention for some reason in the video that not one of the banks was from China :-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The gist is that when you typically visit sites you are not supposed to visit(you know the type I am talking about) this may happen.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;They entice you with a irresistible pop up to click on or they may exploit some vulnerability of the browser to install the mebroot rootkit on your system.This is called as Drive By Download i.e. downloads which you did not explicitly ask for.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.symantec.com/connect/blogs/bootroot-trojanmebroot-rootkit-your-mbr"&gt;Mebroot&lt;/a&gt; is a rootkit which infects the Master Boot Record.I always thought messing with the MBR wasn't that easy but Symantec says otherwise "&lt;i&gt;The main problem is that some versions of Microsoft Windows allow&lt;/i&gt; progra&lt;i&gt;ms to overwrite disk sectors directly (including the MBR) from user mode, without restrictions. As such, writing a new MBR into Sector0 as a standard user is a relatively easy task&lt;/i&gt;."&lt;/li&gt;&lt;li&gt;Next Mebroot opens up a backdoor and downloads another Trojan horse called &lt;a href="http://www.symantec.com/security_response/writeup.jsp?docid=2005-112315-0608-99"&gt;Torpig &lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;And then you are pretty much screwed.Torpig injects itself into to some 29 different dlls and actively sends everything from your key strokes (keylogger) to your Http Form data back to command and control servers.It also does phishing attacks from your browser&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;You can't just block the ip of its command and control server from your firewall because it uses an extensive algorithm to calculate the domain names of the command and control servers almost every day and the criminals create the new domains for running command and control servers&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Using https does not help because torpig has already injected itself into your browser, so it will send the form POST data even before the browser can encrypt it&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Anti-Phising software won't help because again since Torpig is part of your browser now, you will see bankofamerica.com on your browser window and not some fake URL, but the page it shows is still fake and it will just send the details you enter to the command and control servers&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;And it can use the mebroot backdoor to update its executable code regularly, so the algorithms keep changing &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1 style="font-weight: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/h1&gt;&lt;h1 style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/h1&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-8074192615558070109?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/8074192615558070109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=8074192615558070109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8074192615558070109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8074192615558070109'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2010/02/botnets.html' title='Botnets'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-8428803317668526975</id><published>2010-01-17T15:35:00.000-08:00</published><updated>2010-01-17T15:35:37.685-08:00</updated><title type='text'>my home page</title><content type='html'>I guess that is what happens if you have ten bucks to spare and a weekend to kill - you get yourself a home page on the intertubes and here is mine &lt;a href="http://home.bgurupra.org/"&gt;http://home.bgurupra.org/&lt;/a&gt;.The weird name &lt;i&gt;bgurupra &lt;/i&gt;is because it is the auto generated short id for my email at work and I am so used to that short id after using it for 8 years that I use it almost everywhere&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-8428803317668526975?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/8428803317668526975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=8428803317668526975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8428803317668526975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8428803317668526975'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2010/01/my-home-page.html' title='my home page'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-1017091912096242246</id><published>2010-01-16T09:15:00.000-08:00</published><updated>2010-01-16T09:15:03.354-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wubi'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux with windows'/><title type='text'>Wubi Baby!</title><content type='html'>I was getting a little tired of using Ubuntu over VMWare because it was really slow and decided to install full fledged Ubuntu on my laptop and this thing called &lt;a href="http://wubi-installer.org/"&gt;Wubi&lt;/a&gt; HAS to be the easiest way to install Ubuntu on Windows EVER!.&lt;br /&gt;&lt;br /&gt;It runs like a windows installer.All it asked me was how much space I want to allocate for Linux and what is the user id  and password I would like.period.Then it took about 30 mins to download the installation files.Next it asked me to reboot and by then it had added Ubuntu to the windows boot menu, I selected Ubuntu - another 15 mins for it to setup( It did not ask me for ONE SINGLE THING during this whole process).Then restarted again and that is it - Ubuntu installed!&lt;br /&gt;&lt;br /&gt;It does not need you to partition your disk like the regular installation, instead it just creates a big files under windows and Linux treats that big file as the entire hard disk.And when I am want to uninstall - just need to uninstall from the regular Add/Remove Programs on Windows.Pretty neat huh?&lt;br /&gt;&lt;br /&gt;oh and don't worry if you see it downloading amd64 installation for your Intel 64 Bit machine - apparently the amd64 installation works both on AMD and Intel,that is listed on the FAQs on Wubi site and I do have an Intel machine and the amd64 installation is working for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-1017091912096242246?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/1017091912096242246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=1017091912096242246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/1017091912096242246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/1017091912096242246'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2010/01/wubi-baby.html' title='Wubi Baby!'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-662112588706460326</id><published>2010-01-12T17:24:00.000-08:00</published><updated>2010-01-12T17:24:39.501-08:00</updated><title type='text'>This is why I love Google</title><content type='html'>How many companies in this especially "capitalistic" world will even talk about moving away from the biggest market in the world just for the sake of values?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://googleblog.blogspot.com/2010/01/new-approach-to-china.html"&gt;http://googleblog.blogspot.com/2010/01/new-approach-to-china.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-662112588706460326?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/662112588706460326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=662112588706460326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/662112588706460326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/662112588706460326'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2010/01/this-is-why-i-love-google.html' title='This is why I love Google'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-2876518874857400523</id><published>2010-01-12T17:10:00.000-08:00</published><updated>2010-01-12T17:10:23.798-08:00</updated><title type='text'>Stupid Interview Questions - Hilarious</title><content type='html'>Hilarious! &lt;a href="http://exold.com/article/stupid-interview-questions"&gt;http://exold.com/article/stupid-interview-questions&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-2876518874857400523?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/2876518874857400523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=2876518874857400523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2876518874857400523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2876518874857400523'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2010/01/stupid-interview-questions-hilarious.html' title='Stupid Interview Questions - Hilarious'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-5844123967077252879</id><published>2010-01-04T20:19:00.000-08:00</published><updated>2010-01-04T20:19:14.763-08:00</updated><title type='text'>Running SSHD in Cygwin</title><content type='html'>&lt;a href="http://www.noah.org/ssh/cygwin-sshd.html"&gt;http://www.noah.org/ssh/cygwin-sshd.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-5844123967077252879?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/5844123967077252879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=5844123967077252879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5844123967077252879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5844123967077252879'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2010/01/running-sshd-in-cygwin.html' title='Running SSHD in Cygwin'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-4245872081654628544</id><published>2009-12-25T06:51:00.001-08:00</published><updated>2009-12-25T06:51:59.370-08:00</updated><title type='text'>Nissan Altima Air Bag light</title><content type='html'>I have an old 95 Model Nissan Altima and after I got the battery and alternator replaced a few months back my Air Bag light used to keep blinking&lt;br /&gt;&lt;br /&gt;Doing the below steps fixed it!&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IraUDVXmSoU&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/IraUDVXmSoU&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-4245872081654628544?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/4245872081654628544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=4245872081654628544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4245872081654628544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4245872081654628544'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/12/nissan-altima-air-bag-light.html' title='Nissan Altima Air Bag light'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-5656467995175631446</id><published>2009-12-05T20:47:00.000-08:00</published><updated>2009-12-06T05:04:28.191-08:00</updated><title type='text'>whereis in windows</title><content type='html'>The *nix &lt;b&gt;whereis &lt;/b&gt;command is very useful at times and helps you find where a given executable is located in the path.Here is a one written in python which can be easily used on windows&lt;br /&gt;&lt;br /&gt;Copy the below code into a file called &lt;b&gt;whereis.bat&lt;/b&gt;.Add the path where &lt;b&gt;whereis.bat&lt;/b&gt; is kept to your windowds PATH variable&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/729975.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Copy the below code in &lt;b&gt;whereis.py&lt;/b&gt; and keep it somewhere on your local file system&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/730237.js'&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-5656467995175631446?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/5656467995175631446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=5656467995175631446' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5656467995175631446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5656467995175631446'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/12/whereis-in-windows.html' title='whereis in windows'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-9010552092984842343</id><published>2009-12-03T19:19:00.000-08:00</published><updated>2009-12-03T19:19:26.644-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java trivia'/><title type='text'>Lame Java Trivia</title><content type='html'>&lt;i&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Snippet 1:&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; start = runtime.freeMemory();&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int i=1,j=2,k=3;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; end =&amp;nbsp; runtime.freeMemory();&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("That took " + (start-end) + " bytes.");&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt; Snippet 2:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; start = runtime.freeMemory();&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i style="color: blue;"&gt; int array[] ={1,2,3};&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; end =&amp;nbsp; runtime.freeMemory();&lt;/span&gt;&lt;br style="color: blue;" /&gt; &lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("That took " + (start-end) + " bytes.");&lt;/span&gt;&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;Assuming GC doesn't run inbetween the start and end variable assignments, Snippet 1 will also say 0 bytes used whereas snippet 2 will always have a non zero positive value - though both seem to have the same three numbers being created 1,2 and 3 - why?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-9010552092984842343?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/9010552092984842343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=9010552092984842343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/9010552092984842343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/9010552092984842343'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/12/lame-java-trivia.html' title='Lame Java Trivia'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-6334230953648586264</id><published>2009-12-03T17:52:00.000-08:00</published><updated>2009-12-03T17:56:01.615-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ack'/><category scheme='http://www.blogger.com/atom/ns#' term='better than grep'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>ack</title><content type='html'>Finally a &lt;u&gt;&lt;b&gt;command line tool&lt;/b&gt;&lt;/u&gt; for &lt;u&gt;&lt;b&gt;windows&lt;/b&gt;&lt;/u&gt; which will &lt;u&gt;&lt;b&gt;recursively&lt;/b&gt;&lt;/u&gt; search for&amp;nbsp; some text from a given directory and to boot you can &lt;u&gt;&lt;b&gt;actually remember the syntax for&amp;nbsp;&lt;/b&gt;&lt;/u&gt; recursive searching.I never ever could remember the combination of &lt;i&gt;find &lt;/i&gt;and &lt;i&gt;grep &lt;/i&gt;that is needed to search recursively with grep.&lt;br /&gt;&lt;br /&gt;Ladies and Gentlemen, Please welcome &lt;a href="http://betterthangrep.com/"&gt;ack &lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is the syntax for searching all the sub directories from the parent directory containing Java source files for something&lt;br /&gt;&lt;br /&gt;ack --java pattern&amp;nbsp; //doh that was simple!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All I had to do to install was&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Install Perl from here&amp;nbsp; &lt;a href="http://strawberryperl.com/" rel="nofollow"&gt;http://strawberryperl.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then type the below from my windows command prompt &lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;code&gt;C:\&amp;gt;cpan App::Ack&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-6334230953648586264?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/6334230953648586264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=6334230953648586264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6334230953648586264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6334230953648586264'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/12/ack.html' title='ack'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-9037713774911466537</id><published>2009-11-26T15:13:00.000-08:00</published><updated>2009-11-26T15:21:37.472-08:00</updated><title type='text'>The Happiness at work Matrix - 4Ps</title><content type='html'>For me there are four important factors that decide if the&amp;nbsp; time&amp;nbsp; I spent at work was worthwhile or not .They are what I call the &lt;b&gt;4Ps&lt;/b&gt; -&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;People &lt;/b&gt;- This is the most important factor for me.I really like being with people who are smarter than me(oh which is not that hard to find) , people who I respect and&amp;nbsp; and people who are fun to work with.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Problem &lt;/b&gt;- This is the problem you are trying to solve at work, which is the second most important thing for me.This is how excited are you to work on the problem, it doesn't have to be rocket science to be fun, for example on my first project creating a web page was like an amazing experience.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Power - &lt;/b&gt;This is the third most important thing.This is the amount of influence you have at the place you work, how much people listen to your opinions and how important they think you are to the project.I think this directly is related to how you are "&lt;i&gt;growing&lt;/i&gt;" at work, the higher your power the faster you are growing&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;PayCheck&lt;/b&gt; -The obvious one, how much you make&lt;/li&gt;&lt;/ul&gt;So you&amp;nbsp; can draw a little matrix with years as the Y axis and the 4Ps on the X and mark it Blue if that P was good for you for that year, Orange for medium and Red for bad.It should give you a good perspective of how your years went by.Here is mine.Just because I have so many blues for the Pay Check&amp;nbsp; does not mean I am like the best paid guy around - everything is your perspective of things so all it means when a blue is there is that I "thought" I was doing good on that P&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_8yCxinc5oSc/Sw8MwEa6jkI/AAAAAAAAE5M/8saZE8zLhT4/s1600/matrix1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_8yCxinc5oSc/Sw8MwEa6jkI/AAAAAAAAE5M/8saZE8zLhT4/s640/matrix1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-9037713774911466537?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/9037713774911466537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=9037713774911466537' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/9037713774911466537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/9037713774911466537'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/happiness-at-work-matrix-4ps.html' title='The Happiness at work Matrix - 4Ps'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8yCxinc5oSc/Sw8MwEa6jkI/AAAAAAAAE5M/8saZE8zLhT4/s72-c/matrix1.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-4356966511747367663</id><published>2009-11-24T12:01:00.000-08:00</published><updated>2009-11-24T12:01:08.294-08:00</updated><title type='text'>Closures</title><content type='html'>I keep hearing people talking about Closures but it always seemed hard to grasp it by just a cursory look at the material.For the uninitiated Wikipedia's definition is hard to grasp&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What is a closure? &lt;/b&gt;In computer science, a closure is a &lt;b&gt;first-class function&lt;/b&gt; with &lt;b&gt;free variables&lt;/b&gt; that are &lt;b&gt;bound &lt;/b&gt;in the &lt;b&gt;lexical environment. &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Oh what is a first-class function?&lt;/b&gt;A programming language is said to support first-class functions (or function types or function literals) if it treats functions as first-class objects. Specifically, this means that the language supports constructing new functions during the execution of a program, storing them in data structures, passing them as arguments to other functions, and returning them as the values of other functions. This concept doesn't cover any means external to the language and program (meta programming), such as invoking a compiler or an eval function to create a new function.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Now what the heck is a free variable?&lt;/b&gt;In computer programming, a free variable is a variable referred to in a function that is not a local variable or an argument of that function[1].&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;And what do you mean bound?&lt;/b&gt; In programming languages, name binding is the association of values with identifiers[1]. An identifier bound to a value is said to reference that value.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Oh finally what is a lexical environment?&lt;/b&gt;In computer programming, lexical environment or scope is an enclosing context where values and expressions are associated&lt;br /&gt;&lt;br /&gt;Kinda still hard to get if we don't know the formal terminology used&lt;br /&gt;&lt;br /&gt;But from what I got and crudely put, &lt;b&gt;&lt;i&gt;Closure is the ability to be able to pass&amp;nbsp; a piece of "executable code" around and then the executable code when being executed will have access to the same set of variables as available to the place from where you are passing it &lt;/i&gt;&lt;/b&gt;.Here is a simple example in Ruby&lt;br /&gt;&lt;br /&gt;def foo&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; local_variable ="foo variable";&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f = Proc.new { puts "local variable ="+local_variable}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bar(f)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;end&lt;br /&gt;&lt;br /&gt;def bar(f)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; local_variable ="bar variable";&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.call &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;foo&lt;br /&gt;&lt;br /&gt;This is going to print "local variable =foo variable" , so I was able to pass the { puts "local variable ="+local_variable} code around and wherever I executed it had access to the same variables as from where it was called i.e. foo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-4356966511747367663?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/4356966511747367663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=4356966511747367663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4356966511747367663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4356966511747367663'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/closures.html' title='Closures'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-427716666929725534</id><published>2009-11-24T04:04:00.000-08:00</published><updated>2009-11-24T04:04:55.324-08:00</updated><title type='text'>MIT OCW -Lecture 7(Hashing and Hash Functions)</title><content type='html'>Today morning I took the &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/detail/embed07.htm"&gt;7th Lecture&lt;/a&gt; which covered Hashing and Hash Functions.This was not as math intensive as the previous few lectures and was more intuition based( if there is such a thing - but basically what I mean is you could kinda see why things were good or bad without even having to do the Math).Here is what was covered&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Symbol table problem that is encountered in Compilers, Operations on the Symbol table i.e. insertion,deletion and search&lt;/li&gt;&lt;li&gt;Direct Access table - Just an array where you use the key to index into the array to find the value&lt;/li&gt;&lt;li&gt;What is "Hashing"?&lt;/li&gt;&lt;li&gt;How to resolve collisions by chaining&lt;/li&gt;&lt;li&gt;Runtime analysis for hashing with resolving collisions by chaining - worst case is Theta(n) and average case is Theta(1+ alpha), where alpha is the load factor(i.e. n/m ,n=number of elements in the Set and m is the number of slots in the Hash Table)&lt;/li&gt;&lt;li&gt;How to choose a Hash function? - Should distribute keys uniformly and regularity of keys (for example all keys are even numbers) should not affect the uniformity&lt;/li&gt;&lt;li&gt;Hash Function using Division Method =&amp;gt; h(k) = k Mod m , don't pick m to have a small divisor for example 2 or don't pick m as a power of 2, typically pick a prime which&amp;nbsp; is not too close to power or 2 or 10&lt;/li&gt;&lt;li&gt;Hash Function using Multiplication Method =&amp;gt; h(k)= (A.k mod 2**w).right.shift(w -r) where A is an odd integer between 2**(w-1) and 2**w&amp;nbsp; and not too close to the bounds, 2**r = m and w is the word length in bits of the computer.&lt;/li&gt;&lt;li&gt;The above method is fast since multiplication and right shifting are typically faster on a computer than division&lt;/li&gt;&lt;li&gt;Resolving collisions through open addressing i.e. when you don't have storage for pointers for doing resolving using linking. - you basically keep probing with a different hash function each time you don't find an empty slot or the search key you are looking for&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Linear Probing Strategy =&amp;gt; h(k,i) = (h(k,0) + i) mod m. This method suffers from primarly clustering i.e. basically we are search the Hash Table linearly one after the another, so if we have a block of 10 occupied slots in one stretch, everytime you have to check those 10 slots before moving on to the next empty slot&lt;/li&gt;&lt;li&gt;Double Hashing Strategy =&amp;gt; h(k,i) = (h1(k) + i*h2(k))mod m, typically you pick m as a power of 2 and h2(k) is odd for uniform distribution&lt;/li&gt;&lt;li&gt;Analysis of runtime for Open Addressing =&amp;gt; Expected number of probes &amp;lt;=&amp;nbsp; 1/(1-alpha) where alpha is the load factor.The lecture proves the above theorem&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-427716666929725534?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/427716666929725534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=427716666929725534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/427716666929725534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/427716666929725534'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/mit-ocw-lecture-7hashing-and-hash.html' title='MIT OCW -Lecture 7(Hashing and Hash Functions)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-7865292112964925209</id><published>2009-11-24T03:39:00.000-08:00</published><updated>2009-11-24T04:05:45.707-08:00</updated><title type='text'>Network Programming in C - Beej's guide summary(Part 1)</title><content type='html'>So to brush up my C skills, I thought of doing some C programming and Network programming was something I was always curious about so what better way then do network programming in C.I haven't gotten to the programming part yet.So far I have just completed about half of &lt;a href="http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html"&gt;Beej's guide to Network Programming&lt;/a&gt;&lt;br /&gt;And since I have fallen into this good (or bad? who knows) habit of taking notes, here is what I have covered so far from the tutorial &lt;br /&gt;&lt;ul&gt;&lt;li&gt;What is a socket?&lt;/li&gt;&lt;li&gt;Difference between Stream Sockets and Datagram Sockets (SOCK_STREAM and SOCK_DGRAM)&lt;/li&gt;&lt;li&gt;Stream sockets use Transmission Control Protocol and Datagram Sockets use User Datagram protocol&lt;/li&gt;&lt;li&gt;Streams sockets have a connection open during transmissioin and have all the good stuff of ensuring the packets reach other end in same order etc whereas datagram sockets don't ensure any of that, the reason to use UDP over TCP is speed and speed&lt;/li&gt;&lt;li&gt;Layers of Network stack and why it is layered (very brief)&lt;/li&gt;&lt;li&gt;why ipv6? Because we were running out of address in ipv4 - ipv4 is 32 bits for each address, ipv6 is 128 bits&lt;/li&gt;&lt;li&gt;Representation of ipv4 address e.g. 192.0.2.111 and ipv6 address e.g. 2001:0db8:c9d2:0012:0000:0000:0000:0051 , you can actually ignore zeros and represent it as 2001:db8:c9d2:12::51&lt;/li&gt;&lt;li&gt;Loopback ipv6 address is ::1 and ipv4 is 127.0.0.1&lt;/li&gt;&lt;li&gt;What is a subnet and how it is represented?&lt;/li&gt;&lt;li&gt;What are port numbers?&lt;/li&gt;&lt;li&gt;byte orders - big endian and little endian and the need to convert from network byte order to host byte order and vice versa during receiving and sending packets &lt;/li&gt;&lt;li&gt;Explains Structs - addrinfo, sockaddr,sockaddr_in, in_addr, sockaddr_in6, in6_addr,sockaddr_storage&lt;/li&gt;&lt;li&gt;Explains - inet_pton() function which converts String representation of ip address (e.g. 172.78.89.1) to in_addr struct and inet_ntop() for vice versa conversion&lt;/li&gt;&lt;li&gt;Private networks and Network Address Translation(NAT) - for example when you are connected via a router to the internet from home , your ip addres via ipconfig is different than what your ip address is on this site http://www.whatismyip.com/.Also in theory there can be so many addresses with ipv6 that NAT won't be needed&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-7865292112964925209?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/7865292112964925209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=7865292112964925209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/7865292112964925209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/7865292112964925209'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/network-programming-in-c-beejs-guide.html' title='Network Programming in C - Beej&apos;s guide summary(Part 1)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-3235632040062453219</id><published>2009-11-23T04:36:00.000-08:00</published><updated>2009-11-23T04:36:56.703-08:00</updated><title type='text'>MIT OCW -Lecture 6(Order Statistics, Median)</title><content type='html'>I took this &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/detail/embed06.htm"&gt;Lecture 6&lt;/a&gt; on Sunday.This is what was covered&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What is order statistic i.e. finding the k-th smallest element in an array&lt;/li&gt;&lt;li&gt;Naive Algorithm for doing it i.e. sorting the array and returning the k-th element from it Theta( nlg(n))&lt;/li&gt;&lt;li&gt;Algorithm using randomized divide and conquer (basically using quicksort's random partitioning method)&lt;/li&gt;&lt;li&gt;Intuitive analysis on running time of randomized partition for finding the order statistic i.e. All cases when we split the array into any ratio other than (0:n-1) = Theta(n) and only worst case when we always pick a pivot such that the array is split (0:n-1) = Theta (n**2)&lt;/li&gt;&lt;li&gt;Formal analysis of running time using Indicative Random variables and substitution method of the above algorithm&lt;/li&gt;&lt;li&gt;To overcome the worst case of the above algorithm , another algorithm by Rivest, Floyd,Pratt et al was covered&amp;nbsp;&lt;/li&gt;&lt;li&gt;The above algorithm basically involves splitting the input array into n/5 groups, finding the median of each n/5 group and then recursively finding the median of these medians.&lt;/li&gt;&lt;li&gt;The above algorithm was covered at a high level and proof provided on why it would always be Theta(n) run time, but the important part is that the constant C is so high that this may not be a practical algorithm .&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Other than the above lecture, I also cleaned up this blog a little but changing the URL and the Blog Template,editing a few blogs entries with no title etc..While in the cleaning up mood, I also cleaned up my home directory to group all logically related projects/files into one parent folder.Then I was playing around with C a little and I think I got back 80% of the C I knew 8 years back, pointer arithmetic funness is something I probably need to spend a little more time to get it back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-3235632040062453219?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/3235632040062453219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=3235632040062453219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3235632040062453219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3235632040062453219'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/mit-ocw-lecture-6order-statistics.html' title='MIT OCW -Lecture 6(Order Statistics, Median)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-1674615069206906357</id><published>2009-11-19T04:10:00.000-08:00</published><updated>2009-11-19T04:35:58.429-08:00</updated><title type='text'>MIT OCW - Lecture 5(Linear-time Sorting: Lower Bounds, Counting Sort, Radix Sort)</title><content type='html'>Today morning I took the &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/detail/embed05.htm"&gt;5th Lecture&lt;/a&gt; which talked about decision trees and linear sorting algorithms.Specifically it covered&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Started by reviewing how fast were the already covered sorting algorithms i.e. Merge,Insertion,Quick and Heap Sort(which is not covered in the lectures but wikipedia  has &lt;a href="http://en.wikipedia.org/wiki/Heapsort"&gt; good information &lt;/a&gt; on it )&lt;/li&gt;&lt;li&gt;Discussed  what is a computation model &lt;/li&gt;&lt;li&gt;Comparison sorting model - All sorts which use comparison operators for sorting&lt;/li&gt;&lt;li&gt;What is a decision tree model&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How we can represent sorting algorithms based on comparison in decision tree model&lt;/li&gt;&lt;li&gt;Proof using decision tree model that all comparison sorts have a lower bound of at least n*lg(n).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Merge sort, Heap Sort and Randomized QuickSort are asymptotically optimal comparison model sorting algorithms&lt;/li&gt;&lt;li&gt;Counting Sort  for sorting in linear time - O(n+k) where n is input size and k is the number of distinct elements in the input&lt;/li&gt;&lt;li&gt;limitations of Counting sort i.e k needs to be fairly small else it will need  very large storage space for keeping the counter array&lt;/li&gt;&lt;li&gt;What is a Stable sorting algorithm - keeps the relative position of equal elements in output same as in input array&lt;/li&gt;&lt;li&gt;Radix sort&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Run time analysis of Radix sort and also how to optimally break the input integer into digits i.e O(n) and r =lg(n)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Then I got  a little bored of all the theory so went ahead and installed &lt;a href="http://golang.org/"&gt;Go&lt;/a&gt;. Go is using Mercurial for version control.I have used CVS, use ClearCase now in work life, use Git for GitHub (still know just the basics) and hopefully I will get to a point with Go where I can compare Mercurial with other version control systems.Always fun to compare different designs for the same problem.&lt;br /&gt;&lt;br /&gt;I have been too long in the Object Oriented Java world that I am yet to digest the Cish type of syntax of Go and unfortunately all it's speed is lost on my computer because I run Ubuntu on VMWare and that is sloooooooooooow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-1674615069206906357?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/1674615069206906357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=1674615069206906357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/1674615069206906357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/1674615069206906357'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/mit-ocw-lecture-5linear-time-sorting.html' title='MIT OCW - Lecture 5(Linear-time Sorting: Lower Bounds, Counting Sort, Radix Sort)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-86652320894454805</id><published>2009-11-18T03:55:00.000-08:00</published><updated>2009-11-18T04:16:37.899-08:00</updated><title type='text'>MIT OCW - Lecture 4 (Quicksort and Randomized Algorithms)</title><content type='html'>I completed the &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/detail/embed04.htm"&gt;4th Lecture &lt;/a&gt;today morning which was on QuickSort and Randomizing QuickSort.Here is what was covered&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How Quick sort fits into Divide and Conquer paradigm&lt;/li&gt;&lt;li&gt;QuickSort pseudo code and algorithm explanation&lt;/li&gt;&lt;li&gt;Time analysis of partition method i.e. Theta(n)&lt;/li&gt;&lt;li&gt;Worst case time analysis of QuickSort i.e. when input is sorted or reverse sorted (Theta (n**2)h&lt;/li&gt;&lt;li&gt;Best case time analysis of QuickSort when we the pivot always splits the array into two equal halves( Theta(nlg(n))&lt;/li&gt;&lt;li&gt;Analysis for Average Case time of QuickSort when Pivot splits the array 1/10:9/10 (Theta(nlg(n))&lt;/li&gt;&lt;li&gt;Time analysis of QuickSort when we alternate between best case and worst case for each recursive partition (Theta(nlg(n))&lt;/li&gt;&lt;li&gt;Randomized Quicksort - How to overcome worst case by randomly picking a pivot so that the running time is independent of the input array order&lt;/li&gt;&lt;li&gt;Time analysis of Randomized QuickSort (Theta(nlg(n))&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;This lecture expects a background in basics of probability and random variables(the proof for time analysis of Randomized quick sort uses Indicator random variables)&lt;br /&gt;&lt;br /&gt;All in all QuickSort is one of the best practical algorithms available for sorting, of course it may needed to be tuned a little on a case by case basis e.g. if you expect sorted inputs at times, use randomized quick sorts, if the partition array size is say less than 5 elements use some other algorithm to sort it instead of recursively going all the way to one element to partition etc.&lt;br /&gt;&lt;br /&gt;Here is a &lt;a href="http://github.com/bgurupra/gpb_play_projs/blob/master/algorithms/src/sort/QuickSort.java"&gt;basic implementation of QuickSort&lt;/a&gt; in Java&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-86652320894454805?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/86652320894454805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=86652320894454805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/86652320894454805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/86652320894454805'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/introduction-to-algorithms-mit_18.html' title='MIT OCW - Lecture 4 (Quicksort and Randomized Algorithms)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-4095086344915947697</id><published>2009-11-15T18:41:00.000-08:00</published><updated>2009-11-18T04:15:50.274-08:00</updated><title type='text'>MIT OCW - Lecture 2(Asymptotic Notation - Recurrences - Substitution, Master Method) and Lecture 3(  Divide-and-Conquer: Strassen, Fibonacci)</title><content type='html'>So it was a rather productive weekend&lt;br /&gt;&lt;br /&gt;On Saturday, I finished MIT's &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/detail/embed02.htm"&gt;Lecture 2&lt;/a&gt; which covered the below subjects.It was fairly mathematical&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Asymptotic notation , Big O, Big Omega, Big Theta, Small Omega, Small O notations&lt;/li&gt;&lt;li&gt;Asymptotic analysis of recursive functions&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Substitution Method&lt;/li&gt;&lt;li&gt;Recursive tree Method&lt;/li&gt;&lt;li&gt;Master Theorem Method&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I also read basics of &lt;a href="http://en.wikipedia.org/wiki/Arithmetic_progression"&gt;Arithmetic Series&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Geometric_progression"&gt;Geometric Series&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Logarithm"&gt;Logarithms&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I implemented a basic &lt;a href="http://github.com/bgurupra/gpb_play_projs/blob/master/algorithms/src/sort/MergeSort.java"&gt;Merge Sort&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On sunday I took the &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/detail/embed03.htm"&gt;Lecture 3&lt;/a&gt; from MIT's open course ware which covered Divide-and-Conquer: Strassen, Fibonacci, Polynomial Multiplication.This lecture covered a lot of neat ways of doing things like Fibonacci numbers and powering a number etc.Specifically it covered&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Recap of Master Theorem&lt;/li&gt;&lt;li&gt;What is Divide and Conquer(Recursion)&lt;/li&gt;&lt;li&gt;Running time of Merge Sort using Master Theorem  &lt;/li&gt;&lt;li&gt;Running time of Binary Search&lt;/li&gt;&lt;li&gt;Powering a number (naive way and divide and conquer way)&lt;/li&gt;&lt;li&gt;Fibonacci Sequence (Naive recursion, bottom up, naive recursive squaring(using golden ratio),recursive squaring(using Matrix multiplication) )&lt;/li&gt;&lt;li&gt;Matrix Multiplication - Divide and Conquer using Strassens method&lt;/li&gt;&lt;li&gt;Embedding a binary tree on a chip - (Naive way which needs area of n*lg(n) and another method(derived using Master Theorem) which needed a area of n)&lt;/li&gt;&lt;/ol&gt;I also implemented a naive solution to this &lt;a href="http://www.flashbynight.com/drench/"&gt;game called Drench&lt;/a&gt; which my friend showed me on Friday.The game basically involves coloring a n*n matrix with a simple set of rules.Here is the &lt;a href="http://github.com/bgurupra/gpb_play_projs/tree/master/coloring_game/"&gt;implementation&lt;/a&gt;. For 14*14 sized matrix (which is what the online game drench has) , this solution solved it on an average in about 20 to 22 colorings.I use a random number generator to generate the base matrix.I have not tested it thoroughly yet and the program has a lot of scope for optimization.&lt;br /&gt;&lt;br /&gt;I want to finish chapter 4 in the Introduction to Algorithms book (which is recommended for the course) which covers the substitution method, recursion tree method and master theorem before I proceed further with the lecture.That way I will have a better understanding of the Math involved and help me understand other lectures better.Hopefully I can do that tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-4095086344915947697?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/4095086344915947697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=4095086344915947697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4095086344915947697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4095086344915947697'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/my-weekend.html' title='MIT OCW - Lecture 2(Asymptotic Notation - Recurrences - Substitution, Master Method) and Lecture 3(  Divide-and-Conquer: Strassen, Fibonacci)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-3781009767432962749</id><published>2009-11-13T14:00:00.000-08:00</published><updated>2009-11-13T14:03:06.171-08:00</updated><title type='text'>DB2 V9 SYSIBMADM views</title><content type='html'>If you are using DB2 V9 or later and want lots of nice performance monitoring information such as long running SQL and how much time they are taking, how are your buffer pools performing, lock snapshot etc.There are a bunch of views in the SYSIBMADM schema which makes it easy to write scripts to monitor your database for any offending SQLs&lt;br /&gt;&lt;br /&gt;Check out Table 343 in the below Link&lt;br /&gt;&lt;br /&gt;&lt;a href="http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0023485.htm"&gt;http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0023485.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-3781009767432962749?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/3781009767432962749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=3781009767432962749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3781009767432962749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3781009767432962749'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/db2-v9-sysibmadm-views.html' title='DB2 V9 SYSIBMADM views'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-2658677023171117896</id><published>2009-11-13T05:35:00.000-08:00</published><updated>2009-11-18T04:18:53.288-08:00</updated><title type='text'>MIT OCW - Lecture 1(Analysis of Algorithms,Insertion Sort,Merge Sort)</title><content type='html'>I took the first lecture on &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/"&gt;Introduction to Algorithms&lt;/a&gt; from MIT Open CourseWare today morning. I had already completed two lectures one on &lt;a href="http://unknownme-justblogging.blogspot.com/2009/11/other-3-lectures-on-cluster-computing.html"&gt;Introduction to Algorithms&lt;/a&gt; and the second on &lt;a href="http://unknownme-justblogging.blogspot.com/2009/11/stacks-lecture-day-2.html"&gt;Stacks&lt;/a&gt; from National Programme on Technology Enhanced Learning of India's &lt;a href="http://www.youtube.com/user/nptelhrd#g/c/BF3763AF2E1C572F"&gt;youtube channel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just wanted to compare between the two before deciding which one I would take fully.I think I will go with the MIT's lectures because&lt;ul&gt;&lt;li&gt;I found the explanation of how the algorithms work more insightful on the MIT Lectures.&lt;/li&gt;&lt;li&gt;The IIT lectures uses power point slides whereas the MIT guy uses a black board and writes it out during the class, I liked the second approach better because it gives time for the students to think and black board is so free form that it is easy to explain much better using it&lt;/li&gt;&lt;li&gt;There are already lecture notes people have taken and &lt;a href="http://www.catonmat.net/blog/summary-of-mit-introduction-to-algorithms/"&gt;posted on their blogs&lt;/a&gt; which I can refer to&lt;/li&gt;&lt;li&gt;MIT Lectures seemed to have more stress on Math (which is hard for me but good for me)&lt;/li&gt;&lt;li&gt;I already have the book the MIT course recommends to use for this course&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;But since the lecture will be using a black board, I think it is better to use a pen and paper than notepad for the notes.So I will not be posting the notes on the blog, I'll still put the code I do on my github repo.&lt;br /&gt;&lt;br /&gt;Today I tried to capture some of the lecture at least using my notepad and here it is&lt;br /&gt;Define Algorithm Analysis&lt;br /&gt;Talked about things in a software program more important than performance&lt;br /&gt;Insertion Sort Algorithm&lt;br /&gt;The Running time of Algorithm depends on&lt;br /&gt;  a. type of input (whether fully sorted or partially sorted)&lt;br /&gt;  b. size of input&lt;br /&gt;  c. want upper bounds of time taken most of the time&lt;br /&gt;&lt;br /&gt;Kinds of analysis&lt;br /&gt;  Worst case(usually)&lt;br /&gt;      T(n) = max time on any input of size n&lt;br /&gt;  Average case(sometimes)&lt;br /&gt;      T(n) = expected time over all inputs of size n&lt;br /&gt;             expected time is time for every input multiplied by the probablility that the input will occur,&lt;br /&gt;             hence for this we need the statistical distribution of inputs (for example all inputs are equally likely)&lt;br /&gt;  Best Case(bogus)&lt;br /&gt;       you can cheat by showing a slow algorithm as good over some input where on vast majority of inputs it is probably very bad&lt;br /&gt;&lt;br /&gt;What is insertion sorts running time&lt;br /&gt;  Depends on computer&lt;br /&gt;      -relative speed ( compare two algorithms on same machine)&lt;br /&gt;      -Abolute speed  ( compare two algorithms on different machine)&lt;br /&gt;&lt;br /&gt;Asymptotic Analysis&lt;br /&gt;  a.Ignore Machine dependent constants&lt;br /&gt;  b.Look at the growth of the running time with respect to input (instead of looking at the actual running time)&lt;br /&gt;&lt;br /&gt;Asymptotic notation&lt;br /&gt;  Theta notation - a. Drop lower order terms&lt;br /&gt;           b. Ignore leading constants&lt;br /&gt;&lt;br /&gt;Analysis of Insertion Sort  &lt;br /&gt;  Worst Case analysis&lt;br /&gt;      T(n) = Summation (j =2 to n) theta(j) = theta(n**2) (Arithemetic Series)&lt;br /&gt;&lt;br /&gt;Merge Sort A[1..n]&lt;br /&gt;&lt;br /&gt;1 if n = 1 , done , Time = Theta(1)&lt;br /&gt;2 Recursively sort A[1, n/2] and A[(n/2)+1,n] Time =2*Theta(n/2)&lt;br /&gt;3 Merge the two sorted lists = Time = Theta(n)&lt;br /&gt;&lt;br /&gt;Merge sort time&lt;br /&gt;if n = 1 (array is already sorted) , T(n) = Theta(1)&lt;br /&gt;if n &gt; 1 , T(N) = 2*Theta(n/2) + Theta (n)&lt;br /&gt;&lt;br /&gt;Merge sort - Theta(nlogn) - The analysis was done graphically on blackboard&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-2658677023171117896?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/2658677023171117896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=2658677023171117896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2658677023171117896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2658677023171117896'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/introduction-to-algorithms-mit.html' title='MIT OCW - Lecture 1(Analysis of Algorithms,Insertion Sort,Merge Sort)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-634380119754380508</id><published>2009-11-12T18:59:00.000-08:00</published><updated>2009-11-12T19:12:07.088-08:00</updated><title type='text'>my github repository</title><content type='html'>So I installed Eclipse and Git today on my Ubuntu on VMWare Player&lt;br /&gt;&lt;br /&gt;Step 1 -&gt; I installed Git following the instructions on this link&lt;a href="http://chrisolsen.org/2008/03/10/installing-git-on-ubuntu/"&gt; &lt;/a&gt;&lt;a href="http://chrisolsen.org/2008/03/10/installing-git-on-ubuntu/"&gt;http://chrisolsen.org/2008/03/10/installing-git-on-ubuntu/&lt;/a&gt;&lt;br /&gt;Step 2-&gt; I learn't the quick basics of git commands from here &lt;a href="http://www.spheredev.org/wiki/Git_for_the_lazy"&gt;http://www.spheredev.org/wiki/Git_for_the_lazy&lt;/a&gt;&lt;br /&gt;Step 3-&gt; I installed eclipse which was straight forward &lt;span style="color: rgb(51, 102, 102);font-family:times new roman;" &gt;sudo apt-get install eclipse&lt;/span&gt;&lt;br /&gt;Step 4-&gt; I opened a github micro account on &lt;a href="http://github.com"&gt;github.com&lt;/a&gt;&lt;br /&gt;Step 5-&gt; I created my private public SSH keys and added the public key to the github command using these instructions &lt;a href="http://help.github.com/linux-key-setup/"&gt;http://help.github.com/linux-key-setup/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And here is my github repository &lt;a href="http://github.com/bgurupra/gpb_play_projs"&gt;http://github.com/bgurupra/gpb_play_projs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have two folders in it, map_reduce folder has the basic java implementation of the map reduce idea using threads and algorithms folder has the implementation of whatever algorithms I will do based on the algorithm lectures&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-634380119754380508?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/634380119754380508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=634380119754380508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/634380119754380508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/634380119754380508'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/my-github-repository.html' title='my github repository'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-7963767070685378969</id><published>2009-11-11T20:46:00.000-08:00</published><updated>2009-11-11T20:56:53.920-08:00</updated><title type='text'>Git ,VMware and Ubuntu!</title><content type='html'>So I started reading up a little bit on Git today and hopefully soon get a GitHub account.But before that I wanted to set up &lt;a href="http://vm.swingrider.net/ubuntu/910/"&gt;Ubuntu&lt;/a&gt; on the Vmware player which I got done.Now I need to setup Eclipse and Git and all the good stuff on my Ubuntu&lt;br /&gt;&lt;br /&gt;Here is a &lt;a href="http://www.youtube.com/watch?v=4XpnKHJAok8"&gt;old talk&lt;/a&gt; on Git by Linus and also the &lt;a href="http://learn.github.com/p/intro.html"&gt;intro to Git &lt;/a&gt;on github.com but the gist I got so far is&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Git Keeps a copy of ALL the files and ALL the versions locally unlike your other version control things like CVS, SVN , ClearCase which keep only the latest version locally&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Git is distributed version control System, so it has multiple servers instead of just one centralized server&lt;/li&gt;&lt;li&gt;In Git each person can have as many branches as they want and work on it.Since merging is easy , you can have like a "main" branch and merge all verified changes into that branch&lt;/li&gt;&lt;li&gt;This does not mean Git takes a whole lotta space, it is still probably less than what subversion takes to keep just the latest version of the files&lt;/li&gt;&lt;li&gt;Since Git keeps everything on your disk it is super duper fast&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Since Git keeps everything on your disk you can do pretty much everything other than push and pull while you are offline&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Branching and Merging is very fast&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I would have liked to have atleast completed my Ubuntu setup and Git setup today.But dumb fuckers and dumb fuck processes of corporate IT spoiled my mood a little and then I had a lengthy lengthy argument with the missus which took up a lot of my time :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-7963767070685378969?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/7963767070685378969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=7963767070685378969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/7963767070685378969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/7963767070685378969'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/git-vmware-and-ubuntu.html' title='Git ,VMware and Ubuntu!'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-4088984094025798570</id><published>2009-11-11T14:07:00.000-08:00</published><updated>2009-11-11T14:13:13.531-08:00</updated><title type='text'>Summary of all the MIT Introduction to Algorithms lectures by Peteris Krumins</title><content type='html'>Wow somebody has done such an awesome awesome job of summarizing it&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.catonmat.net/blog/summary-of-mit-introduction-to-algorithms/" rel="bookmark" title="Read 'Summary of all the MIT Introduction to Algorithms lectures'"&gt;Summary of all the MIT Introduction to Algorithms lectures&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Today probably will take the MIT's first lecture and see how that compares to the one I am taking&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-4088984094025798570?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/4088984094025798570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=4088984094025798570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4088984094025798570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4088984094025798570'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/summary-of-all-mit-introduction-to.html' title='Summary of all the MIT Introduction to Algorithms lectures by Peteris Krumins'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-4911514646002101186</id><published>2009-11-11T12:53:00.000-08:00</published><updated>2009-11-18T04:23:56.449-08:00</updated><title type='text'>Stack implementation - NPTEL -Lecture 2(Stacks)</title><content type='html'>Below is the implementation of a simple stack based on the &lt;a href="http://www.youtube.com/user/nptelhrd#p/c/BF3763AF2E1C572F/1/g1USSZVWDsY"&gt;Stacks Lecture&lt;/a&gt;. A straight forward implementation in Java which supports both the growth strategy and the tight strategy for increasing the stack size.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pastie.org/694301"&gt;Stack  &lt;/a&gt;- Interface with Stack methods&lt;br /&gt;&lt;a href="http://pastie.org/694303"&gt;MyStack&lt;/a&gt;  - Concrete implementation&lt;br /&gt;&lt;a href="http://pastie.org/694304"&gt;StackOverFlowException&lt;/a&gt; - Thrown when we run out of memory&lt;br /&gt;&lt;a href="http://pastie.org/694305"&gt;StackEmptyException &lt;/a&gt;Thrown when the user calls top or pop when Stack is empty&lt;br /&gt;&lt;a href="http://pastie.org/694307"&gt; StockSpanAlgorithm &lt;/a&gt;This class implements the calculating stock span (javadoc describes what the problem is) using both a trivial implementation (O(n**2)) and using Stacks (O(n))&lt;br /&gt;&lt;a href="http://pastie.org/694308"&gt;Utils &lt;/a&gt;- Utils class which prints the array contents to the output&lt;br /&gt;&lt;br /&gt;I am thinking instead of using pastie to post my code, I am better off using github.Lets see how that goes&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-4911514646002101186?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/4911514646002101186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=4911514646002101186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4911514646002101186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4911514646002101186'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/stack-implementation-from-day2-stacks.html' title='Stack implementation - NPTEL -Lecture 2(Stacks)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-3329441565696522701</id><published>2009-11-10T03:19:00.000-08:00</published><updated>2009-11-18T04:20:50.090-08:00</updated><title type='text'>NPTEL -Lecture 2(Stacks)</title><content type='html'>&lt;span style="font-family:verdana;"&gt;So Day 2 sat through the &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.youtube.com/user/nptelhrd#p/c/BF3763AF2E1C572F/1/g1USSZVWDsY"&gt;Stacks&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; Lecture and here are the notes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Stacks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Abstract Data Type - Here is the fancy defintion , ADT is a mathematically specified entity that defines a set of its instances with:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;A specific interface - a  collection of signatures of operations that can be invoked on an instance&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;A set of axioms ( preconditions and postconditions) that define the semantics of the operations ( i.e. what the operations do to the instance of ADT, not how)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;so in terms of Java ADT is pretty much like a Interface with decent JavaDoc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;There are three types of operations&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    Construction (Constructor in Java)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    Access functions ( something like a getter(), list())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    Manipulation functions    (something like a setter(), put(), add())&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Stack&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    LIFO Datatype&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;operations on a stack , new - creates it, push - pushes , pop - pops, top - just reads the top most element without removing it, size - gives the size, isEmpty - checks if Empty&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Formally axioms will be defined like this for example&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    Pop(Push(S,v)) = S&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    Top(Push(S,v)) = v&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Stack interface in Java and some basics of Exceptions was covered&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Creating an Array based stack in Java and it's implementation was shown&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;All methods of Stack run at O(1) - so Stack is very efficient&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Example  of Calculating the Stock Span i.e. If you have an array of daily stock prices , create another array such that for each element in the stock price array you have a corresponding element for the Span of that day. For example let us say the stock prices varied like this {10, 3,1,8,3,2 }, Span is defined as the difference between current day index and the index of the last day when the stock price is greater than the current day , for example Span for the day Stock price was 2 is 1 , for 8 it is 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    1)First approach using loop of loops so order was O(n**2)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    2)More efficient Stack approach where order was O(n)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;A growable ArrayBased Stack, Everytime the Stack is full you increase the size&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    1)Tight Strategy - Add the constant to the current max size and create a new Stack -O(n**2/c) where c is the constant &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    2)Growth Strategy - Double the size of Stack everytime is full - O(n) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;So growth Strategy is a better option&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-3329441565696522701?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/3329441565696522701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=3329441565696522701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3329441565696522701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3329441565696522701'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/stacks-lecture-day-2.html' title='NPTEL -Lecture 2(Stacks)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-8906956773725352676</id><published>2009-11-09T19:35:00.000-08:00</published><updated>2009-11-18T04:22:13.980-08:00</updated><title type='text'>Other 3 Lectures on Cluster computing and MapReduce from Google+ NPTEL -Lecture 1(Introduction to Algorithms)</title><content type='html'>&lt;span style="font-style: italic;font-family:arial;" &gt;So today I took the last three lectures as well here &lt;/span&gt;&lt;a style="font-family: arial; font-style: italic;" href="http://code.google.com/edu/submissions/mapreduce-minilecture/listing.html"&gt;Google Cluster Computing and Map Reduce&lt;/a&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;The third one on distributed file systems talked about Google File System was really good.It was not at all hard to understand and was kind of amazing in the sense that with ideas that are not even that hard to understand , you can actually manage peta bytes of data.Though GFS isn't you general purpose file system but a file system that is optimized to store a few millions of very large files ( the block size is 64 MB!!), optimized for reading large chunks of data in one shot and for appending data at the end of the file.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;The other two lectures on Clustering Algorithms and Graph Algorithms was a little hard for me to appreciate because I had no background on it whatsoever.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;So I started off by hunting videos on youtube that start with algorithm basics ( I do have a book on the same subject, but watching online lectures seems to be a much better option for me).Guess what I found a gold mine of Lectures from a Professor from Indian Institute of Technology in Delhi , here is the &lt;/span&gt;&lt;a style="font-family: arial; font-style: italic;" href="http://www.youtube.com/user/nptelhrd#g/c/BF3763AF2E1C572F"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;I'll try to listen to one lecture everyday and post the class notes here.So today's lecture was on "Introduction to Algorithms" and here are the class notes I took&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Data Structures and Algorithms&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-style: italic; font-family: arial;"&gt;&lt;li&gt;    What is an Algorithm?&lt;/li&gt;&lt;li&gt;    What is a good Algorithm? - Small Running time and takes less memory&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;First Sorting Algorithm - &lt;/span&gt;&lt;a style="font-style: italic; font-family: arial;" href="http://pastie.org/691361"&gt;Insertion Sort&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;Analysis of running time - At the very basic level, there are some basic fundamental operations&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;&lt;br /&gt;for example comparison operation(&gt;,&lt;,==), arithmetic operation(+,-,*,/), logical operations( &amp;amp;&amp;amp;, ||).So run time is just the sum of number of times the fundamental operations need to be executed for a given algorithm, multiplied by the time taken for each of these fundamental operations.     There is best case times, worst case times and Average case times.  Typically you would want to consider the  worst case because that is the upper bound.Secondly the average case is typically as bad as the Worst case .Average case is difficult to compute as well     &lt;span style="font-weight: bold;"&gt;Asymptotic Analysis:&lt;/span&gt; This method simplifies analysis of running time by getting rid of the implementation specific detail like what hardware, what software etc.  Secondly the obvious way to measure the run-time is to implement it and measure the time taken to run the program , but that is hard and not feasible  for obvious reasons (because input size can vary all over the place, the run time will vary based on OS Load, hardware etc etc)  &lt;br /&gt;&lt;br /&gt;Asymptotic Analysis just  captures the essence of how the algorithm's running time increases with the increase in the input size    Big Oh Notation     f(n) = O(g(n)) if there exists constants c and no such that f(n) &lt;= cg(n) for n &gt;= no&lt;br /&gt;for example&lt;/span&gt;&lt;span style="font-style: italic;font-family:arial;" &gt; f(n) = 2n+6 and g(n) = n.    and  c = 4 and no is 3 .&lt;br /&gt;&lt;br /&gt;Big Oh notation is used for worst case analysis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;But really outside the fancy definition the simple rule is just Drop the lower order terms and the constants from the function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;For example if the run time is a function  50nlog(n), then in Big-Oh notation you would simply represent it as O(nlog(n))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;So if you are running a loop within a loop for input size n, your algorithmic efficiency is O(n(outer loop) * n (inner loop)) = O (n*2), if you have a loop within a loop within a loop it is O(n*3) etc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;O(log(n)) is better than O(n) is better than O(n2) is better than O(n to the power k) is better than O ( a to the power n)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;There is also big Omega(lower bound)  and big Theta (tight bound = average case) - but these notations aren't as widely used as Big Oh&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-8906956773725352676?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/8906956773725352676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=8906956773725352676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8906956773725352676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8906956773725352676'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/other-3-lectures-on-cluster-computing.html' title='Other 3 Lectures on Cluster computing and MapReduce from Google+ NPTEL -Lecture 1(Introduction to Algorithms)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-6780016579843699307</id><published>2009-11-09T04:18:00.000-08:00</published><updated>2009-11-09T04:34:10.997-08:00</updated><title type='text'>dirty basic MapReduce implementation(well not even an implementation)</title><content type='html'>So just to understand the concept of MapReduce better, I tried to create some Java code which would use the MapReduce 'pattern' to solve the word count problem (i.e counting number of times each unique word occurs in the given set of documents).Of course this has been tested only on a sample of three basic text files ,not error checking whatsoever and was implemented using the the first way that came to mind.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pastie.org/690023"&gt;FileKeyValue.java&lt;/a&gt; - File name and File value(list of words in the file)&lt;br /&gt;&lt;a href="http://pastie.org/690024"&gt;WordKeyValue.java&lt;/a&gt; - Word name and word count&lt;br /&gt;&lt;a href="http://pastie.org/690018"&gt;MapReducer.java  &lt;/a&gt;- This does the bulk of the work.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It creates a list of FileKeyValue objects for all the input files.&lt;/li&gt;&lt;li&gt;Then threads out each FileKeyValue object to be processed in a Mapper.&lt;/li&gt;&lt;li&gt;Waits for all the Mappers to finish.&lt;/li&gt;&lt;li&gt;Then sorts the output of all the mappers by the outputKey(i.e word) and consolidates the output value from all the Mappers for that output key (i.e. creates the intermediate list).&lt;/li&gt;&lt;li&gt;Threads out each unique combination of  (outputKey, intermediate list) combination to a Reducer for reduction.&lt;/li&gt;&lt;li&gt;Waits for all reducers to complete.&lt;/li&gt;&lt;li&gt;Prints out the results&lt;/li&gt;&lt;/ol&gt;&lt;a href="http://pastie.org/690019"&gt;Mapper.java&lt;/a&gt; - Breaks the FileKeyValue object into a list of WordKeyValue objects.Each Mapper runs as a separate Thread&lt;br /&gt;&lt;a href="http://pastie.org/690021"&gt;Reducer.java&lt;/a&gt; - Sums up the intermediate list values for a given word and passes it back to MapReducer class.Each Reducer runs as a separate Thread&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-6780016579843699307?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/6780016579843699307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=6780016579843699307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6780016579843699307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6780016579843699307'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/dirty-basic-mapreduce.html' title='dirty basic MapReduce implementation(well not even an implementation)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-2101749649565906271</id><published>2009-11-08T21:04:00.000-08:00</published><updated>2009-11-18T04:23:18.795-08:00</updated><title type='text'>Lecture on Cluster Computing and MapReduce from Google</title><content type='html'>For a while I was curious on what was MapReduce exactly and if even you are curious these lectures from  Google will  help&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/edu/submissions/mapreduce-minilecture/listing.html"&gt;http://code.google.com/edu/submissions/mapreduce-minilecture/listing.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So far I took the first and the second one.Both are approx an hour long.&lt;br /&gt;&lt;br /&gt;The first one gives an overview of distributed computing and it's history.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Difference  between parallel computing and distributed computing &lt;/li&gt;&lt;li&gt;Synchronization primitives and Semaphores&lt;/li&gt;&lt;li&gt;Condition variables&lt;/li&gt;&lt;li&gt;Fundamentals of Networking (what is a port, TCP, IP etc)&lt;/li&gt;&lt;/ul&gt;The second lecture goes into details of Map Reduce&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Overview of Functional Programming&lt;/li&gt;&lt;li&gt;What is Map and Fold in the context of Functional Programming&lt;/li&gt;&lt;li&gt;Overview of MapReduce with the example of a word count on a bunch of files Algorithm&lt;/li&gt;&lt;/ul&gt;I started writing a very basic MapReduce implementation in Java (using regular Threads of course to parallelize the Mappers and Reducers) for the Word Count Algorithm.I have about 50% completed and hopefully will complete it all tomorrow and post the code out here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-2101749649565906271?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/2101749649565906271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=2101749649565906271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2101749649565906271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2101749649565906271'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/11/cluster-computing-and-mapreduce.html' title='Lecture on Cluster Computing and MapReduce from Google'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-6635982414215869068</id><published>2009-10-19T20:10:00.000-07:00</published><updated>2009-10-19T21:06:13.269-07:00</updated><title type='text'>T61 RIAA SoundMax</title><content type='html'>So today I spent a good 4 hours of time trying to record what my speakers play on my Lenovo T61.Looks like recording right off the sound mixer was kind of a standard feature in sound cards even as back as in 2002.On windows XP if you go to Volume Control Applet -&gt; Options -&gt;Properties and then select the Recording radio button and if your sound card/driver support the record what you listen feature, you will see more than just the microphone in the white box below the radio button&lt;br /&gt;&lt;br /&gt;Unfortunately looks like on T61 ,Lenovo  deliberately prevents "record what you hear" feature from the sound card at a hardware level.So even if you upgrade to the latest version of SoundMax driver it won't help&lt;br /&gt;&lt;br /&gt;Here are a few forum posts I found&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.lenovo.com/t5/General-Discussion/Why-has-stereo-Mix-been-disabled-on-thinkpads-amp-when-do-we-get/m-p/38690"&gt;http://forums.lenovo.com/t5/General-Discussion/Why-has-stereo-Mix-been-disabled-on-thinkpads-amp-when-do-we-get/m-p/38690&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forum.thinkpads.com/viewtopic.php?t=52527"&gt;http://forum.thinkpads.com/viewtopic.php?t=52527&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;People think it is probably Recording Industry Association of America(RIAA) to blame.&lt;br /&gt;&lt;br /&gt;But if you really want to overcome the hardware restriction you can go for a combination of  &lt;a href="http://audacity.sourceforge.net/"&gt;audacity&lt;/a&gt;  and &lt;a href="http://software.muzychenko.net/eng/vac.html"&gt;Virtual Audio Cable&lt;/a&gt;. Worked pretty slick for me, audacity is open source and free whereas VAC is 30 $ per License.They have a trial version too but it keeps saying the word "Trial" every 30 seconds in your audio output.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-6635982414215869068?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/6635982414215869068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=6635982414215869068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6635982414215869068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6635982414215869068'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/10/t61-riaa-soundmax.html' title='T61 RIAA SoundMax'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-875892598843713863</id><published>2009-10-18T20:32:00.000-07:00</published><updated>2009-10-18T20:38:03.071-07:00</updated><title type='text'>T61 Bug</title><content type='html'>My office T61 Lenovo runs Win XP Pro.When I shut the lid of my laptop it automatically hibernates and when I bring that lid back up it automatically wakes up.But the problem is every time  the laptop wakes up like this there is no sound and I had to restart all over again&lt;br /&gt;&lt;br /&gt;Apparently it is a bug and there are a couple of ways to fix it. 1) Disable/Enable your sound device 2)Uncheck “allow this device to bring the computer out of standby” from the Power Management properties of your software modem 3)If you don't use your software modem at all just disable it.&lt;br /&gt;&lt;br /&gt;All I got from &lt;a href="http://www.paralaptop.com/lenovo-laptops/fix-sound-bux-on-thinkpad-t61-after-standby.html"&gt;http://www.paralaptop.com/lenovo-laptops/fix-sound-bux-on-thinkpad-t61-after-standby.html&lt;/a&gt; but just blogged it on my own blog in case I forget this 6 months from now and start looking for it all over again.&lt;br /&gt;&lt;br /&gt;The link never explained what exactly the bug was but made it sound it was some sort of a hardware conflict.I did not find any other material about it on the inter tubes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-875892598843713863?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/875892598843713863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=875892598843713863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/875892598843713863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/875892598843713863'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/10/t61-bug.html' title='T61 Bug'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-2175724253986813309</id><published>2009-10-01T18:00:00.000-07:00</published><updated>2009-10-01T18:26:10.852-07:00</updated><title type='text'>A couple of useful google map mashups</title><content type='html'>&lt;a href="http://www.propertymaps.com/maps/polylines.php"&gt;http://www.propertymaps.com/maps/polylines.php&lt;/a&gt; - You give the zip code and it shows the county and also some information (select zip in the return drop down ) about the county for example average income in that county, average house value etc etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.huge.info/zip.htm"&gt;http://maps.huge.info/zip.htm&lt;/a&gt; - This one is really useful.If you are planning a road trip and want to halt somewhere en route.Google maps gives you the route and the map but with this mashup you can get the zip codes along the route as well which will help you in finding hotels easily.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-2175724253986813309?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/2175724253986813309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=2175724253986813309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2175724253986813309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2175724253986813309'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/10/couple-of-useful-google-map-mashups.html' title='A couple of useful google map mashups'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-7097083585138005464</id><published>2009-09-22T20:46:00.000-07:00</published><updated>2009-09-22T20:50:28.637-07:00</updated><title type='text'>Started on a book on Algorithms</title><content type='html'>I started reading "Introduction to Algorithms" by Cormen, Leiserson,Rivest and Stein. I was not able to get much past the first chapter which basically talked about how Algorithms in itself was a technology and all the real world places where Algorithms are used.&lt;br /&gt;&lt;br /&gt;I did start off with chapter 2 which explains insertion sort and merge sort and does their analysis but my rusty rusty brain got tired very quickly and it is bed time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-7097083585138005464?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/7097083585138005464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=7097083585138005464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/7097083585138005464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/7097083585138005464'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/09/started-on-book-on-algorithms.html' title='Started on a book on Algorithms'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-2258528914335320713</id><published>2009-09-21T16:43:00.001-07:00</published><updated>2009-11-09T06:41:18.994-08:00</updated><title type='text'>Theorizing</title><content type='html'>I love theorizing.Since I spent so much time day dreaming, my mind tries to  generalize everything into a pattern.I thought I can as well write about it here.It's just for fun.&lt;span style="font-weight: bold;"&gt;period&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So we can start off with "The purpose and meaning of life" , my favorite topic which I use for procrastinating just about anything.&lt;br /&gt;&lt;br /&gt;I started off by reading about religion  , specifically Hindu philosophy and a little bit of Buddhism and a teeny weeny bit of Christianity.Initially it used to fascinate me - with concepts of Soul, After life, Good vs Evil, Karma, Enlightenment,Existence of a fair and kind God etc.&lt;br /&gt;&lt;br /&gt;The problem for me is that I cannot live on blind faith. Eventually Religion to me started seeming like mankind's need to explain the things he perceives around him in a naive way.Religion is just a Pre-Science version of explaining reality.&lt;br /&gt;&lt;br /&gt;Religion which opposed Darwin's theory of evolution for so long actually fits into the very theory quite beautifully.Think about it - the gist of almost all religion is "Love" and "Peace", now with "Love" and "Peace" you have a good chance of surviving and passing on your genes into the future.So people are religious because it helps them propogate their species better&lt;br /&gt;&lt;br /&gt;Have you seen typically what happens to people who interpret religion to be "Hate" and "War" ? - they get bombed the shit out of them by B52 stealth bombers these days - now unless your God actually strikes down those B52 bombers with  a bolt of divine lightening - hard luck not getting your ass roasted :-).Obviously good religion with all that Love and Peace is good for species propagation and bad  religion which encourages Hate and War will be weaned out eventually.&lt;br /&gt;&lt;br /&gt;In my opinion Life is not even as "special" as we make it out to be.By special I mean it does not need some "magical" touch by the Gods to convert an inanimate thing to something which has Life.We don't have souls to make us alive.&lt;br /&gt;&lt;br /&gt;Life for me is  just a spectacularly complex arrangement of atoms or quarks or whatever is the fundamental particles of nature which gives all the properties of life as we know it.Simple as that.We basically follow the same laws of nature as everything else which does not have life follows.&lt;br /&gt;&lt;br /&gt;But I don't think your or my life is pre-determined in the sense that if you know the initial position and velocity of a ball you can predict where it will be 5 hours from now.I *think* we do have free will, maybe some law of nature does accommodate for free will.If you even read basics of quantum mechanics you realize that everything is a probability wave - so it is almost like the particles have a "free will" on where they want to be at a given point in time.I am not equating human free will with the probability waves - all I am trying to say is it is not "unthinkable" for accounting  will within the bounds of nature's laws without resorting to the divine.&lt;br /&gt;&lt;br /&gt;The laws and the Good Vs Evil ideas we have  been brought up on where everybody is encouraged to be "good", "kind" etc are just how we have evolved since being "Good" helps propagation of the species.By being "Evil" you will eventually end up killing each other, so "Evil" people get weaned out of the society. The corollary of  this statement is even if you are the most dastardly cold blooded serial killer and rapist and if you can get away with your crime - you actually won't burn in hell.You are a criminal only if you are caught.Sad but true.&lt;br /&gt;&lt;br /&gt;So with this definition of life what do you think could be the purpose of your life.My thoughts are you really don't have any "special" purpose.You are just dust of the universe in a particular form and hence you have "life" and when you die that dust just changes into other form ( for example if you are buried the form is called compost and if you are burned it is ash  :-) ).&lt;br /&gt;&lt;br /&gt;The only purpose is what you give it.Whatever you like to do is the purpose of your life.&lt;br /&gt;&lt;br /&gt;I ,for one find life to be the most amazing thing around, not because we have divinity within us but because it is unbelievably amazing that the dust around you, if given a particular form can ACTUALLY figure itself out and it's surrounding!Tell me what can be more amazing than that!&lt;br /&gt;&lt;br /&gt;So that's my theory.Maybe I am wrong and the Gods will strike me down for this blasphemous blog - but even if God does exist I am sure he is smart enough to understand the need of his creation to question it's creator :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-2258528914335320713?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/2258528914335320713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=2258528914335320713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2258528914335320713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2258528914335320713'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/09/i-love-theorizing.html' title='Theorizing'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-5311064911781385127</id><published>2009-09-18T08:12:00.000-07:00</published><updated>2009-11-21T16:03:08.778-08:00</updated><title type='text'>About me</title><content type='html'>Things about me in no particular order.....&lt;br /&gt;&lt;br /&gt;I am huge day dreamer.I day dream about all sorts of crazy things from killing terrorists who hijacked a plane and landing it safely to meeting Einstein to some day building a company bigger than Microsoft.It is almost crazy.Though I must say I have gotten a good hold of it now and avoid wasting my time day dreaming.That is the reason I am almost never get bored even if I am by myself for days.&lt;br /&gt;&lt;br /&gt;I am the overlord of all forms of procrastination. I am so good at it that every time I have to start a little task - I start off by analyzing the purpose and meaning  of life and how this little task fits into that big purpose and almost always the little tasks of paying bills and completing my code reviews never fit in the BIG scheme of life and almost always my tasks never get started or never get done.&lt;br /&gt;&lt;br /&gt;I try to be funny all the time and probably am funny at least some of the times.I take it to a level that it is almost a fault because I have no problems laughing at myself  or others laughing at me but unfortunately other people have problems when I make jokes and laugh at them.This has caused grief in the past and generally tends to situations where "serious" people don't take you seriously&lt;br /&gt;&lt;br /&gt;I can NEVER keep a secret.I just have to tell the secrets to others!This has caused some grief in the past, so if you have a secret please don't tell me.&lt;br /&gt;&lt;br /&gt;I am pretty sure I suffer from &lt;a href="http://en.wikipedia.org/wiki/ADHD_predominantly_inattentive"&gt;ADHD Predominantly Inattentive&lt;/a&gt; .My attention span is not more than 5 mins and especially if I don't enjoy the thing my attention is focused on.But I also truly believe going to a shrink to fix it is just a waste of my money&lt;br /&gt;&lt;br /&gt;Reading up about how  airplanes work and learning C Programming Language are in my opinion the only two things in my life in  which I put my complete heart.&lt;br /&gt;&lt;br /&gt;I liked physics and computer science when at school.I wish I liked Math better but always found it hard - I would like to put some of the blame for that on the education system :-). If you are a kid and not a genius then it is hard to understand something as abstract as math without relating it to real life and I can't remember one instance where anything but basic math was ever related to real world in the classes.&lt;br /&gt;&lt;br /&gt;I like to believe that I am not egotistic (but my wife begs to differ :-) ). I have never had problems in dealing with almost anybody in my life.&lt;br /&gt;&lt;br /&gt;I respect and worship  competence in any field.period.I don't like people who try to put all sort of marketing fluff around their competence and I can't stand people who BS.&lt;br /&gt;&lt;br /&gt;Einstein is my favorite hero of all times. I know squat about physics but still just understanding the basics of his work and how much radically different it was from the work of his predecessors and how beautifully it explained reality ,I think it is awesome.&lt;br /&gt;&lt;br /&gt;I like programming but unfortunately I have never done any worthwhile programming worth mentioning.Maybe it is time to start&lt;br /&gt;&lt;br /&gt;I would someday like to understand Computer Science, Math and Physics (especially quantum mechanics) in much more detail&lt;br /&gt;&lt;br /&gt;Having a software start up of my own has been a long time dream on which I have made no progress.Again something hopefully I will get to during my remaining life.&lt;br /&gt;&lt;br /&gt;I am not particularly excited about my current job.I do know there is a lot of potential for good work even at my current job but just I keep procrastinating it away.Something to improve on again.&lt;br /&gt;&lt;br /&gt;I have no problems in talking about my flaws and short comings.&lt;br /&gt;&lt;br /&gt;In my opinion my life has been more or less like Raymond's life in Everybody loves Raymond.Other people may beg to differ :-)&lt;br /&gt;&lt;br /&gt;I am a socially awkward person if you know what I mean and I surely have scope for improvement in being more sensitive and empathetic towards others.Unfortunately I am not the type who remembers people's birthdays and anniversaries and sends them sweet cards for it.My wife is my mentor in this area so I will surely improve here.&lt;br /&gt;&lt;br /&gt;I positively HATE phones of all types.I just am an anti phone person who will probably not pick 9 out of 10 calls.I need to force myself to even check voice messages.I hate phones that much.Luckily all my close friends are so used to me that they are hardly offended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-5311064911781385127?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/5311064911781385127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=5311064911781385127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5311064911781385127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5311064911781385127'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/09/things-about-me-in-no-particular-order.html' title='About me'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-2134763440424321512</id><published>2009-08-19T20:29:00.000-07:00</published><updated>2009-08-19T20:40:20.801-07:00</updated><title type='text'>Micheal Jackson , Steve Jobs , _why</title><content type='html'>What is common between Micheal Jackson, Steve Jobs and _why?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;All three can be considered artists in one form or the other.&lt;/li&gt;&lt;li&gt;All three tried to be very very secretive about their person lives.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The public did and does everything it can to dig more information on exactly what all the three want to hide.&lt;/li&gt;&lt;li&gt;And I am a fan boy of all three ( or I should say fan boy of their projections to the outside world) &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;RIP Micheal , RIP _why's online presence( I sure hope you come back) and show us the Tablet Steve!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-2134763440424321512?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/2134763440424321512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=2134763440424321512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2134763440424321512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/2134763440424321512'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/08/micheal-jackson-steve-jobs-why.html' title='Micheal Jackson , Steve Jobs , _why'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-488252940600983053</id><published>2009-08-18T15:42:00.000-07:00</published><updated>2009-08-18T16:43:50.775-07:00</updated><title type='text'>Quantitave over qualitative analysis</title><content type='html'>I will try to blog more often,not because I have something useful to say but because it will hopefully improve my writing skills.&lt;br /&gt;&lt;br /&gt;So today's topic is - &lt;strong&gt;Quantitave over qualitative analysis &lt;/strong&gt;a.k.a how bad an idea it is for a company (especially a software company) to say that they are "process" driven - almost hinting that anybody on the project is just a dispensable "resource" who can be easily replaced with another "resource".&lt;br /&gt;&lt;br /&gt;I would like to put my disclaimers first.I have worked only on internal account projects(internal account = no real money = suckery) for the same deparment.So my views are more or less based on that experience.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Quantitave over qualitative analysis&lt;/strong&gt; : I have seen a lot of importance given to generating numbers in my projects - how many hours worked, how many hours worked over time, how many defects opened per release, Function points etc, etc, etc.However in the real world around me I have never seen those numbers really make much difference to the overall quality of code (which is the only true main deliverable to the client). Secondly there are so many nitty gritties involved that it is not even easy measuring these numbers accurately without spending a whole lot of time and effort on it&lt;br /&gt;&lt;br /&gt;What surely has made a difference in my projects is people.In almost all my projects, there have been a select few technical people(mostly one or two in a team of about ten) who pretty much determined the overall quality of the code delivered.For me it seems pretty clear that if you take the time and effort in hiring and keeping your best talent happy everything else will automatically take care of itself.&lt;br /&gt;&lt;br /&gt;If the people are good you don't need a quality department telling them that they got to use a SCM system, defect tracking system , track their defects etc - The whole process becomes "common sense"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PS:&lt;/strong&gt; Now you are wondering ,I could just have said, in a big software company there are some stupid fucking processes they follow and sometimes(especially difficult times) they treat people like trash and everybody also knows that it is not easy running a big software company and inefficiencies will creep in with scale- BUT hey I am just trying to improve my English here!&lt;br /&gt;&lt;br /&gt;PS1:I just upgraded to IE8 and I must say it almost feels as good as Firefox - Something is either happening to me or Microsoft, I think Bing and Google are equally good, Firefox and IE are equally good - wow!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-488252940600983053?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/488252940600983053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=488252940600983053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/488252940600983053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/488252940600983053'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2009/08/quantitave-over-qualitative-analysis.html' title='Quantitave over qualitative analysis'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-6397163890093524741</id><published>2008-11-13T17:05:00.000-08:00</published><updated>2008-11-13T17:09:45.134-08:00</updated><title type='text'>miss this fun I had in 2006/2007:-)</title><content type='html'>Was just thinking of the various gooood  restaurants I went with my girlfriend then ( wife now)  and pubs with the boys in 2006/2007 ..Here is the list..trust me almost all of them(all restaurants  are good but then boys being boys some of the pubs are places where we got pretty cheap liquor ) are goody good places&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;List of restaurants&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Raaga - Indiranagar&lt;br /&gt;Indi joes - Indiranagar&lt;br /&gt;Mastkalander - Kormangala&lt;br /&gt;pinx - MG Road&lt;br /&gt;Ceaser's - MG Road&lt;br /&gt;Tandoor - MG Road&lt;br /&gt;Rice Bowl - Lavelle Road&lt;br /&gt;Chungs - Malleshwaram&lt;br /&gt;Samarkhand - Infantry Road&lt;br /&gt;3 Quarter Chinese - Church Street&lt;br /&gt;R R - Church Street&lt;br /&gt;Nagarjuna Savoy - Residency Road&lt;br /&gt;Ebony - M G Road - This one is pretty special, here is where the girlfriend finally agreed to be wife :-)&lt;br /&gt;Bamboo shoots - Church Street&lt;br /&gt;Angeethi - Church Street&lt;br /&gt;Little Italy - Indiranagar&lt;br /&gt;Cafe Masala - Eva Mall&lt;br /&gt;Tamarind - Kormangala&lt;br /&gt;Bay Leaf - Kormangala&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;List of pubs &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Legends of Rock - Kormangala and Church Street&lt;br /&gt;Purple Haze - Right in front of IBM Office on Residency Road :-)&lt;br /&gt;Tiffany's - Residency Road&lt;br /&gt;NASA - Church Street&lt;br /&gt;Bunkers - MG Road&lt;br /&gt;Lemon Grass - Kormangala&lt;br /&gt;Mojos- Residency Road&lt;br /&gt;Pecos- Residency Road&lt;br /&gt;spinx - Residency Road&lt;br /&gt;Zero G - Right above IBM office on Residency Road :-)&lt;br /&gt;Club NYX - Right next to IBM Office on Residency Road :-)&lt;br /&gt;Nadini - St Marks Road&lt;br /&gt;Gongura's - Airport Road&lt;br /&gt;TGIF - Airport Road&lt;br /&gt;13th Floor - MG Road&lt;br /&gt;Phirangi Pani - Forum Mall&lt;br /&gt;Enigma - Kormangala&lt;br /&gt;Guzzler's Inn - Residency Road&lt;br /&gt;Styx - M G Road&lt;br /&gt;The New Night Watchman - Church Street&lt;br /&gt;1912 - St Marks Road&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-6397163890093524741?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/6397163890093524741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=6397163890093524741' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6397163890093524741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6397163890093524741'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/11/miss-this-fun-i-had-in-20062007.html' title='miss this fun I had in 2006/2007:-)'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-3616212392804104728</id><published>2008-10-29T04:09:00.000-07:00</published><updated>2008-10-29T04:17:11.239-07:00</updated><title type='text'>My dear dog - pinky :-(</title><content type='html'>Yesterday my dear ole dog passed away after suffering for quite some time with liver problems.She was probably one of the best dogs we had so far :-(  She really helped us out when we moved to the new house in suburbs back then in 1997.The place was  infested with snakes (mostly the non poisonous variety - but there were a good number of Cobras as well) , and my dog was amazingly good at finding and chasing out snakes every single time it entered the compound and multiple times even Cobras entered the compound, so I am sure it helped save us some serious damage by snake bites,Thanks dear pinky, may your soul rest in peace :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-3616212392804104728?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/3616212392804104728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=3616212392804104728' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3616212392804104728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3616212392804104728'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/10/my-dear-dog-pinky.html' title='My dear dog - pinky :-('/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-5612708724325367826</id><published>2008-10-27T19:50:00.000-07:00</published><updated>2008-10-27T20:20:28.991-07:00</updated><title type='text'>Deal Finder</title><content type='html'>America is a land of deals, I am constantly surprised at the number of web sites that post information about good deals and the number of good deals that are available at any point in time if only people are willing to put the effort to search.I  subscribe to a bunch of deal sites through my google reader and sift through them, but then there are some many of them that it takes quite some time to go through them. I tried using a RSS filter like feed rinse(&lt;a href="http://feedrinse.com/"&gt;feedrinse.com&lt;/a&gt;) but it wasn't quite as effective, it does filter the RSS feed and then I can subscribe to that filtered feed from my google reader but it still will give me 5 filtered feeds for five differents sites ,which probably is OK but then I just got curious on how hard it is to do a very basic version of deal finder with absolutely no bells and whistles in python (because I am anyways playing with google app engine , I might as well learn some python)&lt;br /&gt;&lt;br /&gt;It wasn't that hard to get the very basic version going.Of course thanks to an awesome library Universal Feed parser(&lt;a href="http://feedparser.org/"&gt; http://feedparser.org&lt;/a&gt;) which handles just about all formats for RSS/ATOM and provides a very simple interface of fetching back the results from the feeds&lt;br /&gt;&lt;br /&gt;Here is the code (I hope to work on this side project for some more time and try and see if I can get a decent version on web with something like Google App Engine)&lt;br /&gt;&lt;br /&gt;Code on pastie.org &lt;a href="http://pastie.org/301994"&gt;http://pastie.org/301994&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-5612708724325367826?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/5612708724325367826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=5612708724325367826' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5612708724325367826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5612708724325367826'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/10/deal-finder.html' title='Deal Finder'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-3493333437681017534</id><published>2008-10-26T18:19:00.000-07:00</published><updated>2008-10-26T18:23:16.346-07:00</updated><title type='text'></title><content type='html'>I have been thinking of a few things for a long long time.One of it is computer science and the other thing is entrepreneurship.Not to mention other things I am interested in - fitness,family,investment,music and reading&lt;br /&gt;&lt;br /&gt;At least from the past five or so years I have been wanting to dive deep into these fields.But thanks to my laziness I have been able to go nowhere&lt;br /&gt;with it.&lt;br /&gt;&lt;br /&gt;I have now also been theorizing on why I am lazy.I think there are a few things probably that I was doing very wrong&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Focusing on Long term goals:&lt;/span&gt; I was good at thinking where I wanted to be in say five years from now.These grand plans seems so romantic that I tendto lose touch on what I need to do immediately to get there i.e the short term plan - what I need to do in next one hour, one day and one week.Many a time I would end up day dreaming of how life would be five years from now instead of productively spending time on the near term tasks.                                           &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Distraction:&lt;/span&gt; Even if I get to making my short term goals ,I would easily get distracted from the task at hand and switch to another task and then another....Finally at the end of day none of my tasks are done and some of it probably will never get done.So I think unless the task was totally a pathetic , bad and horrible idea to do, one should always make it a habit to take the task to its logical conclusion&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Wrong prioritization:&lt;/span&gt; I do make a list of todos every morning most of the morning, but the problem is quite a few of them on the list are what would be classified as "boring" tasks by most people.But that doesn't mean these were the top priority tasks for the day.Now I would easily convince myself that I could always catch up on them later and instead start working on something I find more interesting.The end story - the boring tasks would never be done because I never did them and the interesting tasks would never be done too because I always had the nagging guilty feeling of not working on the high priority tasks.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;So since I am clear on where I want to get in the next five years and it really should be hard to break them out into near term goals, if I just focus on the tasks till they get done and build the discipline to do the higher priority ones first I think I should be doing better than&lt;br /&gt;atleast what I am doing now :-)&lt;br /&gt;&lt;br /&gt;Ok let me get to my first near term goal - figuring out how google app engine works so that I can soon get started on a idea I have for a web site&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-3493333437681017534?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/3493333437681017534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=3493333437681017534' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3493333437681017534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3493333437681017534'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/10/i-have-been-thinking-of-few-things-for.html' title=''/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-6886403196458281294</id><published>2008-06-20T12:32:00.001-07:00</published><updated>2008-06-20T12:33:59.410-07:00</updated><title type='text'>some tips from a jruby hacker on hacking jruby</title><content type='html'>Some good advice if you are interested in getting into Jruby dev&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#204a87;"&gt;&lt;br /&gt;(3:06:39 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#204a87;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;bgurupra:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; i am wondering what is the best way to get to start contributing to the code source of jruby,trying to understand it by tracing the code seems a daunting task&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:07:11 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; yeah&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#af7f00;"&gt;(3:07:43 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#af7f00;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; bgurupra: the easier approach would be to start running the rubyspecs (or writing new ones) and start fixing bugs exposed by those, one by one&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#204a87;"&gt;(3:08:32 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#204a87;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;bgurupra:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; ok yeah I read that on your blog :-) but do you suggest some theoritical read up of compiler theory?lex , yacc etc?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#af7f00;"&gt;(3:09:09 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#af7f00;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; bgurupra: in most cases you don't really need to do that :)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#204a87;"&gt;(3:09:24 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#204a87;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;bgurupra:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; oh ok&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:09:33 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; that stuff is mostly done and works OK now (with enebo and headius taking care of it)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:09:44 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; and it *IS* very hard path to start up with JRuby :)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:10:13 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; I'd say that starting looking at the jruby bugs and picking up the easy ones until you comfortable, is better&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:10:33 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; and in most cases, the fixes are not in compiler/interpreter, but in core class libraries&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:10:54 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; and for those there is a very simple mapping Array (in Ruby) -&gt; RubyArray (in JRuby)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:11:00 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; String -&gt; RubyString, etc.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:11:17 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; so, 99% of your time you might spent in org.jruby package, where all those core classes reside&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#204a87;"&gt;(3:11:39 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#204a87;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;bgurupra:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; ok yeah I'll take that approach&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:11:50 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; another good way to help out is to run various benchmarks, identify the places where JRuby is slower than MRI and figure out why&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:12:01 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; or even writing small benchmarks that clearly show the problem&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#204a87;"&gt;(3:12:08 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#204a87;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;bgurupra:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; OK..&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:12:46 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; but I tell ya, interesting stuff, but not that easy, especially on top of the VM, with different options, different garbage collectors, different platforms :)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#204a87;"&gt;(3:13:42 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#204a87;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;bgurupra:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; yeah sure there is loads of fun stuff :-)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:13:43 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; one of the biggest issues in that area, it seems, is Rails performance. everybody agree that Jruby should be much faster with Rails, but nobody could come up with the exact places where JRuby wastes its time&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:13:51 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; yep, it all over the place&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:14:18 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; pick up any bug, and chances are, you'll have fun :)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#204a87;"&gt;(3:14:40 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#204a87;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;bgurupra:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; yeah I'll get to the Jira right away :-)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#204a87;"&gt;(3:15:02 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#204a87;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;bgurupra:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; thanks as always VVSiz for your inputs/help :-)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#6b0732;"&gt;(3:15:36 PM) &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6b0732;"&gt;&lt;span style="font-size:100%;"&gt;VVSiz:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; sure :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-6886403196458281294?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/6886403196458281294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=6886403196458281294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6886403196458281294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/6886403196458281294'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/06/some-tips-from-jruby-hacker-on-hacking.html' title='some tips from a jruby hacker on hacking jruby'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-3792307042047203540</id><published>2008-06-10T08:17:00.000-07:00</published><updated>2008-06-10T08:19:55.878-07:00</updated><title type='text'>no clear in cygwin :-(</title><content type='html'>Of all the unix commands I use the most clear is probably the number one on the list and cygwin does not have a clear command :-( and I hate cluttered screens&lt;br /&gt;&lt;br /&gt;I could get around it by adding this line in the .bashrc file&lt;br /&gt;alias clear="cmd.exe /c cls" though!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-3792307042047203540?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/3792307042047203540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=3792307042047203540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3792307042047203540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/3792307042047203540'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/06/no-clear-in-cygwin.html' title='no clear in cygwin :-('/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-5121759965047496954</id><published>2008-06-09T21:12:00.000-07:00</published><updated>2008-06-09T21:28:00.857-07:00</updated><title type='text'>ah compact ruby!</title><content type='html'>I have this problem of messing up my desktop all the time.I keep all sorts of temp stuff(files and folders and short cuts) on the desktop and forget to clean up and before I know its one BIG mess.Since I am trying to pick up on a bit of ruby I tried writing a little script that would clean the desktop for me  and put all the stuff i haven't touched in a while into a temp folder somewhere&lt;br /&gt;&lt;br /&gt;Not to mention wifey was in a bit of a bad mood and I was better off looking busy  :-)&lt;br /&gt;&lt;br /&gt;I must say Ruby's code was much compact and more elegant than what I would have been able to do with Java.With some basic error handling and re factoring everything into logical methods it was still just 35 lines of code&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-5121759965047496954?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/5121759965047496954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=5121759965047496954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5121759965047496954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/5121759965047496954'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/06/ah-compact-ruby.html' title='ah compact ruby!'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-7077660139393293389</id><published>2008-05-14T21:17:00.000-07:00</published><updated>2008-05-14T21:25:02.001-07:00</updated><title type='text'></title><content type='html'>So following up on my previous post,I figured the only way to get to path 2 is to do something on path 2 before somebody hired me to do path 2 stuff.Did a bit of research around looking for open sources projects that were interesting.I have kind of picked JRUBY for now, it is reasonably established and at the same time has lot of stuff still being worked on it or atleast thats what their JIRA says &lt;a href="http://jira.codehaus.org/browse/JRUBY"&gt;http://jira.codehaus.org/browse/JRUBY&lt;/a&gt;.So I tried to get it to compile on my machine only to realize it needed Java 1.5.Then I just tried forcing it to compile with Java 1.4 and then thanks to the tons of errors it spewed, I realized how back dated my Java skills were and spent some time learning about Enums and generics and static imports with java 1.5 which has been around for over 4 years now and I don't see we using it on our project at office anytime in the next 2 years atleast :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-7077660139393293389?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/7077660139393293389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=7077660139393293389' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/7077660139393293389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/7077660139393293389'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/05/so-following-up-on-my-previous-posti.html' title=''/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-155233469990086632</id><published>2008-05-12T14:19:00.000-07:00</published><updated>2008-05-12T15:05:41.513-07:00</updated><title type='text'></title><content type='html'>I have been in what is called the software services industry for the past 6 and a half years now and in that last 6 and a half years I have come to realize that there are distinctly two different paths you can take if you are a software engineer.(And lets cut the crap of the different titles people have as junior programmer, senior programmer, architect, designer etc etc, lets keep it simple a software engineer is one who builds software to solve problems)&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The first path is where you are building software to solve business problems directly&lt;/li&gt;&lt;li&gt;The second path is where you build software so that people on the first path can use it to solve business problems.&lt;/li&gt;&lt;/ol&gt;When I started off I really did not see much difference between them, but as I progressed I saw the paths diverging more and more.So one needs to really pay attention when they start off on what path they like , which I unfortunately realized a little late :-(&lt;br /&gt;&lt;br /&gt;To be successful on Path 1&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You need to love talking to the business people and understand their requirements and gain their confidence.&lt;/li&gt;&lt;li&gt;You need to be a jack of all trades, need to do (boring?) things like requirements analysis, do reviews, come up with designs, code them, test them.(But you would rarely need much knowledge of any of the things they taught you at school under the science called computer science)&lt;/li&gt;&lt;li&gt;Your presentation skills and communication skills play a big part in being successful&lt;/li&gt;&lt;li&gt;You will eventually have to take care of a team of software engineers and a good amount of your time will be spent on being responsible for their work as well&lt;/li&gt;&lt;li&gt;And finally you become technology agonistic, you know no coding just creating presentations and word documents and understanding standards is what it means :-)&lt;/li&gt;&lt;/ul&gt;I have never been on path 2 though I wish so much I was there.Atleast from what I see Path 2 seems a much more fun place to be in if you like&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hacking more and talking less to people especially who don't exactly understand how computers work(a.k.a customers)&lt;/li&gt;&lt;li&gt;Yeah you need to document,design,code as well here but much more fun doing this for say the next version of your pet Firefox extension than if you are doing this for release 17 of an old application for pulling customer number information from a stupid mainframe system&lt;/li&gt;&lt;li&gt;If your hacking skills are par excellence, people will bear with your pathetic presentation and communication skills .Afterall its the inside that matters and not the outside&lt;/li&gt;&lt;li&gt;Maybe you will end up being a lead here as well, but I am sure there are multiple projects where the complexity of the project is so high that you will still be valuable as an indiviual contributor&lt;/li&gt;&lt;li&gt;The more you are here the more interesting problems you will solve and the more cool you will become and more cool you are.Its a perspective again, some people might find IT Architects from big corporations wearing 3 piece suits and doing slick presentations cool but then lets screw those people now :-P&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;PS:Now don't get me wrong I know there are problems in the domain of path 1 which are extremely challenging and I know there are problems in path 2 which are very boring,I am just talking of the averages of what I *think* it is like to be in path 1 and path 2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-155233469990086632?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/155233469990086632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=155233469990086632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/155233469990086632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/155233469990086632'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/05/i-have-been-in-what-is-called-software.html' title=''/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-4357455552408028066</id><published>2008-02-07T05:26:00.000-08:00</published><updated>2008-02-07T05:37:38.417-08:00</updated><title type='text'>just some random stuff</title><content type='html'>I was getting curious for a while on how good an idea it was to start some sort of a classifieds web site for just Bangalore but apparently I am totally out of touch with the classifieds space here :-) Took me five minutes to find 5 such web sites, Didn't like any of them in particular ,somehow they seemed overloaded with information and mostly the GUI was bad (but neither can I think of how to make a classifieds web page look uncluttered)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://classifieds.sulekha.com/bangalore.htm"&gt;http://classifieds.sulekha.com/bangalore.htm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.indiagrid.com/bangalore/index.shtml"&gt;http://www.indiagrid.com/bangalore/index.shtml&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.indianflyer.com/"&gt;http://www.indianflyer.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://classifieds.webindia123.com/classifieds/asp/by_state.asp?city=Bangalore"&gt;http://classifieds.webindia123.com/classifieds/asp/by_state.asp?city=Bangalore&lt;/a&gt;&lt;br /&gt;&lt;a href="http://bangalore.indialist.com/"&gt;http://bangalore.indialist.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But what I did find useful was &lt;a href="http://flipkart.com"&gt;flipkart.com&lt;/a&gt;,  a startup which is basically an online book store but the GUI is much better I thought than the other online book stores like Amazon for example.It didn't seem cluttered and I just hate web sites( or any other application) which clutters lots of information and controls in a small area.Not to mention the book prices I thought were really good and it says they will ship free of cost anywhere in India.&lt;br /&gt;&lt;br /&gt;And last but not the least google has this interesting page called google trends where they rank what is the most searched items in India &lt;a href="http://www.google.co.in/trends"&gt;http://www.google.co.in/trends.&lt;/a&gt;&lt;br /&gt;Looks like today India  was today mostly interested in an actor's suicide and a doctor getting arrested for taking lewd pictures of his patients  :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-4357455552408028066?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/4357455552408028066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=4357455552408028066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4357455552408028066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/4357455552408028066'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2008/02/just-some-random-stuff.html' title='just some random stuff'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-8314812526398957761</id><published>2007-06-02T01:44:00.000-07:00</published><updated>2007-06-02T01:48:54.545-07:00</updated><title type='text'>Technology start ups in India</title><content type='html'>I found this &lt;a href="http://rajan.wordpress.com/2006/06/05/indian-tech-startups/"&gt;nice blog&lt;/a&gt; by Rajan where a list of tech startups in India has been compiled, interesting to notice that there are a lot of start ups based on mobile technology out there as compared to web startups&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-8314812526398957761?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/8314812526398957761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=8314812526398957761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8314812526398957761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8314812526398957761'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2007/06/technology-start-ups-in-india.html' title='Technology start ups in India'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1316088623950599264.post-8034621922870739449</id><published>2007-05-26T07:47:00.000-07:00</published><updated>2007-05-26T07:48:03.747-07:00</updated><title type='text'>My first post</title><content type='html'>My First post!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1316088623950599264-8034621922870739449?l=gpbsblogon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gpbsblogon.blogspot.com/feeds/8034621922870739449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1316088623950599264&amp;postID=8034621922870739449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8034621922870739449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1316088623950599264/posts/default/8034621922870739449'/><link rel='alternate' type='text/html' href='http://gpbsblogon.blogspot.com/2007/05/my-first-post.html' title='My first post'/><author><name>gpb</name><uri>http://www.blogger.com/profile/09991679750205101698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
