<?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-4084576968308778021</id><updated>2012-01-07T04:38:21.130-08:00</updated><category term='ruby'/><category term='FDIC Friday'/><category term='flash'/><category term='front load'/><category term='introduction'/><category term='http4e'/><category term='SNL'/><category term='antivirus 2009'/><category term='costco'/><category term='malware'/><category term='junit'/><category term='maven'/><category term='christmas'/><category term='recommerce'/><category term='open source'/><category term='linkedin'/><category term='apache cxf'/><category term='opensocial'/><category term='sprint'/><category term='gazelle.com'/><category term='JULI'/><category term='htc hero'/><category term='Kenmore HE2T 5757 flooding'/><category term='scareware'/><category term='advancedantivirusscan.com'/><category term='treo 600'/><category term='gem'/><category term='NewRelic'/><category term='mysqlcheck'/><category term='typo'/><category term='sun'/><category term='spyware'/><category term='test driven development'/><category term='mysqldump'/><category term='eclipse'/><category term='Error 2013'/><category term='timestamp'/><category term='review'/><category term='mecached'/><category term='marketwatch.com'/><category term='jax-ws'/><category term='Mercedes Benz'/><category term='door actuator'/><category term='jUDDI'/><category term='easter egg'/><category term='hat'/><category term='centos'/><category term='MySQL'/><category term='java'/><category term='photography'/><category term='apache shindig'/><category term='Web Services'/><category term='programming'/><category term='Recovery'/><category term='graphics'/><category term='Logging'/><category term='flv'/><category term='ffmpeg'/><category term='battery'/><category term='smartphone'/><category term='Memory Leak'/><category term='UDDI'/><category term='vlc'/><category term='JDBC'/><category term='InnoDB'/><category term='RESTful'/><category term='Tomcat'/><category term='palm pre'/><category term='apache commons-lang'/><category term='machine gun door locks'/><category term='holidays'/><category term='palm'/><category term='washing machine'/><category term='mp3'/><category term='ML 320'/><category term='ubuntu'/><category term='home repair'/><category term='pre'/><category term='json'/><title type='text'>Manish Pandit's Blog</title><subtitle type='html'>A blog about my adventures with technology, life and everything in between.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-582585103249833938</id><published>2011-03-26T16:21:00.001-07:00</published><updated>2011-03-27T14:17:46.383-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Logging'/><category scheme='http://www.blogger.com/atom/ns#' term='JULI'/><category scheme='http://www.blogger.com/atom/ns#' term='Memory Leak'/><category scheme='http://www.blogger.com/atom/ns#' term='NewRelic'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>Beware of Tomcat Logging</title><content type='html'>&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Here are &lt;a href="http://www.ign.com/"&gt;IGN&lt;/a&gt; we have built a &lt;a href="http://people.ign.com/mpanditign"&gt;Social API&lt;/a&gt;, which is built on top of OpenSocial specs, deployed in &lt;a href="http://tomcat.apache.org/"&gt;Tomcat&lt;/a&gt; (6.0.20 to be precise) on Centos5. Lately we changed our API so that a method that was returning a POJO was refactored to throw an Exception for a specific condition - a &lt;span class="Apple-style-span"&gt;PersonNotFoundException&lt;/span&gt; instead of returning a null on &lt;span class="Apple-style-span"&gt;getPersonById()&lt;/span&gt;.&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;So far so good, but we started to see the GC getting more and more inefficient, and at some point, all the 4 VMs where we've the API running used to run out of heap space. The GC attempts got bigger, at times I'd see 3-4000 collections during the process. To add to my surprises, all VMs started crashing within minutes of each other once every 3-4 days. We use a super awesome product called &lt;a href="http://www.newrelic.com/"&gt;NewRelic&lt;/a&gt; to monitor our services farm, and the behavior I noticed was that of a somewhat massive memory leak. Not only that, the GC CPU Utilization hit as much as 70% right before the VM crashes. We did an internal code review, not once, not twice but many times over and over. We used yourkit and tried to simulate this on local and stage, still no help.&lt;center&gt;&lt;br /&gt;&lt;iframe src="https://rpm.newrelic.com/public/charts/jscmNqBXFIl" width="500" height="300" scrolling="no" frameborder="no"&gt;&lt;/iframe&gt;&lt;iframe src="https://rpm.newrelic.com/public/charts/dr4HRbuyyMG" width="500" height="300" scrolling="no" frameborder="no"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;This was going on for a good few weeks till we launched a new product, the &lt;a href="http://www.ign.com/sx"&gt;IGN Stock Exchange&lt;/a&gt;. The API volume increased, as did the number of PersonNotFoundExceptions given the various touchpoints across ign.com. Now instead of the servers blowing up every 3-4 days, the blowups started happening every 2 hours. I tried changing application log levels to FATAL from WARN in a desperate attempt to save the servers but no help. The logs kept rolling, and so did the memory on the VMs.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;We run a completely stateless (although not share-nothing) architecture for the API so there was no question of any leaks from the code - which is what baffled me a lot. At this point I dumped the heap from one of the VMs using jmap, compressed it, and scp'd it to my local machine. Then I used &lt;a href="http://www.eclipse.org/mat/"&gt;Eclipse MAT&lt;/a&gt; to open it up and there it was:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-zaHnJ2C6JN0/TY58lVbmwoI/AAAAAAAAO4Q/4I1TNs-GwzY/s1600/Screen%2Bshot%2B2011-03-26%2Bat%2B12.40.27%2BAM.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 332px;" src="http://4.bp.blogspot.com/-zaHnJ2C6JN0/TY58lVbmwoI/AAAAAAAAO4Q/4I1TNs-GwzY/s400/Screen%2Bshot%2B2011-03-26%2Bat%2B12.40.27%2BAM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5588541168463299202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;One instance of "java.util.logging.ConsoleHandler" loaded by "system class loader&lt;system&gt;" occupies 423,661,904 (87.89%) bytes. The instance is referenced by org.apache.juli.ClassLoaderLogManager$RootLogger @ 0x2aaac3945b38 , loaded by "sun.misc.Launcher$AppClassLoader @ 0x2aaac39010e8". The memory is accumulated in one instance of "byte[]" loaded by "system class loader&lt;system&gt;".&lt;/system&gt;&lt;/system&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Keywords&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;java.util.logging.ConsoleHandler&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;sun.misc.Launcher$AppClassLoader @ 0x2aaac39010e8&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;byte[]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;First off, we do not use &lt;a href="http://download.oracle.com/javase/6/docs/api/java/util/logging/package-summary.html"&gt;juli&lt;/a&gt;. The app uses Log4j - thats when I noticed that the logs where most of the stuff was getting written were not the application logs, but Tomcat logs, like catalina.out and catalina.YYYY-MM-DD.log. This gave me a hint to look at Tomcat's logging configuration and here is what I found in CATALINA_HOME/conf/logging.properties:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;1catalina.org.apache.juli.FileHandler.level = FINE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;1catalina.org.apache.juli.FileHandler.prefix = catalina.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2localhost.org.apache.juli.FileHandler.level = FINE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2localhost.org.apache.juli.FileHandler.prefix = localhost.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;3manager.org.apache.juli.FileHandler.level = FINE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;3manager.org.apache.juli.FileHandler.prefix = manager.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;4host-manager.org.apache.juli.FileHandler.level = FINE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;4host-manager.org.apache.juli.FileHandler.prefix = host-manager.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;java.util.logging.ConsoleHandler.level = FINE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;These are the default settings for Tomcat logging, and too brutal for Production given the FINE level. Although Tomcat &lt;a href="http://tomcat.apache.org/tomcat-6.0-doc/logging.html"&gt;does support customizing the logging provider&lt;/a&gt;, I did not have much time to experiment while the boxes kept blowing up.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;I immediately changed FINE to SEVERE (Since Tomcat uses juli and juli does not have FATAL, which is the Log4j equivalent) and bounced the server. Surprise! No more logging to console.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Earlier, the exceptions were logged at the throw new PersonNotFoundException() line and the traces were dumped in Tomcat's console. I am very curious to find out what could be causing the leak in Tomcat's ConsoleAppender (and quite possibly, juli) but for now I am glad that all VMs are behaving normally, the sawtooth GC pattern is back to normal. I'll change the provider to Log4j and see if that makes any difference, and report back my findings.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="https://rpm.newrelic.com/public/charts/giSp5NN5A26" width="500" height="300" scrolling="no" frameborder="no"&gt;&lt;/iframe&gt;&lt;iframe src="https://rpm.newrelic.com/public/charts/b9bfO3dcLKM" width="500" height="300" scrolling="no" frameborder="no"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;At the end of the day, NewRelic was instrumental in helping us isolate the problem, and the offline heap profiling with jmap and Eclipse/MAT saved the day.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;So if you're deploying under Tomcat in production, you may want to look at logging.properties, more so if you have a public API that can lead to lot of exceptions being thrown by the app due to validation/bad data.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-582585103249833938?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/582585103249833938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=582585103249833938' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/582585103249833938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/582585103249833938'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2011/03/beware-of-tomcat-logging.html' title='Beware of Tomcat Logging'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-zaHnJ2C6JN0/TY58lVbmwoI/AAAAAAAAO4Q/4I1TNs-GwzY/s72-c/Screen%2Bshot%2B2011-03-26%2Bat%2B12.40.27%2BAM.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-8872507838264878563</id><published>2011-02-15T22:37:00.001-08:00</published><updated>2011-03-26T21:59:42.242-07:00</updated><title type='text'>Using MongoDB for IGN's Social Platform</title><content type='html'>My Presentation at SF Bay Area MongoDB Meetup on 02/15/2011.&lt;center&gt;&lt;div style="width:425px" id="__ss_6942048"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/lobster1234/mongo-meetup" title="Using MongoDB for IGN's Social Platform"&gt;Using MongoDB for IGN's Social Platform&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse6942048" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mongomeetup-110216002103-phpapp02&amp;amp;stripped_title=mongo-meetup&amp;amp;userName=lobster1234"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed name="__sse6942048" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mongomeetup-110216002103-phpapp02&amp;amp;stripped_title=mongo-meetup&amp;amp;userName=lobster1234" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/lobster1234"&gt;Manish Pandit&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;amp;c2=7400849&amp;amp;c3=1&amp;amp;c4=&amp;amp;c5=&amp;amp;c6="&gt;&lt;/script&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-8872507838264878563?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/8872507838264878563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=8872507838264878563' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8872507838264878563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8872507838264878563'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2011/02/using-mongodb-for-ign-social-platform.html' title='Using MongoDB for IGN&amp;#39;s Social Platform'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-6868174891620111567</id><published>2010-10-11T17:34:00.001-07:00</published><updated>2011-03-26T21:59:08.968-07:00</updated><title type='text'>Social Platforms : What goes on under the hood</title><content type='html'>My Presentation at Silicon Valley Code Camp on 10/09/2010 at 11:15 AM, Room 5001.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_5399086"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/lobster1234/svcc-2010ppt" title="Social Platforms : What goes on under the hood"&gt;Social Platforms : What goes on under the hood&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse5399086" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=svcc2010-ppt-101009035102-phpapp02&amp;stripped_title=svcc-2010ppt&amp;userName=lobster1234" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5399086" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=svcc2010-ppt-101009035102-phpapp02&amp;stripped_title=svcc-2010ppt&amp;userName=lobster1234" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/lobster1234"&gt;Manish Pandit&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-6868174891620111567?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/6868174891620111567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=6868174891620111567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/6868174891620111567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/6868174891620111567'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2010/10/social-platforms-what-goes-on-under.html' title='Social Platforms : What goes on under the hood'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2005818334754818594</id><published>2010-09-19T12:34:00.001-07:00</published><updated>2010-09-19T12:53:46.058-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Eclipse fails to start on Ubuntu</title><content type='html'>&lt;div&gt;Often times I've found Eclipse (Galileo) failing to start on Ubuntu. The progress bar on the splash shows up almost half way and the process hangs. Retries do not help. I've the usual plugins (Maven2, subclipse) and nothing fancy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The only solution I've found to this problem is getting rid of the metadata folder. The downside to this is that I've to reimport the projects in my workspace but at least Eclipse comes back to life.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since I use multiple workspaces it sucks even more as I've to make sure which one I was using last which is the exact one preventing Eclipse to start.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;mpandit@mpandit-ubuntu:~$ find . -name '.metadata' -print&lt;/div&gt;&lt;div&gt;./.local/share/Trash/files/.metadata&lt;/div&gt;&lt;div&gt;./Manish_Laptop_Backup/refactor/.metadata&lt;/div&gt;&lt;div&gt;./Manish_Laptop_Backup/workspace/temp/.metadata&lt;/div&gt;&lt;div&gt;./Manish_Laptop_Backup/workspace/.metadata&lt;/div&gt;&lt;div&gt;./Documents/workspace-sts-2.3.2.RELEASE/.metadata&lt;/div&gt;&lt;div&gt;./Documents/mongoworkspace/.metadata&lt;/div&gt;&lt;div&gt;./workspace/.metadata&lt;/div&gt;&lt;div&gt;./newworkspace/.metadata&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since I was working last in .newworkspace, I'll go and verify the timestamp of the files in it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;mpandit@mpandit-ubuntu:~$ cd newworkspace/&lt;/div&gt;&lt;div&gt;mpandit@mpandit-ubuntu:~/newworkspace$ cd .metadata/&lt;/div&gt;&lt;div&gt;mpandit@mpandit-ubuntu:~/newworkspace/.metadata$ ls -al&lt;/div&gt;&lt;div&gt;total 1876&lt;/div&gt;&lt;div&gt;drwxr-xr-x 4 mpandit mpandit 4096 2010-09-13 23:05 .&lt;/div&gt;&lt;div&gt;drwxr-xr-x 4 mpandit mpandit 4096 2010-07-03 23:03 ..&lt;/div&gt;&lt;div&gt;-rw-r--r-- 1 mpandit mpandit 1025091 2010-09-13 23:05 .bak_0.log&lt;/div&gt;&lt;div&gt;-rw-r--r-- 1 mpandit mpandit 0 2010-06-02 11:03 .lock&lt;/div&gt;&lt;div&gt;-rw-r--r-- 1 mpandit mpandit 860893 2010-09-18 13:21 .log&lt;/div&gt;&lt;div&gt;drwxr-xr-x 3 mpandit mpandit 4096 2010-09-06 22:51 .mylyn&lt;/div&gt;&lt;div&gt;drwxr-xr-x 31 mpandit mpandit 4096 2010-09-12 14:56 .plugins&lt;/div&gt;&lt;div&gt;-rw-r--r-- 1 mpandit mpandit 26 2010-09-18 13:21 version.ini&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;version.ini's timestamp confirmed that this is the workspace I was using.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, we delete the .metadata folder.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;mpandit@mpandit-ubuntu:~/newworkspace/.metadata$ cd ..&lt;/div&gt;&lt;div&gt;mpandit@mpandit-ubuntu:~/newworkspace$ rm -rf .metadata/&lt;/div&gt;&lt;div&gt;mpandit@mpandit-ubuntu:~/newworkspace$&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Restart Eclipse and it works!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2005818334754818594?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2005818334754818594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2005818334754818594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2005818334754818594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2005818334754818594'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2010/09/eclipse-fails-to-start-on-ubuntu.html' title='Eclipse fails to start on Ubuntu'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-4201182886569758776</id><published>2010-05-20T21:24:00.000-07:00</published><updated>2010-05-24T20:00:07.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='mecached'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='gem'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ruby Memcached Gem on Centos and Ubuntu</title><content type='html'>Tried installing memcached ruby gem on Ubuntu 10.04 (lucid) and ran into an error.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;mpandit@vaio-ubuntu:~/work$ sudo gem install memcached&lt;br /&gt;[sudo] password for mpandit:&lt;br /&gt;Building native extensions.  This could take a while...&lt;br /&gt;ERROR:  Error installing memcached:&lt;br /&gt;ERROR: Failed to build gem native extension.&lt;br /&gt;&lt;br /&gt;/usr/bin/ruby1.8 extconf.rb&lt;br /&gt;Libmemcached already built; run 'rake clean' first if you need to rebuild.&lt;br /&gt;creating Makefile&lt;br /&gt;&lt;br /&gt;make&lt;br /&gt;gcc -I. -I/usr/lib/ruby/1.8/i486-linux -I/usr/lib/ruby/1.8/i486-linux -I.  -fPIC  -I/var/lib/gems/1.8/gems/memcached-0.19.3/ext/include  -L/var/lib/gems/1.8/gems/memcached-0.19.3/ext/lib -fno-strict-aliasing -g -g -O2  -fPIC   -fno-strict-aliasing -g -g -O2  -fPIC   -c rlibmemcached_wrap.c&lt;br /&gt;rlibmemcached_wrap.c: In function ‘_wrap_MemcachedSt_sasl_callbacks_set’:&lt;br /&gt;rlibmemcached_wrap.c:6669: error: ‘sasl_callback_t’ undeclared (first use in this function)&lt;br /&gt;rlibmemcached_wrap.c:6669: error: (Each undeclared identifier is reported only once&lt;br /&gt;rlibmemcached_wrap.c:6669: error: for each function it appears in.)&lt;br /&gt;rlibmemcached_wrap.c:6669: error: ‘arg2’ undeclared (first use in this function)&lt;br /&gt;rlibmemcached_wrap.c:6669: error: expected expression before ‘)’ token&lt;br /&gt;rlibmemcached_wrap.c:6687: error: expected expression before ‘)’ token&lt;br /&gt;rlibmemcached_wrap.c:6688: error: ‘struct memcached_st’ has no member named ‘sasl_callbacks’&lt;br /&gt;rlibmemcached_wrap.c:6688: error: expected ‘)’ before ‘const’&lt;br /&gt;rlibmemcached_wrap.c:6688: error: expected ‘;’ before ‘arg2’&lt;br /&gt;rlibmemcached_wrap.c: In function ‘_wrap_MemcachedSt_sasl_callbacks_get’:&lt;br /&gt;rlibmemcached_wrap.c:6700: error: ‘sasl_callback_t’ undeclared (first use in this function)&lt;br /&gt;rlibmemcached_wrap.c:6700: error: ‘result’ undeclared (first use in this function)&lt;br /&gt;rlibmemcached_wrap.c:6711: error: expected expression before ‘)’ token&lt;br /&gt;rlibmemcached_wrap.c:6711: error: ‘struct memcached_st’ has no member named ‘sasl_callbacks’&lt;br /&gt;rlibmemcached_wrap.c: In function ‘_wrap_memcached_set_sasl_callbacks’:&lt;br /&gt;rlibmemcached_wrap.c:12021: error: ‘sasl_callback_t’ undeclared (first use in this function)&lt;br /&gt;rlibmemcached_wrap.c:12021: error: ‘arg2’ undeclared (first use in this function)&lt;br /&gt;rlibmemcached_wrap.c:12021: error: expected expression before ‘)’ token&lt;br /&gt;rlibmemcached_wrap.c:12039: error: expected expression before ‘)’ token&lt;br /&gt;rlibmemcached_wrap.c:12040: error: expected ‘)’ before ‘const’&lt;br /&gt;rlibmemcached_wrap.c:12040: error: expected ‘)’ before ‘arg2’&lt;br /&gt;rlibmemcached_wrap.c: In function ‘_wrap_memcached_get_sasl_callbacks’:&lt;br /&gt;rlibmemcached_wrap.c:12122: error: ‘sasl_callback_t’ undeclared (first use in this function)&lt;br /&gt;rlibmemcached_wrap.c:12122: error: ‘result’ undeclared (first use in this function)&lt;br /&gt;rlibmemcached_wrap.c:12133: error: expected expression before ‘)’ token&lt;br /&gt;rlibmemcached_wrap.c: In function ‘Init_rlibmemcached’:&lt;br /&gt;rlibmemcached_wrap.c:13285: error: ‘SASL_OK’ undeclared (first use in this function)&lt;br /&gt;make: *** [rlibmemcached_wrap.o] Error 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Gem files will remain installed in /var/lib/gems/1.8/gems/memcached-0.19.3 for inspection.&lt;br /&gt;Results logged to /var/lib/gems/1.8/gems/memcached-0.19.3/ext/gem_make.out&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I googled around, turns out I need libsasl2 and libsasl2-devel installed. Thats easy.&lt;br /&gt;&lt;br /&gt;mpandit@vaio-ubuntu:~/work$ sudo apt-get install libsasl2 libsasl2-dev&lt;br /&gt;&lt;br /&gt;After these got installed, I ran into the same error as above. After wasting 15 minutes, I realized that I should try deleting the gem crap it has already put in the folder. This did the trick:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;mpandit@vaio-ubuntu:~/work$ sudo rm -rf /var/lib/gems/1.8/gems/memcache*&lt;br /&gt;mpandit@vaio-ubuntu:~/work$ sudo gem install memcached&lt;br /&gt;Building native extensions.  This could take a while...&lt;br /&gt;Successfully installed memcached-0.19.3&lt;br /&gt;1 gem installed&lt;br /&gt;Installing ri documentation for memcached-0.19.3...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Now it was turn to do this on my work servers. Unfortunately they run Centos 5.4, and I have a  bias against non-Ubuntu distributions, simply because they are a few years/months behind Ubuntu when it comes to packages.&lt;br /&gt;&lt;br /&gt;So, lesson learnt from Ubuntu, I tried this:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[mpandit@dev-services-vm-01:~] $ sudo yum install libsasl2&lt;br /&gt;Loaded plugins: fastestmirror&lt;br /&gt;Loading mirror speeds from cached hostfile&lt;br /&gt;* addons: distro&lt;br /&gt;* base: distro&lt;br /&gt;* epel: mirrors.kernel.org&lt;br /&gt;* extras: distro&lt;br /&gt;* updates: distro&lt;br /&gt;addons                                                   |  951 B     00:00   &lt;br /&gt;base                                                     | 1.1 kB     00:00   &lt;br /&gt;citrix                                                   |  951 B     00:00   &lt;br /&gt;elff                                                     | 1.9 kB     00:00   &lt;br /&gt;epel                                                     | 3.4 kB     00:00   &lt;br /&gt;extras                                                   | 2.1 kB     00:00   &lt;br /&gt;updates                                                  | 1.9 kB     00:00   &lt;br /&gt;Excluding Packages in global exclude list&lt;br /&gt;Finished&lt;br /&gt;Excluding Packages from CentOS-5 - Base&lt;br /&gt;Finished&lt;br /&gt;Setting up Install Process&lt;br /&gt;No package libsasl2 available.&lt;br /&gt;Nothing to do&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Googled around again, turns out the sasl2 library is called cyrus-sasl2 (dont ask me why). After searching around rpmfind and pbone, I was able to grab the sasl2 RPM and sasl2-dev RPM for Centos 5.4. Low and behold, I had sasl2 already installed, and dev was missing.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[mpandit@dev-services-vm-01:/tmp] $ wget ftp://ftp.pbone.net/mirror/ftp.centos.org/5.4/os/x86_64/CentOS/cyrus-sasl-2.1.22-5.el5.x86_64.rpm&lt;br /&gt;[mpandit@dev-services-vm-01:/tmp] $ sudo rpm -vi cyrus-sasl-2.1.22-5.el5.x86_64.rpm&lt;br /&gt;Preparing packages for installation...&lt;br /&gt;package cyrus-sasl-2.1.22-5.el5.x86_64 is already installed&lt;br /&gt;&lt;br /&gt;[mpandit@dev-services-vm-01:/tmp] $ wget ftp://ftp.pbone.net/mirror/ftp.centos.org/5.4/os/x86_64/CentOS/cyrus-sasl-devel-2.1.22-5.el5.x86_64.rpm&lt;br /&gt;[mpandit@dev-services-vm-01:/tmp] $ sudo rpm -iv cyrus-sasl-devel-2.1.22-5.el5.x86_64.rpm&lt;br /&gt;Preparing packages for installation...&lt;br /&gt;cyrus-sasl-devel-2.1.22-5.el5&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Now that this was installed, I ran sudo gem install memcached, and saw the same ugly 1000 line error. Again, deleted the directory and it worked like a charm.&lt;br /&gt;&lt;br /&gt;Success at the end!&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[mpandit@dev-services-vm-01:/tmp] $ sudo rm -rf /usr/lib/ruby/gems/1.8/gems/mem*&lt;br /&gt;[mpandit@dev-services-vm-01:/tmp] $ sudo gem install memcachedBuilding native extensions.  This could take a while...&lt;br /&gt;Successfully installed memcached-0.19.3&lt;br /&gt;1 gem installed&lt;br /&gt;Installing ri documentation for memcached-0.19.3...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not sure if its a bug or a feature, but I really wish gem install would check to see if half-ass installation from a failed attempt already exists in the LIB_DIR. If so, delete it, or at least move it to a .prev folder or something.&lt;br /&gt;&lt;br /&gt;Thats why whenever someone tells me to just "apt-get install" or "yum install" anything, I always take it with a grain of salt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-4201182886569758776?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/4201182886569758776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=4201182886569758776' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4201182886569758776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4201182886569758776'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2010/05/ruby-memcached-gem-on-centos-and-ubuntu.html' title='Ruby Memcached Gem on Centos and Ubuntu'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2310378888455146158</id><published>2010-02-08T22:17:00.001-08:00</published><updated>2010-02-08T22:31:28.666-08:00</updated><title type='text'>Falling in love with Ruby!</title><content type='html'>&lt;span style="font-family: verdana;font-size:78%;" &gt;So my newfound interest is Ruby. Starting as a n00b but picking it up quite a bit. However I doubt I'd be as comfortable with or accustomed to Ruby as I am with Java, given the 12 years of hardcore programming experience with the latter. Anyway, so the task at hand was a small piece of code that I could use to generate timestamps for OAuth requests (oauth_timestamp). I did not realize how verbose Java programming can get till I tried to compare apples to apples.&lt;br /&gt;&lt;br /&gt;Here is the Java way to do it:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;public class TimestampUtil{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    public static void main(String ... args) throws Throwable{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;          System.out.println(System.currentTimeMillis()/1000);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;     }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;mpandit@vaio-ubuntu:~$ javac TimestampUtil&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new;font-size:78%;" &gt;mpandit@vaio-ubuntu:~$ java TimestampUtil&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new;font-size:78%;" &gt;1265696612&lt;/span&gt;&lt;span style="font-family: courier new;font-size:78%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new;font-size:78%;" &gt;mpandit@vaio-ubuntu:~$&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Here is the Ruby way:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;vi time.rb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;puts Time.now.to_i&lt;br /&gt;&lt;br /&gt;mpandit@vaio-ubuntu:~$ ruby time.rb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1265696797&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;mpandit@vaio-ubuntu:~$ &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2310378888455146158?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2310378888455146158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2310378888455146158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2310378888455146158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2310378888455146158'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2010/02/falling-in-love-with-ruby.html' title='Falling in love with Ruby!'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-4210868861622114497</id><published>2010-02-07T18:10:00.000-08:00</published><updated>2010-02-07T18:22:10.266-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='apache commons-lang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Apache commons-lang StringUtils and Numbers</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;I had my unit tests fail because I was using the &lt;a href="http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#isNumeric%28java.lang.String%29"&gt;StringUtils.isNumeric( )&lt;/a&gt; on a string containing a negative number. The javadoc on this API is excellent, including the sample request/response but it does not talk about negative numbers. The definition of this API seems debatable from a negative number standpoint : "&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;i&gt;Checks if the String contains only unicode digits. A decimal point is not a unicode digit and returns false.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;" &lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: x-small; "&gt;I'd call the method something else, like &lt;i&gt;isWholeNumber( )&lt;/i&gt; if the method is going to say that decimals (and negatives) are going to be ignored.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Anyway, here is a simple way I used to figure out if the string contains a number (negative or with decimal, doesnt matter).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new'; "&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new'; "&gt;&lt;b&gt;String string = "-12.49"; &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new'; "&gt;&lt;b&gt;boolean isNumeric = string!=null &amp;amp;&amp;amp; string.length() &gt; 0 &amp;amp;&amp;amp;  string.toUpperCase().equals(string.toLowerCase());&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-4210868861622114497?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/4210868861622114497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=4210868861622114497' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4210868861622114497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4210868861622114497'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2010/02/apache-commons-lang-stringutils-and.html' title='Apache commons-lang StringUtils and Numbers'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-9028086703865282931</id><published>2010-02-07T15:09:00.000-08:00</published><updated>2010-02-07T18:22:45.795-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><category scheme='http://www.blogger.com/atom/ns#' term='apache shindig'/><title type='text'>Shindig and boolean properties in the POJOs</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;If you ever developed with Apache Shindig, you might have noticed the JSON/XML/Atom marshaller/unmarshaller that takes care of the requests coming in, and responses going out. However, if you use Eclipse (not sure about other IDEs, but it could be applicable to them as well) you may also have used the IDE's &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;generate getters and setters&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; feature to populate your POJO with the mundane getters/setters. &lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;I thought of writing this post after I spent a good 30 minutes trying to figure out why Shindig was not populating the &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;booleans&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; in JSON response, while the XML had them just fine. Turns out, there is different logic to pull "fields" for JSON vs. XML/Atom. The &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;JSONSerializer&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; uses &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;getters&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; (they have to start with a 'get' per the JavaBeans API) to &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; the values. However, if the boolean property is &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;isAsyncAllowed&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;, Eclipse will generate the methods as : &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;isAsyncAllowed( )&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; and &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;setAsyncAllowed( )&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;. Since the JSON Serializer looks for &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;getXXX( )&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;, the &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;isXXX( )&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; never shows up - and hence you never see the booleans/Booleans ever make it to the resulting JSON. This is not an issue with XML, but is sure with JSON. I was able to correct this by renaming the &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;isXXX( ) &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;to &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;setXXX( )&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;I will try to do a fix and contribute it back the Shindig source once I have more than 30 minutes of free time though.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-9028086703865282931?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/9028086703865282931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=9028086703865282931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/9028086703865282931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/9028086703865282931'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2010/02/shindig-and-boolean-properties-in-pojos.html' title='Shindig and boolean properties in the POJOs'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2747566406338801953</id><published>2009-09-04T18:42:00.000-07:00</published><updated>2009-09-04T19:00:32.289-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='palm pre'/><category scheme='http://www.blogger.com/atom/ns#' term='htc hero'/><category scheme='http://www.blogger.com/atom/ns#' term='FDIC Friday'/><category scheme='http://www.blogger.com/atom/ns#' term='marketwatch.com'/><category scheme='http://www.blogger.com/atom/ns#' term='sprint'/><title type='text'>Back in action</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Been away for almost 4 weeks - started a new job. Loving it, even though the commute is horrible. As my career grows, I get hit by a worse commute with every single step-up. Back in the days, I used to rent an apartment 1-2 miles from my work. Then I started working in the peninsula (32 miles) and now &lt;a href="http://www.ign.com/"&gt;IGN Entertainment&lt;/a&gt; (45 miles). Now I cannot move as I am going to live the Great American Debt for 30 years :)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Anyway - quite a few things. &lt;a href="http://community.sprint.com/baw/community/sprintblogs/buzz-by-sprint/announcements/blog/2009/09/03/sprint-to-launch-its-first-android-device"&gt;Sprint is coming up with Android phone&lt;/a&gt; (the HTC Hero) on Oct 11th. As you noticed from my earlier posts, I jumped on the Pre the day it launched, but had to return it in 2 weeks as the keyboard froze on me for good. So, hopefully HTC Hero will not disappoint me. The Treo 600's speaker magnet is already clotting iron near my heart for 7 years now.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;What else..oh yes. If you are following the financial markets (fancy term for stock market), I am sure you are noticing &lt;a href="http://www.fdic.gov/bank/individual/failed/banklist.html"&gt;bank failures&lt;/a&gt; every Friday. One site that I love - &lt;a href="http://marketwatch.com/"&gt;marketwatch.com&lt;/a&gt; has a very vibrant &lt;a href="http://community.marketwatch.com/"&gt;comm&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;a href="http://community.marketwatch.com/"&gt;unity&lt;/a&gt;, who have coined a term "FDIC Friday". It is fun to watch community members greet 'Happy FDIC Fri&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;day' to each other, and recently the community has even started a group where members put bets on how many banks will fail, and in which states. Interestingly, FL and GA are not allowed as per the community - "Banks fail all the time there". So the trick is to get the numbers right, and the states too. So far they're a very good indicator and I am surprised to see how many members are able to guess the correct number and most of the states right. I say more power to the community - that is what the internet is all about now. The shift from producer-consumer model of the internet to peer-to-peer model is simply amazing and engaging. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2747566406338801953?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2747566406338801953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2747566406338801953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2747566406338801953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2747566406338801953'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/09/back-in-action.html' title='Back in action'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2649114507851016885</id><published>2009-08-09T23:35:00.000-07:00</published><updated>2009-08-09T23:49:40.895-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='washing machine'/><category scheme='http://www.blogger.com/atom/ns#' term='Kenmore HE2T 5757 flooding'/><category scheme='http://www.blogger.com/atom/ns#' term='home repair'/><category scheme='http://www.blogger.com/atom/ns#' term='front load'/><title type='text'>Kenmore HE2T 4757 Flooding : Fixed</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;It is a great feeling to be a first time &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;homebuyer&lt;/span&gt;, have the worst &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;nightmare&lt;/span&gt; come true, and to be able to fix it. My Kenmore HE2T 4757 started leaking as soon as I turned it on today. The worst part is that the clogging also pushed water back, with water flowing on the cars parked in my garage. This seemed to be a giant &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;clusterf&lt;/span&gt;*k, with the only fortunate part that I was right there witnessing the event. I turned the water off immediately. Initially I thought it could be the cheapo Costco detergent that may have clogged the pipe. The leak was coming from the soap dispenser area, and the water managed to flow all the way through the loading door. I pulled out the dispenser, and the whole area was flooded under there. I siphoned the water out using 3rd grade physics, and noticed a hole right under the dispensing area. I knew the clog is somewhere between the detergent dispenser and the tub. Anyway, I decided to give it another try, this time trying to ensure I capture every detail. Same thing, the water immediately flooded the dispensing area, and onto the loading door, and on the carpet. Clearly it is not the cheapo detergent. I recalled a banging sound during the heavy spin cycle last time that I ignored. This could be related - I googled around and found suggestions to look for coin, etc. in the drain hose. My problem was different - it is not the drain hose, it is the intake hose. Anyway, before going to bed (it is a special day tomorrow - 1st day at my new job) this disaster kept me up and I decided to give a final shot - try to reach that area from inside the machine. I squeezed my fingers to the point where the dispensing hose drains out in the tub and there you have it - I felt a piece of clothing. This was a wave of encouragement, and I immediately felt like I've nailed this problem. I got a pair of pliers from my toolbox, and tried to pull that piece of clothing with no help. This time I rolled the drum and managed to get that thing out fairly easily - it was my wife's sock. It was drenched with detergent, and was full of holes. I believe it got stuck during the spin cycle last time, and got lodged in there to make a mess today. Anyway, it was a good chance to wake her up at 11:30 and show her my accomplishment! We turned on the machine to verify the fix - and it worked. No leaks this time. I am not sure if we have more crap stuck in there, but now at least I know where to find one! &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Proud to have saved 75 dollars for Sears to show up, and to know that crappy hardware design is far worse than crappy software design.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2649114507851016885?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2649114507851016885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2649114507851016885' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2649114507851016885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2649114507851016885'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/08/kenmore-he2t-4757-flooding-fixed.html' title='Kenmore HE2T 4757 Flooding : Fixed'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-8659017983279429038</id><published>2009-08-06T19:24:00.000-07:00</published><updated>2009-08-06T19:44:10.581-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='costco'/><category scheme='http://www.blogger.com/atom/ns#' term='recommerce'/><category scheme='http://www.blogger.com/atom/ns#' term='gazelle.com'/><title type='text'>gazelle.com review</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Being a huge &lt;a href="http://www.costco.com/"&gt;Costco&lt;/a&gt; fan, I closely pay attention to their site for new announcements. Lately they put an ad for a new service (at least new to me!) called &lt;a href="http://www.gazelle.com/"&gt;Gazelle.com&lt;/a&gt;. The idea is that of a "&lt;a href="http://blog.gazelle.com/posts/costco-joins-the-recommerce-revolution/"&gt;re-commerce&lt;/a&gt;", where they take electronic items that are old/outdated and offer you a price. That price is dependent on the time, market demand as well as the reported condition of the item. The search is pretty good, and the autocomplete feature is extremely useful when entering a product name. I tried putting in my old Kodak cameras, which the site promptly reported as being "un-offerable" and offered to recycle them instead - thats pretty neat. Next was time for something serious, getting rid of my Sony DCR TRV 330 camcorder, which I proudly bought back in 2001 for $900 or so. I entered the info I had, and they offered me quite a decent price - which beat my plan of throwing away the camera by a long shot. I could definitely use the extra moola, and I decided to pawn it out. The site offers free shipping, and allows users to print a packing slip. They also have an option to send a box to mail the stuff in. I picked this option, and promptly received the email from them once they shipped it. I got the folded-flat box in a cute green envelope 2 days later. To my surprise, what they sent me was a flat-rate USPS box which could at the most hold the charger for the camcorder. Apparently they send the same size box regardless of the product being sent. Anyway, the envelope did have a postage prepaid mailing slip that I put on a box big enough to fit the camcorder, and dropped it off at the post office. 2 days later, I received an email alert from them - they had received it and the camcorder was in line for an inspection. Next day, I got another email saying the product checks out, and the information I gave them is correct. I liked this notification feature, and keeping the user/customer in loop with the progress. They'd be mailing me a Coscto Cash Card in the next 10 business days. I logged into the site to check out the status, and the site being very simple is very navigable and user-friendly. It took me no more than 5 clicks to check out the progress, and get details on their inspection checkpoints. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;All in all, this is a service that I recommend and encourage everyone uses, even if you do not have a product with a residual value. The re-commerce concept is pretty neat, and it also helps the environment. The service (and the speed of it) beats the services where you pay to get something - with reversal of roles (they pay you!), I was surprised to see the quality of updates and user-friendliness of the site. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;I am sure I'd be using Gazelle.com quite often - regardless of the moola. I feel proud to be a part of the green-earth/recycle/re-commerce initiative that this company is all about - and above all, they partner with Costco which in and of itself says a lot about their service.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-8659017983279429038?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/8659017983279429038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=8659017983279429038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8659017983279429038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8659017983279429038'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/08/gazellecom-review.html' title='gazelle.com review'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-8060678125604235121</id><published>2009-07-16T09:59:00.000-07:00</published><updated>2009-07-16T10:01:53.214-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='typo'/><title type='text'>I am on a roll..</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gKQW4Z9a5A/Sl9ctrDXClI/AAAAAAAAGA8/UIU9ch3kT84/s1600-h/sun_grammar.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 295px;" src="http://3.bp.blogspot.com/_7gKQW4Z9a5A/Sl9ctrDXClI/AAAAAAAAGA8/UIU9ch3kT84/s400/sun_grammar.jpg" alt="" id="BLOGGER_PHOTO_ID_5359104021314865746" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;I am on a roll running into these well-known sites with messed up grammar!&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-8060678125604235121?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/8060678125604235121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=8060678125604235121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8060678125604235121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8060678125604235121'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/07/i-am-on-roll.html' title='I am on a roll..'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gKQW4Z9a5A/Sl9ctrDXClI/AAAAAAAAGA8/UIU9ch3kT84/s72-c/sun_grammar.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2692803034336479315</id><published>2009-07-15T19:40:00.000-07:00</published><updated>2009-07-15T19:46:03.834-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='typo'/><category scheme='http://www.blogger.com/atom/ns#' term='linkedin'/><title type='text'>LinkedIn needs a visit from the Grammar Police..</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Ran into this today (image capture blurred with &lt;a href="http://gimp.org"&gt;&lt;span style="text-decoration: underline;"&gt;GIMP&lt;/span&gt;&lt;/a&gt;).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gKQW4Z9a5A/Sl6T11dwgjI/AAAAAAAAGA0/Lh6f3Jzr5cc/s1600-h/linkedin.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 375px; height: 130px;" src="http://4.bp.blogspot.com/_7gKQW4Z9a5A/Sl6T11dwgjI/AAAAAAAAGA0/Lh6f3Jzr5cc/s400/linkedin.jpg" alt="" id="BLOGGER_PHOTO_ID_5358883159711711794" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;     &lt;span style="font-family:verdana;"&gt;Clearly, &lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt; needs a visit from the Grammar Police (or the Grammar Fairy, based on what you're into).&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2692803034336479315?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2692803034336479315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2692803034336479315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2692803034336479315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2692803034336479315'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/07/linkedin-needs-visit-from-grammar.html' title='LinkedIn needs a visit from the Grammar Police..'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gKQW4Z9a5A/Sl6T11dwgjI/AAAAAAAAGA0/Lh6f3Jzr5cc/s72-c/linkedin.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-402130893291843839</id><published>2009-07-15T11:15:00.000-07:00</published><updated>2009-07-15T11:33:59.217-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='test driven development'/><category scheme='http://www.blogger.com/atom/ns#' term='junit'/><title type='text'>Unit testing Exception scenarios</title><content type='html'>As a huge fan of Test Driven Development, I try to make sure I get good coverage (~80%). However, most often this is not the case as the code throwing checked exceptions usually does not get executed. The goal is to write test cases to cause the code to trigger those code blocks. When triggered, the code will fail (as it is supposed to!) but the JUnit must pass. There have been plenty of discussions around having a clean way to unit-test this in the past, and I suggested this on the CLJP newsgroup a few years ago as well. Wanted to use a code snippet here to illustrate the solution in a dev-friendly way instead of plain english.&lt;br /&gt;&lt;br /&gt;Let us say this is the piece of code that needs to be JUnit'd for exception cases. The code below returns a String value stored in a collection that is local to the class for an index. For negative index it throws an exception.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public String getValueAtIndex(int index) throws NegativeIndexException{&lt;br /&gt;    if(index &lt; 0) throw new NegativeIndexException(index);&lt;br /&gt;    else ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In order to test this code, here is the JUnit method as I use it.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void testNegativeIndexException(){&lt;br /&gt;    boolean failure = true;&lt;br /&gt;    try{&lt;br /&gt;    //we already instantiated the object/singleton via setup() method&lt;br /&gt;        String value = someInstance.getValueAtIndex(-1);&lt;br /&gt;        failure = false;&lt;br /&gt;    } catch(NegativeIndexException ex){&lt;br /&gt;        logger.error(e,e);&lt;br /&gt;    }finally{&lt;br /&gt;        //this is where we put the assertion&lt;br /&gt;        assertTrue(failure);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This will ensure the code is tested/covered for Exceptions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-402130893291843839?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/402130893291843839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=402130893291843839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/402130893291843839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/402130893291843839'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/07/unit-testing-exception-scenarios.html' title='Unit testing Exception scenarios'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-1997113540941593984</id><published>2009-06-07T22:05:00.001-07:00</published><updated>2009-06-08T02:24:37.196-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><category scheme='http://www.blogger.com/atom/ns#' term='pre'/><title type='text'>Improvements for Palm Pre : My Rant</title><content type='html'>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Here is a list of items that I'd think I either do not know how to figure out, or Palm Pre does not have them, but I'd like to see them. Please note that this is coming from someone who have never used an iPhone, so let us not get started on what/who is better. That is not the point of this post, but to reflect on what is missing, or hard to find on the Pre. Hopefully a good number of these can be handled via documentation or alternative software (like a third party browser).&lt;/span&gt; &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;I will keep adding more items to this list (and removing the existing ones) as I get more familiar with the Pre. For now from the battery drainage it seems my phone will be headed back to the Sprint Store for a refund in a week. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li  style="font-family:verdana;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Ability to change the Home Page on the Browser instead of the (hardcoded?) favorites page.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;The current home page (favorites) view needs to be customized as a list vs. preview icons. I'd prefer a list so it can fit more than 4 on a screen.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;On the browser, make the -&gt; icon clickable so that I can have a drop down of recently visited sites just like the regular PC browser we're all used to for the last 10 years.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;"Add to quick launch" option across all menus if not done via some gesture, which also means ability for the quick launch bar to hold more than 5 apps.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;A "menu" shortcut key on the keyboard so that I do not have to click on the tiny little app title with my nailtip to open the menu (which can of course be operated with a finger tip instead of a nail tip)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;When the phone sleeps while the keyboard is out, the center button as reaching out to the back of the phone with keyboard sticking out is hard. For now I am just pressing the orange button to wake it up.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Macromedia Flash plugin for the Browser, I thought it was already there but guess not.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Is there a place to review the apps, instead of typing the review on the Pre itself via the App Catalog app?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Some kind of an hourglass or splash screen or other gesture to show that the application is being loaded. Some apps are slow and it just confuses me as to whether I need to click the icon again or wait till it launches. I know the little nailtip menu changes the title but thats too hard to notice given the size of the text.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;A visual indication on the screen when the volume is muted using the cheap plastic toggle switch at the top.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Release the freakin SDK already!&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Here are the bugs I found in the Pre:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Light Leakage at the bottom of the screen, this could be related to the heat at the bottom of the phone. This is a no-no. Here are the pix that I uploaded on &lt;a href="http://picasaweb.google.com/pandit.manish/PreScreenBlur#"&gt;picasa&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Adding Gmail account to synergy pumped my contact list with 800 emails and no other information. Ended up removing that account from contacts. &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Heating - while charging, or using the Pre for more than 10 minutes, the bottom part of the phone heats up real bad.&lt;br /&gt;&lt;/span&gt;&lt;/span&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/4084576968308778021-1997113540941593984?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/1997113540941593984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=1997113540941593984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/1997113540941593984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/1997113540941593984'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/06/improvements-for-palm-pre-my-rant.html' title='Improvements for Palm Pre : My Rant'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-8737453861700229446</id><published>2009-06-07T20:21:00.000-07:00</published><updated>2009-06-07T20:59:44.922-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='battery'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='pre'/><title type='text'>Ok Palm Pre..show me you can hold better than my Treo 600</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;So here I am a full 36 hours after I got the Pre in my hands.  Used it as my alarm clock earlier in the morning, and surfed a few sites while lying in my bed last night. I did not &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://gizmodo.com/5279413/palm-pre-cuts-the-cheese"&gt;use it as a cheese knife&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; but I am getting tempted to :)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Drove to &lt;a href="http://www.montereybayaquarium.org/"&gt;Monterey Bay Aquarium&lt;/a&gt; in the morning with a full charge. By the time I reached there (about 1:45 hours), the battery had already drained down to 85%. Then, at Monterey, I noticed that I had zero reception and of course no internet. Magically, the letter "R" appeared near the bars, and all the bars glowed. I have no clue what this "R" was, but I am guessing it meant Roaming. Still no internet. I then restarted the phone (turned it off, and booted it back up) and was impressed to see it connect in a snap, and was able to dial out (I usually dial *4 or *2 to verify the call quality, as I have learnt not to trust the bars any more). So far so good.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;While driving back at 4:30 PM (about 8 hours from the time the phone was off-charger), I had about 66% juice left. Now the shittiest piece of electronic gadget I ever owned (&lt;a href="https://buy.garmin.com/shop/shop.do?pID=6385"&gt;Garmin C330&lt;/a&gt;) failed to receive satellite signal like it always does. I reverted to Sprint Navigation on the Pre, which worked like a charm. My wife held the phone while I was driving, and we saw the battery go down like a lead baloon. In half an hour of drive (Gilroy/San Jose border), the phone had about 33% battery left, and had gotten hot enough to fry an egg. I turned the nav off off as we went to &lt;a href="http://www.shalimarsf.com/index.htm"&gt;Shalimar&lt;/a&gt; in Fremont for a well deserved dinner after the long drive. That is where I wanted to check my emails, and oops - we are at 28%. I turned it off completely, and now I am home putting it back on the charger. Going through the threads at &lt;a href="http://www.precentral.com/"&gt;PreCentral&lt;/a&gt;, it seems to be the default settings taking up all the juice, and I will try to tweak mine and post back. I still have 29 days to return the phone and I really really do not want to do so, unless this seems to be a universal problem.&lt;br /&gt;I would recommend everyone buy a &lt;a href="http://store.treocentral.com/motorola-microusb-high-performance-car-charger/5A47A3044A.htm"&gt;microUSB car charger&lt;/a&gt; no matter what with this phone - I know I will. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;It is like a laptop with a &lt;a href="http://www.fisher-price.com/fp.aspx?st=10&amp;amp;e=product&amp;amp;pid=49493"&gt;Fisher Price toy&lt;/a&gt; battery - at least that is my feeling before changing any of the default values. I do have google set up to push emails so I doubt the phone is reaching out every time. I have location services turned on, which could be a culprit too. I am off to PreCentral to check out what others are feeling about this phone - stay tuned for more :)&lt;br /&gt;Meanwhile my Treo 600 battery is still showing a 92% after being off the charger for 2 full days.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-8737453861700229446?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/8737453861700229446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=8737453861700229446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8737453861700229446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8737453861700229446'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/06/ok-palm-preshow-me-you-can-hold-better.html' title='Ok Palm Pre..show me you can hold better than my Treo 600'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2368044015142108732</id><published>2009-06-06T16:33:00.000-07:00</published><updated>2009-06-06T16:42:00.850-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><category scheme='http://www.blogger.com/atom/ns#' term='sprint'/><category scheme='http://www.blogger.com/atom/ns#' term='pre'/><title type='text'>Took the plunge : Bought me a Palm Pre!</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Got to the Pleasanton Sprint Store at 8:45 AM, was out with a Pre at 11:30 AM. I had to change my plan though - earlier I was with Family plan but got it changed to 2 individual plans, as my wife does not need the Data/Texting stuff. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Anyway, out the box the Pre was about 40% charged, so first thing was to charge it to a decent level. The only drawbacks comparing it to my ancient Treo 600 is that the buttons feel rubbery (vs. metallic with Treo), and the speaker is a little weak. Also I am a little afraid that someday the banana design is going to split while I am sliding the keyboard.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; So far I've played around with the following applications, and I must say it is living up to my expectations. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:verdana;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Sprint Navigation (GPS), which does not work in landscape mode btw&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Youtube&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Downloaded the LinkedIn app, which mostly displays the connections (not sure if it displays status alerts, etc.)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;The browser (it rocks!)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Synergy to sync with Google and Facebook (Seamless, painless, braindead easy)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Camera (very nice)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;The weekend is still young, and I'll be spending quite a few hours playing around with it, and will post my thoughts here....stay tuned!&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2368044015142108732?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2368044015142108732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2368044015142108732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2368044015142108732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2368044015142108732'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/06/took-plunge-bought-me-palm-pre.html' title='Took the plunge : Bought me a Palm Pre!'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2206263353670114044</id><published>2009-06-06T01:51:00.000-07:00</published><updated>2009-06-06T02:27:31.420-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='mysqlcheck'/><category scheme='http://www.blogger.com/atom/ns#' term='Error 2013'/><category scheme='http://www.blogger.com/atom/ns#' term='JDBC'/><category scheme='http://www.blogger.com/atom/ns#' term='Recovery'/><category scheme='http://www.blogger.com/atom/ns#' term='mysqldump'/><category scheme='http://www.blogger.com/atom/ns#' term='InnoDB'/><title type='text'>Fixing InnoDB table corruption (MySQL Error 2013)</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Here I am, trying to get some time off for the weekend, when a good friend of mine called me up with a strange problem on his site - a 404. Does not sound too bad, does it? But wait, there is more. Turns out Tomcat was up, Apache httpd was up, and MySQL was up - but then why a 404? A peek in catalina.out took me by surprise. The JSP failed to render due to the fact that the servlet was trying to pull something from the database to set as a request attribute. Instead of a 500 which we'd normally expect in this situation, the error was a 404 though. Since the error codes at this point were not that important, I started to look into the logs and configurations..&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Here is what the DBCP messages said: &lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2009-06-04 03:10:40,635 [TP-Processor739] FATAL com.xxxx.yyy.SimpleGenericDriver (SimpleGenericDriver.java:54) - Failure getting connection from datasource&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:103)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;As if this wasn't bad enough, here are more gory details on this situation:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2009-06-04 03:23:19,041 [TP-Processor836] FATAL com.xxx.yyyy.SimpleGenericDriver (SimpleGenericDriver.java:54) - Failure getting connection from datasource&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;** BEGIN NESTED EXCEPTION **&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;java.io.EOFException&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;STACKTRACE:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;java.io.EOFException&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1865)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2256)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2756)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:777)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3216)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1147)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at com.mysql.jdbc.Connection.createNewIO(Connection.java:2595)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        at com.mysql.jdbc.Connection.&lt;init&gt;(Connection.java:1509)&lt;/init&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;I logged into MySQL, tried to list the tables in the database, worked just fine. Restarted the database (/sbin/service mysqld restart). This did not fix the problem at all. So I decided to back up the database (mysqldump) and then restore it after cleaning it up. This is where I found a more serious problem. While dumping a larger table (about 15k rows), I got this:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre class="note"  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;Error 2013: Lost connection to MySQL server&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Googled around this, and was glad to see I was not alone. However, the MySQL documentation lists a good number of causes for this error. The list of discussions over this particular error and how it pertains to my situation lef me to write this blog post. This error seemed to be a catch-all, and I wanted to share my experiences with symptoms that were specific to the situation I was trying to help my buddy with.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;For me, I had a few clues - the disk was not full, not all tables were failing, I was able to run mysqlcheck on all tables except one. Then I did what I should have done first - take a look at mysqld log. And there it was, in clear text:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: Page lsn 0 212096651, low 4 bytes    of lsn at page end 212096651&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: Page number (if stored to page    already) 1422,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: space id (if created with &gt;= MySQL-4.1.1 and    stored already) 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: Page may be an index page where index id is 0    851&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: (index PRIMARY of table systemdb/member)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: Database    page corruption on disk or a failed&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: file read of page    1422.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: You may have to recover from a backup.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: It is also    possible that your operating&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: system has corrupted its own file    cache&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: and rebooting your computer removes the&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB:    error.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: If the corrupt page is an index page&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: you can also    try to fix the corruption&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: by dumping, dropping, and    reimporting&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: the corrupt table. You can use CHECK&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: TABLE    to scan your table for corruption.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB: See also &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html" target="_blank"&gt;http://dev.mysql.com/doc/&lt;wbr&gt;mysql/en/Forcing_recovery.html&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;InnoDB:    about forcing recovery. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;I went to the recovery documentation, and added innodb_force_recovery = 1 in the [mysqld] section to /etc/my.cnf. After this I restarted MySQL, and tried mysqldump. Surprise!! I was able to get past the table which was causing the problem. Reading the documentation closely I realized that I need to remove the inndb_force_recovery = 1 before proceeding with a restore, as a non-zero value disables inserts. So I commented out this line, restarted MySQL and dropped the table that was creating all this problem. The drop worked just fine (however, when I tried to do a select count(*) on that table I still got the dreadful 2013 error). Then I sourced the restored table to this schema and we were good to go! &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;So, if you have the similar symptoms for 2013, give this exercise a shot. Here is the summary:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Symptoms:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;1. If using JDBC, the logs will have fatal errors with MySQL connection failures (java.io.EOFException)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;2. The disk is not full&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;3. The tables in question are InnoDB&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;4. When you try to run mysqlcheck on the schema, the connection drops suddently after reading a certain table -&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mysqlcheck: Got error: 2013: Lost connection to MySQL server                during query when executing 'CHECK TABLE ... '&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;5. Any queries on that table via mysql command line client fail&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mysql&gt; select count(*) from sometable;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre class="note"  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;ERROR 2013 (HY000): Lost connection to MySQL server during query&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;6. The mysqld log mentions page corruption. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;If all of these symptoms match your situation, give the innodb recovery a shot, and most likely you'd be able to restore the table(s). &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2206263353670114044?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2206263353670114044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2206263353670114044' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2206263353670114044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2206263353670114044'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/06/fixing-innodb-table-corruption-mysql.html' title='Fixing InnoDB table corruption (MySQL Error 2013)'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-4306455296601477059</id><published>2009-05-09T23:49:00.000-07:00</published><updated>2009-06-06T05:07:02.224-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SNL'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><category scheme='http://www.blogger.com/atom/ns#' term='treo 600'/><title type='text'>Treo 600/650 on SNL..</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;Thought of writing this post right after I saw my beloved Treo 600 (it could have been a 650 though) on SNL skit on 5/9/09. Justin Timberlake pulled out a tricked out Treo from his purse during the famous Target skit starring Kirsten Wigg. Found it pretty interesting because frankly I have not seen anyone with a Treo 6xx except myself ever since the Jesus Phone hit the shelves. So here I am holding the fort till Pre comes out - hopefully during June, but definitely glad to see that people do carry them around, even if it is in 5 minute SNL skits :)&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-4306455296601477059?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/4306455296601477059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=4306455296601477059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4306455296601477059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4306455296601477059'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/05/treo-600650-on-snl.html' title='Treo 600/650 on SNL..'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-1690313671387246604</id><published>2009-04-17T00:06:00.000-07:00</published><updated>2009-06-06T05:07:43.569-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='RESTful'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='http4e'/><title type='text'>http4e - What took them so long!</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;I've been heavily involved with designing and coding something that needs me to hit a bunch of Servlets after setting HTTP headers, and verify the HTTP raw response. With my strict practice of Test Driven Development, it started to become a constant pain - the tools in my box (&lt;/span&gt;&lt;a style="font-family: verdana;" href="https://addons.mozilla.org/en-US/firefox/addon/2691"&gt;Poster&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;, &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.soapui.org/"&gt;soapUI&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; and &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://jakarta.apache.org/jmeter/"&gt;JMeter&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;) wore me out as I wanted something easy enough to set up, embedded in Eclipse for very frequent use - just like soapUI  for SOAP. I was getting desperate enough to roll my own little SWT app but then I ran into this great Eclipse Plugin - &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://code.google.com/p/http4e/"&gt;http4e&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;. It fit my needs 100% - even generates one-click Java Code that you can copy/paste and modify if the test code has to be run outside of the IDE, or on any other machine. One annoying thing is the lack of saving the view - so if you exit Eclipse, you will lose the URLs and anything that you had in there. I end up sticking the URLs and parameters/headers in a text editor and save it for easy access to copy/paste.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;I'd recommend http4e to anyone dealing with similar situations - like validating HTTP headers, or testing RESTful services, etc.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-1690313671387246604?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/1690313671387246604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=1690313671387246604' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/1690313671387246604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/1690313671387246604'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/04/http4e-what-took-them-so-long.html' title='http4e - What took them so long!'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-4177685920660343074</id><published>2009-01-30T20:24:00.001-08:00</published><updated>2009-06-06T05:08:07.620-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ML 320'/><category scheme='http://www.blogger.com/atom/ns#' term='door actuator'/><category scheme='http://www.blogger.com/atom/ns#' term='Mercedes Benz'/><category scheme='http://www.blogger.com/atom/ns#' term='machine gun door locks'/><title type='text'>ML 320 Machine Gun Locks</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;It is only funny when it happens to others. Today it happened to me - the phenomenon I've been reading about on the ML 320 Forums since 2002. My '99 ML 320 was locking, but the door locks were machine-gunning 3 times each. I was scared as I knew people were paying through the nose to get this fixed. I hoped the alarm would engage, even though I do not mind if the truck gets stolen at this point.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;I was ready to shell out a grand, and call the dealership in the AM when I thought about the actual behavior of the locks. The only lock that was not firing like a gun was the cargo lock. I immediately went to the garage and made sure the car is locked. It did the machine gun sound so the problem persisted. I pulled the cargo door latch and what do you know - the alarm went off. I turned it off with the frob, and inspected the rear latch. I could notice the metal clamp which I without a clue moved to the side and slammed the door to close. This time, no machine gun and the locking was normal - I could see the turn signals come on to confirm. Just saved a grand or two, feels great in this economic depression.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Other painful stories about Mercedes Benz M-Class &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.mercedes-benz-usa.com/ml_class.php"&gt;here&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;. I wanted to write my story, but it'd take me at least a week to go over the phonebook of repair records on the ML 320.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;If you landed on this page searching for the machine gun door locks on your ML 320, give this a shot, maybe you can save a grand or two too :)&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-4177685920660343074?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/4177685920660343074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=4177685920660343074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4177685920660343074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4177685920660343074'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/01/ml-320-machine-gun-locks.html' title='ML 320 Machine Gun Locks'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-1870757434768642728</id><published>2009-01-22T21:27:00.002-08:00</published><updated>2009-01-22T23:42:10.423-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jax-ws'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='apache cxf'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Apache CXF with Maven Archetype Plugin and Eclipse</title><content type='html'>Been using &lt;a href="http://cxf.apache.org/"&gt;Apache CXF&lt;/a&gt; for quite sometime, never had a chance to create the project with &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; Archetype Plugin - I usually started with a Maven Web Project, and added CXF dependencies, configuration, etc. along the way in Eclipse.&lt;br /&gt;&lt;br /&gt;However, cxf archetype makes things a lot easier. However, there are a few gotchs (and hence this post).&lt;br /&gt;&lt;br /&gt;To start with, I am assuming that you've Eclipse (Ganymede preferred) with &lt;a href="http://m2eclipse.sonatype.org/"&gt;Sonatype Maven Plugin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Configure this plugin via the settings that can be found under Window-&gt;Preferences-&gt;Maven. Personally, I do not use the embedded version, but 2.0.9 instead.&lt;br /&gt;To start a very basic, simple CXF service via the archetype, create a new Maven Project.&lt;br /&gt;File-&gt;New -&gt; Other -&gt; Maven Project&lt;br /&gt;&lt;br /&gt;In the Wizard's filter section, type in cxf and wait for the combobox to update.&lt;br /&gt;In the list, you should see org.apache.cxf as groupId and cxf-http-basic artifactId. This is what we'd need. If you do not see it, check for Proxy settings in Maven Configuration and try to use external Maven installation instead of the one that comes embedded.&lt;br /&gt;&lt;br /&gt;Once selected, click next. In the next dialog, enter the groupId (com.myproject) and artifactId (cxfservice) and version. Keep the Package same as groupId. Click Finish.&lt;br /&gt;&lt;br /&gt;You should see the project called cxfservice in the Eclipse's package explorer. Notice the red-marks on src/main/java. This is where the problem is.&lt;br /&gt;&lt;br /&gt;The archetype plugin creates a sample HelloWorld service and impl, and ignores the groupId and package name - it uses org.apache.cxf as package name instead.&lt;br /&gt;&lt;br /&gt;To fix this, change the packages in the 2 files to com.myproject.cxfservice.  You can use the Eclipse QuickFix for this too.&lt;br /&gt;&lt;br /&gt;You'd also need to change the package name in the annotation in the impl :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;@WebService(endpointInterface = "org.apache.cxf.HelloWorld")&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;change it to&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;@WebService(endpointInterface = "com.myproject.cxfservice.HelloWorld")&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;In my case, I also had a problem with runtime, as I had JDK 1.5 intead of 1.6 in there. Since 1.5 is not aware of JAX-WS annotations, the redness did not go away by fixing packages. To fix this, I right clicked on JRE System Library, selected Properties and picked JDK 1.6u10. This took care of the @Webservice annotation's compilation.&lt;br /&gt;&lt;br /&gt;Next is to fix the beans.xml file, where CXF looks for the endpoints and implementations. This also has org.apache.cxf package, which we need to change to com.myproject.cxfservice.&lt;br /&gt;&lt;br /&gt;The beans.xml file is under src-&gt;main-&gt;webapp-&gt;WEB-INF. Edit the file to fix the package.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;jaxws:endpoint id="helloWorld" implementor="com.myproject.cxfservice.HelloWorldImpl" address="/HelloWorld"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/jaxws:endpoint&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Also, change the finalName in the pom.xml to a more friendly name, preferably project name. In the &amp;lt;build&amp;gt; section add this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;finalname&amp;gt;cxfservice&amp;lt;/finalname&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Now right click the project -&gt; Run As -&gt; Maven clean. Once done, do the same and select Maven install.&lt;br /&gt;&lt;br /&gt;You should see this in the console:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Scanning for projects...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Building Simple CXF project using spring configuration&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO]    task-segment: [install]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] [resources:resources]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Using default encoding to copy filtered resources.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] [compiler:compile]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Compiling 2 source files to /home/mpandit/workspace/cxfservice/target/classes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] [resources:testResources]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Using default encoding to copy filtered resources.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] [compiler:testCompile]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] No sources to compile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] [surefire:test]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] No tests to run.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] [war:war]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Packaging webapp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Assembling webapp[cxfservice] in [/home/mpandit/workspace/cxfservice/target/cxfservice]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Processing war project&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Webapp assembled in[207 msecs]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Building war: /home/mpandit/workspace/cxfservice/target/cxfservice.war&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] [install:install]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Installing /home/mpandit/workspace/cxfservice/target/cxfservice.war to /home/mpandit/.m2/repository/com/myproject/cxfservice/0.0.1-SNAPSHOT/cxfservice-0.0.1-SNAPSHOT.war&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] BUILD SUCCESSFUL&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Total time: 8 seconds&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Finished at: Thu Jan 22 22:26:21 PST 2009&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] Final Memory: 16M/81M&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;To run this service, we'd need to deploy this war in a server. Create a new server in eclipse (I use Tomcat 6) and associate this project with the server. Start the server, and you should be all set.&lt;br /&gt;&lt;br /&gt;Open a browser, and go to  http://localhost:8080/cxfservice/&lt;br /&gt;&lt;br /&gt;If everything went well, the page should display a list of available services under that context, which in our case is HelloWorld. To get the WSDL for this service, point the browser to http://localhost:8080/cxfservice/HelloWorld?wsdl&lt;br /&gt;&lt;br /&gt;I suggest playing around with this service and make it RESTful if you're new to JAX-WS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-1870757434768642728?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/1870757434768642728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=1870757434768642728' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/1870757434768642728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/1870757434768642728'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/01/apache-cxf-with-maven-archetype-plugin.html' title='Apache CXF with Maven Archetype Plugin and Eclipse'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-5365633797107600770</id><published>2009-01-08T19:07:00.000-08:00</published><updated>2009-06-06T05:08:36.874-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smartphone'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><category scheme='http://www.blogger.com/atom/ns#' term='treo 600'/><category scheme='http://www.blogger.com/atom/ns#' term='sprint'/><category scheme='http://www.blogger.com/atom/ns#' term='pre'/><title type='text'>Palm Pre - Cannot wait!</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;Today Palm &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://news.cnet.com/8301-1035_3-10137055-94.html?tag=mncol;title"&gt;announced&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; the &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.palm.com/us/products/phones/pre/index.html"&gt;Palm Pre&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;, probably the most feature rich phone after the Treo series. I do not want to get into the iPhone vs. Pre debate, but this is definitely something I can see myself switching to. I am stuck with Treos because my &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://reviews.cnet.com/smartphones/palm-treo-600-sprint/4505-6452_7-30520851.html"&gt;Treo 600&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; is a die-hard phone, and has survived almost 6 years of very heavy usage, including falling on the hard floor a bunch of times. It still runs great, holds the battery charge and has maintained the touch screen without many scratches or bumps. Secondly, Sprint. I love their data plan, even though a majority of users complain about their voice service. I am not much of a talker and rely on voicemails for better communication myself. Treo 600 is a great internet device, unforunately its too ancient for HTML browsers like &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.opera.com/mini/"&gt;Opera Mini 4&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; and not too many portals these days are into WAP. Thankfully iGoogle works great, which helps me organize my stock watchlist, emails and news on the Treo.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;Anyway, I have seen a &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.engadget.com/2009/01/08/palm-pre-first-hands-on-with-live-updates/"&gt;few images and videos of Pre&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;, and I am sold. The rich featureset combined with Sprint's EVDO RevA will do wonders. Finally Sprint has a phone I want to buy (secretly I've been waiting for Android, but hey! Palm is all the better!). I cannot wait to check out the new WebOS, get familiar with the SDK (if there is one) and write a few apps on this baby. I've signed up for an availability notification, and a Sprint Store is about 4 blocks from where I live.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7gKQW4Z9a5A/SWklPRQmjjI/AAAAAAAAFIs/5tQGeSJ5jyM/s1600-h/palm.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 258px; height: 202px;" src="http://3.bp.blogspot.com/_7gKQW4Z9a5A/SWklPRQmjjI/AAAAAAAAFIs/5tQGeSJ5jyM/s400/palm.jpg" alt="" id="BLOGGER_PHOTO_ID_5289800181584662066" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;The only thing I did not like about this phone is its name . Treo sounds much cooler. They could have named it Treo Touch or something similar :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;I am very happy that Palm did come up with something new other than modifying the form factor of the original Treo 600 and releasing it every year. Hopefully we'll get more details on pricing and availability in the coming days. I also hope Sprint will not screw the customers by inventing a new, expensive data plan to get this Phone.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-5365633797107600770?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/5365633797107600770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=5365633797107600770' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/5365633797107600770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/5365633797107600770'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/01/palm-pre-cannot-wait.html' title='Palm Pre - Cannot wait!'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7gKQW4Z9a5A/SWklPRQmjjI/AAAAAAAAFIs/5tQGeSJ5jyM/s72-c/palm.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2709442954241641369</id><published>2009-01-01T01:26:00.001-08:00</published><updated>2009-06-06T05:09:17.164-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='antivirus 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='advancedantivirusscan.com'/><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='spyware'/><category scheme='http://www.blogger.com/atom/ns#' term='scareware'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Microsoft Security Warning on Ubuntu - Love these smartasses..</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;Got this while clicking around trying to find San Francisco New Years Fireworks Photos...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7gKQW4Z9a5A/SVyNTkyvkrI/AAAAAAAAE78/ZKmUjffB18U/s1600-h/smartass.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_7gKQW4Z9a5A/SVyNTkyvkrI/AAAAAAAAE78/ZKmUjffB18U/s400/smartass.png" alt="" id="BLOGGER_PHOTO_ID_5286255430059659954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Talk about a New Years Surprise - I am speechless. Love their creativity too - check out the names of the "dangerous spyware" that their sophisticated system detected on my box. I really feel for people who fall for this.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Here is the link that got me to this page - I searched for blogs with the search text "sf fireworks 2009" within the last 12 hours. Note that the link shows up on the 1st page itself.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gKQW4Z9a5A/SVyWiy68OhI/AAAAAAAAE8E/9pPjDXidPCQ/s1600-h/blog_search_result.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 220px;" src="http://2.bp.blogspot.com/_7gKQW4Z9a5A/SVyWiy68OhI/AAAAAAAAE8E/9pPjDXidPCQ/s400/blog_search_result.jpg" alt="" id="BLOGGER_PHOTO_ID_5286265587154827794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Oh, BTW, Happy New Year 2009 everyone!&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2709442954241641369?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2709442954241641369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2709442954241641369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2709442954241641369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2709442954241641369'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2009/01/microsoft-security-warning-on-ubuntu.html' title='Microsoft Security Warning on Ubuntu - Love these smartasses..'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7gKQW4Z9a5A/SVyNTkyvkrI/AAAAAAAAE78/ZKmUjffB18U/s72-c/smartass.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-646149240402708024</id><published>2008-12-19T17:57:00.000-08:00</published><updated>2008-12-19T18:09:08.322-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='easter egg'/><category scheme='http://www.blogger.com/atom/ns#' term='vlc'/><category scheme='http://www.blogger.com/atom/ns#' term='hat'/><category scheme='http://www.blogger.com/atom/ns#' term='christmas'/><category scheme='http://www.blogger.com/atom/ns#' term='holidays'/><title type='text'>VLC celebrates Christmas</title><content type='html'>Last night around 1:00 AM, I was surprised to see a different VLC icon in the dock bar. I was happy to take a screenshot to post it here, and will see how long before they push the next update to turn the icon back to normal ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gKQW4Z9a5A/SUxSIzZvw9I/AAAAAAAAEyU/Ms3TtFRvBF8/s1600-h/vlc_xmas.png"&gt;&lt;img style="cursor: pointer; width: 390px; height: 400px;" src="http://1.bp.blogspot.com/_7gKQW4Z9a5A/SUxSIzZvw9I/AAAAAAAAEyU/Ms3TtFRvBF8/s400/vlc_xmas.png" alt="" id="BLOGGER_PHOTO_ID_5281686774189376466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Merry Christmas and Happy Holidays everyone!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-646149240402708024?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/646149240402708024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=646149240402708024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/646149240402708024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/646149240402708024'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/12/merry-christmas-from-vlc.html' title='VLC celebrates Christmas'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gKQW4Z9a5A/SUxSIzZvw9I/AAAAAAAAEyU/Ms3TtFRvBF8/s72-c/vlc_xmas.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-5740079455815362523</id><published>2008-12-18T19:18:00.000-08:00</published><updated>2008-12-18T19:37:55.113-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='timestamp'/><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Digital Photos with no timestamp</title><content type='html'>I recently bought a &lt;a href="http://www.amazon.com/Canon-HF100-Definition-Camcorder-Stabilized/dp/B00114162K"&gt;HD Camcorder&lt;/a&gt; which works great - however, the digital still images do not have a time-stamp on them. I struggled through the thick manual but could not find a way to stamp the date time on the images. I knew that the information has to be there (as the camera was able to display the date + time in preview mode) - but if I could just stamp it. So there you have it - I've set the stage for the little nugget I am working on with &lt;span class="body"&gt; &lt;a href="http://drewnoakes.com/code/exif/"&gt;Drew Noakes' raw extraction library.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The library provided me the core of this effort - getting the timestamp from the EXIF header. Rest was done with Java's &lt;a href="http://java.sun.com/javase/6/docs/api/javax/imageio/package-summary.html"&gt;ImageIO&lt;/a&gt; API.&lt;br /&gt;&lt;br /&gt;I hope to have the code complete and pushed to &lt;a href="http://code.google.com/"&gt;code.google.com&lt;/a&gt; as an open source artifact real soon. So far the testing has been great - I am mostly bulletproofing the configuration and making it more flexible as we speak. Stay tuned!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-5740079455815362523?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/5740079455815362523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=5740079455815362523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/5740079455815362523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/5740079455815362523'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/12/digital-photos-with-no-timestamp.html' title='Digital Photos with no timestamp'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2161427452113330504</id><published>2008-12-09T18:05:00.000-08:00</published><updated>2008-12-09T21:59:32.246-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='UDDI'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='jUDDI'/><title type='text'>Setting up jUDDI with Tomcat and MySQL</title><content type='html'>&lt;span style="font-size:85%;"&gt;Thought of writing this post to help folks who are interested in setting up jUDDI with Tomcat and MySQL without jumping a lot of hoops and investing hours googling around like I did. There are a couple of posts here and there like:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.devx.com/Java/Article/21390/0/"&gt;Creating Your Own Private UDDI Registry&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://wiki.apache.org/ws/jUDDI_HOW-TOs"&gt;jUDDI HOWTO&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;I must say the links above give an excellent walkthrough, but unfortunately the release version of jUDDI does not quite fit with those instructions. Interestingly, a Google search with&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=installing+juddi&amp;amp;btnG=Google+Search&amp;amp;aq=f&amp;amp;oq="&gt; &lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=installing+juddi&amp;amp;btnG=Google+Search&amp;amp;aq=f&amp;amp;oq="&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;installing juddi&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; gives the top results where users are complaining about installation problems.&lt;br /&gt;NOTE: This will work with jUDDI Release Candidate #5 for Version 2.0.(previously version 0.9) only. I have not tried any other release, and I seriously doubt that this will work on any other release either.&lt;br /&gt;Here is what we'd need - I am putting in version numbers as well.&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.16/bin/"&gt;Apache Tomcat 6.0.16 &lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://ws.apache.org/juddi/releases.html"&gt;Apache jUDDI 2.0rc5 &lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://dev.mysql.com/downloads/mysql/5.0.html"&gt;MySQL 5.0&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:85%;"&gt;You'd also need JDK 1.6u10, however I'd think 1.5 should work just as fine.&lt;br /&gt;First step would be to set up Tomcat, verify it is up and running. Once verified, shut it down.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:~/apache-tomcat-6.0.16/bin$ ./catalina.sh run&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Using CATALINA_BASE:   /home/mpandit/apache-tomcat-6.0.16&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Using CATALINA_HOME:   /home/mpandit/apache-tomcat-6.0.16&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Using CATALINA_TMPDIR: /home/mpandit/apache-tomcat-6.0.16/temp&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Using JRE_HOME:       /usr/lib/jvm/java-6-sun&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;..&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;..&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;INFO: Server startup in 10498 ms&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Hit ^C to kill the server. This verifies that Tomcat is all set.&lt;br /&gt;I also assume that you've MySQL installed. We will need to create a user as well as an empty schema for jUDDI.&lt;br /&gt;Log in to MySQL as root.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:~$ mysql -u root -p&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Create the juddi schema&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mysql&gt; create database juddi;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Query OK, 1 row affected (0.01 sec)&lt;/span&gt;&lt;br /&gt;We'll use scripts packaged with jUDDI to populate this schema.&lt;br /&gt;Next, we create the database user for this schema.&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;mysql&gt; GRANT ALL PRIVILEGES ON juddi.* TO 'juddi'@'localhost' IDENTIFIED BY 'juddi' WITH GRANT OPTION;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style=";font-family:courier new;font-size:85%;"  &gt;Query OK, 0 rows affected (0.00 sec)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Verify that we're able to log in with the new user. Exit from MySQL client, and re-login as juddi.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:~$ mysql -u juddi -p&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Enter password: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Welcome to the MySQL monitor.  Commands end with ; or \g.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Your MySQL connection id is 46&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Server version: 5.0.67-0ubuntu6 (Ubuntu)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Type 'help;' or '\h' for help. Type '\c' to clear the buffer.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mysql&gt; use juddi;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Database changed&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mysql&gt; show tables;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Empty set (0.00 sec)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mysql&gt; &lt;/span&gt;&lt;br /&gt;Now we've done the groundwork, so its time to download jUDDI.&lt;br /&gt;Download juddi-2.0rc5.jar and juddi-web-2.0rc5.war files from the jUDDI download site. Explode the .jar on a folder on your machine.&lt;br /&gt;Copy the .war to $TOMCAT_HOME/webapps folder. Start Tomcat, making sure there are no errors.&lt;br /&gt;This should deploy the jUDDI registry webapp after exploding the .war in the webapps folder.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:~/apache-tomcat-6.0.16/webapps$ ls&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;docs      host-manager      juddi-web-2.0rc5.war  ROOT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;examples  juddi-web-2.0rc5  manager&lt;/span&gt;&lt;br /&gt;Stop Tomcat. Remove the .war while keeping the exploded folder intact.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:~/apache-tomcat-6.0.16/webapps$ rm -rf juddi-web-2.0rc5.war &lt;/span&gt;&lt;br /&gt;Next, if you hate long folder names as much as I do, we'll create a symlink.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:~/apache-tomcat-6.0.16/webapps$ ln -s juddi-web-2.0rc5/ juddi&lt;/span&gt;&lt;br /&gt;Start Tomcat. We'll check the happyjuddi page now.&lt;br /&gt;Point the browser to http://localhost:8080/juddi and click the 'Validate jUDDI' link. This will bring us to why I wrote this post - the only red section will be the datasource configuration.&lt;br /&gt;&lt;/span&gt;&lt;h4&gt;jUDDI DataSource Validation&lt;/h4&gt; &lt;pre&gt;&lt;span style="color:green;"&gt;+ Got a JNDI Context!&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;+ Got a JDBC DataSource (dsname=java:comp/env/jdbc/juddiDB)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;- DB connection was not acquired. (Cannot create JDBC driver of&lt;br /&gt;class '' for connect URL 'null')&lt;/span&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;- SELECT COUNT(*) FROM PUBLISHER failed (null)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-family:courier new;"&gt;&lt;context path="juddi" docbase="juddi" debug="5" reloadable="true" crosscontext="true"&gt;&lt;/context&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;This means jUDDI has no clue on how to talk to the MySQL database we just set up. Let us fix that.&lt;br /&gt;Stop Tomcat. Download&lt;a href="http://dev.mysql.com/downloads/connector/j/5.1.html"&gt; MySQL Connector/J 5.1 JDBC driver&lt;/a&gt;, and explode the archive in a temp folder. Copy  mysql-connector-java-5.1.7-bin.jar from the extracted folder to $TOMCAT_HOME/lib.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:/tmp/mysql-connector-java-5.1.7$ cp mysql-connector-java-5.1.7-bin.jar /home/mpandit/apache-tomcat-6.0.16/lib/&lt;/span&gt;&lt;br /&gt;Back to Tomcat. We'd create a context.xml and configure datasource for juddi context. Change directory to $TOMCAT_HOME/webapps/juddi/META-INF folder, and create a context.xml file&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:~/apache-tomcat-6.0.16/webapps/juddi/META-INF$ vi context.xml&lt;/span&gt;&lt;br /&gt;Paste this and change accordingly (if you are using a different database/user/password..)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;context path="juddi" docbase="juddi" debug="5" reloadable="true" crosscontext="true"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;resource name="jdbc/juddiDB" auth="Container" type="javax.sql.DataSource" username="juddi" password="juddi" driverclassname="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/juddi?autoReconnect=true" validationquery="select count(*) from PUBLISHER"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/resource&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/context&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Save and exit. (Re)start Tomcat, and revisit the happyjuddi page at http://localhost:8080/juddi/happyjuddi.jsp. Now you should notice a different error.&lt;br /&gt;&lt;/span&gt;&lt;h4&gt;jUDDI DataSource Validation&lt;/h4&gt; &lt;pre&gt;&lt;span style="color:green;"&gt;+ Got a JNDI Context!&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;+ Got a JDBC DataSource (dsname=java:comp/env/jdbc/juddiDB)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;- DB connection was not acquired. (Cannot create PoolableConnectionFactory&lt;br /&gt;(Table 'juddi.PUBLISHER' doesn't exist))&lt;/span&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;- SELECT COUNT(*) FROM PUBLISHER failed (null)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;   &lt;span style="font-size:85%;"&gt;Great! We need to populate the schema. This is where the jUDDI jar file will come into picture. I hope you followed the instructions and exploded it somewhere on your disk.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:/tmp/juddi-jar$ ls&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;juddi-2.0rc5.jar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mpandit@mubuntu-laptop:/tmp/juddi-jar$ jar xvf juddi-2.0rc5.jar &lt;/span&gt;&lt;br /&gt;Notice the juddi-sql folder. We're almost done - but we need to find/replace ${prefix} from 2 SQL files. Locate insert_publishers.sql file, and remove the ${prefix} from the file. Also update the information like email address, name.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INSERT INTO PUBLISHER (PUBLISHER_ID,PUBLISHER_NAME,EMAIL_ADDRESS,IS_ENABLED,&lt;br /&gt;IS_ADMIN, MAX_BUSINESSES, MAX_SERVICES_PER_BUSINESS,MAX_BINDINGS_PER_SERVICE,MAX_TMODELS)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;VALUES ('juddi','Manish Pandit','my_email_address','true','true',25,20,10,100);&lt;/span&gt;&lt;br /&gt;Next, locate mysql folder, and edit create_database.sql to remove ${prefix}. I had 155 instances of it.&lt;br /&gt;&lt;br /&gt;Thats it! Now we run these SQLs in MySQL. Log in as juddi user and change database to juddi.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mysql&gt; use juddi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Database changed&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mysql&gt; source /tmp/juddi-jar/juddi-sql/mysql/create_database.sql&lt;br /&gt;..&lt;br /&gt;mysql&gt; source /tmp/juddi-jar/juddi-sql/insert_publishers.sql&lt;br /&gt;Query OK, 1 row affected (0.00 sec)&lt;br /&gt;&lt;/span&gt;This completes the installation. Refresh the happyjuddi page - you should see no errors.&lt;br /&gt;&lt;/span&gt;&lt;h4&gt;jUDDI DataSource Validation&lt;/h4&gt; &lt;pre&gt;&lt;span style="color:green;"&gt;+ Got a JNDI Context!&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;+ Got a JDBC DataSource (dsname=java:comp/env/jdbc/juddiDB)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;+ Got a JDBC Connection!&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;+ SELECT COUNT(*) FROM PUBLISHER = 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;So, the registry is up and running. Use any UDDI registry browser (login as juddi/juddi). Open up the web.xml for the publish, discovery and inquiry URLs.&lt;br /&gt;Do comment on this post if you run into any issues, or have any suggestions. Hope this helps!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2161427452113330504?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2161427452113330504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2161427452113330504' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2161427452113330504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2161427452113330504'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/12/setting-up-juddi-with-tomcat-and-mysql.html' title='Setting up jUDDI with Tomcat and MySQL'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-708624502827370079</id><published>2008-12-08T21:12:00.000-08:00</published><updated>2008-12-09T19:26:24.811-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ffmpeg'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='flv'/><title type='text'>Create MP3s out of flash videos with Firefox and ffmpeg</title><content type='html'>Disclaimer : Please be aware of the copyright rules as with any media. For this demo, I'd go ahead and use &lt;a href="http://creativecommons.org/"&gt;Creative Commons&lt;/a&gt; licensed flash movie on Youtube..but the same is true for videos on AOL, etc.&lt;br /&gt;&lt;br /&gt;Here is what you'd need:&lt;br /&gt;&lt;br /&gt;1. Firefox (I got 3.0.4)&lt;br /&gt;&lt;span style="font-weight: bold; font-family: courier new;font-size:85%;" &gt;mpandit@mubuntu-laptop:~$ firefox -v&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;Mozilla Firefox 3.0.4, Copyright (c) 1998 - 2008 mozilla.org&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;2. Most likely a *nix based system&lt;br /&gt;&lt;span style="font-weight: bold; font-family: courier new;font-size:85%;" &gt;mpandit@mubuntu-laptop:~$ uname -a&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;Linux mubuntu-laptop 2.6.27-9-generic #1 SMP Thu Nov 20 21:57:00 UTC 2008 i686 GNU/Linux&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;3. &lt;a href="http://ffmpeg.mplayerhq.hu/"&gt;ffmpeg&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: courier new;font-size:85%;" &gt;mpandit@mubuntu-laptop:~$ ffmpeg -version&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;FFmpeg version r11872+debian_3:0.svn20080206-12ubuntu3, Copyright (c) 2000-2008 Fabrice Bellard, et al.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  configuration: --enable-gpl --enable-pp --enable-swscaler --enable-x11grab --prefix=/usr --enable-libgsm --enable-libtheora --enable-libvorbis --enable-pthreads --disable-strip --enable-libfaad --enable-libfaadbin --enable-liba52 --enable-liba52bin --enable-libdc1394 --disable-armv5te --disable-armv6 --disable-altivec --disable-vis --enable-shared --disable-static&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  libavutil version: 49.6.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  libavcodec version: 51.50.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  libavformat version: 52.7.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  libavdevice version: 52.0.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  built on Oct  3 2008 22:40:31, gcc: 4.3.2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;FFmpeg r11872+debian_3:0.svn20080206-12ubuntu3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;libavutil   3212800&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;libavcodec  3355136&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;libavformat 3409664&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;libavdevice 3407872&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Do not have ffmpeg? Follow the instructions on the site, or if you're on Ubuntu, use this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: courier new;font-size:85%;" &gt;mpandit@mubuntu-laptop:~$ sudo apt-get install ffmpeg&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Last but not the least, install &lt;a href="http://www.downloadhelper.net/"&gt;Download Helper&lt;/a&gt; extension for Firefox.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next, open up page with the video that you want to be converted to MP3.&lt;br /&gt;&lt;br /&gt;Let us use Creative Commons video for this example.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7gKQW4Z9a5A/ST4GSIGdt5I/AAAAAAAAEwo/XZJQIT7WGYA/s1600-h/creative_Commons_Video.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_7gKQW4Z9a5A/ST4GSIGdt5I/AAAAAAAAEwo/XZJQIT7WGYA/s400/creative_Commons_Video.png" alt="" id="BLOGGER_PHOTO_ID_5277662721806808978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cool. Notice the rotating balls on the DownloadHelper Icon. Next to it is a little arrow, click that. From the list of videos, click the one with 'Youtube' logo on it. This could vary on other sites, but you get the idea about how to locate the .flv that needs to be mp3-ised.&lt;br /&gt;&lt;br /&gt;Save the flv on a folder on your disk.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: courier new;font-size:85%;" &gt;mpandit@mubuntu-laptop:~/tempfolder$ ls&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;Creative_Commons_-_Get_Creative.flv&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use VLC Player to obtain audio information of the file. If not, you can stick to 22050 Hz sampling rate, and 16bits per sample.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To get info from VLC Player, open the video in VLC Player. Then click Tools -&gt; Media Information -&gt; Codec Details -&gt; Stream 1 (audio). Note down the Sample Rate and Bits per Sample.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next, we use the magic of ffmpeg to get ourselves a nice MP3!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: courier new;font-size:85%;" &gt;mpandit@mubuntu-laptop:~/tempfolder$ ffmpeg -i Creative_Commons_-_Get_Creative.flv -ar 22050 -ab 64 -f mp3 mymp3.mp3&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;FFmpeg version r11872+debian_3:0.svn20080206-12ubuntu3, Copyright (c) 2000-2008 Fabrice Bellard, et al.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  configuration: --enable-gpl --enable-pp --enable-swscaler --enable-x11grab --prefix=/usr --enable-libgsm --enable-libtheora --enable-libvorbis --enable-pthreads --disable-strip --enable-libfaad --enable-libfaadbin --enable-liba52 --enable-liba52bin --enable-libdc1394 --disable-armv5te --disable-armv6 --disable-altivec --disable-vis --enable-shared --disable-static&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  libavutil version: 49.6.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  libavcodec version: 51.50.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  libavformat version: 52.7.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  libavdevice version: 52.0.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  built on Oct  3 2008 22:40:31, gcc: 4.3.2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -&gt; 12.00 (12/1)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Input #0, flv, from 'Creative_Commons_-_Get_Creative.flv':&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  Duration: 00:06:36.9, start: 0.000000, bitrate: 64 kb/s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Stream #0.0: Video: flv, yuv420p, 320x240 [PAR 0:1 DAR 0:1], 12.00 tb(r)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Stream #0.1: Audio: mp3, 22050 Hz, mono, 64 kb/s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Output #0, mp3, to 'mymp3.mp3':&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Stream #0.0: Audio: libmp3lame, 22050 Hz, mono, 0 kb/s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Stream mapping:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  Stream #0.1 -&gt; #0.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Press [q] to stop encoding&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;size=    1550kB time=396.9 bitrate=  32.0kbits/s    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;video:0kB audio:1550kB global headers:0kB muxing overhead 0.001953%&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;mpandit@mubuntu-laptop:~/tempfolder$ &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In other words, the command would be :&lt;br /&gt;&lt;br /&gt;ffmpeg -i {input file name} -ar {audio sample rate} -ab {bits per sample} -f {force format to mp3 in our case} {output file name}&lt;br /&gt;&lt;br /&gt;Have fun :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-708624502827370079?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/708624502827370079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=708624502827370079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/708624502827370079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/708624502827370079'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/12/create-mp3s-out-of-flash-videos-with.html' title='Create MP3s out of flash videos with Firefox and ffmpeg'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7gKQW4Z9a5A/ST4GSIGdt5I/AAAAAAAAEwo/XZJQIT7WGYA/s72-c/creative_Commons_Video.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-7989389309040435844</id><published>2008-11-17T19:33:00.000-08:00</published><updated>2008-12-09T21:50:20.451-08:00</updated><title type='text'>Windows Media Player Streams on Ubuntu..</title><content type='html'>I've always been a fan of &lt;a href="http://www.videolan.org/vlc/"&gt;VLC&lt;/a&gt; and &lt;a href="http://ffmpeg.mplayerhq.hu/"&gt;ffmpeg&lt;/a&gt;. Both of these have taken Open Source Software to the point where average, non-tech-savvy folks can see the power of Open Source and how it matches neck to neck with commercially (or bundled) media players without all the fluff.&lt;br /&gt;&lt;br /&gt;Earlier I had Firefox 2.0 on Ubuntu Hardy to use gstreamer to render Windows Media Player streams which used to freeze up the system, or did not play video. However, with Intrepid, I was able to get vlc plugin for Firefox and boy am I glad I did not use gstreamer. Now all I got is VLC Player to play almost anything and everything, and the in-browser VLC plugin to render non-flash streams.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gKQW4Z9a5A/SSI6Ulo2hkI/AAAAAAAAEUw/yELNDnuctb8/s1600-h/vlcplugin.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 125px;" src="http://1.bp.blogspot.com/_7gKQW4Z9a5A/SSI6Ulo2hkI/AAAAAAAAEUw/yELNDnuctb8/s200/vlcplugin.png" alt="" id="BLOGGER_PHOTO_ID_5269838639352153666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally I can watch live Indian News channels without having to resort to Windows, or see my system crash with gstreamer :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-7989389309040435844?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/7989389309040435844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=7989389309040435844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/7989389309040435844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/7989389309040435844'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/11/media-player-streams-on-ubuntu.html' title='Windows Media Player Streams on Ubuntu..'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gKQW4Z9a5A/SSI6Ulo2hkI/AAAAAAAAEUw/yELNDnuctb8/s72-c/vlcplugin.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-8455846366023167508</id><published>2008-11-15T09:51:00.000-08:00</published><updated>2008-11-15T10:04:02.738-08:00</updated><title type='text'>Frozen Eggs, Carrots, Milk and Tazo Chai..renter's delight</title><content type='html'>Anyone ever had these? My apartment complex replaced my old 20 year old HotPoint fridge with a new 20 year old Hotpoint fridge as the old one's compressor gave up. However, the new 20 year old fridge beats the one by far - its freezing anything and everything, regardless of the shelf. So this morning I woke up to frozen eggs (yes, all 18 of them), frozen baby carrots and get this - 2 gallons of milk and my favorite &lt;a href="http://www.starbucksstore.com/products/shprodde.asp?SKU=623300"&gt;Tazo Chai Syrup&lt;/a&gt;. The dial is at its low but the fridge is running full throttle. Thats a good start to my Saturday. &lt;br /&gt;&lt;br /&gt;Sometimes all this makes me feel I should throw in the towel, borrow a million or two and buy a 3 bedroom SFH in the bay area with a zero down interest only loan. At least I'd have a decent fridge :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-8455846366023167508?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/8455846366023167508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=8455846366023167508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8455846366023167508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8455846366023167508'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/11/frozen-eggs-carrots-milk-and-tazo.html' title='Frozen Eggs, Carrots, Milk and Tazo Chai..renter&apos;s delight'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-2736724490775355533</id><published>2008-11-04T18:54:00.000-08:00</published><updated>2008-11-04T19:04:29.004-08:00</updated><title type='text'>I voted..</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gKQW4Z9a5A/SREMPxa2-NI/AAAAAAAAEO4/S6fGBx6Ex6E/s1600-h/Printelect---I-Voted-Today.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://1.bp.blogspot.com/_7gKQW4Z9a5A/SREMPxa2-NI/AAAAAAAAEO4/S6fGBx6Ex6E/s200/Printelect---I-Voted-Today.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5265002904476383442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just got back after voting. This is my first time voting, as I became a Naturalized Citizen in July of this year. Went to the polling station around 6 PM (Polls to close around 8 PM) - not a lot of rush. I waited in line for about 5 minutes and was done with the ballot in another 10 minutes. I've been hearing about long lines all day but lucky for me voting afterhours worked out :)&lt;br /&gt;&lt;br /&gt;Its going to be a CNN all-nighter tonight.&lt;br /&gt;&lt;br /&gt;God bless the USA!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-2736724490775355533?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/2736724490775355533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=2736724490775355533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2736724490775355533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/2736724490775355533'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/11/i-voted.html' title='I voted..'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gKQW4Z9a5A/SREMPxa2-NI/AAAAAAAAEO4/S6fGBx6Ex6E/s72-c/Printelect---I-Voted-Today.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-6009347273960322006</id><published>2008-11-03T19:42:00.001-08:00</published><updated>2008-11-03T19:48:12.733-08:00</updated><title type='text'>Got Flash Audio Going!</title><content type='html'>Finally I installed Mac4Lin as well as figured out the Flash Audio Problem. I had to install the nonfree-extrasound package. Once done, I was able to get the sound going on the upgrade.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7gKQW4Z9a5A/SQ_Fpx04wyI/AAAAAAAAEOs/TZw6kVl3iIo/s1600-h/flash_ess.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_7gKQW4Z9a5A/SQ_Fpx04wyI/AAAAAAAAEOs/TZw6kVl3iIo/s320/flash_ess.png" alt="" id="BLOGGER_PHOTO_ID_5264643810959868706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Other than that, everything seems excellent, and I could not be happier after this upgrade.&lt;br /&gt;&lt;br /&gt;The 64b installation is doing wonders too - the only thing that does not work on there is Citrix ICA Client. Since there is no Flash available (AFAIK) for 64b from Adobe, I got the flash working on that box through gnash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-6009347273960322006?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/6009347273960322006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=6009347273960322006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/6009347273960322006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/6009347273960322006'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/11/got-audio-going.html' title='Got Flash Audio Going!'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7gKQW4Z9a5A/SQ_Fpx04wyI/AAAAAAAAEOs/TZw6kVl3iIo/s72-c/flash_ess.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-4524917656387058732</id><published>2008-11-01T03:14:00.001-07:00</published><updated>2008-12-09T19:27:07.906-08:00</updated><title type='text'>Missing VLC on Ubuntu 8.10!</title><content type='html'>Has anyone else noticed that the files that were associated with VLC (.avi, .wmv, .flv....) no longer open when you double click them after the 8.10 upgrade? When you right click to open with, do you see 2 VLCs in there, and selecting the 1st one does not do a thing, while the second one opens up VLC? Here is what I found out.&lt;br /&gt;&lt;br /&gt;Apparently the upgrade gets rid of wxvlc which was being used to open those files. However, vlc exists, which happens to be the second 'VLC Player' you see in the context menu.&lt;br /&gt;&lt;br /&gt;Solution? Simple. Symlinks.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;mpandit@mubuntu-laptop:/usr/bin$ which wxvlc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;mpandit@mubuntu-laptop:/usr/bin$ which vlc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/usr/bin/vlc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;mpandit@mubuntu-laptop:/usr/bin$ sudo ln -s /usr/bin/vlc /usr/bin/wxvlc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;mpandit@mubuntu-laptop:/usr/bin$ which wxvlc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/usr/bin/wxvlc&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-4524917656387058732?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/4524917656387058732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=4524917656387058732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4524917656387058732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4524917656387058732'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/11/missing-vlc-on-ubuntu-810.html' title='Missing VLC on Ubuntu 8.10!'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-5309204606066035423</id><published>2008-11-01T02:34:00.000-07:00</published><updated>2008-11-01T02:59:03.738-07:00</updated><title type='text'>Ubuntu Upgrade to 8.10 Intrepid</title><content type='html'>Today I had a chance to install &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Ubuntu&lt;/span&gt; 8.10 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;AMD&lt;/span&gt;64 fresh install, as well as upgrading my existing i386/32b Hardy Heron. I did not play around much with the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;AMD&lt;/span&gt;64 box (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Holloween&lt;/span&gt; Friday!), but here I am at 2:40 AM trying to figure out what exactly was upgraded from the 8.04 I had on my Dell E1505. After downloading packages for about 3 hours, the setup took an extra 20 minutes. The installation was smooth, and was able to handle the wireless-connection fade for a couple minutes too. Here is what I found different when the laptop booted off with the 8.10 release.&lt;br /&gt;&lt;br /&gt;1. User Switcher Applet is much more intuitive, and has the user's status (Online, Away, Busy...) tied to the Pidgin messenger.&lt;br /&gt;&lt;br /&gt;2. There is a "Guest" session, which, if switched to, will lock the existing user's session (not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;logout&lt;/span&gt;), while the other user can use the box as guest. I really liked this feature. The Guest session is in the User Switcher Applet.&lt;br /&gt;&lt;br /&gt;3. The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;wifi&lt;/span&gt; status light on the laptop started to blink. It used to do so with 7.10 but with 8.04 the light just went off. Glad to see it come back!&lt;br /&gt;&lt;br /&gt;4.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;USB&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Startup&lt;/span&gt; Disk creation, pretty much like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;UNetbootin&lt;/span&gt; (http://unetbootin.sourceforge.net/) built right into the distribution.&lt;br /&gt;&lt;br /&gt;Now some oddballs:&lt;br /&gt;&lt;br /&gt;1. The shutdown/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;logout&lt;/span&gt;/lock screen/hibernate, etc. dialog that used to show up on clicking the shutdown button is gone. Instead I get a dialog to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;logout&lt;/span&gt; or switch user. I figured that there is a shutdown button available to add to the panel, which brings back the old dialog (and its beautiful too!).&lt;br /&gt;&lt;br /&gt;2. Here is a bummer - hibernate *still* does not work&lt;br /&gt;&lt;br /&gt;3. Another bummer - Audio on Flash does not work. I was able to open media files with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Rythmbox&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;VLC&lt;/span&gt; - the audio was loud and clear but no sound on any flash movie. I plan on spending rest of the night/weekend to figure this one out. I've given up on hibernate anyway.&lt;br /&gt;&lt;br /&gt;4. Cannot change the location name in the Time Applet. I can select &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Livermore&lt;/span&gt;, CA as the closest location to me (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Pleasanton&lt;/span&gt;, CA). In 8.04 I was able to edit the location name to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Pleasanton&lt;/span&gt; keeping the same coordinates. I guess I can figure it out in a while.&lt;br /&gt;&lt;br /&gt;Overall, things seem to be pretty nice - not much change in the user experience, but I am yet to explore the new goodies that 8.10 introduces. Wish me luck with the Flash Audio issue - it could be a showstopper, specially since I convinced my wife to use &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Ubuntu&lt;/span&gt; on her machine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-5309204606066035423?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/5309204606066035423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=5309204606066035423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/5309204606066035423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/5309204606066035423'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/11/ubuntu-upgrade-to-810-intrepid.html' title='Ubuntu Upgrade to 8.10 Intrepid'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-8676779110073806876</id><published>2008-04-11T17:46:00.001-07:00</published><updated>2008-04-12T17:55:25.459-07:00</updated><title type='text'>Ok, so now 'puters are calling me!?!</title><content type='html'>Five calls in a few days, and I decided to blog and moan about it. Apparently, the telemarketers are losing out to techonology. I've been getting calls that have a sales pitch followed by typically 4 options:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To repeat this message, press 1&lt;/li&gt;&lt;li&gt;To get more information about this service from one of our reps, press 2&lt;/li&gt;&lt;li&gt;To receive this call at another time or number, press 3&lt;/li&gt;&lt;li&gt;To remove your number from our calling list, press 4&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I think this could catch on pretty well, as I could think of quite a few advantages over traditional call from telemarketers:&lt;br /&gt;&lt;br /&gt;1. One has to listen through the whole pitch (anywhere from 1 to 5 minutes) to get to the options, which could be randomized.&lt;br /&gt;2. Software does not need smoke, lunch, dinner or bio-breaks.&lt;br /&gt;3. Customers, who are normally already pissed when they get such calls, cannot yell back. They can however hang up, but the software can call them right back.&lt;br /&gt;4. ROI is pretty good compared to an actual human being - like spamming 5 million customers and getting for 5 to respond. It is not-humanely-possible to call 5 million customers. The software can dial out to multiple customers in parallel, being more efficient for a 5-in-a-5-million target.&lt;br /&gt;5. The business has to invest one-time in this service and there are no recurring costs to deal with, unlike salaries and benefits.&lt;br /&gt;6. Software can telemarket different products across different segments and timezones. No longer a human being will need to be trained to make calls for long distance services, and for magazine subscriptions separately. A perfect mix and match opportunity.&lt;br /&gt;7. It could be a hosted solution, where the businesses will not even need  to buy outbound phone lines. They can provide the pitch as an audio, an inbound number to transfer for more info (from a real human being) and the target leads. The human will be happy to speak to someone who is really bought into the pitch instead of convincing them upfront.&lt;br /&gt;8. The pitch will not have any accent, hence the folks wont get ticked off, even though the product being sold or supported is made in China.&lt;br /&gt;&lt;br /&gt;I can think of a few more, but I'd end here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-8676779110073806876?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/8676779110073806876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=8676779110073806876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8676779110073806876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8676779110073806876'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/04/ok-so-now-puters-are-calling-me.html' title='Ok, so now &apos;puters are calling me!?!'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-4333723825525092477</id><published>2008-04-09T20:40:00.000-07:00</published><updated>2008-04-10T17:46:04.597-07:00</updated><title type='text'>Determining HTTP Server Info from HTTP Response Headers</title><content type='html'>Just for the heck of it, I tried sending HTTP HEAD requests to a bunch of hosts to check out the variances among different type of servers, and to see what additional information I can get (like PHP version) within the Server header. I kind of think that the Server header can speak a lot about the web server, just like 'User Agent' can for a client.&lt;br /&gt;&lt;br /&gt;Here are some samples ...&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Resin/3.1.5&lt;/li&gt;&lt;li&gt;Apache&lt;/li&gt;&lt;li&gt;Apache/2.2.8 (Unix)&lt;/li&gt;&lt;li&gt;Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.1 mod_jk/1.2.14 PHP/5.1.2 mod_ssl/2.0.55 OpenSSL/0.9.8a&lt;/li&gt;&lt;li&gt;lighttpd/1.4.19&lt;/li&gt;&lt;li&gt;Microsoft-IIS/6.0&lt;/li&gt;&lt;li&gt;BIG-IP&lt;/li&gt;&lt;li&gt;Apache/2.0.54 (Fedora)&lt;/li&gt;&lt;li&gt;Apache-Coyote/1.1&lt;/li&gt;&lt;li&gt;IBM_HTTP_Server/2.0.47.1-PK44274 Apache/2.0.47 (Unix) DAV/2&lt;/li&gt;&lt;li&gt;Sun-Java-System-Web-Server/6.1&lt;/li&gt;&lt;li&gt;Netscape-Enterprise/4.0&lt;/li&gt;&lt;li&gt;Apache/2.0.52 (CentOS)&lt;/li&gt;&lt;li&gt;Apache/2.0.55 (Unix) PHP/4.3.10&lt;/li&gt;&lt;li&gt;Netscape-Enterprise/6.0&lt;/li&gt;&lt;li&gt; Sun-ONE-Web-Server/6.1&lt;/li&gt;&lt;li&gt;AkamaiGHost&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There is also the X-Powered-By header which can provide additional info about the components, like:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Servlet 2.4; JBoss-4.0.4.GA (build: CVSTag=JBoss_4_0_4_GA date=200605151000)/Tomcat-5.5&lt;/li&gt;&lt;li&gt;Servlet/2.4,JSP/2.0&lt;/li&gt;&lt;li&gt;ASP.NET&lt;/li&gt;&lt;li&gt;PHP/5.1.2&lt;/li&gt;&lt;li&gt;PHP/4.3.9&lt;/li&gt;&lt;/ul&gt;Pretty interesting stuff I'd think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-4333723825525092477?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/4333723825525092477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=4333723825525092477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4333723825525092477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/4333723825525092477'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/04/determining-http-server-info-from-http.html' title='Determining HTTP Server Info from HTTP Response Headers'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4084576968308778021.post-8955115695016641658</id><published>2008-03-12T03:41:00.000-07:00</published><updated>2008-04-11T18:17:24.626-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><title type='text'>Hello, world!</title><content type='html'>My family and friends say that I am quite funny and insightful at the same time, and I should start a blog. So here I am - more pearls of contrarian wisdom on day-to-day life, technology and anything in between coming soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4084576968308778021-8955115695016641658?l=contrarianwisdom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://contrarianwisdom.blogspot.com/feeds/8955115695016641658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4084576968308778021&amp;postID=8955115695016641658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8955115695016641658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4084576968308778021/posts/default/8955115695016641658'/><link rel='alternate' type='text/html' href='http://contrarianwisdom.blogspot.com/2008/03/hello-world.html' title='Hello, world!'/><author><name>Manish</name><uri>http://www.blogger.com/profile/12258395027796360950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-ywHc4_owIl0/Toaik8TZ43I/AAAAAAAAQLA/pm9C3qigdtI/s220/6199399617_6a0df3ea12_b.jpg'/></author><thr:total>0</thr:total></entry></feed>
