<?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.sidu.in/~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" gd:etag="W/&quot;CUMERHo5cCp7ImA9WhRVGUw.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962</id><updated>2012-01-19T00:33:25.428+05:30</updated><category term="barcamp" /><category term="continuous integration" /><category term="news" /><category term="quirks" /><category term="web" /><category term="books" /><category term="bug" /><category term="recruiting" /><category term="registry" /><category term="spawn" /><category term="gwt" /><category term="methodology" /><category term="symlinks" /><category term="innovative" /><category term="dzone" /><category term="DCB1" /><category term="junction" /><category term="css" /><category term="evolving" /><category term="devcampbangalore" /><category term="utf8" /><category term="rails" /><category term="video" /><category term="c42" /><category term=".net" /><category term="performance" /><category term="cc.rb" /><category term="xp" /><category term="training" /><category term="rant" /><category term="undernet" /><category term="resharper" /><category term="JSNI" /><category term="scala" /><category term="java" /><category term="refactoring" /><category term="activ" /><category term="anti-pattern" /><category term="security" /><category term="intro" /><category term="humour" /><category term="thoughtworks" /><category term="intellij" /><category term="india" /><category term="barcampbangalore5" /><category term="hackdayindia" /><category term="django" /><category term="links" /><category term="mochikit" /><category term="hiring" /><category term="mvc" /><category term="leisure" /><category term="interview" /><category term="photo" /><category term="brug" /><category term="twb" /><category term="opinion" /><category term="content repository" /><category term="digg" /><category term="practices" /><category term="mongrel" /><category term="mac" /><category term="offshore" /><category term="darkness" /><category term="OOP" /><category term="quality" /><category term="fun" /><category term="feedburner" /><category term="testing" /><category term="release" /><category term="architecture" /><category term="musings" /><category term="nasscom" /><category term="gotcha" /><category term="prototype" /><category term="ide" /><category term="ruby" /><category term="rdt" /><category term="dragdrop" /><category term="jcr" /><category term="skills" /><category term="javascript" /><category term="bangpypers" /><category term="tomcat" /><category term="event" /><category term="conference" /><category term="osx" /><category term="sysinternals" /><category term="announcement" /><category term="GI" /><category term="bangalore" /><category term="unconference" /><category term="agile" /><category term="python" /><category term="plugin" /><category term="analysis" /><category term="javaone" /><category term="browser" /><category term="enterprise" /><category term="ci" /><category term="barcampbangalore4" /><category term="windows" /><category term="irc" /><category term="tdd" /><category term="tweak" /><category term="recruitment" /><category term="rubyconf" /><category term="jackrabbit" /><category term="hack" /><category term="dcb2" /><category term="oss" /><category term="cycle" /><category term="tool" /><category term="feedflare" /><category term="REST" /><category term="feedflareunit" /><category term="ajax" /><category term="howto" /><category term="programming" /><category term="bcb4" /><category term="startup" /><category term="deployment" /><category term="tw" /><category term="lucene" /><category term="metaprogramming" /><category term="2010" /><category term="noob" /><category term="dining table" /><category term="YUI" /><category term="tibco" /><category term="versioning" /><category term="literature" /><category term="jquery" /><category term="activeresource" /><category term="cool" /><category term="rubyconf2011" /><category term="blogger" /><category term="call" /><category term="twitter" /><category term="functional programming" /><category term="search" /><category term="mingle" /><category term="microsoft" /><category term="book review verdict:read" /><category term="jruby" /><category term="goldberg" /><category term="wrest" /><title>Electric Sheep Blog</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.sidu.in/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>155</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.sidu.in/diningtablecoder" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="diningtablecoder" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUQEQng-eCp7ImA9WhRVGE0.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-9199740367904939150</id><published>2012-01-17T17:58:00.000+05:30</published><updated>2012-01-17T17:58:23.650+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T17:58:23.650+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="rubyconf" /><category scheme="http://www.blogger.com/atom/ns#" term="rubyconf2011" /><title>Our RubyConf XI talk on Rails Services</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://c42.in/people#niranjan-paranjape"&gt;Niranjan&lt;/a&gt; and I paired on a talk titled "Rails services in the walled garden" at RubyConf 2011 in New Orleans.&lt;br /&gt;
&lt;br /&gt;
The video has been out for a bit courtesy the awesome folks and &lt;a href="http://confreaks.com/"&gt;Confreaks&lt;/a&gt;, and we've (finally) &lt;a href="http://blog.c42.in/our-rubyconf-xi-talk-on-rails-services"&gt;posted it up on the C42 blog&lt;/a&gt;. As always, we'd love your feedback.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-9199740367904939150?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=r16-i4gvnxE:J0iK0O7vBi8:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=r16-i4gvnxE:J0iK0O7vBi8:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=r16-i4gvnxE:J0iK0O7vBi8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=r16-i4gvnxE:J0iK0O7vBi8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=r16-i4gvnxE:J0iK0O7vBi8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=r16-i4gvnxE:J0iK0O7vBi8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=r16-i4gvnxE:J0iK0O7vBi8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=r16-i4gvnxE:J0iK0O7vBi8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=r16-i4gvnxE:J0iK0O7vBi8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=r16-i4gvnxE:J0iK0O7vBi8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/r16-i4gvnxE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/9199740367904939150/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=9199740367904939150" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/9199740367904939150?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/9199740367904939150?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2012/01/our-rubyconf-xi-talk-on-rails-services.html" title="Our RubyConf XI talk on Rails Services" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total><georss:featurename>New Orleans, LA, USA</georss:featurename><georss:point>29.95106579999999 -90.0715323</georss:point><georss:box>29.795776299999993 -90.3285233 30.10635529999999 -89.8145413</georss:box></entry><entry gd:etag="W/&quot;A0ICSXs6eCp7ImA9WhdREkQ.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-3249430064750751598</id><published>2011-08-02T21:09:00.000+05:30</published><updated>2011-08-02T21:09:28.510+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T21:09:28.510+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="rails" /><category scheme="http://www.blogger.com/atom/ns#" term="offshore" /><title>Identifying good offshore Ruby and Rails vendors - a guide.</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px;"&gt;There are many small, new Ruby consultancies all over the world that do stellar work. There are many, many more that don't. How do you tell them apart?&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #111111; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #111111; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;a href="http://gja.in/blog"&gt;Tejas&lt;/a&gt; and I paired on a blog post that tries to answer this question over at the &lt;a href="http://blog.c42.in/identifying-good-offshore-ruby-and-rails-vend"&gt;C42 Engineering blog&lt;/a&gt;. Do take a look and tell us what you think.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-3249430064750751598?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=ahaX3O9UoBw:uEwU28Q0wpI:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=ahaX3O9UoBw:uEwU28Q0wpI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=ahaX3O9UoBw:uEwU28Q0wpI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=ahaX3O9UoBw:uEwU28Q0wpI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=ahaX3O9UoBw:uEwU28Q0wpI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=ahaX3O9UoBw:uEwU28Q0wpI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=ahaX3O9UoBw:uEwU28Q0wpI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=ahaX3O9UoBw:uEwU28Q0wpI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=ahaX3O9UoBw:uEwU28Q0wpI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=ahaX3O9UoBw:uEwU28Q0wpI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/ahaX3O9UoBw" height="1" width="1"/&gt;</content><link rel="related" href="http://blog.c42.in/identifying-good-offshore-ruby-and-rails-vend" title="Identifying good offshore Ruby and Rails vendors - a guide." /><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/3249430064750751598/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=3249430064750751598" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/3249430064750751598?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/3249430064750751598?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2011/08/identifying-good-offshore-ruby-and.html" title="Identifying good offshore Ruby and Rails vendors - a guide." /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEAFQHwyfip7ImA9WhdTE04.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-1949580340377893533</id><published>2011-07-11T03:55:00.000+05:30</published><updated>2011-07-11T03:55:11.296+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T03:55:11.296+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="rubyconf" /><title>I'm speaking at RubyConf 2011 at New Orleans</title><content type="html">Two of my colleagues and I will be speaking at &lt;a href="http://rubyconf.org/"&gt;RubyConf US&lt;/a&gt; this year. &lt;a href="http://c42.in/people#srushti-ambekallu"&gt;Srushti&lt;/a&gt;, lead developer on the &lt;a href="http://github.com/c42/goldberg"&gt;Goldberg CI server&lt;/a&gt;&amp;nbsp;will be pairing with &lt;a href="http://blog.brianguthrie.com/"&gt;Brian Guthrie&lt;/a&gt; of ThoughtWorks to deliver a talk titled "&lt;a href="http://rubyconf.org/presentations/11"&gt;Ruby Software Continuously Delivered and Exhaustively Explained.&lt;/a&gt;"&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://c42.in/people#niranjan-paranjape"&gt;Niranjan&lt;/a&gt; and I&amp;nbsp;will be pairing on the second talk titled "&lt;a href="http://rubyconf.org/presentations/45"&gt;Rails services in the walled garden&lt;/a&gt;."&lt;br /&gt;
This will be our second year speaking at RubyConf, and we're really looking forward to it.&lt;br /&gt;
&lt;br /&gt;
If you'd like to see our other presentations, do take a look at the&amp;nbsp;&lt;a href="http://blog.c42.in/our-rubyconf-x-talk-on-offshoring-ruby"&gt;videos of our talks from RubyConf US 2010&lt;/a&gt; and &lt;a href="http://blog.c42.in/tag/rubyconfindia"&gt;RubyConf India 2011&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-1949580340377893533?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=TYC7o_jBYIo:09oeCWCLVnA:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=TYC7o_jBYIo:09oeCWCLVnA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=TYC7o_jBYIo:09oeCWCLVnA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=TYC7o_jBYIo:09oeCWCLVnA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=TYC7o_jBYIo:09oeCWCLVnA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=TYC7o_jBYIo:09oeCWCLVnA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=TYC7o_jBYIo:09oeCWCLVnA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=TYC7o_jBYIo:09oeCWCLVnA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=TYC7o_jBYIo:09oeCWCLVnA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=TYC7o_jBYIo:09oeCWCLVnA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/TYC7o_jBYIo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/1949580340377893533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=1949580340377893533" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/1949580340377893533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/1949580340377893533?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2011/07/im-speaking-at-rubyconf-2011-at-new.html" title="I'm speaking at RubyConf 2011 at New Orleans" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0UHSH86fyp7ImA9WhZaGEs.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-530073276068489962</id><published>2011-07-05T16:57:00.000+05:30</published><updated>2011-07-05T16:57:19.117+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-05T16:57:19.117+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="ci" /><category scheme="http://www.blogger.com/atom/ns#" term="goldberg" /><title>Pipelines: What are they good for?</title><content type="html">My colleague &lt;a href="http://c42.in/people#srushti-ambekallu"&gt;Srushti&lt;/a&gt;, lead dev on the &lt;a href="http://github.com/c42/goldberg"&gt;Goldberg CI server&lt;/a&gt; project, recently wrote an &lt;a href="http://blog.c42.in/pipelines-what-are-they-good-for"&gt;article on pipelines&lt;/a&gt; in the context of Continuous Integration. Do take a look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-530073276068489962?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=WSn9bYyc94k:9FTj8qIJW64:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=WSn9bYyc94k:9FTj8qIJW64:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=WSn9bYyc94k:9FTj8qIJW64:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=WSn9bYyc94k:9FTj8qIJW64:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=WSn9bYyc94k:9FTj8qIJW64:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=WSn9bYyc94k:9FTj8qIJW64:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=WSn9bYyc94k:9FTj8qIJW64:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=WSn9bYyc94k:9FTj8qIJW64:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=WSn9bYyc94k:9FTj8qIJW64:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=WSn9bYyc94k:9FTj8qIJW64:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/WSn9bYyc94k" height="1" width="1"/&gt;</content><link rel="related" href="http://blog.c42.in/pipelines-what-are-they-good-for" title="Pipelines: What are they good for?" /><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/530073276068489962/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=530073276068489962" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/530073276068489962?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/530073276068489962?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2011/07/pipelines-what-are-they-good-for.html" title="Pipelines: What are they good for?" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0UFSHc8fip7ImA9WhZbF0g.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-3242930816626620333</id><published>2011-06-22T21:43:00.000+05:30</published><updated>2011-06-22T21:43:39.976+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-22T21:43:39.976+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="recruiting" /><title>Why Bill Taylor is wrong about great hackers</title><content type="html">I've just posted an article in response to Bill Taylor's post 'Great people are overrated' &lt;a href="http://blog.c42.in/why-bill-taylor-is-wrong-about-great-hackers"&gt;over at the C42 Engineering Blog&lt;/a&gt;. Do take a look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-3242930816626620333?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=YkS1txS4e8k:36wDHAli1Jw:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=YkS1txS4e8k:36wDHAli1Jw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=YkS1txS4e8k:36wDHAli1Jw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=YkS1txS4e8k:36wDHAli1Jw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=YkS1txS4e8k:36wDHAli1Jw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=YkS1txS4e8k:36wDHAli1Jw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=YkS1txS4e8k:36wDHAli1Jw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=YkS1txS4e8k:36wDHAli1Jw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=YkS1txS4e8k:36wDHAli1Jw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=YkS1txS4e8k:36wDHAli1Jw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/YkS1txS4e8k" height="1" width="1"/&gt;</content><link rel="related" href="http://blog.c42.in/why-bill-taylor-is-wrong-about-great-hackers" title="Why Bill Taylor is wrong about great hackers" /><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/3242930816626620333/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=3242930816626620333" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/3242930816626620333?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/3242930816626620333?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2011/06/why-bill-taylor-is-wrong-about-great.html" title="Why Bill Taylor is wrong about great hackers" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C04DRnk4cCp7ImA9WhZVEk4.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-8241303495712011145</id><published>2011-05-23T13:39:00.010+05:30</published><updated>2011-05-24T15:42:57.738+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-24T15:42:57.738+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="c42" /><category scheme="http://www.blogger.com/atom/ns#" term="startup" /><title>C42 Engineering, Year One.</title><content type="html">We've come a long way since that evening in December 2009 when a handful of colleagues spent an evening drinking Highland Park and trying to figure out what they should be doing with their lives. Everyone wanted to do a start-up; nobody had any big ideas. We also knew that raising money for a product startup in India is quite hard at the best of times, so we figured we'd do this by the book - start and grow a nice, stable services firm and bounce off it to build a product division. We'd take more time to get there, but we were less likely to crash and burn because we couldn't raise funding.&lt;br /&gt;
&lt;br /&gt;
At that point, only two members of the group were actually in a position to do something about it and they took the first, difficult step of quitting a comfortable job and trying their hands at something they'd never done before - setting up a boutique Ruby consulting firm, offshore.&lt;br /&gt;
&lt;br /&gt;
By early January both &lt;a href="http://c42.in/people#srushti-ambekallu"&gt;Srushti&lt;/a&gt; and &lt;a href="http://c42.in/people#niranjan-paranjape"&gt;Niranjan&lt;/a&gt; had quit ThoughtWorks and begun actively studying the market. Of the others, most returned to their usual routine; I was the exception. Starting January 1st, I was on unpaid leave to look after my mother who was in the last stages of her battle with soft-tissue sarcoma, a virulent form of cancer. I stayed on as a nominal ThoughtWorker because I was still peripherally involved in organizing the first edition of &lt;a href="http://rubyconfindia.org"&gt;RubyConf India&lt;/a&gt; which was scheduled for late March that year.&lt;br /&gt;
&lt;br /&gt;
Thus began what I later realised were the toughest six months of my life thus far. My mother was in and out of hospital for most of that period, and January was especially trying because my father over-extended himself on a trip and wound up briefly in hospital too. I had a fair idea what Niranjan and Srushti were up to with the company as they were at this point working out of my aunt's house, which is on the floor just below my own. My family'd been using it as a store-room for the ten years since my aunt passed away, and boy was it a mess. I'd make it a point to drop in for a few minutes every day and hang out with them among all the old newspapers, furniture and dust to see what was going on. They'd usually be sitting at the dining table on some truly ancient chairs hacking code, or as likely, playing World of Warcraft. We'd talk for a bit - if it was a Friday or weekend I'd bring my laptop down and we'd all three of us do a raid or three.&lt;br /&gt;
&lt;br /&gt;
By late January they'd managed to sign up a client on a fixed-bid Rails project. Four weeks later when they did the numbers, they realised that their hourly billing rate hovered somewhere between $3 and $5. Lesson learned, they then started bidding only on projects that paid by the hour and soon signed up a client at $15 per hour that would stay with them for the next six months. C42 Engineering had found it's first 'boulder' - a steady, long-term project that the company could depend on.&lt;br /&gt;
&lt;br /&gt;
With the end of March came &lt;a href="http://rubyconfindia.org/2010"&gt;RubyConf India&lt;/a&gt;, and a few days later I quit ThoughtWorks. March was also notable because during RubyConf we met Niranjan's childhood friend &lt;a href="http://c42.in/people#aakash-dharmadhikari"&gt;Aakash&lt;/a&gt; and shortly thereafter he decided to move to Bangalore and join Niranjan and Srushti. Thus, when I joined &lt;a href="http://c42.in"&gt;C42 Engineering&lt;/a&gt; at the end of April after serving my notice period, I was the fourth person to sign up.&lt;br /&gt;
&lt;br /&gt;
My first act after joining was to take a leave of absence that was to last two months. I stayed home looking after my mother and C42 Engineering moved on without much involvement on my part and signed up another client for an engagement that lasted three months. At this point we had two projects and had two people billable full time, but we hadn't yet registered a company and weren't even paying salaries yet. Niranjan and Srushti were effectively working as independent contractors, with Aakash shadowing first one, then the other. I saw little of them in this period - both Niranjan and Srushti were working on separate projects, and by the end of May C42 had moved out of my aunt's place and had started working out of a room at Srushti's dad's office in Cooke Town (less dust and better power backup).&lt;br /&gt;
&lt;br /&gt;
My mother passed away on June 11th 2010, just under two years after she was diagnosed with cancer; I started work at C42 full time shortly thereafter. &lt;br /&gt;
&lt;br /&gt;
Things started heating up at around the same time. First off, we registered the company. We then proceeded to execute two key parts of our strategy for that year. First, we started billing in pairs instead of as individuals and second, we moved away from sourcing projects via online brokerages like elance.com and started generating leads and selling projects ourselves. Shortly thereafter we started hiring, and over the next five months had four people join us. We had a second pair become billable, then our third. Ultimately, the last quarter of 2010 generated more revenue than the first three combined, and this despite December having terrible utilization numbers because we were all off in Goa watching &lt;a href="http://www.nigel.in/"&gt;Nigel&lt;/a&gt; get married.&lt;br /&gt;
&lt;br /&gt;
The other event of note in 2010 was Niranjan's and my &lt;a href="http://blog.c42.in/our-rubyconf-x-talk-on-offshoring-ruby"&gt;talk being accepted for RubyConf X&lt;/a&gt;, New Orleans. This was a calculated risk on our part because the cost of the trip was non-trivial for a business as young as ours was, and we weren't sure if there would be any immediate returns we'd have in terms of projects (or even leads). In hindsight, however, I realise that these were relatively unimportant things. What speaking at RubyConf X really brought us was a degree of credibility, something that you otherwise earn the hard way over a period of months; once the video of our talk went online, there was a noticeable change in quality of our leads. Sales didn't necessarily go up, but conversations with prospective clients that had already watched the video had a much more positive tone.&lt;br /&gt;
&lt;br /&gt;
Things have been pretty upbeat since then - we remain sold out more or less all the time, our rates have steadily risen to the current USD40 per hour per developer. Our open source initiatives have seen considerable progress - we added RFC 2616 compliant caching to &lt;a href="https://github.com/kaiwren/wrest"&gt;Wrest&lt;/a&gt;, saw a remarkable number of pull-requests on &lt;a href="https://github.com/c42/goldberg"&gt;Goldberg&lt;/a&gt;, and contributed &lt;a href="https://github.com/rspec/rspec-mocks/issues/10"&gt;any_instance support&lt;/a&gt; to RSpec.&lt;br /&gt;
&lt;br /&gt;
If I had to highlight a key learning from all that we've learned in the last year, it would be that executing consistently is tough because the way you need to evaluate your priorities changes as your revenue grows. Three guys hacking in a room and eight people working as a part of a business are two fundamentally different kinds of organisations that behave very differently. It seems like this should be obvious and not a 'key learning', but we were blind-sided by how far reaching its impact was on the way we worked and how hard it was for us to start thinking differently. I've read about this kind of stair stepping where a $10k business works differently from a $100k business which in turn is different from a $1000k business and so on, but seeing it happen has been... educational. Tracking time accurately, invoicing your clients correctly and on time, making payroll on time - these things seem simple on paper, but are quite hard to do consistently in practice.&lt;br /&gt;
&lt;br /&gt;
There are plenty of things that we're still struggling with and don't have good answers for. Scaling people up technically is one - we're heavily dependent on pairing for our training, which means we can at any point only hire as many people as we have experienced Ruby developers in the company. Developing skills to the point that we consider acceptable takes months, and then more months until that person is at the point where they can in turn mentor someone else. We're still trying to figure out if there is a way to train people in a shorter duration without compromising on quality, but for now we're cutting back on growth to maintain quality.&lt;br /&gt;
&lt;br /&gt;
In conclusion, I think we've been very lucky in some ways this last year. A boutique, offshore Ruby consultancy would have been much harder to establish if we'd started a little earlier, or if we'd tried to do so without a core team of experienced Rubyists; we've been in the right place at the right time with the right people on board and we've benefitted enormously from this. Now we have to work on the real challenge, which is creating a successful product division while continuing to grow our services arm. I'll try to make it a point to keep posting updates - at this point, I suspect we'd definitely benefit from any advice we can get.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-8241303495712011145?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=omTlRL3ouf8:dPnkbZ7Ycpw:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=omTlRL3ouf8:dPnkbZ7Ycpw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=omTlRL3ouf8:dPnkbZ7Ycpw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=omTlRL3ouf8:dPnkbZ7Ycpw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=omTlRL3ouf8:dPnkbZ7Ycpw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=omTlRL3ouf8:dPnkbZ7Ycpw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=omTlRL3ouf8:dPnkbZ7Ycpw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=omTlRL3ouf8:dPnkbZ7Ycpw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=omTlRL3ouf8:dPnkbZ7Ycpw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=omTlRL3ouf8:dPnkbZ7Ycpw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/omTlRL3ouf8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/8241303495712011145/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=8241303495712011145" title="21 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/8241303495712011145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/8241303495712011145?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2011/05/c42-engineering-year-one.html" title="C42 Engineering, Year One." /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>21</thr:total></entry><entry gd:etag="W/&quot;AkECRXo-cSp7ImA9Wx9bE0o.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-8019921781033686713</id><published>2011-02-22T18:14:00.000+05:30</published><updated>2011-02-22T18:14:24.459+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-22T18:14:24.459+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="india" /><category scheme="http://www.blogger.com/atom/ns#" term="2010" /><category scheme="http://www.blogger.com/atom/ns#" term="rails" /><category scheme="http://www.blogger.com/atom/ns#" term="rubyconf" /><category scheme="http://www.blogger.com/atom/ns#" term="offshore" /><title>Our RubyConf X talk on offshoring Ruby</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;The video recording of our talk at RubyConf X at New Orleans last year has been released. You can watch it &lt;a href="http://blog.c42.in/our-rubyconf-x-talk-on-offshoring-ruby"&gt;over at the C42 Engineering blog.&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-8019921781033686713?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=50hrkN7MzWE:WzruvZtd-oU:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=50hrkN7MzWE:WzruvZtd-oU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=50hrkN7MzWE:WzruvZtd-oU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=50hrkN7MzWE:WzruvZtd-oU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=50hrkN7MzWE:WzruvZtd-oU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=50hrkN7MzWE:WzruvZtd-oU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=50hrkN7MzWE:WzruvZtd-oU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=50hrkN7MzWE:WzruvZtd-oU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=50hrkN7MzWE:WzruvZtd-oU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=50hrkN7MzWE:WzruvZtd-oU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/50hrkN7MzWE" height="1" width="1"/&gt;</content><link rel="related" href="http://blog.c42.in/our-rubyconf-x-talk-on-offshoring-ruby" title="Our RubyConf X talk on offshoring Ruby" /><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/8019921781033686713/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=8019921781033686713" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/8019921781033686713?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/8019921781033686713?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2011/02/our-rubyconf-x-talk-on-offshoring-ruby.html" title="Our RubyConf X talk on offshoring Ruby" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUcDQHo7eSp7ImA9Wx9RFEw.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-7566929402445770334</id><published>2010-12-05T04:22:00.004+05:30</published><updated>2010-12-15T17:07:51.401+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-15T17:07:51.401+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hiring" /><category scheme="http://www.blogger.com/atom/ns#" term="skills" /><title>Is expecting expertise unreasonable?</title><content type="html">Here's a snippet from a recent comment on a oldish blog post of mine:&lt;br /&gt;
&lt;blockquote&gt;"However, in this post there is one thing that touches a raw nerve. The whole point about whether the person does coding in his free time. Why would you care? In fact, the point of free / spare time is to do activities you don't do at work. Today, I've an MBA and am far removed from the tech world, but I'm involved in recruiting for consulting (the industry I work in), but I'll not hire a person who does cases during his / her spare time. I'd rather hire someone who has a life and some hobbies. Such people can be much more interesting, fun to work with, and actually more versatile at solving business problems than someone who has a unidimensional personality."  &lt;/blockquote&gt;&lt;br /&gt;
Every time someone says something like this, I'm appalled. No, really, that's the only word for it.&lt;br /&gt;
&lt;br /&gt;
First, I don't understand the constant assumption that if you choose to study in your spare time, you have no life. Some of the best programmers, entrepreneurs and managers I know (some are all three) run marathons, are published authors, do underwater photography and more without ever compromising on study. Truly passionate people have several passions - and their greatest passion dictates the area in which they choose to work, but never to the complete exclusion of everything else. The stereotype of the programmer living in a basement doing nothing but write code is just that - a stereotype. People who fit the stereotype are the exception, not the norm, believe me. That said, I do wish that the manager who did nothing but study cases was also a stereotype - most professional managers that I meet last read a book during their MBA (and it was the Nirma washing powder case) and haven't been exposed to a new idea since. But I digress.&lt;br /&gt;
&lt;br /&gt;
I also find the 'if you study, you have no life' argument something of a cop out. It tells me that you aren't passionate about what you do for a living - if you were, studying and getting better at what you do would be something that just happened automatically. Henry Ford created the assembly line because he constantly studied manufacturing. Sam Walton created Walmart because he spent all his time studying retail. Nobody creates anything great without expending considerable effort studying the problem and trying different solutions. We aim to write great code as one of the key parts of solving our customers problems, so yes, I prefer people that are looking to become better programmers. Such people almost always hack on personal projects in their spare time; as far as I can tell, it's the quickest way to identify the best programmers.&lt;br /&gt;
&lt;br /&gt;
Second is the implication that people who are passionate about what they do and express this by working on their skills outside of work hours aren't 'versatile'. I've never figured out what the connection is here. Is it that someone who does not consciously work to improve their skills must perforce be better than someone who does because they become (magically) more versatile? The answer to 'Are you an expert in your field?' isn't 'No, but I have hobbies.'&lt;br /&gt;
&lt;br /&gt;
Are you saying that if you conducted an orchestra, you'd refuse to include a musician who practiced outside of the concerts they played in? Are you saying you wouldn't consult a doctor that studied the latest advancements in medicine? What's special about programmers or managers that they're exempt from others expecting them to improve their skills? As far as I'm concerned, the important thing to remember is that even if you are an expert in your field today, you won't remain one unless you're constantly introspecting and working to improve. Your career will falter, because your peers are improving while you're standing still. This isn't rocket science - everybody wants to work with the more capable person, not the less capable one that has hobbies. In my experience though, the more capable person is usually the one with the hobbies and the less capable one is usually a couch potato in his or her spare time.&lt;br /&gt;
&lt;br /&gt;
Lastly, the whole notion of how people perceive learning at work as being something that must happen during working hours strikes me as being rather odd. When you were in school and college, did you do all your studying in the classroom? No - you studied in what was, technically, your spare time. So what's the deal with expecting to learn everything you need to know during your eight hours at work? Now that's what I call unidimensional - someone whose knowledge of their domain encompasses merely what they see during work hours.&lt;br /&gt;
&lt;br /&gt;
To cut a long story short: To study or not to study - the choice is yours; but don't ever fool yourself into believing that passionate people that study are in any way the poorer choice for any role. That perception is a fallacy.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: small;"&gt;Update:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Here are the links to conversations around this post on &lt;a href="http://news.ycombinator.com/item?id=1971324"&gt;Hacker News&lt;/a&gt; and the &lt;a href="http://groups.google.com/group/software_craftsmanship/browse_thread/thread/a8ebf102445b1409"&gt;Software Craftsmanship list&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-7566929402445770334?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NNj5TKJdrFY:z8i56aH590k:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NNj5TKJdrFY:z8i56aH590k:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NNj5TKJdrFY:z8i56aH590k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=NNj5TKJdrFY:z8i56aH590k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NNj5TKJdrFY:z8i56aH590k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=NNj5TKJdrFY:z8i56aH590k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NNj5TKJdrFY:z8i56aH590k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NNj5TKJdrFY:z8i56aH590k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NNj5TKJdrFY:z8i56aH590k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=NNj5TKJdrFY:z8i56aH590k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/NNj5TKJdrFY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/7566929402445770334/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=7566929402445770334" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/7566929402445770334?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/7566929402445770334?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2010/12/is-expecting-expertise-unreasonable.html" title="Is expecting expertise unreasonable?" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>8</thr:total></entry><entry gd:etag="W/&quot;D04HSX0zeCp7ImA9Wx5VEkU.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-7326069810663515118</id><published>2010-10-05T19:08:00.000+05:30</published><updated>2010-10-05T19:08:58.380+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-05T19:08:58.380+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="rubyconf" /><title>Speaking at RubyConf X</title><content type="html">My &lt;a href="http://rubyconf.org/presentations/26"&gt;proposal&lt;/a&gt; for &lt;a href="http://rubyconf.org/"&gt;RubyConf X&lt;/a&gt; has been accepted, so I'll be in New Orleans in November. If you're going to be there, do say hello. &lt;br /&gt;
&lt;br /&gt;
Looks like the two major conferences I'll be speaking at this year are both RubyConfs :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-7326069810663515118?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=3dkA3i-IhdQ:0B00c2Je5pY:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=3dkA3i-IhdQ:0B00c2Je5pY:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=3dkA3i-IhdQ:0B00c2Je5pY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=3dkA3i-IhdQ:0B00c2Je5pY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=3dkA3i-IhdQ:0B00c2Je5pY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=3dkA3i-IhdQ:0B00c2Je5pY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=3dkA3i-IhdQ:0B00c2Je5pY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=3dkA3i-IhdQ:0B00c2Je5pY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=3dkA3i-IhdQ:0B00c2Je5pY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=3dkA3i-IhdQ:0B00c2Je5pY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/3dkA3i-IhdQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/7326069810663515118/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=7326069810663515118" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/7326069810663515118?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/7326069810663515118?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2010/10/speaking-at-rubyconf-x.html" title="Speaking at RubyConf X" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DEYGQH0yfCp7ImA9WxBRF08.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-4874488474111708370</id><published>2010-01-06T02:33:00.006+05:30</published><updated>2010-01-06T02:45:21.394+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-06T02:45:21.394+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rails" /><title>On WWRails... finally</title><content type="html">I'm not sure why I didn't do this long ago, but better late than never, what?&lt;br /&gt;&lt;a href="http://www.workingwithrails.com/recommendation/new/person/18353-sidu-ponnappa" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 90px;" src="http://3.bp.blogspot.com/_ABLwpl_AaVo/S0Opntjz9KI/AAAAAAAAAKk/vj-TI9YT1Kg/s320/wwrails.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423364875994002594" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-4874488474111708370?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=OLO1sfGlDgQ:6rwZ0z7MIAw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=OLO1sfGlDgQ:6rwZ0z7MIAw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=OLO1sfGlDgQ:6rwZ0z7MIAw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/OLO1sfGlDgQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/4874488474111708370/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=4874488474111708370" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/4874488474111708370?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/4874488474111708370?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2010/01/on-wwrails-finally.html" title="On WWRails... finally" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_ABLwpl_AaVo/S0Opntjz9KI/AAAAAAAAAKk/vj-TI9YT1Kg/s72-c/wwrails.jpg" height="72" width="72" /><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;C0AFSXs6eip7ImA9WxBSFE0.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-4900628086596875028</id><published>2009-12-21T18:32:00.003+05:30</published><updated>2009-12-21T18:51:58.512+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-21T18:51:58.512+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="rubyconf" /><title>RubyConf India - Call for Proposals</title><content type="html">The Call for Proposals for &lt;a href="http://rubyconfindia.org/"&gt;India's first RubyConf&lt;/a&gt; in now on. For information on where and how to submit your proposal, please check &lt;a href="http://rubyconfindia.org/"&gt;the website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is a significant milestone to reach when setting up a conference for the first time. There are many people who deserve much appreciation for making this possible, not least all the enthusiastic members of India's Ruby community. A heartfelt thanks to all of you and do come and present; after all it is because of you that the community has gotten this far!&lt;br /&gt;&lt;br /&gt;Please do post this information to any Ruby communities that you are a member of. At this point, publicity is key, so please also blog, tweet, digg and reddit away!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-4900628086596875028?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=Cf2nEY9ca5o:2V3o_-vzO-g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=Cf2nEY9ca5o:2V3o_-vzO-g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=Cf2nEY9ca5o:2V3o_-vzO-g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/Cf2nEY9ca5o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/4900628086596875028/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=4900628086596875028" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/4900628086596875028?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/4900628086596875028?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/12/rubyconf-india-call-for-proposals.html" title="RubyConf India - Call for Proposals" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0QERXk7fyp7ImA9WxNXGUU.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-7258060293916700192</id><published>2009-10-08T11:21:00.004+05:30</published><updated>2009-10-08T11:25:04.707+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-08T11:25:04.707+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="rubyconf" /><title>RubyConf India - It's official!</title><content type="html">Yes, it's true. RubyConf is happening in Bangalore, India early next year. Here's the link to the (currently rather brief) &lt;a href="http://rubyconfindia.org"&gt;RunConf India 2010 website&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-7258060293916700192?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=NW5LI20CEGY:WlqcwsbfMiE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=NW5LI20CEGY:WlqcwsbfMiE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=NW5LI20CEGY:WlqcwsbfMiE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/NW5LI20CEGY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/7258060293916700192/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=7258060293916700192" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/7258060293916700192?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/7258060293916700192?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/10/rubyconf-india-its-official.html" title="RubyConf India - It's official!" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;C0cER3syfCp7ImA9WxNQEUs.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-4920140306838854130</id><published>2009-09-17T00:10:00.005+05:30</published><updated>2009-09-17T09:46:46.594+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-17T09:46:46.594+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="jruby" /><title>Faster xml deserialisation on JRuby</title><content type="html">For the last day or so, I've been looking at XML deserilisation performance at work. When dealing with REST/POX, a respectable fraction of the time is spent in serilising and deserialising xml; consequently it's a fair target for performance analysis. Since I'm currently working on a multi-threaded Twitter library built using &lt;a href="http://github.com/kaiwren/wrest"&gt;Wrest&lt;/a&gt;, I decided I might as well take a look at xml deserialisation performance under JRuby.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The Contenders&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wrest delegates XML deserilisation to ActiveSupport, which in turn supports one of three libraries - LibXML Ruby, Nokogiri and of course REXML. REXML is the slowest, buggiest of the three and is pure Ruby. Both LibXML and Nokogiri use the native libxml2 libraries; however LibXML is &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; available on JRuby whereas Nokogiri is. Nokogiri also has an as yet unreleased version that does not use the JNA based JRuby FFI implementation and is expected to be faster. Build instructions for the non FFI Nokogiri are available &lt;a href="http://planet-soc.com/node/7930"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;REXML can however be enhanced by including &lt;a href="http://github.com/nicksieger/jrexml"&gt;JREXML&lt;/a&gt; which uses the java xpp3 libs and claims a 10x performance improvemnt. &lt;br /&gt;&lt;br /&gt;Thus we have four contenders:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Vanilla REXML&lt;/li&gt;&lt;li&gt;REXML enhanced by JREXML&lt;/li&gt;&lt;li&gt;FFI Nokogiri&lt;/li&gt;&lt;li&gt;Non FFI nokogiri&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The Test Environment&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;jruby -v&lt;/code&gt; reads &lt;code&gt;jruby 1.4.0dev (ruby 1.8.7p174) (2009-08-05 619cebe) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_13) [x86_64-java]&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;I'm using a 2.2GHz 2008 MacBook Pro running Leopard&lt;/li&gt;&lt;li&gt;The benchmark is a simple Hash.from_xml. It's canned as a Wrest rake task. The full command is &lt;code&gt;jruby -S rake -J-server benchmark:deserialise_xml&lt;/code&gt;&lt;/li&gt;&lt;li&gt;JREXML 0.5.3 and Nokogiri 1.3.3 (the non-FFI build is also 1.3.3, revision fb7e9bb6, from the origin/java branch of tenderlove/nokogiri)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The Numbers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:115%;"&gt;Vanilla REXML&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;Deserialising using ActiveSupport::XmlMini_REXML&lt;br /&gt;Rehearsal -------------------------------------------------&lt;br /&gt;Hash.from_xml  11.831000   0.000000  11.831000 ( 11.831000)&lt;br /&gt;--------------------------------------- total: 11.831000sec&lt;br /&gt;&lt;br /&gt;                    user     system      total        real&lt;br /&gt;hash.from_xml   5.475000   0.000000   5.475000 (  5.474000)&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:115%;"&gt;REXML + JREXML&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;Detected JRuby, JREXML loaded.&lt;br /&gt;Deserialising using ActiveSupport::XmlMini_REXML&lt;br /&gt;Rehearsal -------------------------------------------------&lt;br /&gt;Hash.from_xml  11.323000   0.000000  11.323000 ( 11.323000)&lt;br /&gt;--------------------------------------- total: 11.323000sec&lt;br /&gt;&lt;br /&gt;                    user     system      total        real&lt;br /&gt;Hash.from_xml   5.436000   0.000000   5.436000 (  5.436000)&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:115%;"&gt;FFI Nokogiri&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;Deserialising using ActiveSupport::XmlMini_Nokogiri&lt;br /&gt;Rehearsal -------------------------------------------------&lt;br /&gt;Hash.from_xml   9.468000   0.000000   9.468000 (  9.468000)&lt;br /&gt;---------------------------------------- total: 9.468000sec&lt;br /&gt;&lt;br /&gt;                    user     system      total        real&lt;br /&gt;Hash.from_xml   3.876000   0.000000   3.876000 (  3.876000)&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:115%;"&gt;Non FFI Nokogiri&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;Deserialising using ActiveSupport::XmlMini_Nokogiri&lt;br /&gt;Rehearsal -------------------------------------------------&lt;br /&gt;Hash.from_xml   5.956000   0.000000   5.956000 (  5.956000)&lt;br /&gt;---------------------------------------- total: 5.956000sec&lt;br /&gt;&lt;br /&gt;                    user     system      total        real&lt;br /&gt;Hash.from_xml   2.123000   0.000000   2.123000 (  2.123000)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;As expected, REXML was slow. Surprisingly though, JREXML didn't improve those numbers very much.&lt;br /&gt;FFI Nokogiri was faster than REXML, but the JNA seems to have taken its toll - on MRI 1.8.6 the same benchmark runs in under 2s. Non FFI Nokogiri was the real win, though, taking deserialisation performance within spitting distance of the CRuby Nokogiri.&lt;br /&gt;&lt;br /&gt;Note that &lt;code&gt;Hash.from_xml&lt;/code&gt; does mess around a bit with the hash that the libraries produce and this might make the numbers different from directly using the xml libraries; however since this API is what I need to use with in Wrest (and Rails on JRuby, for that matter) these are the relative performance numbers I'm interested in seeing. If you're not using Rails (or Wrest, dare I say?) you may want to re-run this benchmark against the libraries directly without ActiveSupport mediating.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-4920140306838854130?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=eH5ZsyeQVno:thB7oYfzS4A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=eH5ZsyeQVno:thB7oYfzS4A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=eH5ZsyeQVno:thB7oYfzS4A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/eH5ZsyeQVno" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/4920140306838854130/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=4920140306838854130" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/4920140306838854130?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/4920140306838854130?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/09/faster-xml-deserilisation-on-jruby.html" title="Faster xml deserialisation on JRuby" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;C0UNSXo_eyp7ImA9WxNSEU4.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-397829642580057019</id><published>2009-08-22T19:06:00.015+05:30</published><updated>2009-08-24T21:58:18.443+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-24T21:58:18.443+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="wrest" /><category scheme="http://www.blogger.com/atom/ns#" term="REST" /><title>Wrest, REST and Ruby HTTP libraries</title><content type="html">I've been using Rails' ActiveResource for over eighteen months to consume the &lt;a href="http://en.wikipedia.org/wiki/Plain_Old_XML"&gt;POX&lt;/a&gt; based pseudo &lt;a href="http://en.wikipedia.org/wiki/REST"&gt;REST&lt;/a&gt; that Rails applications make so easy to produce, and I'm not overwhelmed. &lt;br /&gt;&lt;br /&gt;ActiveResource &lt;a href="http://blog.brianguthrie.com/articles/2008/08/02/the-weirdest-code-ive-seen-recently"&gt;isn't a particularly well written library&lt;/a&gt;, nor is it easy to extend, modify and use. It doesn't support certain features that I've come to consider essential for a Rails POX/REST client, like pagination. The only nice things you can say about it are that it works for the most common cases, and that it ships with Rails. But you know what hackers say about sucky tools - 'Don't get mad; roll your own'. So I did. &lt;br /&gt;&lt;br /&gt;I started working on &lt;a href="http://github.com/kaiwren/wrest"&gt;Wrest&lt;/a&gt; a few months ago with the intention of creating a drop-in replacement for ActiveResource. The section of the Wrest &lt;a href="http://github.com/kaiwren/wrest/tree/master/README.rdoc"&gt;README&lt;/a&gt; that talks about Wrest::Resource is actually a record of the features that we've discussed over the &lt;a href="http://blog.sidu.in/2006/10/eh-wassa-dining-table.html"&gt;dining table&lt;/a&gt; that we &lt;span style="font-style:italic;"&gt;wished&lt;/span&gt; ActiveResource had. However, as I hacked away on Wrest, I slowly came to realise that a good REST client needs to be a good &lt;span style="font-style:italic;"&gt;HTTP&lt;/span&gt; client first.&lt;br /&gt;&lt;br /&gt;I took a look at those that were popular at the time, but they didn't really appeal to my engineering aesthetic. They heavily favoured class/static methods and seemed to be geared toward command line usage rather than as a library. So I started to implement a clean, easy to use and well encapsulated HTTP library first, resulting in Wrest::Core; it is now ready for use and is sufficiently mature that I'm comfortable writing about it and inviting people to take it for a spin. It does need a few more features, but nothing that can't be added with a few hours worth of hacking. Wrest::Resource however, is still a work in progress, but some of its building blocks are already ready for use. You can see some examples &lt;a href="http://github.com/kaiwren/wrest/tree/master/examples"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Wrest is available for installation through both RubyGems and as a Rails plugin via &lt;a href="http://github.com/kaiwren/wrest"&gt;Git&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To get the gem, all you need to do is &lt;code&gt;(sudo) gem install wrest&lt;/code&gt;. If you want it as a Rails plugin, simply do &lt;code&gt;script/plugin install git://github.com/kaiwren/wrest.git&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Wrest runs on Ruby 1.8, 1.9 as well as JRuby.&lt;br /&gt;&lt;br /&gt;Here is an example that shows how you can use the &lt;a href="http://delicious.com/help/api"&gt;Delicious API&lt;/a&gt; using Wrest. If you can't see it (it's a github gist that needs js) you can see the original source &lt;a href="http://github.com/kaiwren/wrest/tree/master/examples/delicious.rb"&gt;here&lt;/a&gt;. You may also be interested in the &lt;a href="http://github.com/kaiwren/wrest/tree/master/examples/twitter.rb"&gt;Twitter example&lt;/a&gt;, which showcases a more complex scenario with ideas and features from Wrest::Resource.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/172794.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-397829642580057019?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=To8DZLZVSZM:kJVmLBjklvM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=To8DZLZVSZM:kJVmLBjklvM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=To8DZLZVSZM:kJVmLBjklvM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/To8DZLZVSZM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/397829642580057019/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=397829642580057019" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/397829642580057019?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/397829642580057019?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/08/wrest-rest-and-ruby-http-libraries.html" title="Wrest, REST and Ruby HTTP libraries" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>11</thr:total></entry><entry gd:etag="W/&quot;CUAHRXo9fip7ImA9WxJVE0Q.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-3903574927410490750</id><published>2009-07-01T01:56:00.001+05:30</published><updated>2009-07-01T01:58:54.466+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-01T01:58:54.466+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="oss" /><category scheme="http://www.blogger.com/atom/ns#" term="release" /><category scheme="http://www.blogger.com/atom/ns#" term="cc.rb" /><title>CruiseControl.rb 1.4.0 released!</title><content type="html">We are happy to announce the release of &lt;a href="http://cruisecontrolrb.thoughtworks.com"&gt;CruiseControl.rb&lt;/a&gt; 1.4.0. This release adds support for three distributed version control systems - Git, Mercurial and Bazaar - in addition to Subversion.&lt;br /&gt;&lt;br /&gt;CC.rb remains easy to install, pleasant to use and simple to hack. Since the source has now moved to a &lt;a href="http://github.com/thoughtworks/cruisecontrol.rb"&gt;git repository&lt;/a&gt;, it is easier than ever to fork and contribute. We're looking forward to your pull requests!&lt;br /&gt;&lt;br /&gt;Downloads are available from both &lt;a href="http://rubyforge.org/frs/?group_id=2918"&gt;Rubyforge&lt;/a&gt; and &lt;a href="http://github.com/thoughtworks/cruisecontrol.rb/tree/v1.4.0"&gt;Github&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-3903574927410490750?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=okteJPXJC48:F77oEyYsHJ4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=okteJPXJC48:F77oEyYsHJ4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=okteJPXJC48:F77oEyYsHJ4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/okteJPXJC48" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/3903574927410490750/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=3903574927410490750" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/3903574927410490750?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/3903574927410490750?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/07/cruisecontrolrb-140-released.html" title="CruiseControl.rb 1.4.0 released!" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUQMRHw4cCp7ImA9WxJXEE0.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-1163640395608610744</id><published>2009-06-03T09:24:00.005+05:30</published><updated>2009-06-03T09:59:45.238+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T09:59:45.238+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="darkness" /><category scheme="http://www.blogger.com/atom/ns#" term="metaprogramming" /><title>Dynamic languages, Twitter, kind_of? and some statistics</title><content type="html">Some time ago &lt;a href="/2009/04/twitter-on-ruby-and-scala.html"&gt;I'd written&lt;/a&gt; about how &lt;a href="http://www.artima.com/scalazine/articles/twitter_on_scala.html"&gt;Twitter's descriptions of their own codebase&lt;/a&gt; made my hackles rise.&lt;br /&gt;&lt;br /&gt;I wasn't alone in this, and one discussion thread on the internal ThoughtWorks dev list later we had some hard numbers extracted from all the Ruby work we've done or are doing.&lt;br /&gt;&lt;br /&gt;Martin's put them up on his bliki - &lt;a href="http://martinfowler.com/bliki/DynamicTypeCheck.html"&gt;take a look&lt;/a&gt;. &lt;span style="font-style:italic;"&gt;There&lt;/span&gt; are the numbers to back the talk - you &lt;span style="font-style:italic;"&gt;don't&lt;/span&gt; need type checks all over your codebase in Ruby (or any other dynamic language), Alex Payne's opinion notwithstanding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-1163640395608610744?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=bClnjV0wATQ:XytGiRd6zLk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=bClnjV0wATQ:XytGiRd6zLk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=bClnjV0wATQ:XytGiRd6zLk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/bClnjV0wATQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/1163640395608610744/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=1163640395608610744" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/1163640395608610744?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/1163640395608610744?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/06/dynamic-languages-twitter-kindof-and.html" title="Dynamic languages, Twitter, kind_of? and some statistics" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkYNRXcycSp7ImA9WxVaE0k.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-5130760274998432808</id><published>2009-04-10T12:27:00.008+05:30</published><updated>2009-04-10T12:53:14.999+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-10T12:53:14.999+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="event" /><category scheme="http://www.blogger.com/atom/ns#" term="dcb2" /><category scheme="http://www.blogger.com/atom/ns#" term="devcampbangalore" /><title>DevCamp Tomorrow</title><content type="html">So &lt;a href="http://devcamp.in"&gt;DevCamp&lt;/a&gt; is tomorrow; I haven't got my talk(s?) anywhere close to ready, so today is going to be a hard grind. Perhaps, I'll just do the Ruby talk and skip the js one?&lt;br /&gt;&lt;br /&gt;Anyways, if you live in Bangalore or happen be in town on Saturday, 11th April, do consider dropping in (directions to ThoughtWorks office can be &lt;a href="http://devcamp.in/wiki/Venue:_ThoughtWorks_Bangalore"&gt;found on the wiki&lt;/a&gt;, map and all); there are &lt;a href="http://devcamp.in/wiki/DevCamp_Bangalore_2_Sessions"&gt;18 sessions up on the wiki&lt;/a&gt; and a bunch of interesting people participating, so it should be an entertaining gig.&lt;br /&gt;&lt;br /&gt;Oh, and do remember to tell any of your friends who might be interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-5130760274998432808?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=CRrMwQDujVQ:5nG5jeX7cQM:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=CRrMwQDujVQ:5nG5jeX7cQM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=CRrMwQDujVQ:5nG5jeX7cQM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=CRrMwQDujVQ:5nG5jeX7cQM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=CRrMwQDujVQ:5nG5jeX7cQM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=CRrMwQDujVQ:5nG5jeX7cQM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=CRrMwQDujVQ:5nG5jeX7cQM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=CRrMwQDujVQ:5nG5jeX7cQM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=CRrMwQDujVQ:5nG5jeX7cQM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=CRrMwQDujVQ:5nG5jeX7cQM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/CRrMwQDujVQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/5130760274998432808/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=5130760274998432808" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/5130760274998432808?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/5130760274998432808?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/04/devcamp-tomorrow.html" title="DevCamp Tomorrow" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;AkAEQX0zfCp7ImA9WxVaE0k.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-6478747728829537405</id><published>2009-04-06T22:19:00.012+05:30</published><updated>2009-04-10T13:01:40.384+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-10T13:01:40.384+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="functional programming" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="scala" /><title>Twitter on Ruby and Scala</title><content type="html">Ever heard a code-smell in a conversation? Like this guy is giving you gyan about how he's doing x in language y and it's such a pain in the ass, and you're thinking to yourself "x is such a darn stupid idea in the first place," know what I mean?&lt;br /&gt;&lt;br /&gt;The reason I bring this up is because this &lt;a href="http://www.artima.com/scalazine/articles/twitter_on_scala.html"&gt;interview with some of the Twitter hackers&lt;/a&gt; came up on the ThoughtWorks software dev mailing list today, and it smelt faintly of cowpats so I thought it worth a mention.&lt;br /&gt;&lt;br /&gt;Most of the interview is fairly quiet, sensible stuff; you're ambling along going 'Ho, hum, mildly interesting...' and then something fearsomely ignorant bumbles out and gores you someplace delicate. Here's an example that got pointed out: &lt;blockquote&gt;Alex Payne: I’d definitely want to hammer home what Steve said about typing. As our system has grown, a lot of the logic in our Ruby system sort of replicates a type system, either in our unit tests or as validations on models. I think it may just be a property of large systems in dynamic languages, that eventually you end up rewriting your own type system, and you sort of do it badly. You’re checking for null values all over the place. There’s lots of calls to Ruby’s kind_of? method, which asks, “Is this a kind of User object? Because that’s what we’re expecting. If we don’t get that, this is going to explode.” It is a shame to have to write all that when there is a solution that has existed in the world of programming languages for decades now.&lt;/blockquote&gt;Aargh. Aargh, I say. I would freakin' bust someone who wrote object-oriented code with &lt;code&gt;is_a?&lt;/code&gt; or &lt;code&gt;kind_of?&lt;/code&gt; in it, and here's this laddie out on the world wide internetworks proudly &lt;span style="font-style:italic;"&gt;admitting&lt;/span&gt; that his people write that kind of code. &lt;code&gt;nil&lt;/code&gt; checks everywhere? The solution to &lt;a href="http://en.wikipedia.org/wiki/Null_object_pattern"&gt;that&lt;/a&gt; has been around for ten years now, for crying out loud. Hasn't anyone told them this kind of code is a people problem, not a language problem?&lt;br /&gt;&lt;br /&gt;Here's another bit that seemed suspicious:&lt;blockquote&gt;Alex Payne: I think programmers who’ve never worked with a language with pattern matching before should be prepared to have that change their perceptions about programming. I was talking to a group of mostly Mac programmers, largely Objective-C developers. I was trying to convey to them that once you start working with pattern matching, you’ll never want to use a language without it again. It’s such a common thing that a programmer does every day. I have a collection of stuff. Let me pick certain needles out of this haystack, whether its based on a class or their contents, it’s such a powerful tool. It’s so great.&lt;/blockquote&gt;Needle in a haystack, eh? In my limited fp experience, pattern matching is used in functional languages for both terseness and for polymorphism. What they seem to be describing - using pattern matching as a glorified regexp and an accessory to the violation of encapsulation - seems pretty unnecessary, given that they're using an OO language that supports polymorphism through objects anyways. This kind of stuff was why I put my Scala studies on hold until I learned how to think correctly in functional terms; Scala makes it easy for a novice to write code that is neither good FP nor good OO.&lt;br /&gt;&lt;br /&gt;I have this feeling that Twitter is always 'discovering' something which the rest of the world already knows and has used for a long time. What's worse, they won't go look at the tons of work that's out there and learn from that; no, they'll make the same naive mistakes all over again, like they did a couple of years ago with message queues, a story I've heard from a lot of people.&lt;br /&gt;&lt;br /&gt;Don't get me wrong here, I'm not dissing everything they've said; they're good chaps and have a fantastic service deserving of respect. I've also written a &lt;span style="font-style:italic;"&gt;little&lt;/span&gt; Scala myself and have been lurking on the &lt;span style="font-style:italic;"&gt;/Lift/&lt;/span&gt; lists for over a year and I agree with them when they say Scala is a nice language. But frankly, a little engineering and attention to code quality might help them solve more problems than switching languages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-6478747728829537405?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Y1NJCunp15w:51BeLwKX58g:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Y1NJCunp15w:51BeLwKX58g:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Y1NJCunp15w:51BeLwKX58g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=Y1NJCunp15w:51BeLwKX58g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Y1NJCunp15w:51BeLwKX58g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=Y1NJCunp15w:51BeLwKX58g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Y1NJCunp15w:51BeLwKX58g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Y1NJCunp15w:51BeLwKX58g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Y1NJCunp15w:51BeLwKX58g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=Y1NJCunp15w:51BeLwKX58g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/Y1NJCunp15w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/6478747728829537405/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=6478747728829537405" title="17 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/6478747728829537405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/6478747728829537405?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/04/twitter-on-ruby-and-scala.html" title="Twitter on Ruby and Scala" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>17</thr:total></entry><entry gd:etag="W/&quot;A0QCQn08cCp7ImA9WxVbEU4.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-6913532167865883593</id><published>2009-03-22T23:27:00.007+05:30</published><updated>2009-03-27T13:06:03.378+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-27T13:06:03.378+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="irc" /><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="undernet" /><title>Connecting to Undernet in India is easy... not.</title><content type="html">It appears that &lt;a href="http://undernet.org"&gt;Undernet&lt;/a&gt; is &lt;a href="http://forum.undernet.org/viewtopic.php?f=2&amp;t=9536&amp;start=15"&gt;blocked across a whole bunch of networks in India for reasons unknown&lt;/a&gt;. Here's my traceroute to us.undernet.org:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;~$ traceroute us.undernet.org&lt;br /&gt;traceroute: Warning: us.undernet.org has multiple addresses; using 66.186.59.50&lt;br /&gt;traceroute to us.undernet.org (66.186.59.50), 64 hops max, 40 byte packets&lt;br /&gt; 1  192.168.1.1 (192.168.1.1)  1.227 ms  0.858 ms  0.875 ms&lt;br /&gt; 2  ABTS-KK-Dynamic-001.64.167.122.airtelbroadband.in (122.167.64.1)  39.120 ms  26.279 ms *&lt;br /&gt; 3  ABTS-KK-Static-041.32.166.122.airtelbroadband.in (122.166.32.41)  47.611 ms  25.424 ms  25.164 ms&lt;br /&gt; 4  ABTS-KK-Static-009.32.166.122.airtelbroadband.in (122.166.32.9)  25.713 ms  25.913 ms  24.841 ms&lt;br /&gt; 5  122.175.255.29 (122.175.255.29)  26.253 ms  25.515 ms  25.598 ms&lt;br /&gt; 6  * * *&lt;br /&gt; 7  * * *&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;There is just one server accessible, and that's montreal.qc.ca.undernet.org. Hopefully, this should save you a half hour's googling.&lt;br /&gt;&lt;br /&gt;Don't let this stop you from filing a complaint with your ISP though (I just logged one with Airtel - ticket #18088886 - and they've promised to have this sorted by 1:30 pm tomorrow) - this is still a free country and they have no business blocking &lt;span style="font-style:italic;"&gt;anything&lt;/span&gt; on the internetworks.&lt;br /&gt;&lt;br /&gt;Update 2009-03-24:&lt;br /&gt;Oslo.NO.EU.Undernet.Org also seems to work. Still no response from Airtel, however. That's quite atypical - it's the first time in about three years that Airtel has failed their "we'll fix it in four business hours" promise.&lt;br /&gt;&lt;br /&gt;Update 2009-03-27:&lt;blockquote&gt;&lt;br /&gt;Date: 25/3/09 1:24 AM&lt;br /&gt;Hi,&lt;br /&gt;&lt;br /&gt;I was to be informed about the status issue 18088886 regarding blocking of Undernet IRC servers by Airtel latest by 13:30 on 24th March, but have not been contacted. Please get back to me with an update.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Sidu.&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;Date: 25/3/09 1:32 PM&lt;br /&gt;&lt;br /&gt;Dear Mr.Sidu,&lt;br /&gt;&lt;br /&gt;Thank you for writing to us at Airtel Telemedia Services.&lt;br /&gt;&lt;br /&gt;We acknowledge the receipt of your mail dated March 25th, 2009.&lt;br /&gt;&lt;br /&gt;With regards to reference number 18088886, we regret to inform you that IRC&lt;br /&gt;port 66602 cannot be opened as the same has&lt;br /&gt;been blocked by Department of Telecommunications (DoT).&lt;br /&gt;&lt;br /&gt;For further assistance, please.&lt;br /&gt;• Call us at 080-44444121&lt;br /&gt;• E-Mail us at - care.karnataka@airtel.in&lt;br /&gt;• Fax us at 080-41112346&lt;br /&gt;&lt;br /&gt;Assuring you of our best of  services at all times.&lt;br /&gt;Yours sincerely,&lt;br /&gt;&lt;br /&gt;Thrapthi&lt;br /&gt;Customer Relations&lt;br /&gt;Airtel Telemedia Services&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;Date: 25/3/09 3:08 PM&lt;br /&gt;Hi,&lt;br /&gt;&lt;br /&gt;The highest port possible is 65535. Port number 66602 does not exist. Please confirm your response.&lt;br /&gt;&lt;br /&gt;Please keep in mind that I am able to connect to other IRC networks (like Freenode) on the standard IRC ports, which would not be possible if the ports themselves were blocked by the DoT.&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;Sidu. &lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;Date: 26/3/09 9:15 AM&lt;br /&gt;&lt;br /&gt;Dear Mr. Sidu,&lt;br /&gt;&lt;br /&gt;Thank you for writing to us at Airtel Telemedia Services.&lt;br /&gt;&lt;br /&gt;We acknowledge the receipt of your mail dated March 25th, 2009.&lt;br /&gt;&lt;br /&gt;Your request for broadband related has already been registered with the&lt;br /&gt;reference number&lt;br /&gt;18088886 and we have forwarded your mail to our technical team for further&lt;br /&gt;clarifications.&lt;br /&gt;&lt;br /&gt;We would get back to you as per the updates.&lt;br /&gt;&lt;br /&gt;For further assistance, please.&lt;br /&gt;• Call us at 080-44444121&lt;br /&gt;• E-Mail us at - care.karnataka@airtel.in&lt;br /&gt;• Fax us at 080-41112346&lt;br /&gt;&lt;br /&gt;Assuring you of our best of  services at all times.&lt;br /&gt;Yours sincerely,&lt;br /&gt;&lt;br /&gt;Mohsin.&lt;br /&gt;Customer Relations&lt;br /&gt;Airtel Telemedia Services&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-6913532167865883593?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=82Q_DUxBfUo:_huMI1V3Ek0:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=82Q_DUxBfUo:_huMI1V3Ek0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=82Q_DUxBfUo:_huMI1V3Ek0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=82Q_DUxBfUo:_huMI1V3Ek0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=82Q_DUxBfUo:_huMI1V3Ek0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=82Q_DUxBfUo:_huMI1V3Ek0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=82Q_DUxBfUo:_huMI1V3Ek0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=82Q_DUxBfUo:_huMI1V3Ek0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=82Q_DUxBfUo:_huMI1V3Ek0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=82Q_DUxBfUo:_huMI1V3Ek0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/82Q_DUxBfUo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/6913532167865883593/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=6913532167865883593" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/6913532167865883593?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/6913532167865883593?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/03/connecting-to-undernet-in-india-is-easy.html" title="Connecting to Undernet in India is easy... not." /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>5</thr:total></entry><entry gd:etag="W/&quot;D0ICQHg5cSp7ImA9WxVUEUQ.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-2878213727096657061</id><published>2009-03-16T14:16:00.007+05:30</published><updated>2009-03-16T14:56:01.629+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-16T14:56:01.629+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="event" /><category scheme="http://www.blogger.com/atom/ns#" term="dcb2" /><category scheme="http://www.blogger.com/atom/ns#" term="devcampbangalore" /><title>Announcing DevCamp Bangalore 2</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ABLwpl_AaVo/Sb4UrhdLMTI/AAAAAAAAAJw/8Cm1RI-87js/s1600-h/devcamp22009.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 104px;" src="http://2.bp.blogspot.com/_ABLwpl_AaVo/Sb4UrhdLMTI/AAAAAAAAAJw/8Cm1RI-87js/s400/devcamp22009.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5313707348291432754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We're happy to announce the second edition of DevCamp Bangalore, &lt;a href="http://devcamp.in/"&gt;DevCamp Bangalore 2&lt;/a&gt;; it's happening on Saturday, 11th April 2009.&lt;br /&gt;&lt;br /&gt;DevCamp is an un-conference by the &lt;a href="http://www.cs.berkeley.edu/%7Ebh/hacker.html" class="external text" title="http://www.cs.berkeley.edu/~bh/hacker.html" rel="nofollow"&gt;hackers&lt;/a&gt;, for the &lt;a href="http://www.catb.org/jargon/html/meaning-of-hack.html" class="external text" title="http://www.catb.org/jargon/html/meaning-of-hack.html" rel="nofollow"&gt;hackers&lt;/a&gt; and of the &lt;a href="http://en.wikipedia.org/wiki/Hacker_%28programmer_subculture%29#Definition" class="external text" title="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)#Definition" rel="nofollow"&gt;hackers&lt;/a&gt;.&lt;br /&gt;It's a species of &lt;a href="http://en.wikipedia.org/wiki/Barcamp" class="external text" title="http://en.wikipedia.org/wiki/Barcamp" rel="nofollow"&gt;BarCamp&lt;/a&gt; where anything a lover of computers and technology would consider important or entertaining goes.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.devcamp.in/wiki/DevCamp_Bangalore_1"&gt;first DevCamp&lt;/a&gt; happened a little over a year ago and was a lot of fun; we're hoping hoping to keep that trend going with DCB2.&lt;br /&gt;&lt;br /&gt;If you're planning to do a session at DCB2, do keep in mind the fact that everyone at DevCamp is a hacker, a pro. Please assume a high level of exposure and knowledge on the part of your audience and tailor your sessions to suit. Avoid 'Hello World' and how-to sessions which can be trivially found on the net. First hand war stories, in-depth analyses of topics and live demos are best.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-2878213727096657061?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=q0xEUchZpDE:_h_xM-MYQR4:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=q0xEUchZpDE:_h_xM-MYQR4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=q0xEUchZpDE:_h_xM-MYQR4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=q0xEUchZpDE:_h_xM-MYQR4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=q0xEUchZpDE:_h_xM-MYQR4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=q0xEUchZpDE:_h_xM-MYQR4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=q0xEUchZpDE:_h_xM-MYQR4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=q0xEUchZpDE:_h_xM-MYQR4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=q0xEUchZpDE:_h_xM-MYQR4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=q0xEUchZpDE:_h_xM-MYQR4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/q0xEUchZpDE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/2878213727096657061/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=2878213727096657061" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/2878213727096657061?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/2878213727096657061?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/03/announcing-devcamp-bangalore-2.html" title="Announcing DevCamp Bangalore 2" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_ABLwpl_AaVo/Sb4UrhdLMTI/AAAAAAAAAJw/8Cm1RI-87js/s72-c/devcamp22009.jpg" height="72" width="72" /><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DUcCSX04fCp7ImA9WxVVGUo.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-4611619204875057053</id><published>2009-03-14T02:01:00.004+05:30</published><updated>2009-03-14T02:14:28.334+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-14T02:14:28.334+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="activeresource" /><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="rails" /><title>ActiveResource logging tip</title><content type="html">If you're developing using ActiveResource, you should to add this line to your environment.rb:&lt;code&gt;&lt;pre&gt;ActiveResource::Base.logger = ActiveRecord::Base.logger&lt;/pre&gt;&lt;/code&gt;That will write all your resource requests to the log as well, a useful thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-4611619204875057053?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=VeU7lAvvtHw:yXixkf8WTc4:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=VeU7lAvvtHw:yXixkf8WTc4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=VeU7lAvvtHw:yXixkf8WTc4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=VeU7lAvvtHw:yXixkf8WTc4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=VeU7lAvvtHw:yXixkf8WTc4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=VeU7lAvvtHw:yXixkf8WTc4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=VeU7lAvvtHw:yXixkf8WTc4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=VeU7lAvvtHw:yXixkf8WTc4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=VeU7lAvvtHw:yXixkf8WTc4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=VeU7lAvvtHw:yXixkf8WTc4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/VeU7lAvvtHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/4611619204875057053/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=4611619204875057053" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/4611619204875057053?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/4611619204875057053?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/03/activresource-logging-tip.html" title="ActiveResource logging tip" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>9</thr:total></entry><entry gd:etag="W/&quot;A0EAQ34ycSp7ImA9WxVVGEo.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-7364338863096087077</id><published>2009-03-12T23:02:00.003+05:30</published><updated>2009-03-12T23:10:42.099+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-12T23:10:42.099+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="functional programming" /><category scheme="http://www.blogger.com/atom/ns#" term="event" /><title>Bangalore Functional Programming Group is meeting on Saturday, 14th March</title><content type="html">The next &lt;a href="http://groups.google.com/group/bangalore-fp"&gt;bangalore-fp&lt;/a&gt; meetup is scheduled to take place on the 14'th of March at ThoughtWorks.&lt;br /&gt;&lt;br /&gt;Presentations:.&lt;br /&gt;1. Functional Programming 101 by Varoun&lt;br /&gt;2. Dojo Zen aka Web 3D by Tom Elam&lt;br /&gt;&lt;br /&gt;Date/Time: 14-Mar-2009, 2:30 PM - 4:30 PM&lt;br /&gt;&lt;br /&gt;Location: ThoughtWorks Technologies (India) Pvt Ltd.&lt;br /&gt;          2nd Floor, Tower C, Corporate Block, Diamond District&lt;br /&gt;          Airport Road, Bangalore - 560 008, India.&lt;br /&gt;&lt;br /&gt;Directions + map &lt;a href="/2006/11/thoughtworks-is-hosting-barcamp.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-7364338863096087077?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Q-9eBfGquwA:6BZYLzVfM3E:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Q-9eBfGquwA:6BZYLzVfM3E:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Q-9eBfGquwA:6BZYLzVfM3E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=Q-9eBfGquwA:6BZYLzVfM3E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Q-9eBfGquwA:6BZYLzVfM3E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=Q-9eBfGquwA:6BZYLzVfM3E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Q-9eBfGquwA:6BZYLzVfM3E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Q-9eBfGquwA:6BZYLzVfM3E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=Q-9eBfGquwA:6BZYLzVfM3E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=Q-9eBfGquwA:6BZYLzVfM3E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/Q-9eBfGquwA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/7364338863096087077/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=7364338863096087077" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/7364338863096087077?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/7364338863096087077?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/03/bangalore-functional-programming-group.html" title="Bangalore Functional Programming Group is meeting on Saturday, 14th March" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ak8MQ3c8eSp7ImA9WxVVGEU.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-2362634728113445644</id><published>2009-03-08T14:19:00.005+05:30</published><updated>2009-03-13T01:44:42.971+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-13T01:44:42.971+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="metaprogramming" /><title>A simple define_method example</title><content type="html">Someone on #ruby-lang wanted to know how to define a method on a class when the method is first called. Here's a quick example. &lt;code&gt;&lt;/code&gt;&lt;pre&gt;require 'rubygems'&lt;br /&gt;require 'spec'&lt;br /&gt;&lt;br /&gt;module DynamicGetter&lt;br /&gt;  def method_missing(name, *args)&lt;br /&gt;    if(@attributes.has_key? name)&lt;br /&gt;      self.class.class_eval do&lt;br /&gt;       define_method(name){ @attributes[name] }&lt;br /&gt;      end&lt;br /&gt;      self.send(name, *args)&lt;br /&gt;    else&lt;br /&gt;      super&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;describe DynamicGetter do&lt;br /&gt;  before(:each) do&lt;br /&gt;  # Reference the class used in the specs&lt;br /&gt;  # as an ordinary variable rather than a&lt;br /&gt;  # named constant (@ooga instead of Ooga)&lt;br /&gt;  # so that it can be created afresh for&lt;br /&gt;  # each spec.&lt;br /&gt;  # If we did class Ooga, the second spec&lt;br /&gt;  # would fail because the first spec already&lt;br /&gt;  # created the method #woot.&lt;br /&gt;&lt;br /&gt;    @ooga_klass = Class.new(Object)&lt;br /&gt;    @ooga_klass.class_eval do&lt;br /&gt;      include DynamicGetter&lt;br /&gt;&lt;br /&gt;      def initialize(attributes = {})&lt;br /&gt;        @attributes = attributes&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  it "should know how to add a method to a class on first call" do&lt;br /&gt;    o = @ooga_klass.new(:woot =&gt; 5)&lt;br /&gt;    o.should_not respond_to(:woot)&lt;br /&gt;    o.woot.should == 5&lt;br /&gt;    o.should respond_to(:woot)&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  it "should raise a method not found exception if the attribute isn't present" do&lt;br /&gt;    lambda{ @ooga_klass.new.woot }.should raise_error(NoMethodError)&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;Another example is the Rails &lt;code&gt;find_by_*&lt;/code&gt; methods, which are defined the first time you call them.&lt;br /&gt;If, for some reason, you want to apply the example I've given on a per-instance basis, look at &lt;a href="http://www.blogger.com/2008/04/consistent-interfaces-contrived.html"&gt;this post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Related posts:&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://blog.sidu.in/2007/11/ruby-blocks-gotchas.html"&gt;Ruby blocks gotchas &lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://blog.sidu.in/2008/02/loading-classes-from-strings-in-ruby.html"&gt;Loading classes from strings in Ruby &lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://blog.sidu.in/2007/12/rubys-new-as-factory.html"&gt;Ruby's new as a factory &lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://blog.sidu.in/2007/12/rubys-methodadded.html"&gt;Ruby's method_added object lifcycle hook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.sidu.in/2008/04/consistent-interfaces-contrived.html"&gt;&lt;span style="font-size:85%;"&gt;Consistent interfaces, contrived examples and define_method for instances&lt;/span&gt;&lt;/a&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/3718956085911858962-2362634728113445644?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=t-oGzVnNwOQ:g5I2my52KpE:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=t-oGzVnNwOQ:g5I2my52KpE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=t-oGzVnNwOQ:g5I2my52KpE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=t-oGzVnNwOQ:g5I2my52KpE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=t-oGzVnNwOQ:g5I2my52KpE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=t-oGzVnNwOQ:g5I2my52KpE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=t-oGzVnNwOQ:g5I2my52KpE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=t-oGzVnNwOQ:g5I2my52KpE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=t-oGzVnNwOQ:g5I2my52KpE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=t-oGzVnNwOQ:g5I2my52KpE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/t-oGzVnNwOQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/2362634728113445644/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=2362634728113445644" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/2362634728113445644?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/2362634728113445644?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/03/simple-definemethod-example.html" title="A simple define_method example" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;A0UFRn49eCp7ImA9WxVVFE4.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-6684536881933080558</id><published>2009-03-07T20:44:00.004+05:30</published><updated>2009-03-07T20:50:17.060+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-07T20:50:17.060+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="jruby" /><title>JRuby symlinks</title><content type="html">If you plan on building running JRuby from source, then here are a few useful symlinks to get things set up. Remember to change the paths to suit.&lt;code&gt;&lt;/code&gt;&lt;pre&gt;ln -s ~/Work/ruby/jruby/bin/jruby /usr/bin/jruby&lt;br /&gt;ln -s ~/Work/ruby/jruby/bin/jirb /usr/bin/jirb&lt;br /&gt;ln -s ~/Work/ruby/jruby/bin/jgem /usr/bin/jgem&lt;br /&gt;ln -s ~/Work/ruby/jruby/bin/jirb_swing /usr/bin/jirb_swing&lt;/pre&gt;Why run JRuby from source? Because it's developed very actively and there is enough happening that I like to do an &lt;code&gt;svn up&lt;/code&gt; every other week, followed by and &lt;code&gt;ant clean&lt;/code&gt; and an &lt;code&gt;ant&lt;/code&gt;. Yes, that is all it takes :). The svn url is &lt;code&gt;http://svn.codehaus.org/jruby/trunk/jruby&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-6684536881933080558?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=yaAj7jyc_0E:YKYK-vqM5Jo:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=yaAj7jyc_0E:YKYK-vqM5Jo:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=yaAj7jyc_0E:YKYK-vqM5Jo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=yaAj7jyc_0E:YKYK-vqM5Jo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=yaAj7jyc_0E:YKYK-vqM5Jo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=yaAj7jyc_0E:YKYK-vqM5Jo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=yaAj7jyc_0E:YKYK-vqM5Jo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=yaAj7jyc_0E:YKYK-vqM5Jo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=yaAj7jyc_0E:YKYK-vqM5Jo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=yaAj7jyc_0E:YKYK-vqM5Jo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/yaAj7jyc_0E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/6684536881933080558/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=6684536881933080558" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/6684536881933080558?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/6684536881933080558?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/03/jruby-symlinks.html" title="JRuby symlinks" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CEEGRn85fSp7ImA9WxVWFko.&quot;"><id>tag:blogger.com,1999:blog-3718956085911858962.post-2561197697214383071</id><published>2009-02-26T23:06:00.006+05:30</published><updated>2009-02-26T23:53:47.125+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-26T23:53:47.125+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="book review verdict:read" /><title>Book Review: The Left Hand of Darkness</title><content type="html">Title: &lt;a href="http://www.amazon.com/gp/product/0441007317?ie=UTF8&amp;tag=workatthedini-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0441007317"&gt;The Left Hand of Darkness&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=workatthedini-20&amp;l=as2&amp;o=1&amp;a=0441007317" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;Author: Ursula K LeGuin&lt;br /&gt;Genre: Science Fiction&lt;br /&gt;Verdict: Read&lt;br /&gt;Started: 2009-02-24&lt;br /&gt;Finished: 2009-02-25&lt;br /&gt;&lt;br /&gt;'&lt;a href="http://www.amazon.com/gp/product/0441007317?ie=UTF8&amp;tag=workatthedini-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0441007317"&gt;The Left Hand of Darkness&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=workatthedini-20&amp;l=as2&amp;o=1&amp;a=0441007317" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;' came highly recommended by several friends; the cover had no less a personage than Michael Moorcock comparing it to '&lt;a href="http://www.amazon.com/gp/product/0618517650?ie=UTF8&amp;tag=workatthedini-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0618517650"&gt;The Lord of the Rings&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=workatthedini-20&amp;l=as2&amp;o=1&amp;a=0618517650" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;.' I certainly enjoyed reading this book; it wasn't something that made a huge impression (like, say, '&lt;a href="http://www.amazon.com/gp/product/0345459407?ie=UTF8&amp;tag=workatthedini-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0345459407"&gt;Perdido Street Station&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=workatthedini-20&amp;l=as2&amp;o=1&amp;a=0345459407" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;' did), but it's a charming tale in it's own quiet, subtle way. I must admit this is the first time I'm reading Ursula LeGuin, so I didn't get the few references to previous books in the series. It can however be read an an independent novel without spoiling the experience.&lt;br /&gt;&lt;br /&gt;The narrative is almost entirely in the first person with very few exceptions; the texture of the narrative is crisp and not given to, for the lack of a better adjective, loudness. This book deals mostly with society and the way it shaped by the sexuality of its members. It also deals with religion to some small extent; I must say I found the philosophy of the Handdara extremely fascinating.&lt;br /&gt;&lt;br /&gt;This is very much a 'What if?' book in the same vein as '&lt;a href="http://www.amazon.com/gp/product/1563899809?ie=UTF8&amp;amp;tag=workatthedini-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1563899809"&gt;Y: The Last Man&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=workatthedini-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1563899809" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt;' - except that instead of all the men vanishing we have a society of human hermaphrodites who take on one gender or the other just for a day or two during every sexual cycle. LeGuin speculates about the kind of society which would evolve if humanity's established pattern of male-female behaviour is replaced by one where every human is truly equal in terms of both social roles and expectations, especially child-bearing. The book is set on a harsh, difficult planet in the middle of an Ice age, and is narrated from the perspective of an outsider, an envoy to one of the nations there.&lt;br /&gt;&lt;br /&gt;This is a gentle, thoughtful book and I recommend it without reservation.&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=workatthedini-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=0441007317&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3718956085911858962-2561197697214383071?l=blog.sidu.in' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=M44B3OumUi8:72-SUV8-en0:mtsM-81NTLw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=M44B3OumUi8:72-SUV8-en0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=M44B3OumUi8:72-SUV8-en0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=M44B3OumUi8:72-SUV8-en0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=M44B3OumUi8:72-SUV8-en0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=M44B3OumUi8:72-SUV8-en0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=M44B3OumUi8:72-SUV8-en0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=M44B3OumUi8:72-SUV8-en0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.sidu.in/~ff/diningtablecoder?a=M44B3OumUi8:72-SUV8-en0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/diningtablecoder?i=M44B3OumUi8:72-SUV8-en0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/diningtablecoder/~4/M44B3OumUi8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sidu.in/feeds/2561197697214383071/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3718956085911858962&amp;postID=2561197697214383071" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/2561197697214383071?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3718956085911858962/posts/default/2561197697214383071?v=2" /><link rel="alternate" type="text/html" href="http://blog.sidu.in/2009/02/book-review-left-hand-of-darkness.html" title="Book Review: The Left Hand of Darkness" /><author><name>Sidu</name><uri>http://www.blogger.com/profile/11938300811286150164</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://static.flickr.com/74/186326016_765e6e2222_s.jpg" /></author><thr:total>3</thr:total></entry></feed>

