<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEIDSHc8fSp7ImA9WhdREEQ.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877</id><updated>2011-07-31T00:16:19.975-07:00</updated><category term="linux" /><category term="formal verification" /><category term="distributed" /><category term="scale" /><category term="java" /><category term="ec2" /><category term="FUD" /><category term="startup" /><category term="community" /><category term="web services" /><category term="font" /><category term="concurrency" /><category term="complexity" /><category term="data center" /><category term="adieu" /><category term="infrastructure" /><category term="desktop" /><category term="amazon" /><category term="systems" /><category term="parallelism" /><category term="sun" /><category term="testing" /><category term="ubuntu" /><category term="closures" /><category term="usability" /><category term="adoption" /><title>All things bright and distributed</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://infinitescale.blogspot.com/" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/AllThingsBrightAndDistributed" /><feedburner:info uri="allthingsbrightanddistributed" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Ck4NQnY8eCp7ImA9WxFRGEQ.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-6795623547487330901</id><published>2010-05-03T05:47:00.000-07:00</published><updated>2010-05-03T05:49:53.870-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-03T05:49:53.870-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="font" /><category scheme="http://www.blogger.com/atom/ns#" term="desktop" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Yay for Ubuntu 10.04 font rendering!</title><content type="html">I wanted to say this for the record : I don't know what changed in Lucid Lynx, but the fonts are amazingly crisp. Simply awesome. It's a treat to the eyes. Kudos to the Ubuntu team. Well done folks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-6795623547487330901?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/84gxoK4fY2s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/6795623547487330901/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=6795623547487330901" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/6795623547487330901?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/6795623547487330901?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/84gxoK4fY2s/yay-for-ubuntu-1004-font-rendering.html" title="Yay for Ubuntu 10.04 font rendering!" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2010/05/yay-for-ubuntu-1004-font-rendering.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYEQHw-fyp7ImA9WxFSEEo.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-8414672147359673845</id><published>2010-04-12T03:51:00.000-07:00</published><updated>2010-04-12T04:01:41.257-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-12T04:01:41.257-07:00</app:edited><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="community" /><category scheme="http://www.blogger.com/atom/ns#" term="adieu" /><title>Good luck, jag</title><content type="html">The exodus of sun's engineering talent from Oracle continues as James Gosling (affectionately addressed as "jag" by the community) &lt;a href="http://nighthacks.com/roller/jag/entry/time_to_move_on"&gt;moves on&lt;/a&gt;.&lt;br /&gt;I sincerely hope that he continues to be actively involved &amp;amp; engaged with the Java community, and can now play the role of the independent benefactor of Java with no  affiliation to the primary steward of Java (Sun then, Oracle now).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-8414672147359673845?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/vDHbtFEMMtk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/8414672147359673845/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=8414672147359673845" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/8414672147359673845?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/8414672147359673845?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/vDHbtFEMMtk/good-luck-jag.html" title="Good luck, jag" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2010/04/good-luck-jag.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUHQHk7eSp7ImA9WxNUFkU.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-4946549430488843978</id><published>2009-11-08T05:30:00.000-08:00</published><updated>2009-11-08T05:50:31.701-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-08T05:50:31.701-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="formal verification" /><category scheme="http://www.blogger.com/atom/ns#" term="systems" /><category scheme="http://www.blogger.com/atom/ns#" term="complexity" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><title>Extensive functional testing  Vs Formal verification</title><content type="html">&lt;span style="color: rgb(0, 0, 0); font-family: times new roman;font-size:100%;" &gt;Found this on James Hamilton's &lt;a href="http://perspectives.mvdirona.com/2009/11/07/ConversationWithButlerLampsonAtSOSP2009.aspx"&gt;blog&lt;/a&gt; (quoting Butler Lampson at SOSP) :&lt;i style=""&gt;&lt;br /&gt;"Problem is that testing is expensive, so there is a trade-off between extensive testing and cost.  Essentially you can’t test everything.  This is part of the reason why the lowest levels of the system need to be simple enough to formally reason about their behavior."&lt;br /&gt;&lt;/i&gt;A similar thought had been running in my mind following repeated discovery of some "corner cases" in a recently released feature. The problem was that, in the absence of QA engineers (yes, can you believe it!), testing by by developers was never going to be sufficient.  In response, I had proposed:&lt;br /&gt;1) Listing system invariants. &lt;i style=""&gt;&lt;br /&gt;&lt;/i&gt;2) Formally proving that (based on the current implementation of various operations exposed by the interface), these constraints would not be violated.&lt;i style=""&gt; &lt;/i&gt;This would have helped us single out systemic issues much earlier and would not have necessitated hand-writing expensive integration for various scenarios. That way, the functional tests could be better utilized to test other scenarios (than verifying if system invariants  hold at all times).&lt;br /&gt;On a related note, there must be a way of specifying these invariants formally and have a utility generate test cases against a given API? Have you heard of any?&lt;br /&gt;&lt;br /&gt;&lt;i style=""&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-4946549430488843978?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/vRy3iD_rntI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/4946549430488843978/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=4946549430488843978" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/4946549430488843978?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/4946549430488843978?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/vRy3iD_rntI/extensive-functional-testing-vs-formal.html" title="Extensive functional testing  Vs Formal verification" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2009/11/extensive-functional-testing-vs-formal.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUCQ30yfyp7ImA9WxFSE0w.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-2620577067917055675</id><published>2009-08-03T05:08:00.000-07:00</published><updated>2010-04-15T00:24:22.397-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-15T00:24:22.397-07:00</app:edited><title>Review comments and turning off the brain</title><content type="html">I'd like   to say +1 to &lt;a href="http://37signals.com/svn/posts/1818-stop-following-directions-and-start-designing"&gt;this post&lt;/a&gt; on 37signals about the pitfalls of working in a zero-brains, "follow the review comments" mode while incorporating comments about your design or code. I have fallen into this trap myself and have often realized later that I could've come up with a much better fix or  revision of my design/code if I didn't just follow every comment of the reviewer to the T.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-2620577067917055675?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/JEwjKefwExs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/2620577067917055675/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=2620577067917055675" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/2620577067917055675?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/2620577067917055675?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/JEwjKefwExs/review-comments-and-turning-off-brain.html" title="Review comments and turning off the brain" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2009/08/review-comments-and-turning-off-brain.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAHQHg7fCp7ImA9WxFSE0w.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-7750666826698329910</id><published>2009-03-21T01:08:00.000-07:00</published><updated>2010-04-15T00:32:11.604-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-15T00:32:11.604-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="startup" /><category scheme="http://www.blogger.com/atom/ns#" term="data center" /><category scheme="http://www.blogger.com/atom/ns#" term="infrastructure" /><category scheme="http://www.blogger.com/atom/ns#" term="web services" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon" /><category scheme="http://www.blogger.com/atom/ns#" term="scale" /><category scheme="http://www.blogger.com/atom/ns#" term="ec2" /><title>Hybrid infrastructure with "the cloud" and a private data center</title><content type="html">Let's say you started up and you initially didn't have the time or resources to host and run your own infrastructure. So you launched your service on &lt;a href="http://aws.amazon.com/"&gt;AWS&lt;/a&gt; - the de-facto infrastructure-as-a-service provider. You got wildly successful,  are now flush with cash, and believe that you could realize some savings (and have greater control?) by running your own infrastructre. But you're also smart enough to realize that no matter how hard you try, you possibly cannot achieve the elasticity or the scale of EC2 and S3. More significantly, it makes little sense to procure and provision hardware for peaks like the one animoto experienced in April '08 (slide 17 in &lt;a href="http://omnisio.com/startupschool08/jeff-bezos"&gt;Jeff Bezos' presentation&lt;/a&gt;), and then have your CPU utilization hover at 2% for most of the year. So what do you do? No sweat : you still have your private infrastructure provisioned to deal with regular workloads, but configure your load balancer (fronting your web-facing servers) to offload to EC2 when there are unexpected peaks. Sounds too far-fetched? Well, that's precisely what &lt;a href="http://www.smartsheet.com/"&gt;SmartSheet&lt;/a&gt; and &lt;a href="http://www.picnik.com/"&gt;Picnik&lt;/a&gt; did - use private infrastructure for the base load, with everything beyond offloaded to AWS. Perfect.&lt;br /&gt;I found it a pleasant coincidence that this was &lt;a href="http://perspectives.mvdirona.com/2009/03/04/WTIAScalingIntoTheCloudWithAmazonWebServices.aspx"&gt;posted&lt;/a&gt; on James Hamilton's blog just weeks after I hit a eureka moment arriving at exactly the same hybrid model (see? &lt;a href="http://www.quotationspage.com/quote/22602.html"&gt;great minds think alike&lt;/a&gt; :-))  when thinking of how a present day startup might make the transition from running completely off the cloud to being run on its own infrastructure while being resilient to traffic spikes all along.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-7750666826698329910?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/GEZ94nJ048M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/7750666826698329910/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=7750666826698329910" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/7750666826698329910?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/7750666826698329910?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/GEZ94nJ048M/hybrid-infrastructure-with-cloud-and.html" title="Hybrid infrastructure with &quot;the cloud&quot; and a private data center" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2009/03/hybrid-infrastructure-with-cloud-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAHRn4-cCp7ImA9WxdUFEQ.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-5280923240059200462</id><published>2008-07-31T01:58:00.000-07:00</published><updated>2008-07-31T01:58:57.058-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-31T01:58:57.058-07:00</app:edited><title>Quote of the day: Engineering</title><content type="html">&lt;a href="http://mail.google.com/mail/?account_id=reachbach%40gmail.com#label/concurrency-interest/11b74bd6bf8b3ffb"&gt;&lt;/a&gt; "The structure of a system tends to mirror the structure of the group producing it"&lt;br /&gt;--Mel Conway - April, 1968 Datamation&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-5280923240059200462?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/63PMKLVhiEI" height="1" width="1"/&gt;</content><link rel="related" href="http://mail.google.com/mail/?account_id=reachbach%40gmail.com#label/concurrency-interest/11b74bd6bf8b3ffb" title="Quote of the day: Engineering" /><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/5280923240059200462/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=5280923240059200462" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/5280923240059200462?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/5280923240059200462?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/63PMKLVhiEI/quote-of-day-engineering.html" title="Quote of the day: Engineering" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2008/07/quote-of-day-engineering.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQAQHg8cSp7ImA9WxdUFEw.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-1044503743774806331</id><published>2008-07-30T02:32:00.000-07:00</published><updated>2008-07-30T02:32:21.679-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-30T02:32:21.679-07:00</app:edited><title>Quote of the day: Cryptic, "optimized" coding</title><content type="html">&lt;a href="http://groups.google.com/group/javaposse/browse_thread/thread/3083a208c68dce59"&gt;&lt;/a&gt;"It is easier to optimize correct code than to correct optimized code."&lt;br /&gt; --Bill Harlan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-1044503743774806331?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/JFaPQnq7VSQ" height="1" width="1"/&gt;</content><link rel="related" href="http://groups.google.com/group/javaposse/browse_thread/thread/3083a208c68dce59" title="Quote of the day: Cryptic, &quot;optimized&quot; coding" /><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/1044503743774806331/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=1044503743774806331" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/1044503743774806331?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/1044503743774806331?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/JFaPQnq7VSQ/quote-of-day-cryptic-optimized-coding.html" title="Quote of the day: Cryptic, &quot;optimized&quot; coding" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2008/07/quote-of-day-cryptic-optimized-coding.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4EQnw7eSp7ImA9WxdVGEw.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-3438779811756161947</id><published>2008-07-23T05:58:00.000-07:00</published><updated>2008-07-23T05:58:23.201-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-23T05:58:23.201-07:00</app:edited><title>Quote of the day: Design</title><content type="html">Found this quote on the &lt;a href="http://gridgain.blogspot.com/2008/04/java-executor-service-rocket-scientists.html"&gt;Gridgain blog&lt;/a&gt;:&lt;br /&gt;"A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away."&lt;br /&gt;-Antoine de Saint-Exupery -&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-3438779811756161947?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/3pL91Q2Q9Pw" height="1" width="1"/&gt;</content><link rel="related" href="http://gridgain.blogspot.com/2008/04/java-executor-service-rocket-scientists.html" title="Quote of the day: Design" /><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/3438779811756161947/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=3438779811756161947" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/3438779811756161947?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/3438779811756161947?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/3pL91Q2Q9Pw/quote-of-day-design.html" title="Quote of the day: Design" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2008/07/quote-of-day-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEHQH87eyp7ImA9WB9UGUw.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-1436592258198104694</id><published>2007-12-13T09:19:00.000-08:00</published><updated>2007-12-17T10:03:51.103-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-17T10:03:51.103-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="closures" /><title>BGGA closures: The end of many Java careers</title><content type="html">Before you begin, I'd encourage you to read Neal Gafter's latest &lt;a href="http://gafter.blogspot.com/2007/12/what-flavor-of-closures.html"&gt;rebuttal&lt;/a&gt; to Josh Bloch's &lt;a href="http://www.javac.info/bloch-closures-controversy.ppt"&gt;explanation&lt;/a&gt; of why BGGA can do &lt;a href="http://video.google.com/videoplay?docid=7272195780615824954&amp;amp;q=josh+bloch&amp;amp;total=13&amp;amp;start=0&amp;amp;num=10&amp;amp;so=0&amp;amp;type=search&amp;amp;plindex=1"&gt;more harm&lt;/a&gt; than good to Java. My two cents (as a Java developer) after going through both arguments:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;First, Neal Gafter states that Josh's examples were carefully chosen from "twisted" compiler test cases written for the BGGA closure implementation.  Why did the test cases have to be "twisted" beyond comprehension? Well, its perhaps because complicated features beget complicated test cases. While I agree that test cases are generally more heavyweight (primarily due to the boiler plate and to cover edge cases) compared to the feature being tested, you will rarely find that they are an order of magnitude complicated than the feature itself. You won't find unrealistic test cases either. You will only need gnarled test cases for convoluted, counter-intuitive "features". The fact that Josh didn't have to look very far to come up with a "hard" example says a lot about the BGGA proposal itself.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Let's look at &lt;a href="http://books.google.com/books?id=ZZOiqZQIbRMC&amp;amp;pg=PA5&amp;amp;lpg=PA5&amp;amp;dq=%22one+advantage+of+static+factory+methods+is+that+unlike+constructors+they+have+names%22&amp;amp;source=web&amp;amp;ots=UYT29ugF1Z&amp;amp;sig=suOFt2Jk_Urw3WTb5xfB5Ch8lQw#PPA5,M1"&gt;Item 1 of Chapter 2&lt;/a&gt;, Effective Java: Programming Language Guide. It says:&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;One advantage of static factory methods is that, unlike constructors, they have names. If the parameters to a constructor do not, in and of themselves, describe the object being&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;returned, a static factory with a well-chosen name can make a class easier to use and the resulting client code easier to read. For example, the constructor BigInteger(int, int,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Random), which returns a BigInteger that is probably prime, would have been better expressed as a static factory method named BigInteger.probablePrime&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;Let's also refer to &lt;a href="http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%_toc_%_sec_1.3"&gt;section 1.3&lt;/a&gt; of one of the fundamental text books on programming, Structure and Interpretation of Computer Programs. In the section preceding higher order procedures (not to be confused with functions), the authors say:&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;Our programs would be able to compute cubes, but our language would lack the ability to express the concept of cubing.  One of the things we should demand from a powerful programming language is the ability to build abstractions by assigning names to common patterns and then to work in terms of the abstractions directly&lt;/span&gt;"&lt;br /&gt;(Before you jump to the conclusion that this chapter favors the BGGA approach, let me remind you that it merely explains one programming paradigm and does not advocate introducing functions or procedures on a whim to a strongly typed, mature, Object Oriented language.)&lt;br /&gt;&lt;br /&gt;Finally, here are couple of quotes  from Martin Fowler's &lt;a href="http://martinfowler.com/bliki/CodeAsDocumentation.html"&gt;bliki&lt;/a&gt; -&lt;br /&gt;"...&lt;span style="font-style: italic;"&gt;this principle comes with an important consequence - that it's  important that programmers put in the effort to make sure that this  code is clear and readable. &lt;/span&gt;" and&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;...the first step to clear  code is to accept that code is documentation, and then put the  effort in to make it be clear. I think this comes down to what was  taught to most programmers when they began to program... We as a whole industry need to put much  more emphasis on valuing the clarity of code&lt;/span&gt;."&lt;br /&gt;&lt;br /&gt;So, having read the above excerpts (and assuming that seasoned Java developers get used to the ugly syntax in the near future), what can be said about a very simple BGGA construct like &lt;span style="font-style: italic;"&gt;{int, int, Random =&gt; BigInteger}&lt;/span&gt;  ??&lt;br /&gt;Is it readable? Intuitive? Self  explanatory?&lt;br /&gt;And yes, while  BGGA doesn't mandate such a coding style, it certainly provides plenty more scope for it than the Java language does in its current state.  As Josh Bloch mentions, its not the syntax, but the semantics (like that of  the ugly non local returns) that make BGGA complicated.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It would be a mistake to evaluate the complexity of BGGA in isolation. Indeed, the 427 page generics FAQ, for instance, doesn't talk about generics in isolation. In reality, it is the interaction of generics with other language features that makes generics so hard to master.  Its a curious coincidence that Angelika Langer on the generics FAQ &lt;a href="http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html#Acknowledgements"&gt;thanks&lt;/a&gt; 3 of  the 4 BGGA authors for patiently answering "countless questions posed" regarding generics. You'd expect that the BGGA authors' first initiative would be to simplify generics and make its  behavior &amp;amp; interaction with other language features more predictable, instead of attempting to make changes that further convolute the type system and add cognitive load to the language for little benefit. (I'd highly recommend reading Alex Buckley's &lt;a href="http://blogs.sun.com/abuckley/en_US/entry/complexity_in_language_design"&gt;excellent write up&lt;/a&gt; on the role of complexity in language design  and ways to evaluate the complexity.)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;From Sun's &lt;a href="http://java.sun.com/docs/white/delegates.html"&gt;rebuttal&lt;/a&gt; to Microsoft's Delegates proposal -&lt;br /&gt;&lt;p&gt;"&lt;span style="font-style: italic;"&gt;Many of the advantages claimed for Visual J++ delegates -- type safety, object orientation, and ease of &lt;span style="font-weight: bold;"&gt;component interconnection&lt;/span&gt; -- are simply consequences of the security or flexibility of the Java object model. These advantages are routinely enjoyed by all programmers using the Java language, without resorting to non-standard language syntax or platform-specific VM extensions. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt; Bound method references are simply unnecessary. They are not part of the Java programming language, and are thus not accepted by compliant compilers. Moreover, they detract from the &lt;span style="font-weight: bold;"&gt;simplicity&lt;/span&gt; and unity of the Java language.  Bound method references are not the right path for future language evolution&lt;/span&gt;."&lt;br /&gt;&lt;br /&gt;Why were delegates or bound method references considered antithetical to the Java language? From the &lt;a href="http://java.sun.com/docs/books/jls/third_edition/html/intro.html"&gt;Java language specification&lt;/a&gt;,&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;The Java programming language is a general-purpose, concurrent, class-based, &lt;span style="font-weight: bold;"&gt;object-oriented language&lt;/span&gt;. It is &lt;span style="font-weight: bold;"&gt;designed to be simple enough that many programmers can achieve fluency&lt;/span&gt; in the language. The Java programming language is related to C and C++ but is organized rather differently, with a number of aspects of C and C++ omitted and a few ideas from other languages included. It is intended to be a &lt;span style="font-weight: bold;"&gt;production language, not a research language&lt;/span&gt;, and so, as C. A.R. Hoare suggested in his classic paper on language design, the design has avoided including new and untested features&lt;/span&gt;."&lt;br /&gt;&lt;br /&gt;Firstly, it is meant to be object oriented. Why would you wince if you saw C-style procedural code written in Java? Because Java is not meant to be used in such a style of programming. Each style of programming has its place (and has a dedicated set of languages for it). While I'm not against functional programming, I certainly wouldn't be using Java if I needed to program in such a style. I'd probably use Erlang, (like Amazon Simple DB &lt;a href="http://radar.oreilly.com/archives/2007/12/amazon_simpledb.html"&gt;supposedly&lt;/a&gt; does), Lisp or Scheme.  It's horses for courses.&lt;br /&gt;Saying "me too" to every new language and trying to cram multiple programming styles into an evolved language like Java is nothing short of catastrophic, to say the least.&lt;br /&gt;If a language theorist wants to try that,  he shouldn't attempt to force changes into a language that  &lt;span style="font-weight: bold;"&gt;millions of programmers earn their livelihood from&lt;/span&gt;. (Hence the title of this post.) Remember, its a blue collar language. And its ubiquity is attributed to the ease with which a newbie can write reasonably reliable, readable Java code after relatively less training. Besides, as Josh mentioned in the video interview, he'd have probably included support for closures in a new language built ground-up for that purpose. The danger lies in continuously adding seemingly minor, self-contained features to a language that is more than a decade old, has a multi-billion dollar industry relying on it and is deployed in &lt;a href="www.sun.com/aboutsun/media/features/mars.html"&gt;mission critical&lt;/a&gt; environments. If developers still seek functional programming with strong typing and a binding to the JVM, there's an excellent implementation in the form of Scala.&lt;br /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;To rephrase the latter half of the previous point, the practical (read economic) consequences of making sweeping changes to the foundation of a language or even a runtime cannot be ignored. For the same reason, Sun has always been (rightly) obsessed with maintaining binary compatibility of the Java platform. Also, you don't see every over zealous JUG or committee proposing a VM spec change with every release of Java. But does the same rule not apply to the Java language? Does it imply that the language can change swiftly in any manner subject to the whims of a few experts (or even a few JUGs)?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;As James Gosling &lt;a href="http://blogs.sun.com/jag/entry/wandering_oz"&gt;stated&lt;/a&gt; (about GridBagLayout), "&lt;span style="font-style: italic;"&gt;with  great power comes great complexity&lt;/span&gt;". Assuming we need the "power" of BGGA closures, what cost are we paying for it? Were the costs even considered while making this proposal? Speaking of which, what (ideally) differentiates an engineer from a theorist is the former's ability to evaluate various tradeoffs with a certain pragmatism. Apart from the the use-cases mentioned by Bloch - fine grained concurrency and resource management which can be solved more elegantly with CICE - there's hardly a compelling use case that can't be addressed by present day Java. Do you want to use closures for event handling? Tom Ball, one of the initial members of the Swing/AWT engineering team, should know a &lt;a href="http://weblogs.java.net/blog/tball/archive/2006/08/will_java_final.html"&gt;thing or two&lt;/a&gt; about it? Read Charles Nutter's comment to that blog post and you'll see that BGGA closures aren't a significant improvement over anonymous inner classes and in fact perform poorly as proven by Josh. So, are we getting drastically better capabilities in return for the conundrum?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Josh's presentation makes a passing reference to "dialects" being encouraged by BGGA. Why should we worry about dialects, you might ask. Firstly, it is important to realize that code lives on forever. A recent java.net &lt;a href="http://today.java.net/pub/pq/185"&gt;poll&lt;/a&gt; found more than 50% of all running code being more than 6 -10 years old. Its highly unlikely that the author of the code is still sitting around maintaining that code. To give you more evidence, during my short career (working on telecom software, data center management software and the server side of a payments engine), I've had to read and modify existing code far more than write shiny new components. And despite such varied fields of application and diverse use cases, I've always found Java code behaving reasonably predictably with respect to how it reads. (What you read is what you observe in production, barring bugs and deployment goof-ups. No magic there. )  And with minimal effort (despite poor documentation in some cases), I was able to get along with my work within a few weeks (or a couple of months at most) of joining the new company. Does any of this sound surprising or astonishing to any seasoned Java developer? No. It is something you come to expect. And imagine how much money the employer saves by having the developer be productive within a few weeks of joining . Now, add BGGA's library/programmer defined control structures to this scenario: at each company that a developer moves to (or each new project he/she works on), he will have to learn a new  "style" of Java programming (as against a new API). Knowing the language alone will be even more futile, and a new engineer will potentially have to go through months of unlearning an old library construct (because, you see, its a new flavor of Java altogether) and then learning a new style of Java programming.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Looking at the above argument slightly differently, why would anyone choose Java for large scale (and more importantly, long lived) business applications when you can (theoretically) write hand-tuned platform specific code efficiently in C/C++/Assembly or what have you? In addition to platform independence, it is primarily due to the ease of reading and writing code in Java. What one engineer writes can be read by another. Assuming (wrongly) that Java is slower than C++ for long running server applications, why would anyone still use it? Because hardware is cheap. Maintenance isn't.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Speaking of the CICE and ARM proposals, it'd be great to see more meat and concrete illustrations added to these proposals (maybe even a kitchen sink implementation - anyone willing to give it a shot?) to highlight their merits over other proposals.  IMHO, the TODOs must be completed asap. While I'm unequivocally in favor of these two proposals, the truth remains that a sizeable chunk of the developer community is more easily convinced with specifics and tangibles.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Lastly, I'm relieved that Josh finally spoke out and expressed his view point and the rationale behind his stand. His arguments were based on examples obtained from the BGGA implementation itself and technical publications from Java's formative days. Most importantly, his statements were steeped in pragmatism. I find it rather amusing that the voting trend at JavaPolis &lt;a href="http://www.javapolis.com/confluence/display/JP07/Whiteboard+results+-+Closures"&gt;reversed&lt;/a&gt; soon after his talk. Until then, for nearly a year, the proponents of BGGA conveniently &lt;a href="http://blogs.sun.com/brk/entry/missing_in_java_se_7#comments"&gt;interpreted&lt;/a&gt; the community's demand for closures (and relief from the boiler plate of inner classes) as support for the BGGA closures.&lt;br /&gt;Having said that, no language feature should be determined on the basis of a poll or vote. Nor should we rush into such JSRs. Its taken a long time for Java to reach its current stature in the developer community, and the least we owe the language is a lot of thought, consideration, debate and deliberation before changing it significantly. We should also refrain from portraying the closures debate as a war between two rival camps. Our energies would be better spent by simply focusing on what the language needs (and doesn't need) to thrive in the next decade.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Update: A few readers seem to believe that the title is a bit far fetched. Here's the  explanation:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;You add more complexity to the language and make it harder for newbies or existing programmers to use it -&gt; Programmers look for saner/more intuitive languages -&gt; Java adoption plummets -&gt; "Java specialists" have no option but to choose alternative careers.&lt;br /&gt;Is that too far fetched an extrapolation? Am I exaggerating? Trying to spread panic?  Think again. Look at the battles that the Java platform itself is waging against Flex and other rival runtime environments, for instance. Would we rather stabilize the language and focus on strengthening the platform, or make the language harder to understand, and as a result further alienate the developer community?&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-1436592258198104694?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/9lapJKpGOmY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/1436592258198104694/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=1436592258198104694" title="16 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/1436592258198104694?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/1436592258198104694?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/9lapJKpGOmY/bgga-closures-end-of-many-java-careers.html" title="BGGA closures: The end of many Java careers" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>16</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2007/12/bgga-closures-end-of-many-java-careers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEECQ3kzfCp7ImA9WxJREUw.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-3521543772943788531</id><published>2007-11-09T05:49:00.000-08:00</published><updated>2009-05-12T00:17:42.784-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-12T00:17:42.784-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="parallelism" /><category scheme="http://www.blogger.com/atom/ns#" term="distributed" /><category scheme="http://www.blogger.com/atom/ns#" term="concurrency" /><title>Distributed computing != Parallel computing (obviously!)</title><content type="html">While the title of the post appears to state an obvious, no-brainer fact, its still common to see patterns used to solve parallel computing problems being  incorrectly applied to address those in distributed systems. The common justification usually takes the form of  "You could consider a distributed system to be a group of parallel - albeit remote - processes communicating over the network, and hence  many of the problems in this area should be readily solvable using  learnings from implementing concurrent systems". Unfortunately, there are a few important differences one cannot ignore:&lt;br /&gt;&lt;br /&gt;1)For any set of collaborating processes , replacing shared memory with the network has &lt;span style="font-weight: bold;"&gt;huge &lt;/span&gt;implications: bandwidth, latency,  security and failure detection, to name a few.&lt;br /&gt;2)There is no common notion of time across processes. You cannot infer chronology or causality relationships between two event based on their perceived occurrence. You need to take recourse to techniques like &lt;a href="http://en.wikipedia.org/wiki/Logical_clock"&gt;this&lt;/a&gt;.&lt;br /&gt;3)One of the implications of #1 above is  you do not have the luxury of using synchronization primitives (mutexes, barriers, condition variables, Test and Set fields, latches etc. provided by the operating system or the underlying hardware across remote processes). You need to invent techniques like &lt;a href="http://labs.google.com/papers/chubby.html"&gt;this&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But does this imply that we need to invent distributed/network-aware versions of all primitives/services provided by the hardware or the operating system? Should such primitives keep user programs oblivious to the fact that they are interacting with remote processes? Should the network be abstracted out? Not so fast, as this Sun labs &lt;a href="http://research.sun.com/techrep/1994/smli_tr-94-29.pdf"&gt;publication&lt;/a&gt; from the RMI/Jini team tells us.&lt;br /&gt;So, what is the approach that successful middleware technologies adopt today? Well, that's a topic for another post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-3521543772943788531?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/GobXsJNil1U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/3521543772943788531/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=3521543772943788531" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/3521543772943788531?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/3521543772943788531?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/GobXsJNil1U/distributed-computing-parallel.html" title="Distributed computing != Parallel computing (obviously!)" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2007/11/distributed-computing-parallel.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4AR3ozfCp7ImA9WB9SFkU.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-5045421463733561468</id><published>2007-10-06T08:50:00.000-07:00</published><updated>2007-10-06T09:09:06.484-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-06T09:09:06.484-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="adoption" /><category scheme="http://www.blogger.com/atom/ns#" term="FUD" /><title>Java (seemingly) on the decline again (for the n'th  time) ?</title><content type="html">Yet another (wishful) doomsday prediction for Java surfaces in the form of pingdom's survey of cherrypicked sites that mostly run on LAMP.  Despite the scant respect that surveys and benchmarks should rightly be treated with, I thought it was worth posting a short (though insufficient) response to this one. Seems rather amusing, doesn't it, that during more than a decade of Java's existence, there have been innumerable death knells sounded for Java and yet, it continues to survive, flourish and &lt;a href="https://jdk6.dev.java.net/6uNea.html"&gt;reinvent&lt;/a&gt; itself? Here's what I had to say response to &lt;a href="http://natishalom.typepad.com/nati_shaloms_blog/2007/10/why-most-scalab.html"&gt;Nati Shalom's query&lt;/a&gt;-&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;The pingdom sample space is misleading, to say the least. Countless companies in the banking space, insurance, manufacturing and logistics rely on Java engines (not necessarily Java EE, but surely a Java SE server at least). Add to that eBay, Amazon, AdWords and the usage of Hadoop and Nutch in Yahoo, and you have every important player that matters. And we haven't even started talking about niche, little known implementations like those at JPL, Nasa. The talk of TCO and expense associated with J2EE is complete B.S, of course. There're arguably more F/OSS tools and technologies in the Java world than there are in the LAMP world. Additionally, the unparalleled security and trust associated with Java implementations, and the confidence they rightly inspire in the large financial institutions and telcos is worth a dedicated post altogether. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; All of this makes you realize that pingdom's survey borders on FUD and ceases to be a respectable publication due to the sample space deliberately chosen.&lt;/span&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-5045421463733561468?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/z9bo-C6j_S0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/5045421463733561468/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=5045421463733561468" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/5045421463733561468?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/5045421463733561468?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/z9bo-C6j_S0/java-allegedly-on-decline-again-for-nth.html" title="Java (seemingly) on the decline again (for the n'th  time) ?" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2007/10/java-allegedly-on-decline-again-for-nth.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYARX46eip7ImA9WB9QF0s.&quot;"><id>tag:blogger.com,1999:blog-6552105925246465877.post-3682256228670582241</id><published>2007-07-11T01:52:00.000-07:00</published><updated>2007-10-30T11:15:44.012-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-30T11:15:44.012-07:00</app:edited><title>Howdy</title><content type="html">Hello there. This is meant to be my dedicated blog for  ramblings and random thoughts on distributed systems and Java. (My personal blog has been in existence &lt;a href="http://bharathch.blogspot.com/"&gt;here&lt;/a&gt; for a while now. While at Sun, I used to blog &lt;a href="http://blogs.sun.com/brk"&gt;here&lt;/a&gt;.) More write-ups in the weeks to come.  Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6552105925246465877-3682256228670582241?l=infinitescale.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AllThingsBrightAndDistributed/~4/HkLjKtftLKI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://infinitescale.blogspot.com/feeds/3682256228670582241/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6552105925246465877&amp;postID=3682256228670582241" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/3682256228670582241?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6552105925246465877/posts/default/3682256228670582241?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AllThingsBrightAndDistributed/~3/HkLjKtftLKI/howdy.html" title="Howdy" /><author><name>Bharath</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://infinitescale.blogspot.com/2007/07/howdy.html</feedburner:origLink></entry></feed>

