<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-32010164</id><updated>2011-11-27T16:12:52.371-08:00</updated><category term='Personal'/><category term='Capistrano.'/><category term='Wordpress'/><category term='ar_mailer'/><category term='YSLOW'/><category term='Selenium'/><category term='Expensometer'/><category term='Ajaxscaffold'/><category term='AJAX'/><category term='Change'/><category term='Web'/><category term='Cannes'/><category term='RSS'/><category term='Expenses'/><category term='AJAX Prototype Rails Ajax.Updater'/><category term='Web Technologies'/><category term='barcampbangalore4'/><category term='ActiveScaffold'/><category term='openID'/><category term='RFacebook'/><category term='Monit'/><category term='multipart-form'/><category term='Facebook'/><category term='Startup'/><category term='Kheer'/><category term='PuneRuby'/><category term='BarCampPune3'/><category term='Broadband'/><category term='Cooking'/><category term='PDF'/><category term='Javascript'/><category term='Rails'/><category term='Pune'/><category term='YUI Datatable AJAX'/><category term='Attachment_fu'/><category term='Blogspot'/><category term='BarCampPune2'/><category term='GK'/><category term='Google'/><category term='PuneHackathon'/><category term='Biofuels'/><category term='Ebook'/><category term='Life'/><category term='Ruby'/><category term='Hobo'/><category term='HTML'/><category term='Feedtools'/><category term='RubyonRails'/><category term='microsoft'/><category term='ActiveRecordHelper'/><category term='Watir'/><category term='Upload'/><category term='AutomationTesting'/><category term='gmail'/><category term='TheAuteurs'/><title type='text'>Yet Another Blogger</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.jatinder.me/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-32010164.post-3549737688627769870</id><published>2008-07-07T11:52:00.000-07:00</published><updated>2008-07-07T12:05:57.425-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multipart-form'/><category scheme='http://www.blogger.com/atom/ns#' term='Upload'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Submit Multipart Form Programmatically.</title><content type='html'>I had a requirement where one application wanted to talk to another application for uploading a video.&lt;br /&gt;I couldn't leverage Active Resource since it doesn't seem to have option to submit multipart data. I came up a with a solution to use mechanize along with Hpricot.&lt;br /&gt;&lt;style&gt;&lt;br /&gt;pre {&lt;br /&gt;        background-color: #f1f1f3;&lt;br /&gt;        color: #112;&lt;br /&gt;        padding: 10px;&lt;br /&gt;        font-size: 13px;&lt;br /&gt;        overflow: auto;&lt;br /&gt;        margin: 4px 0px;&lt;br /&gt;  width: 97%;&lt;br /&gt;  overflow-x: auto;&lt;br /&gt;  overflow-y: hidden;&lt;br /&gt;  margin-top: 12px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Syntax highlighting */&lt;br /&gt;pre .normal {}&lt;br /&gt;pre .comment { color: #005; font-style: italic; }&lt;br /&gt;pre .keyword { color: #A00; font-weight: bold; }&lt;br /&gt;pre .method { color: #077; }&lt;br /&gt;pre .class { color: #074; }&lt;br /&gt;pre .module { color: #050; }&lt;br /&gt;pre .punct { color: #447; font-weight: bold; }&lt;br /&gt;pre .symbol { color: #099; }&lt;br /&gt;pre .string { color: #944; background: #FFE; }&lt;br /&gt;pre .char { color: #F07; }&lt;br /&gt;pre .ident { color: #004; }&lt;br /&gt;pre .constant { color: #07F; }&lt;br /&gt;pre .regex { color: #B66; background: #FEF; }&lt;br /&gt;pre .number { color: #F99; }&lt;br /&gt;pre .attribute { color: #5bb; }&lt;br /&gt;pre .global { color: #7FB; }&lt;br /&gt;pre .expr { color: #227; }&lt;br /&gt;pre .escape { color: #277; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;BasicAuthMechanize&lt;/span&gt; &lt;span class="punct"&gt;&lt;&lt;/span&gt; &lt;span class="constant"&gt;WWW&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Mechanize&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;set_headers&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;u&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;r&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="keyword"&gt;super&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;u&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;r&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="ident"&gt;r&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;basic_auth&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;API_KEY&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;X&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;&lt;br /&gt;    &lt;span class="ident"&gt;r&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ident"&gt;agent&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;BasicAuthMechanize&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;url&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ident"&gt;node&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Hpricot&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Elem&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;Hpricot&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;STag&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;('&lt;/span&gt;&lt;span class="string"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;'))&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;node&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;']&lt;/span&gt;  &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;url&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;node&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;method&lt;/span&gt;&lt;span class="punct"&gt;']&lt;/span&gt;  &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;POST&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;node&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;enctype&lt;/span&gt;&lt;span class="punct"&gt;']&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;multipart/form-data&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ident"&gt;form&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;WWW&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Mechanize&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Form&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;node&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;fields&lt;/span&gt; &lt;span class="punct"&gt;&lt;&lt;&lt;/span&gt; &lt;span class="constant"&gt;WWW&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Mechanize&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Form&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Field&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;("&lt;/span&gt;&lt;span class="string"&gt;video_image[video_id]&lt;/span&gt;&lt;span class="punct"&gt;",&lt;/span&gt;&lt;span class="ident"&gt;video_id&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;file_uploads&lt;/span&gt; &lt;span class="punct"&gt;&lt;&lt;&lt;/span&gt; &lt;span class="constant"&gt;WWW&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Mechanize&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Form&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;FileUpload&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;("&lt;/span&gt;&lt;span class="string"&gt;video_image[uploaded_data]&lt;/span&gt;&lt;span class="punct"&gt;",&lt;/span&gt; &lt;span class="ident"&gt;file_path&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ident"&gt;page&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;agent&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;submit&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="ident"&gt;page&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;response&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;status&lt;/span&gt;&lt;span class="punct"&gt;'].&lt;/span&gt;&lt;span class="ident"&gt;to_i&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;200&lt;/span&gt; &lt;span class="comment"&gt;# Success&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-3549737688627769870?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/3549737688627769870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=3549737688627769870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3549737688627769870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3549737688627769870'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2008/07/submit-multipart-form-programmatically.html' title='Submit Multipart Form Programmatically.'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-2274680281736566277</id><published>2008-05-18T21:36:00.000-07:00</published><updated>2008-05-18T21:39:15.079-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cannes'/><category scheme='http://www.blogger.com/atom/ns#' term='TheAuteurs'/><title type='text'>Half A Dream</title><content type='html'>&lt;embed width="448" height="307" bgcolor="#ffffff" src="http://www.theauteurs.com/player/AuteursVideoPlayer.swf" type="application/x-shockwave-flash" flashvars="id=4&amp;thumbnailURL=http://s3.amazonaws.com/auteurs_staging/video_images/13/848-cannes_film3.jpg&amp;logoURL=http://www.theauteurs.com/&amp;watchURL=http://www.theauteurs.com/videos/4&amp;secure=1&amp;embedded=1" quality="high" allowScriptAccess="always" allowfullscreen="true" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-2274680281736566277?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/2274680281736566277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=2274680281736566277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2274680281736566277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2274680281736566277'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2008/05/half-dream.html' title='Half A Dream'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-196371731415579211</id><published>2008-04-21T23:03:00.000-07:00</published><updated>2008-04-22T01:50:23.741-07:00</updated><title type='text'>Tropa Da Elite Trailer</title><content type='html'>&lt;embed width="448" height="307" flashvars="trailer=1&amp;main=1&amp;flvURL=http://bitcast-a.bitgravity.com/theauteurs/Trailers/Tropa500.flv&amp;flvOffset=&amp;thumbnailURL=http://s3.amazonaws.com/auteurs_staging/stills/2100/P.jpg&amp;logoURL=http://www.theauteurs.com&amp;watchURL=http://www.theauteurs.com/films/77/reel&amp;secure=0&amp;id=&amp;timeTrack=0" allowfullscreen="true" allowScriptAccess="always" quality="high" bgcolor="#FFFFFF" name="AuteursPlayer" id="AuteursPlayer" style="" src="http://www.theauteurs.com/player/AuteursPlayer.swf" type="application/x-shockwave-flash"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-196371731415579211?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/196371731415579211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=196371731415579211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/196371731415579211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/196371731415579211'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2008/04/tropa-da-elite-trailer.html' title='Tropa Da Elite Trailer'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-1312793994211132007</id><published>2008-04-11T14:11:00.000-07:00</published><updated>2008-04-11T14:58:16.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Monit'/><category scheme='http://www.blogger.com/atom/ns#' term='ar_mailer'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>ar_mailer: how to avoid memory related issues</title><content type='html'>In one of my projects. I am using &lt;a href="http://blog.segment7.net/articles/2006/08/15/ar_mailer"&gt;ar_mailer&lt;/a&gt; gem to store emails in the the database and send them in batches every few minutes. its really a handy gem.&lt;br /&gt;&lt;br /&gt;About its usage and how it works, you can refer this &lt;a href="http://blog.segment7.net/articles/2006/08/15/ar_mailer"&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;ar_mailer has 2 components, one which helps you to store emails in the database and the 2nd which reads emails from the database and sends them out. The 2nd component is available as a utility called "ar_sendmail", which supports various options. Below, I will show you how I first used it wrongly(which brought our site down!) and then correctly using monit.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Wrong Usage(for my project situation)&lt;/b&gt;&lt;br /&gt;I setup a cron job which runs every minute, invokes ar_sendmail with following options&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="ident"&gt;ar_sendmail&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;b&lt;/span&gt; &lt;span class="number"&gt;100&lt;/span&gt; &lt;span class="punct"&gt;--&lt;/span&gt;&lt;span class="ident"&gt;max&lt;/span&gt;&lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;age&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;c&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;/data/project/current&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="ident"&gt;production&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt; --once&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Above command invokes ar_sendmail once(--once) and send out a batch of 100 emails(-b).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Whats wrong above?&lt;/b&gt;&lt;br /&gt;The cron job executes ar_sendmail every minute, ar_sendmail invokes the whole Rails environment, sends out emails and then finishes. There are 2 problems,&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;ar_mailer invokes the whole production environment every minute&lt;/b&gt;: it takes a while to load the production environment(all the plugins, gems etc. gets loaded) and every minute!&lt;br /&gt;&lt;br /&gt;2. &lt;b&gt;Multiple instances of ar_sendmail&lt;/b&gt;: Multiple instances of ar_sendmail start running since ar_sendmail doesn't create a file lock to avoid this situation. For me, once 7 instances of ar_sendmail started running which brought down the system and had to be rebooted.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Correct Usage&lt;/b&gt;&lt;br /&gt;So from above we need to make sure that ar_sendmail doesn't invoke the whole Rails environment every minute and also multiple instances of ar_mailer doesn't get spawned.&lt;br /&gt;1. "-d" option of ar_sendmail: ar_sendmail has "-d" option which runs ar_sendmail as a daemon. it invokes webrick server once for all. So the new ar_sendmail command looks like following&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="ident"&gt;ar_sendmail&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;d&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;b&lt;/span&gt; &lt;span class="number"&gt;100&lt;/span&gt; &lt;span class="punct"&gt;--&lt;/span&gt;&lt;span class="ident"&gt;max&lt;/span&gt;&lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;age&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; &lt;span class="punct"&gt;--&lt;/span&gt;&lt;span class="ident"&gt;delay&lt;/span&gt; &lt;span class="number"&gt;60&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;c&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;/data/project/current&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;production&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note the -delay and -d option&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;2. To make sure that multiple instances of ar_sendmail doesn't get spawned, use monit as described &lt;a href="http://www.lukeludwig.com/blog/articles/2007/12/05/running-ar_sendmail-with-monit"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt; Life is back to normal...&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-1312793994211132007?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/1312793994211132007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=1312793994211132007' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1312793994211132007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1312793994211132007'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2008/04/armailer-how-to-avoid-memory-related.html' title='ar_mailer: how to avoid memory related issues'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-1690064435586949667</id><published>2008-04-01T14:57:00.000-07:00</published><updated>2008-04-01T14:59:52.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TheAuteurs'/><title type='text'>The Auteurs purchases The Weinstein Company for $2.1 billion</title><content type='html'>This is HUGE.&lt;br /&gt;&lt;br /&gt;http://studio.theauteurs.com/?p=7&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-1690064435586949667?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/1690064435586949667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=1690064435586949667' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1690064435586949667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1690064435586949667'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2008/04/auteurs-purchases-weinstein-company-for.html' title='The Auteurs purchases The Weinstein Company for $2.1 billion'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-5119026405820707446</id><published>2008-02-28T15:08:00.000-08:00</published><updated>2008-02-28T15:13:48.753-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Attachment_fu'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Attachement_fu Gotchas</title><content type='html'>Recently, we have been getting EofError with S3 while trying to upload images to Amazon S3.&lt;br /&gt;&lt;br /&gt;Turns out that this has been experienced by many Rails developers. Hampton Catlin gives possible solutions &lt;a href="http://hamptoncatlin.com/2007/attachment_fu-gotchas"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-5119026405820707446?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/5119026405820707446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=5119026405820707446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5119026405820707446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5119026405820707446'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2008/02/attachementfu-gotchas.html' title='Attachement_fu Gotchas'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-2460027042046689379</id><published>2007-11-20T21:25:00.000-08:00</published><updated>2007-11-20T21:34:27.256-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='TheAuteurs'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>The Auteurs</title><content type='html'>Yes, thats what has been keeping me busy for a while, &lt;a href="www.theauteurs.com"&gt;The Auteurs&lt;/a&gt;.&lt;br /&gt;From &lt;a href="http://studio.theauteurs.com/post/19121003"&gt;Studio@TheAuteurs&lt;/a&gt;,&lt;br /&gt;"&lt;span style="font-style:italic;"&gt;core idea of The Auteurs is to unite great, previously unavailable works of contemporary world cinema with an avid online film community&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Oh and did I tell you that TheAuteurs is &lt;a href="http://facebook.com/theauteurs"&gt;now&lt;/a&gt; on Facebook?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-2460027042046689379?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/2460027042046689379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=2460027042046689379' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2460027042046689379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2460027042046689379'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/11/auteurs.html' title='The Auteurs'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-5663909917106858257</id><published>2007-11-20T21:10:00.000-08:00</published><updated>2007-11-20T21:14:48.655-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Oh Hiatus Again.</title><content type='html'>I am finding it really difficult to cope up with blogging regularly and especially when I am working(read holidaying) in Goa!&lt;br /&gt;&lt;br /&gt;I will keep the exciting stuff that I have been working on for future posts. for now enjoy "&lt;a href="http://blogoscoped.com/archive/2007-11-20-n35.html"&gt;Gmail Live&lt;/a&gt;", what if gmail was developed by Microsoft,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-5663909917106858257?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/5663909917106858257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=5663909917106858257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5663909917106858257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5663909917106858257'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/11/oh-hiatus-again.html' title='Oh Hiatus Again.'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-46083740449269509</id><published>2007-09-04T01:48:00.000-07:00</published><updated>2007-09-04T01:53:45.427-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Whats Ruby?</title><content type='html'>RUBY - As a powerful amulet, the ruby works best for those born under the astrological sign of Leo. It brings &lt;b&gt;peace of mind&lt;/b&gt;, &lt;b&gt;stimulates sexuality&lt;/b&gt;, &lt;b&gt;removes all evil and impure thoughts&lt;/b&gt;, protects against tempests, &lt;b&gt;banishes sorrow&lt;/b&gt;, and &lt;b&gt;prevents nightmares&lt;/b&gt;. A heart-shaped ruby amulet &lt;b&gt;attracts love&lt;/b&gt; when worn over the heart. &lt;br /&gt;&lt;br /&gt;I agree for all except stimulating sexuality :). &lt;br /&gt;Name for Ruby language is well thought, Thanks Matz!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference: http://www.journey-to-self.com/gem_stone%20meanings.htm#RUBY&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-46083740449269509?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/46083740449269509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=46083740449269509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/46083740449269509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/46083740449269509'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/09/whats-ruby.html' title='Whats Ruby?'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-5581159603376941188</id><published>2007-08-25T19:46:00.000-07:00</published><updated>2007-08-25T20:43:42.774-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActiveScaffold'/><category scheme='http://www.blogger.com/atom/ns#' term='PuneRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Hobo'/><category scheme='http://www.blogger.com/atom/ns#' term='YSLOW'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>PuneRuby August Meet</title><content type='html'>Around 20+ rubyists got together on a rainy evening of Saturday to take part in &lt;a href="http://www.puneruby.com/wiki/index.php/August_2007_Meet"&gt;PuneRuby's August Meet&lt;br /&gt;&lt;/a&gt;.&lt;br /&gt;The evening started with quick round of introductions. There were college students, fairly new rubyists and some expert Railers.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Prototype demo of COEP college website using Hobo&lt;/h4&gt;&lt;br /&gt;The first session of the day was by web team of COEP College where they demonstrated the usage of &lt;a href="http://www.hobocentral.net/"&gt;Hobo&lt;/a&gt; for developing an internal CMS college website. Amongst other features they explained DRYML and Rapid tag library of hobo which allows creation of user defined tags which can be reused across different views. &lt;br /&gt;With just few commands, for creating rails application skeleton and then for creating migrations for database tables, one can very quickly develop an application which has out-of-the-box support for user authentication, layouts, live search etc. It sounded like default admin interface provided by Django framework.&lt;br /&gt;When asked why did they not choose something on the lines of Drupal for CMS. the answer was sweet, they wanted to learn something new and have been hearing about Rail from a while.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt; ActiveScafold - Ajax on Rails &lt;/h4&gt;&lt;br /&gt;The second session of the evening was by Gautam Rege of Josh consultants where he talked about ActiveScaffold(AS) plugin. he explained how easy it was for him to really have all those Ajaxy features in his Rails application with just 5 lines of code in his controllers.&lt;br /&gt;The negatives that he(or audience) shared about ActiveScaffold included,&lt;br /&gt;1. Experienced perf issues for loading the list page with not so many entries. The benefit of doubt here goes to Active Scaffold because Gautam was running on Webrick.&lt;br /&gt;2. Although AS has neat extension module, it can become a pain in the ass if you do not understand the internals of AS.&lt;br /&gt;3. Scaffold is generally not recommended for production systems. so AS could fall in to that category. but what it surely gives is a headstart.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt; Using YSLOW &amp; Migration test helper  &lt;/h4&gt;&lt;br /&gt;Raghavendra Shet started explaining about Migration test helper, which he had used in one of his projects. he shared the problems and their solutions that he had faced while working with migration test helper plugin.&lt;br /&gt;About testing migrations I had mixed feelings. Is it really worth spending time testing your migrations? I mean how many times have you run the down method of your migrations? &lt;br /&gt;&lt;br /&gt;Raghavendra then explained about a plugin to Mozilla Firefox by Yahoo called YSLOW which can be used to find performance issues in your webpage. he explained about 11 points which YSLOW stresses upon.&lt;br /&gt;One of the points was making fewer HTTP connections, which can be accomplished by combining all your javascripts and all your stylesheets in to one file respectively. Asset packager can be used to do so.&lt;br /&gt;Not having inline styles and javascripts was another point Raghavendra explained.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;During the end of meet, their were discussions about JRuby. &lt;a href="http://flawedbot.blogspot.com/"&gt;Amitabh&lt;/a&gt; told that how similar projects in Python, like Jython and Iron Python were not as successful as Python. &lt;br /&gt;&lt;a href="http://deobald.ca/"&gt;Steve&lt;/a&gt; explained how personally he thought it was not a good idea to use extensions to Java with in your JRuby application. He told that projects like Rubinius and Ruby VM could certainly overcome the perf issues and how difficult things would be if you had to remove those Java linkages when you moved to these Interpreters.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wheresfreeman.blogspot.com/"&gt;Freeman&lt;/a&gt; asked about the plans of PuneRuby group going forward. I answered him saying that the outcome I was looking for from such meets was some projects, plugins that some of us can do together in our &lt;br /&gt;leisure time.&lt;br /&gt;&lt;br /&gt;For all the beginners to Ruby language, there is a good news. Our very own PuneRuby group member Satish Talim is going to conduct online Ruby classes starting 27th Of August. More details are &lt;a href="http://rubylearning.com/blog/2007/08/22/free-ruby-lessons/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We are going to meet again on 29th September. so see you there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-5581159603376941188?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/5581159603376941188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=5581159603376941188' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5581159603376941188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5581159603376941188'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/08/puneruby-august-meet.html' title='PuneRuby August Meet'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-5715431044730146508</id><published>2007-08-16T23:39:00.000-07:00</published><updated>2007-08-16T23:52:02.994-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Capistrano.'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Upgrading to Capistrano2</title><content type='html'>From &lt;a href="http://www.capify.org/upgrade"&gt;capify&lt;/a&gt;,&lt;br /&gt;"&lt;span style="font-style:italic;"&gt;Capistrano 2.0 is the first significant update to Capistrano in a year. It represents a major refactoring of the tool's internals, as well as a complete reworking of the deployment recipes.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;All you need to do for upgrading your existing Rails app using cap1.x is to,&lt;br /&gt;&lt;br /&gt;a. Capify your Rails app,&lt;br /&gt;&lt;span style="font-style:italic;"&gt;   capify .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;b. Not mandatory step:you can easily update those previous deployments to use  Capistrano 2's new per-deploy REVISION file:, &lt;br /&gt;   &lt;span style="font-style:italic;"&gt;cap -f upgrade -f Capfile upgrade:revisions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On first attempt to upgrade I got following error,&lt;br /&gt;subversion.rb:56:in `query_revision': undefined method `[]&lt;br /&gt;&lt;br /&gt;resolution to which has been given by Jamis here,&lt;br /&gt;&lt;br /&gt;http://www.mail-archive.com/capistrano@googlegroups.com/msg01123.html&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From the updates to Capistrano 2.0, I love the feature to have namespaces and event framework for extending tasks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-5715431044730146508?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/5715431044730146508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=5715431044730146508' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5715431044730146508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5715431044730146508'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/08/upgrading-to-capistrano2.html' title='Upgrading to Capistrano2'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-8572905112951999263</id><published>2007-08-06T03:45:00.000-07:00</published><updated>2007-08-06T07:37:45.156-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pune'/><category scheme='http://www.blogger.com/atom/ns#' term='Broadband'/><title type='text'>Tata Indicom broadband service sucks</title><content type='html'>Yes they suck big time. its been 1 month and 10 days since I had submitted my application and still the Internet is not up.&lt;br /&gt;I submitted my application along with a cheque for the payment to Tata Indicom after the service agent had done  and confirmed to me that it will be done within a weeks time.&lt;br /&gt;After 10 days, this agent is not traceable, the only contact of him I have is his phone number, which is constantly coming SWITCHED OFF!&lt;br /&gt;I tried syncing up with customer care of Tata-indicom and they say they CANNOT DO ANYTHING about it since they haven't received the application; I tell them "hey isn't the agent your employee? can't you trace him down?" to that they say NO.  seriously WTF?&lt;br /&gt;&lt;br /&gt;After 15 days the agent's cell is reachable and he says that he went for a VACATION and now he is working on for getting the connection up for me and is just a matter of 2 days. &lt;br /&gt;Another week passes, frustrations building up, and now the agent's cellphone is again SWITCHED OFF.&lt;br /&gt;&lt;br /&gt;After about a month the agent calls me and says due to laying of optical fibers my application was delayed( WHAT STOPPED HIM FROM COMMUNICATING THIS EARLIER?)..he gets the wiring done and tells me that next day a technical person from Tata Indicom would come to install the service on my machine. Its been more than a week and there are no signs of that technical person.. and guess what..Agent's cell is again switched off.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have realized over time that almost all of these broadband providers are very careless about customer service with BSNL topping the list. This has some implications for the city and country. These sort of things make a city less conducive for Internet businesses, startups to be more precise.&lt;br /&gt;&lt;br /&gt;I have been reading about comparisons of Pune with Bangalore for Internet startups where people claim that Pune is coming close to Bangalore for the conducive environment the city provides for technological companies. with this experience, I beg to differ.&lt;br /&gt;On a similar note, I have also been talking to BSNL since January(yes 8 months now)for getting the Broadband connection and they have one comment every month, "Its going to be in place next month".&lt;br /&gt;&lt;br /&gt;All the best to those poor souls who indulge themselves with these companies.&lt;br /&gt;&lt;br /&gt;Update: The technical person arrived finally today and the now this update is from new broadband connection :). so it took me 1 month 10 days to get this resolved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-8572905112951999263?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/8572905112951999263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=8572905112951999263' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8572905112951999263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8572905112951999263'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/08/tata-indicom-broadband-service-sucks.html' title='Tata Indicom broadband service sucks'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-5784134467713587278</id><published>2007-07-30T00:20:00.000-07:00</published><updated>2007-07-30T00:52:07.503-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcampbangalore4'/><title type='text'>Bangalore Barcamp 4: Day2</title><content type='html'>10:30 AM: I am again at scintillating campus of IIM, and as predicted I see only few bikes and cars around, which means not many people have turned up for the 2nd day of the event. &lt;br /&gt;&lt;br /&gt;11:00 AM: I am struggling to get Wifi up. I am in Startup collective attending a session  by a guy from Proto.in and a VC who was an investment banker in his previous avatar.They have following advice to budding entrepreneurs,&lt;br /&gt;1. Identify a problem&lt;br /&gt;2. Look out for a solution&lt;br /&gt;3. Validate the idea.&lt;br /&gt;4. Look out for a Mentor&lt;br /&gt;5. Structure your organization, define roles for various people in the org.&lt;br /&gt;6. Decide a business model: Monetize the idea&lt;br /&gt;7. Launch prototype&lt;br /&gt;8. Mind sharing(blog, podcasts, barcamps etc.)&lt;br /&gt;9. Funding (prefer angels)&lt;br /&gt;10. Scale up&lt;br /&gt;11. Expansion&lt;br /&gt;&lt;br /&gt;Business plan: Write a business plan for yourself not for VC's. if you are going to write it casually, then VC's are going to do the same.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11:00 AM: Roaming around, talking to people about Pune, Bangalore, Expensometer, &lt;a href="www.clubhack.com"&gt;Clubhack&lt;/a&gt;, Ruby collective.&lt;br /&gt;&lt;br /&gt;01:00 pm: Having lunch, met Sean who runs Babalife and Babajob, an Indian networking website. Babajob allows jobs based on referrals among the community. I show him Expensometer and has some good ideas on making the UI more intuitive which would motivate the users to use the site. he explains how important and useful SMS integration is for such a website. I agree and tell him plans about integration with SMS gateways.&lt;br /&gt;&lt;br /&gt;03:00 PM: I am attending a session by Bhavin on Active Messaging plugin in Rails, which would allow integration of Rails apps with already existing enterprise applications. here are more details about the plugin,&lt;br /&gt;1. http://code.google.com/p/activemessaging/wiki/ActiveMessaging&lt;br /&gt;2. http://www.infoq.com/articles/intro-active-messaging-rails&lt;br /&gt;&lt;br /&gt;03:30 PM: Satish Kota from heurion consulting, starts to talk about Ruby, Rails and Active Record. he explains various principles of Ruby and Rails like DRY, Convention over Configuration, etc.&lt;br /&gt;&lt;br /&gt;04:15 PM: I decide to call it a day since I had to board a flight in another couple of hours.&lt;br /&gt;08:30 PM: Welcome to Mumbai, thats what Rain god has to say.&lt;br /&gt;01:00 AM: I am at my home in Pune, hitting my bed and retrospecting last 2 days. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thanks to all the organizers, volunteers, Banglorians for making this barcamp a success.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-5784134467713587278?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/5784134467713587278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=5784134467713587278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5784134467713587278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5784134467713587278'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/07/bangalore-barcamp-4-day2.html' title='Bangalore Barcamp 4: Day2'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-3117408209378146532</id><published>2007-07-29T23:30:00.000-07:00</published><updated>2007-07-30T00:19:20.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcampbangalore4'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Bangalore Barcamp 4: Day1</title><content type='html'>Saturday&lt;br /&gt;05:00 am: Woke up, got ready and headed towards Pune airport.&lt;br /&gt;08:45 am: Onboard, thinking about the activities, sessions lying ahead in the day.&lt;br /&gt;10:20 am: I am on cloud no. 9 and flight has started descending.(thinking, how awesome it would be to see these clouds around when I wake up everyday.)&lt;br /&gt;11:15 am: Already thrilled by beautiful weather of Bangalore and now I see even more beautiful campus of IIM bangalore.&lt;br /&gt;11:30 am: Registration done, looking at schedules and confirming about sessions in Ruby collective which are lined from 03:00 pm today. I meet my friend Angrez and then we decide to sit in lawn and discuss about Rails and Ruby(FireWatir). we talk about how beautiful Ruby is and explain principles of Rails to Prema and Angrez.&lt;br /&gt;&lt;br /&gt;11:45: Met Amit who is talking about code Jam and hacking night. Introduce him and others to &lt;a href="www.clubhack.com"&gt;clubhack&lt;/a&gt; event being organized for the month of December in Pune. &lt;br /&gt;&lt;br /&gt;12:30 pm: Starving.. decided to get a bite at CCD.. ate costliest samosa in my life, 16 bucks!!! its about to be lunch time in another hour an hour. &lt;br /&gt;&lt;br /&gt;01:00 pm: wandering around in IIM campus, seeing IIM students studying in the shade of trees.. head towards canteen where lunch is being served..had good lunch and now gearing up to participate in Ruby sessions.&lt;br /&gt;&lt;br /&gt;02:00 pm: Attend a session on tips for investors which I think was quite introductory and boring.&lt;br /&gt;&lt;br /&gt;03:00 pm: Angrez kick offs Ruby collective by a session on Firewatir generator. he talks about how he has mentored a Google Summer of Code project which is about using TestGen4Web addon to Firefox which records actions performed by user on Firefox browser, to generate a FireWatir script. Audience starts comparing FireWatir to Selenium and are confused when to use which tool. &lt;br /&gt;&lt;br /&gt;04:00 pm: Vivek starts his talk titled Deploying Rails applications in which he covers &lt;br /&gt;  a. Web Servers: Apache, Nginx, Lighttpd: Nginx becoming the defacto becuase of its low memory footprint and ability to have weighted load balancing.&lt;br /&gt;  b. Application Server: brief intro to Mongrel&lt;br /&gt;  c. Rails hosting: Shared(unsuitable for Rails 1.2+), VPS and Dedicated hosting. VPS  is the best option considering the cost effectiveness and control a user has.&lt;br /&gt;  d. Monitoring Rails application: Using Monit to monitor Rails apps.&lt;br /&gt;  e. Cron jobs: for clearing stale sessions, database maintenance, clearing logs.&lt;br /&gt;Wonderful session! &lt;br /&gt;Here is link to the &lt;a href="http://www.slideshare.net/vivek_prahlad/deploying-rails-applications/"&gt;presentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;05:30: pm: Call it a day and head towards MG Road and Brigade Road which has been suggested by many banglorians.&lt;br /&gt;&lt;br /&gt;Coverage for Day-2 in next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-3117408209378146532?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/3117408209378146532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=3117408209378146532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3117408209378146532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3117408209378146532'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/07/bangalore-barcamp-4-day1.html' title='Bangalore Barcamp 4: Day1'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-3084394995456844434</id><published>2007-07-29T23:20:00.000-07:00</published><updated>2007-07-29T23:28:35.288-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BarCampPune3'/><category scheme='http://www.blogger.com/atom/ns#' term='Startup'/><title type='text'>Barcamp Pune-3:  Setting up a global technology company</title><content type='html'>This is a follow up post of &lt;a href="http://rubymerchant.blogspot.com/2007/07/barcamppune-3-makes-my-saturday.html"&gt; Barcamppune-3 makes my Saturday enjoyable&lt;/a&gt;in which I had promised to blog about session about Setting up companies in USA/Singapore/UK sitting in India.&lt;br /&gt;Rohas Nagpal of &lt;a href="http://techjuris.com"&gt;Techjuris&lt;/a&gt; talked about how beneficial and easy it is to start tech companies in USA, UK and Singapore remotely sitting in India rather than opening a company in India.&lt;br /&gt;&lt;br /&gt;Few points in favor of opening companies abroad are,&lt;br /&gt;1. Immediate prestige and more customers &lt;br /&gt;2. Very easy(2 hours/1 week, 6 days for  UK, US, Singapore respectively) and quick to setup companies with almost zero upfront capital.&lt;br /&gt;3. Help from respective embassies by approaching them with a tag of owner of a US based company. unlike Indian embassy working with which is a pain in the ass. &lt;br /&gt;4. Taxation: ZERO % tax in US for all the revenue earned from customers who are outside US.(Tax in UK and Singapore is 35.4% and 28.8 % respectively)&lt;br /&gt;5. The best part is you don't need any local director of US and not even a physical office in US!( Even UK requires no local director. Singapore needs one local director.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Rohas elegantly presented the whole idea of setting up businesses remotely. the question that remains at the end of day is whether its easy to run the business remotely sitting in India?&lt;br /&gt;&lt;br /&gt;Here is a link to video recording of the presentation,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://techsutras.com/2007/07/15/offshoring-for-indian-tech-companies"&gt; Setting up businesses remotely in US/UK/Singapore &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-3084394995456844434?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/3084394995456844434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=3084394995456844434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3084394995456844434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3084394995456844434'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/07/barcamp-pune-3-setting-up-global.html' title='Barcamp Pune-3:  Setting up a global technology company'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-5596517825374620724</id><published>2007-07-17T05:40:00.000-07:00</published><updated>2007-07-17T05:46:23.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcampbangalore4'/><title type='text'>I am going to BarcampBangalore4</title><content type='html'>So I have booked my tickets to attend one of the most popular barcamps of India, Barcamp of Silicon Valley of India - Bangalore.&lt;br /&gt;&lt;br /&gt;I will be spending most of the time at Ruby Collective. Hoping to have a good time with fellow Rubyists.&lt;br /&gt;&lt;br /&gt;Anyone from Pune or Mumbai attending?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-5596517825374620724?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/5596517825374620724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=5596517825374620724' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5596517825374620724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5596517825374620724'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/07/i-am-going-to-barcampbangalore4.html' title='I am going to BarcampBangalore4'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-6226192331168498472</id><published>2007-07-09T02:43:00.000-07:00</published><updated>2007-07-09T02:53:59.240-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='barcampbangalore4'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Ruby Conference at the next Barcamp Bangalore</title><content type='html'>Yes, you read that right, its unofficial Ruby conference happening in bangalore barcamp on July 28th and 29th July.&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://blog.sidu.in"&gt;Sidu Ponnappa&lt;/a&gt; &lt;a href="http://blog.sidu.in/2007/07/ruby-conference-at-next-barcamp.html"&gt;blog&lt;/a&gt;, &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"The next Barcamp Bangalore will be run in a new format involving creating a series of mini-conferences around particular topics. These mini-conferences, called 'Collectives' give participants a hot-spot where then can expect to meet others who share their interests. We're hoping to use this format to attract all those Rubyists in and around Bangalore so we can hang out, trade ideas and have a fun time."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Personally, I think mini-unconference, is a nice idea. I now can focus solely on what I am interested currently in.&lt;br /&gt;&lt;br /&gt;Hope to meet fellow rubyists provided I can make it to Bangalore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-6226192331168498472?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/6226192331168498472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=6226192331168498472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/6226192331168498472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/6226192331168498472'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/07/ruby-conference-at-next-barcamp.html' title='Ruby Conference at the next Barcamp Bangalore'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-2241413021593066134</id><published>2007-07-08T13:47:00.000-07:00</published><updated>2007-07-08T14:31:59.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BarCampPune3'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyonRails'/><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='RFacebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Barcamppune-3: Developing Facebook application in Ruby on Rails.</title><content type='html'>&lt;a href="http://oltsm.blogspot.com"&gt;Abhijit&lt;/a&gt; gave a talk on how to create and integrate an RoR application with much talked about Facebook platform.&lt;br /&gt;Interesting fact to know was that, in about a months time "1500+" facebook applications have been developed and "65" million facebook applications have been downloaded.&lt;br /&gt;&lt;br /&gt;Facebook allows developers to make their existing application(made in Java/ PHP, Ruby on Rails, many more platforms) or create new applications, integrate with Facebook platform.&lt;br /&gt;&lt;br /&gt;Facebook API can be consumed by an application and then this application can appear in users profile on Facebook by Facebook Canvas or Iframe approach(where external appliction runs within an iframe in Facebook)&lt;br /&gt;&lt;br /&gt;Abhijit mentioned about &lt;a href="www.ILike.com"&gt;ILike&lt;/a&gt;, one of the most famous applications developed and integrated with Facebook platform.&lt;br /&gt;Abhijit demonstrated how a Ruby on Rails application can be made run within facebook or independetly using the RFacebook, unofficial Ruby Facebook client library.&lt;br /&gt;&lt;br /&gt;I wanted to present on exactly the same topic, but due to lack of time(read my laziness), I couldn't. I caught up with Abhijit to discuss some more details about Facebook platform and our discussion concluded with following,&lt;br /&gt;1. Facebook has very limited javascript features in canvas mode.&lt;br /&gt;2. Facebook users information can be pulled using API's for your application&lt;br /&gt;3. Can be used for viral marketing. Developing a cut down facebook version for marketing your actual product.&lt;br /&gt;4. Could be difficult to port an existing application to Facebook, especially with Canvas approach and FBML(Facebook markup language) &lt;br /&gt;&lt;br /&gt;With this background now, I hope to do something in this area soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-2241413021593066134?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/2241413021593066134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=2241413021593066134' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2241413021593066134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2241413021593066134'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/07/barcamppune-3-developing-facebook.html' title='Barcamppune-3: Developing Facebook application in Ruby on Rails.'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-103782190858585550</id><published>2007-07-06T23:03:00.000-07:00</published><updated>2007-07-08T13:38:07.805-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BarCampPune3'/><title type='text'>Barcamppune-3 makes my saturday enjoyable</title><content type='html'>Barcamp fever is back in Pune with rainy welcome from Rain Gods. After spending last week doing preparations for  Barcamp Pune event at my current organization, &lt;a href="http://www.persistentsys.com/"&gt;Persistent Systems&lt;/a&gt;, I was really hoping to witness a good un-conference with the help of lots of meaningful discussions and sessions. And now after Barcamp is over, when I look back at those precious 8 hours, boy! I think there couldn't have been a better way to spend a saturday.&lt;br /&gt;&lt;br /&gt;Being an organizer, I sure was lucky enough to attend as close to 5 sessions(summing up the half sessions that I had attended).&lt;br /&gt;&lt;br /&gt;Session which requires a special mention and the one which enlightened me the most was &lt;b&gt;Setting up a global technology company&lt;/b&gt; by http://techjuris.com. Rohas(Lawyer by profession), walked everyone through how easy it was for an Indian to setup a company remotely in USA, UK and Singapore sitting here in India. I will write a separate post about points which Rohas had put forward in favor of opening companies in USA/UK /Singapore rather than India.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;TVGuide.in&lt;/b&gt; session by Rakesh Raju of http://codewalla.com/ included introduction to TVGuide.in and requirements gathering from audience. Really a very good place to gather requirements.&lt;br /&gt;About TVGuide.in, its a TV programs schedule service built for India, it provides following features at the moment,&lt;br /&gt;1. List of about 100 channels, data being fed from respective channels websites, for e.g. Star channels from Star TV network., that solves the problems of &lt;b&gt;authenticity&lt;/b&gt; of data!&lt;br /&gt;2. Search for particular programs across various categories.&lt;br /&gt;Some of the features that Rakesh mentioned he is thinking of were include watching trailors, or probably full programs on TVGuide.in(but thats something which will take another 5 years in India).&lt;br /&gt;Audience suggested that a community can be built around this application where users can submit reviews about programs, add other users as friends and see what they are interested in. &lt;br /&gt;&lt;br /&gt;My second session( first half session) of the day was Intoduction to Microsoft SilverLight by Aditya Thatte. I came in about 15 minutes late and saw Aditya demoeing Expression Blend, tool for developers to build silverlight enabled interfaces.&lt;br /&gt;&lt;br /&gt;Then it was turn for session on much-talked about Facebook platform and its integration with Ruby on Rails by Abhijit Gadgil, http://oltsm.blogspot.com., more on this session and discussions with Abhijit in a separate post.&lt;br /&gt;&lt;br /&gt;Before lunch I caught up with &lt;a href="www.akshaysurve.com"&gt;Akshay Surve&lt;/a&gt;, whom I know since &lt;a href="http://rubymerchant.blogspot.com/2006/09/few-words-of-experience-at-pune.html"&gt;Pune Rails Hackathon&lt;/a&gt; days. he told me that he was there to take interviews today and release them as podcasts. good stuff, hope to hear those interviews soon.&lt;br /&gt;&lt;br /&gt;I talked to &lt;a href="http://journeythroughsummerofcode.blogspot.com"&gt;Swanand &lt;/a&gt;about his Google Summer of Code project of developing an ETL tool in Ruby. he explained me about various features of his tool, primarily,&lt;br /&gt; a. Profiling of data,&lt;br /&gt; b. multiple data sources( flat files, postgres, mysql)&lt;br /&gt; c. DSL for developers and rake task for specifying extract operations(sources and filtering).&lt;br /&gt;&lt;br /&gt;By the time I joined "Developing a Firefox plugin" by Vinod Kulkarni, he was almost done with explaining the various steps in developing a plugin to firefox by using XUL. This regret coming in late, since I have   developing firefox plugin in my wish list.&lt;br /&gt;&lt;br /&gt;To end the day for me(there was one more session remaining but I opted for networking at barcamp), it was &lt;b&gt;Open Source Education"&lt;/b&gt; by &lt;a href="http://wheresfreeman.blogspot.com/"&gt;Freeman Murray&lt;/a&gt;. Freeman started with mention of &lt;a href="http://munjal.typepad.com/recognizing_deven/2007/04/episode_26_indi.html"&gt; blog entry &lt;/a&gt; of Riya CEO &lt;a href="http://munjal.typepad.com"&gt;  Munjal shah &lt;/a&gt; where he says how costs of hiring good developers in India are getting comparable to US.&lt;br /&gt;Freeman's response was to spread the awareness of Open source education, make it reach rural areas so that we have more self-skilled people. he mentioned about his efforts with Digital Study Hall project to create video courseware materials in a wide range of technical subjects and making them available to wider audience.&lt;br /&gt;&lt;br /&gt;Oh yes not to forget, &lt;a href="http://Rohit11.com"&gt;Rohit&lt;/a&gt; announced about &lt;a href="http://www.clubhack.com/"&gt;Clubhack&lt;/a&gt; ,the first hackers hangout of India, event that is being planned for the month of December.&lt;br /&gt;&lt;br /&gt;Last but not the least, A big thanks to all the sponsors, volunteers,speakers and ofcourse all the attendees of the event to make this event successful. &lt;br /&gt;&lt;br /&gt;See you at next barcamp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-103782190858585550?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/103782190858585550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=103782190858585550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/103782190858585550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/103782190858585550'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/07/barcamppune-3-makes-my-saturday.html' title='Barcamppune-3 makes my saturday enjoyable'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-3762398810863331352</id><published>2007-06-27T05:51:00.000-07:00</published><updated>2007-06-27T05:56:19.212-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YUI Datatable AJAX'/><title type='text'>YUI Datatable deleteRecord in v2.2.1 broken</title><content type='html'>While trying to have delete feature for one of the &lt;a href="http://developer.yahoo.com/yui/datatable/"&gt;YUI Datatable&lt;/a&gt; implementations, I was facing a weird problem where &lt;a href="http://developer.yahoo.com/yui/docs/RecordSet.html#deleteRecord"&gt;deleteRecord&lt;/a&gt; of RecordSet was not working as expected.&lt;br /&gt;&lt;br /&gt;Turns out a &lt;a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1699200&amp;group_id=165715&amp;atid=836476"&gt;problem&lt;/a&gt; with v2.2.1. Resolution mentioned in the above links works like a charm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-3762398810863331352?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/3762398810863331352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=3762398810863331352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3762398810863331352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3762398810863331352'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/06/yui-datatable-deleterecord-in-v221.html' title='YUI Datatable deleteRecord in v2.2.1 broken'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-5202135469541142147</id><published>2007-06-27T05:39:00.000-07:00</published><updated>2007-06-27T05:44:53.361-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX Prototype Rails Ajax.Updater'/><title type='text'>evalScripts option in Ajax.Updater not appending javascript function to the current page</title><content type='html'>I have a view partial that gets displayed on the current page when I click a link which triggers an Ajax.Updater request.&lt;br /&gt;Now the view partial that I add dynamically has following javascript function defined in &amp;lt;script&gt; tags&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="punct"&gt;&lt;&lt;/span&gt;&lt;span class="ident"&gt;script&lt;/span&gt;&lt;span class="punct"&gt;&gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="ident"&gt;function&lt;/span&gt; &lt;span class="ident"&gt;executeMe&lt;/span&gt;&lt;span class="punct"&gt;()&lt;/span&gt;&lt;br /&gt; &lt;span class="punct"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;alert&lt;/span&gt;&lt;span class="punct"&gt;("&lt;/span&gt;&lt;span class="string"&gt;I got executed!&lt;/span&gt;&lt;span class="punct"&gt;");&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span class="punct"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="punct"&gt; &amp;lt;/&lt;/span&gt;&lt;span class="regex"&gt;script&gt;&lt;br /&gt;&lt;span class="normal"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, after the partial is loaded by AJAX.Updater, I keep getting "executeMe is not defined" error, when I try to invoke executeMe function.&lt;br /&gt;&lt;br /&gt;So the error lies in my understanding of Ajax.Updater object. &lt;a href="http://wiki.script.aculo.us/scriptaculous/show/Ajax.Updater"&gt;Ajax.Updater&lt;/a&gt; says that evalScripts option to Updater decides if scripts in the response of an XMLHTTP request need to be evaluated or not.&lt;br /&gt;Script Evaluation means script is not appended to the page but evaluated, and this won’t create the function at all. &lt;b&gt;So to make the function work, one has to assign them to variables.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So my modified partial makes function appear on the page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="punct"&gt;&lt;&lt;/span&gt;&lt;span class="ident"&gt;script&lt;/span&gt;&lt;span class="punct"&gt;&gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="ident"&gt;executeMe&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;function&lt;/span&gt; &lt;span class="ident"&gt;executeMe&lt;/span&gt;&lt;span class="punct"&gt;()&lt;/span&gt;&lt;br /&gt; &lt;span class="punct"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;alert&lt;/span&gt;&lt;span class="punct"&gt;("&lt;/span&gt;&lt;span class="string"&gt;I got executed!&lt;/span&gt;&lt;span class="punct"&gt;");&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span class="punct"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="regex"&gt;script&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-5202135469541142147?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/5202135469541142147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=5202135469541142147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5202135469541142147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5202135469541142147'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/06/evalscripts-option-in-ajaxupdater-not.html' title='evalScripts option in Ajax.Updater not appending javascript function to the current page'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-218043528708426812</id><published>2007-06-13T09:47:00.000-07:00</published><updated>2007-06-13T10:45:27.607-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AutomationTesting'/><category scheme='http://www.blogger.com/atom/ns#' term='Selenium'/><category scheme='http://www.blogger.com/atom/ns#' term='Watir'/><title type='text'>Automated Testing of web applications</title><content type='html'>So the better half of me(no, I am still single!), the tester has woken up and here are some random thoughts about automated testing tools.&lt;br /&gt;&lt;br /&gt;Coming from an Automated Testing background, I always find it interesting to try out new automation testing tools. I have used Rational Functional Tester, SilkTest, Rational Robot. Recently Watir and Selenium was also added to my Automated Testing skills.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Past&lt;/span&gt;&lt;br /&gt;For products like RationalRobot, SilkTest, QTP, there was always a steep learning curve because of the proprietary languages they use to support for coding.Rational Functional Tester(formally known as Rational XDE Tester) received a warm welcome by the community because of Java being the langauge to code in for tests.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Recent Past&lt;/span&gt;&lt;br /&gt;Then came some keyword driven approaches(&lt;a href="http://safsdev.sourceforge.net/FRAMESDataDrivenTestAutomationFrameworks.htm"&gt;SAFS&lt;/a&gt;), which added a layer of abstraction over these automated tools,which end-users to type in the automated tests from spreadsheets once developers have a built a test automation framework in place.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Present &lt;/span&gt;&lt;br /&gt;Thanks to AJAX, automated testing has become a tougher challenge now. with inline popups, dynamic asynchronous requests springing up everywhere.&lt;br /&gt;&lt;br /&gt;Tools like Watir and Selenium came to the rescue. they have been there unnoticed from sometime, but now thanks to opensource, they are now getting much deserved attention.&lt;br /&gt;&lt;br /&gt;I recently used Watir and Selenium and was amazed by the ease of use that they provide. Both of them provide DSL like implementation with their commands(Ruby selenese for selenium). About selenium, I particularly liked the idea of cross-platform and cross-browser compatibility.&lt;br /&gt;&lt;br /&gt;In coming days I am going to try out selenium extensively and will try to gauge its level of support for problems faced by traditional automated tools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-218043528708426812?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/218043528708426812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=218043528708426812' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/218043528708426812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/218043528708426812'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/06/automated-testing-of-web-applications.html' title='Automated Testing of web applications'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-912568510054704455</id><published>2007-06-13T09:34:00.000-07:00</published><updated>2007-06-13T09:47:48.450-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Long Hiatus</title><content type='html'>My last post was on  26 March 2007. Its been 78 days since I haven't posted anything.. Its not that I don't have anything to write, my schedules off late have been keeping me off blogger. &lt;br /&gt;There are so many things to write about that I have experienced and learned in last 2 months. I will try to cover some of those things in my coming posts, so stay connected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-912568510054704455?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/912568510054704455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=912568510054704455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/912568510054704455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/912568510054704455'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/06/long-hiatus.html' title='Long Hiatus'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-2672658180440642872</id><published>2007-03-26T02:58:00.000-07:00</published><updated>2007-03-26T03:00:51.992-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>List of deprecations in Rails 1.2.2</title><content type='html'>You may want to revisit your pre-Rails 1.2.2 code and remove the deprecations mentioned in the links below,&lt;br /&gt;&lt;br /&gt;http://i.nfectio.us/articles/2006/11/02/deprecations-in-rails-1-2&lt;br /&gt;http://rubythis.blogspot.com/2006/12/ruby-on-rails-deprecations-part-1.html&lt;br /&gt;http://rubythis.blogspot.com/2006/12/ruby-on-rails-deprecations-part-2.html&lt;br /&gt;http://rubythis.blogspot.com/2006/12/ruby-on-rails-deprecations-part-3-of-3.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-2672658180440642872?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/2672658180440642872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=2672658180440642872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2672658180440642872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2672658180440642872'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/03/list-of-deprecations-in-rails-122.html' title='List of deprecations in Rails 1.2.2'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-8825238712641426215</id><published>2007-03-05T17:00:00.000-08:00</published><updated>2007-03-05T17:26:02.004-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openID'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>LDAP for Internet: OpenID</title><content type='html'>Remember my &lt;a href="http://rubymerchant.blogspot.com/2006/09/ldap-for-internet.html"&gt;post&lt;/a&gt; about the need for something on the lines of LDAP for Internet? &lt;br /&gt;&lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt; is synonymous with LDAP for Internet.&lt;br /&gt;&lt;br /&gt;In the crux it works like this,&lt;br /&gt;1. As a user I get an openID for myself from one of the openID providers.&lt;br /&gt;2. I visit a site(e.g. www.wikitravel.com) which supports openID, and then enter my openID which was given to me by openID provider.&lt;br /&gt;3. After I provide my openID, the site I am visiting, redirects me to the openID provider site which asks me for my openId password. It authorizes if I am really the one who wanted to access the site(www.wikitravel.com).&lt;br /&gt;4. After authorization I am redirected back to the application that I was trying to access.&lt;br /&gt;That's it.&lt;br /&gt;&lt;br /&gt;Pros of openID are obvious. some of the cons of openID are,&lt;br /&gt;1. Each site that I am visiting should support openID. Google doesn't support it yet.&lt;br /&gt;2. Security: Reliance on another website for authentication poses some security concerns.&lt;br /&gt;3. what if the openID provider is down. too bad :(&lt;br /&gt;4. Signon process for users might be confusing. yes it gets confusing for people when  they see themselves being redirected to another url.&lt;br /&gt;&lt;br /&gt;These cons can be overcome with time and will be resolved.&lt;br /&gt;&lt;br /&gt;If you want your Rails application to be openID enabled, then read this &lt;a href="http://www.loudthinking.com/arc/000604.html"&gt;post&lt;/a&gt; by &lt;a href="http://www.loudthinking.com"&gt;DHH&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Watch a wonderful &lt;a href="http://simonwillison.net/2006/openid-screencast/"&gt;screencast&lt;/a&gt; done by &lt;a href="http://simonwillison.net/"&gt;Simon Wilson&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Read more about supporting openID with your Rails application &lt;a href="http://www.danwebb.net/2007/2/27/the-no-shit-guide-to-supporting-openid-in-your-applications"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-8825238712641426215?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/8825238712641426215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=8825238712641426215' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8825238712641426215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8825238712641426215'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/03/ldap-for-internet-openid.html' title='LDAP for Internet: OpenID'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-63353440439461513</id><published>2007-03-05T16:57:00.000-08:00</published><updated>2007-03-05T17:00:24.565-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Generate random password in Rails</title><content type='html'>I am using Acts as Authenticated plugin for one of my projects. As part of my user creation workflow, I wanted to generate a random password for the new user, and I stumbled upon,&lt;br /&gt;&lt;a href="http://technoweenie.stikipad.com/plugins/show/Automatic+Password+Generation"&gt;Automatic Password Generation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-63353440439461513?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/63353440439461513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=63353440439461513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/63353440439461513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/63353440439461513'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/03/generate-random-password-in-rails.html' title='Generate random password in Rails'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-3293199470126883474</id><published>2007-03-05T16:46:00.000-08:00</published><updated>2007-03-05T16:51:51.917-08:00</updated><title type='text'>Never store your passwords in database!</title><content type='html'>Recently, folks at Reddit &lt;a href="http://reddit.com/blog/theft"&gt;confirmed&lt;/a&gt; that their backup of database was stolen which had passwords for various users stored in plain-text. &lt;br /&gt;Read more at &lt;a href="http://blog.moertel.com"&gt;Tom Moertel's&lt;/a&gt; blog &lt;a href="http://blog.moertel.com/articles/2006/12/15/never-store-passwords-in-a-database"&gt;post&lt;/a&gt;,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-3293199470126883474?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/3293199470126883474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=3293199470126883474' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3293199470126883474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3293199470126883474'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/03/never-store-your-passwords-in-database.html' title='Never store your passwords in database!'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-8531984897364728014</id><published>2007-02-15T14:20:00.000-08:00</published><updated>2007-02-15T15:10:25.319-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActiveRecordHelper'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Support for AJAX forms using ActiveRecordHelper</title><content type='html'>Active Record Helper present in actionpack\lib\action_view\helpers provides a method form, which returns an entire form with input tags and everything for a specified Active Record object. This form method currently does not have any option to generate a form which could be submitted by AJAX. A form is AJAX enabled if the form tag has onsubmit attribute with following value, "new Ajax.Request('/post/create', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;"&lt;br /&gt;&lt;br /&gt;I have modified the form method to support AJAXified forms. with the change,for AJAX enabled forms, you need to pass an additional option to options hash to form method,&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;(entry is a new record that has a message attribute using VARCHAR): form("entry",:form_remote=&gt;true) &lt;br /&gt;&lt;br /&gt;&lt;--form onsubmit="new Ajax.Request('/post/create', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;" action='/post/create' method='post'&gt;&lt;br /&gt;&lt;br /&gt;    Message: &lt;--input id="post_title" name="post[title]" size="30" type="text" value="Hello World" /&gt;&lt;br /&gt; &lt;--input type='submit' value='Sign' /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/form--&gt; &lt;br /&gt;&lt;br /&gt;In above HTML code snippet,I have escaped HTML using "--" characters, they are not generated by form method.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have submitted a patch on to trac of Ruby on Rails, it might take a while for it to get accpeted. for time being, you can include following code in boot.rb, present in config folder of your Rails application folder structure. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;module &lt;/span&gt;&lt;span class="module"&gt;ActionView&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;module &lt;/span&gt;&lt;span class="module"&gt;Helpers&lt;/span&gt;&lt;br /&gt;    &lt;span class="keyword"&gt;module &lt;/span&gt;&lt;span class="module"&gt;ActiveRecordHelper&lt;/span&gt;&lt;br /&gt;      &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;record_name&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;options&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;{})&lt;/span&gt;&lt;br /&gt;        &lt;span class="ident"&gt;record&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;instance_variable_get&lt;/span&gt;&lt;span class="punct"&gt;("&lt;/span&gt;&lt;span class="string"&gt;@&lt;span class="expr"&gt;#{record_name}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="ident"&gt;options&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;options&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;symbolize_keys&lt;/span&gt;&lt;br /&gt;        &lt;span class="ident"&gt;options&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:action&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;||=&lt;/span&gt; &lt;span class="ident"&gt;record&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new_record?&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;update&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span class="ident"&gt;action&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="ident"&gt;options&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:action&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="symbol"&gt;:id&lt;/span&gt; &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="ident"&gt;record&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="ident"&gt;submit_value&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;options&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:submit_value&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;||&lt;/span&gt; &lt;span class="ident"&gt;options&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:action&lt;/span&gt;&lt;span class="punct"&gt;].&lt;/span&gt;&lt;span class="ident"&gt;gsub&lt;/span&gt;&lt;span class="punct"&gt;(/&lt;/span&gt;&lt;span class="regex"&gt;[^&lt;span class="escape"&gt;\w&lt;/span&gt;]&lt;/span&gt;&lt;span class="punct"&gt;/,&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;&lt;/span&gt;&lt;span class="punct"&gt;').&lt;/span&gt;&lt;span class="ident"&gt;capitalize&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="ident"&gt;contents&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;br /&gt;        &lt;span class="ident"&gt;contents&lt;/span&gt; &lt;span class="punct"&gt;&lt;&lt;&lt;/span&gt; &lt;span class="ident"&gt;hidden_field&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;record_name&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:id&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;unless&lt;/span&gt; &lt;span class="ident"&gt;record&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new_record?&lt;/span&gt;&lt;br /&gt;        &lt;span class="ident"&gt;contents&lt;/span&gt; &lt;span class="punct"&gt;&lt;&lt;&lt;/span&gt; &lt;span class="ident"&gt;all_input_tags&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;record&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;record_name&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;options&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword"&gt;yield&lt;/span&gt; &lt;span class="ident"&gt;contents&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;block_given?&lt;/span&gt;&lt;br /&gt;        &lt;span class="ident"&gt;contents&lt;/span&gt; &lt;span class="punct"&gt;&lt;&lt;&lt;/span&gt; &lt;span class="ident"&gt;submit_tag&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;submit_value&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="ident"&gt;options_for_content_tag&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt;&lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:method&lt;/span&gt; &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;post&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:enctype&lt;/span&gt; &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="ident"&gt;options&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:multipart&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;multipart/form-data&lt;/span&gt;&lt;span class="punct"&gt;':&lt;/span&gt; &lt;span class="constant"&gt;nil&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword"&gt;unless&lt;/span&gt; &lt;span class="ident"&gt;options&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:form_remote&lt;/span&gt;&lt;span class="punct"&gt;].&lt;/span&gt;&lt;span class="ident"&gt;nil?&lt;/span&gt;&lt;br /&gt;          &lt;span class="ident"&gt;onsubmit&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;new Ajax.Request('&lt;span class="expr"&gt;#{action}&lt;/span&gt;', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt;&lt;br /&gt;          &lt;span class="ident"&gt;options_for_content_tag&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:onsubmit&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;onsubmit&lt;/span&gt; &lt;br /&gt;        &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="ident"&gt;content_tag&lt;/span&gt;&lt;span class="punct"&gt;('&lt;/span&gt;&lt;span class="string"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;contents&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;span class="ident"&gt;options_for_content_tag&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;      &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="keyword"&gt;end&lt;/span&gt;  &lt;br /&gt;  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-8531984897364728014?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/8531984897364728014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=8531984897364728014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8531984897364728014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8531984897364728014'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/02/support-for-ajax-forms-using.html' title='Support for AJAX forms using ActiveRecordHelper'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-3649807619029262871</id><published>2007-01-12T07:42:00.000-08:00</published><updated>2007-01-12T07:49:45.693-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Google trend result comparing J2EE and Ruby on Rails</title><content type='html'>There is post by &lt;a href="http://www.chadfowler.com"&gt;Chad Fowler&lt;/a&gt;(a very well known person in ruby/rails space) titled &lt;a href="http://www.chadfowler.com/2007/1/10/supply-and-demand-in-technology-skills"&gt;"XML and J2EE: Commodity Skills"&lt;/a&gt; where he talks about how countries like India are focussing only on mainstream technologies like J2EE, .NET etc. , to back his statements he has google trends to his support. &lt;br /&gt;I wanted to find the city in India from where max people are searching on Ruby on Rails, Bangalore tops the list,check out the following link,&lt;br /&gt;http://google.com/trends?q=J2ee%2CRuby+on+Rails&amp;ctab=0&amp;geo=IN&amp;date=all&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-3649807619029262871?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/3649807619029262871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=3649807619029262871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3649807619029262871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3649807619029262871'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/01/google-trend-result-comparing-j2ee-and.html' title='Google trend result comparing J2EE and Ruby on Rails'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-7429066192943104952</id><published>2007-01-03T13:27:00.000-08:00</published><updated>2007-01-03T13:38:08.548-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>New year resolutions</title><content type='html'>Welcome year 2007! so what's in store for me? well, I hope there are lots of sweet surprises, success and luck for me.&lt;br /&gt;&lt;br /&gt;Its time that I decide on my resolutions,&lt;br /&gt;&lt;br /&gt;1. Have a balance in life, get up early and come back early from office.&lt;br /&gt;2. Phyical work out everyday.&lt;br /&gt;3. Make myself financially sound, by investing and acquiring various assets.&lt;br /&gt;4. Give atleast 2 presentations every month(which means learn 2 new things every month)&lt;br /&gt;5. Call up friends and relatives at regular intervals.&lt;br /&gt;6. Listen to my gut feeling.&lt;br /&gt;7. Finish Expens-O-Meter.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am sure this list would grow over time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-7429066192943104952?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/7429066192943104952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=7429066192943104952' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/7429066192943104952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/7429066192943104952'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/01/new-year-resolutions.html' title='New year resolutions'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-7679241114958770371</id><published>2007-01-03T13:03:00.000-08:00</published><updated>2007-01-03T13:27:28.846-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Change'/><title type='text'>I hate change</title><content type='html'>Yes I know change is permanent, I know change is constant, but I have realized that I hate change.&lt;br /&gt;Even after moving and relocating states and cities after every 2-3 years since my birth, I still find it very hard in overcoming those feelings of attachments, belongings to a place.&lt;br /&gt;The reason I am feeling this way now is because one my very close friends, who happens to be my roomate in Pune is moving to u.s.a. I still remember the day when both of us had moved in to this flat. &lt;br /&gt;Next week onwards,when I wakeup, I won't find him shouting at me for not closing the latch of the main door, I won't find him when I want to tease him about making a cup of tea for me, I won't find him when I come back home from office and want to have a company for a round of beer, I won't find him when I want to dicuss very minusule details of persoanl life, I will no longer have him driving along on his bike while going for various trips.&lt;br /&gt;&lt;br /&gt;Man, I am going to miss you! well I have to come to terms with it, as they say change  is inevitable.Brother, you have taught me a lot of things in past few months,I couldnt have had a better company, I wish you luck for all your future endevaours,Rock where ever you go!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-7679241114958770371?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/7679241114958770371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=7679241114958770371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/7679241114958770371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/7679241114958770371'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/01/i-hate-change.html' title='I hate change'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-1463627127271224415</id><published>2007-01-03T12:18:00.000-08:00</published><updated>2007-01-03T13:03:07.996-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BarCampPune2'/><title type='text'>BarCampPune2</title><content type='html'>BarCamp is an unconference where all the participants are speakers,which has very interactive sessions, where there is no notion of one presenter and everyone sitting and listening in passive mode.With that background about barcamps, let me write briefly about barcamppune2(yes thats right, 2nd barcamp in Pune).&lt;br /&gt;Barcamppune-2 was a one day event,organized on 16th dec 2006, sponsored by TCS and SICSR.&lt;br /&gt;Although there was another barcamp sheduled on the same day in hyderabad, few attendees and presenters turned from other cities like bangalore, delhi etc. the total strength was around 100+.&lt;br /&gt;I was part of organizing team, hence I couldn't really sit and witness all the sessions. I attended following talks in bits and pieces,&lt;br /&gt;1. Architectures for scalable web applications in Ruby/Rails by &lt;a href="www.jonathanboutelle.com"&gt;Jonathan Boutelle&lt;/a&gt;.&lt;br /&gt;2. Monetizing Knowledge in spare time by &lt;a href="www.itvidya.com"&gt;Ajay Sanghani&lt;/a&gt;&lt;br /&gt;3. Firewatir by &lt;a href="http://angrez.blogspot.com/"&gt;Angrez Singh&lt;/a&gt;&lt;br /&gt;4. Nanocast by &lt;a href="www.brajeshwar.com"&gt;Brajeshwar&lt;/a&gt;&lt;br /&gt;5. VC's and Angel Investing in India by &lt;a href="http://wheresfreeman.blogpsot.com"&gt;Freeman Murray&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I specially liked the way Freeman talked about various aspects of VC's coming in india to fund starttup's.&lt;br /&gt;Brajeshwar and his team gave a splendid show, talking very enthusiastically about their flaghip product Nanocast.&lt;br /&gt;I was looking forward to Jon's talk to know about experiences of Slideshare with Ruby on Rails from deployment perpective.&lt;br /&gt;&lt;br /&gt;Having worked in Test Automation for a long time, Angrez's talk on Firewatir made a lot of sense to me(there are ppl in s/w world who consider test automation as magic!).&lt;br /&gt;After listening to Ajay, I think I should soon start making money out of what I write.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-1463627127271224415?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/1463627127271224415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=1463627127271224415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1463627127271224415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1463627127271224415'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2007/01/barcamppune2.html' title='BarCampPune2'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-1779124231989277633</id><published>2006-12-18T14:56:00.000-08:00</published><updated>2006-12-18T15:15:39.488-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Back after a short break</title><content type='html'>Well it was not a vacation break, its just that I had got busy with so many things in my life that I just couldn't keep up to my blog, although not blogging my experiences kills me everyday.&lt;br /&gt;A short summary of events happened with me in last few days&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.ciol.com/content/search/showarticle1.asp?artid=92089"&gt;Impromptu talk&lt;/a&gt; on Ruby and Ruby on Rails at Indicthreads conference, a Java technology conference.&lt;br /&gt;2. My room-mate flying to U.S, and that means I will have to start looking for another place to stay(I hate this part).&lt;br /&gt;3. Organized and attended &lt;a href="http://barcamp.org/BarCampPune2"&gt;BarcampPune2&lt;/a&gt; event.&lt;br /&gt;4. Became an uncle(Mamma), sister blessed with a baby boy!&lt;br /&gt;&lt;br /&gt;Following posts would cover barcamppune2 event.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-1779124231989277633?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/1779124231989277633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=1779124231989277633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1779124231989277633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1779124231989277633'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/12/back-after-short-break.html' title='Back after a short break'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-637043876971992885</id><published>2006-11-18T10:17:00.000-08:00</published><updated>2006-11-18T10:30:42.055-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Feedtools'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Feed Readers</title><content type='html'>I was looking for some feed(RSS and ATOM) readers,parsers and generators for use in Ruby on Rails and then I hit upon &lt;a href="http://simple-rss.rubyforge.org/"&gt;Simple-rss&lt;/a&gt; and &lt;a href="http://sporkmonger.com/projects/feedtools/"&gt;Feedtools&lt;/a&gt; gems.&lt;br /&gt;Simple-rss is just a plain feed reader(not a generator), very flexible as they say.&lt;br /&gt;On the other hand Feedtools is a feed, parser and generator with truck load of options like caching of feeds in database, feedupdater- a daemon which polls for feed updates if caching is on.&lt;br /&gt;A simple &lt;a href="http://sporkmonger.com/articles/2005/08/11/tutorial/"&gt;tutorial&lt;/a&gt; for Feedtools saved my time.&lt;br /&gt;Just remember to include following lines in environment.rb of Rails application to turn on caching for feedtools&lt;br /&gt;FeedTools.configurations[:feed_cache] =  "FeedTools::DatabaseFeedCache".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-637043876971992885?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/637043876971992885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=637043876971992885' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/637043876971992885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/637043876971992885'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/11/feed-readers.html' title='Feed Readers'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-4969694290829952939</id><published>2006-11-18T04:07:00.000-08:00</published><updated>2006-11-18T04:23:58.173-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cooking'/><category scheme='http://www.blogger.com/atom/ns#' term='Kheer'/><title type='text'>Kheer, a sumptuous delight on the weekend</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/4020/3907/1600/494257/Image135.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger2/4020/3907/320/66777/Image135.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;How delecious does that look?&lt;br /&gt;Today happened the incarnation of &lt;a href="http://en.wikipedia.org/wiki/Sanjeev_Kapoor"&gt;Sanjeev Kapoor&lt;/a&gt; in me, I tried my hand at &lt;a href="http://en.wikipedia.org/wiki/Payasam"&gt;kheer&lt;/a&gt;.&lt;br /&gt;A quick recipe from my sister and an hour long cooking resulted in this yummy,fabulous kheer.&lt;br /&gt;Ok, before my friends finish it off I am going to give a pause here, see you in the next blog post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-4969694290829952939?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/4969694290829952939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=4969694290829952939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/4969694290829952939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/4969694290829952939'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/11/kheer-sumptuous-delight-on-weekend.html' title='Kheer, a sumptuous delight on the weekend'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-1205849015603568355</id><published>2006-11-15T00:08:00.000-08:00</published><updated>2006-11-15T00:10:40.592-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Deprecations in Rails 1.2</title><content type='html'>Quick list of deprecations in Rails 1.2. Update your code now to make upgrading easier later. Some of these have actually been around since before the current release of 1.1.6&lt;br /&gt;&lt;br /&gt;http://www.railtie.net/articles/2006/11/02/deprecations-in-rails-1-2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-1205849015603568355?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/1205849015603568355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=1205849015603568355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1205849015603568355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1205849015603568355'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/11/deprecations-in-rails-12.html' title='Deprecations in Rails 1.2'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-2470362313453323797</id><published>2006-11-12T05:09:00.000-08:00</published><updated>2006-11-12T05:16:15.681-08:00</updated><title type='text'>Kiwi realizing his dream</title><content type='html'>A kiwi realizing his dream of flying but at the expense of his life..&lt;br /&gt;My opinion about this poor kiwi is that what he did was right,although by living in an imaginary world. he could fulfill his desires...&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sdUUx5FdySs"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/sdUUx5FdySs" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-2470362313453323797?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/2470362313453323797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=2470362313453323797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2470362313453323797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2470362313453323797'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/11/kiwi-realizing-his-dream.html' title='Kiwi realizing his dream'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-3256618638365296068</id><published>2006-11-08T20:56:00.000-08:00</published><updated>2006-11-08T21:15:19.265-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajaxscaffold'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Technologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>HTML Tables with sorting, pagination and filters</title><content type='html'>Most web applications consist of tables(html tables) in the view which list records of a particular database table with at times calculated columns.&lt;br /&gt;Following the principle of DRY(Don't repeat yourself....aah I am repeating myself by repeating the definition of DRY), I was looking for some component in Rails and javascript. I got through many solutions, following are the solutions in the descending order of ease of usage,&lt;br /&gt;&lt;br /&gt;1. Ajax Scaffold: you have got to check this out, I could construct an html table in 5 minutes by using following statement in my rails controller,&lt;br /&gt; ajax_scaffold :user,:except =&gt;['create', 'delete','edit'],:width=&gt;500,:rows_per_page =&gt; 3&lt;br /&gt; &lt;br /&gt;Note: Currently Ajax Scaffold does not provide search /filter feaure, but its in todo list of the developers of Ajax Scaffold.&lt;br /&gt;&lt;br /&gt;2. Javascript based grids.&lt;br /&gt;   &lt;a href="http://www.rodrigodiniz.qsh.eu/YahooGrid.aspx"&gt;YUI Grid&lt;/a&gt;&lt;br /&gt;    &lt;a href="http://archive.dojotoolkit.org/nightly/tests/widget/test_FilteringTable.html"&gt;Dojo filtering table&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;3. some helpers developed by rails community&lt;br /&gt;   http://dev.nozav.org/rails_ajax_table.html&lt;br /&gt;&lt;br /&gt;In second and third approach you would have to write a lot of server side code, Ajax scaffold saves you from that. &lt;br /&gt;The downside of Ajax Scaffold would be that it is not as flexible as 2nd and 3nd approach, but it solves my problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-3256618638365296068?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/3256618638365296068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=3256618638365296068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3256618638365296068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3256618638365296068'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/11/table-with-sorting-pagination-and.html' title='HTML Tables with sorting, pagination and filters'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-7886169525217428394</id><published>2006-11-08T04:29:00.000-08:00</published><updated>2006-11-08T05:01:38.707-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Expensometer'/><category scheme='http://www.blogger.com/atom/ns#' term='Expenses'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Presentation on Expens-O-Meter at Pune Ruby meet</title><content type='html'>Yes I have an excuse for not being able to write since so many days.. I was busy busy busy working towards completion of my dear baby Expens-O-Meter, which apparently hasn't happened yet.&lt;br /&gt;Last saturday I presented at Pune Ruby Meet, you could see the slides below(its using &lt;a href="http://slideshare.net/"&gt;slideshare&lt;/a&gt;, youtube for presentations)&lt;br /&gt;&lt;br /&gt;&lt;object type="application/x-shockwave-flash" data="https://s3.amazonaws.com:443/slideshare/ssplayer.swf?id=9183&amp;doc=expensometer-a-web-based-tool-built-using-ruby-on-rails-13152" width="425" height="348"&gt;&lt;param name="movie" value="https://s3.amazonaws.com:443/slideshare/ssplayer.swf?id=9183&amp;doc=expensometer-a-web-based-tool-built-using-ruby-on-rails-13152" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Do leave your views and comments to help me out improving Expens-O-Meter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-7886169525217428394?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/7886169525217428394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=7886169525217428394' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/7886169525217428394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/7886169525217428394'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/11/presentation-on-expens-o-meter-at-pune.html' title='Presentation on Expens-O-Meter at Pune Ruby meet'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-3403390569140644028</id><published>2006-10-17T14:11:00.000-07:00</published><updated>2006-10-17T14:28:55.862-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Expensometer'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Update on Expensometer</title><content type='html'>For all of them who do not know what Expensometer is, check out my earlier post &lt;a href="Pune Hackathon"&gt;http://rubymerchant.blogspot.com/2006/09/few-words-of-experience-at-pune.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since last few days I have been busy working on enhancing the features of Expensometer. Most important feature of the application I am targetting is the usability of the website. The biggest competitor to Expensometer is Microsoft Excel beacuase of its flexiblity in allowing user to do what ever they want; but the obvious advantages of web come to my rescue.&lt;br /&gt;&lt;br /&gt;I am targetting to release the alpha version of the site soon(around end of this month) and also planning to talk on it during next &lt;a href='http://www.puneruby.com/blog/'&gt;Pune Ruby &lt;/a&gt; Meet which is scheduled for 4th of next month.&lt;br /&gt;&lt;br /&gt;I will start posting about various features and screenshots of the application which would give a rough idea of how the application is going to look like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-3403390569140644028?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/3403390569140644028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=3403390569140644028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3403390569140644028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/3403390569140644028'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/10/update-on-expensometer.html' title='Update on Expensometer'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-6371156780453272905</id><published>2006-10-17T14:06:00.000-07:00</published><updated>2006-10-17T14:11:12.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technologies'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Remote Scripting Techniques</title><content type='html'>Call-response-reload model in HTTP transactions results in unneccasary reloads of pages on every call; to overcome these problems there are various remote scripting&lt;br /&gt;techniques which let the client(browser) talk to server with out any page reloads.&lt;br /&gt;Following are the remote scripting techniques available as of today,&lt;br /&gt;1. Java Applet/ ActiveX control/Flash: for this to work you must have certain plugins installed/components on the client. &lt;br /&gt;2. Ajax: who doesn't know this? XML HTTP Requests can be sent to servers.&lt;br /&gt;3. Simple HTTP via a hidden frame.&lt;br /&gt; To explain the 3rd type consider following code,&lt;br /&gt;&lt;br /&gt;&amp;lt; iframe id="RSIFrame"&lt;br /&gt;  name="RSIFrame"&lt;br /&gt;  style="width:0px; height:0px; border: 0px"&lt;br /&gt;  src="blank.html"&amp;gt; &amp;lt;/iframe&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="server.html" target="RSIFrame"&amp;gt;make RPC call&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;br /&gt; The target attribute of link tag will cause a request to be sent to the server and a response from server will be executed on the target frame, which could be as simple as a javascript function call.&lt;br /&gt;&lt;br /&gt;I had to use Iframe approach in one of my projects where I wanted to send files with a request to a server. XML Http requests do not allow files to be sent along with the request.&lt;br /&gt;&lt;br /&gt;&lt;a href='http://developer.apple.com/internet/webcontent/iframe.html'&gt; Remote scripting techniques  &lt;/a&gt; article explains the various techniques in detail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-6371156780453272905?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/6371156780453272905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=6371156780453272905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/6371156780453272905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/6371156780453272905'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/10/remote-scripting-techniques.html' title='Remote Scripting Techniques'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-899341131369928603</id><published>2006-10-17T06:21:00.000-07:00</published><updated>2006-10-17T06:34:02.130-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Ruby on Rails  IDE's</title><content type='html'>After spending an hour at my favourite hangout place, the Internet, I found following,&lt;br /&gt;&lt;br /&gt;1. TextMate the best IDE for Rails, but only available on MAC + not available freely.&lt;br /&gt;2. Rad Rails&lt;br /&gt;3. JEdit&lt;br /&gt;&lt;br /&gt;Its been sometime I have been using RadRails, but its heavy and often crashes; its time to try out JEdit.&lt;br /&gt;&lt;br /&gt;Some goodies which came along my way of web search.&lt;br /&gt;a. &lt;a href="http://schf.uc.org/articles/2006/09/18/textmate-like-template-syntax-for-radrails"&gt;TextMate-like Template Syntax for RADRails&lt;/a&gt;&lt;br /&gt;b. JEdit SuperAbv's plugin  + &lt;a href="http://synthesis.sbecker.net/articles/2006/03/20/jedit-snippets-for-ruby-on-rails"&gt;jEdit Snippets for Ruby on Rails &lt;/a&lt;br /&gt;&gt;&lt;br /&gt;c. &lt;a href="http://community.jedit.org/?q=filestore/browse/22"&gt; TextMate like Editor Scheme for JEdit &lt;/a&gt;&lt;br /&gt;d. &lt;a href="http://dovetailcomputing.com/blog/2006/09/18/using-jedit-for-ruby-on-rails/"&gt; Using jEdit for Ruby on Rails Development &lt;/a&gt;&lt;br /&gt;e. &lt;a href="http://www.eadz.co.nz/blog/article/ruby-rails-jedit.html"&gt; Autocompletion , Docks, Consoles, Parsers and Plugins &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am currently playing around with JEdit, will write a review for it after using it the way I use RadRails.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-899341131369928603?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/899341131369928603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=899341131369928603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/899341131369928603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/899341131369928603'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/10/ruby-on-rails-ides.html' title='Ruby on Rails  IDE&apos;s'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-2660926732019872039</id><published>2006-10-16T03:39:00.000-07:00</published><updated>2006-10-16T03:43:36.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Net Set Go...</title><content type='html'>Internet spider finally knits my home in the world of web, yes I have got through after a couple of days of frustations and yellings at ISP providers(Tata-Indicom) customer care.&lt;br /&gt;About speed, first impressions after browsing through some heavy load websites is good....hope to have it continue this way....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-2660926732019872039?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/2660926732019872039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=2660926732019872039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2660926732019872039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/2660926732019872039'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/10/net-set-go.html' title='Net Set Go...'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-8824411450669436970</id><published>2006-10-12T23:22:00.000-07:00</published><updated>2006-10-12T23:25:54.552-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>hide_action, a hidden treasure</title><content type='html'>There are many hidden treats in the ActionController::Base which aren’t talked about.&lt;br /&gt;one of them is hidden_action, read more at &lt;a href="http://www.mathewabonyi.com/"&gt;Mathew Abonyi's &lt;/a&gt;post on &lt;a href="http://www.mathewabonyi.com/articles/2006/08/11/hide_action-a-hidden-treasure"&gt;hidden_action &lt;/a&gt;method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-8824411450669436970?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/8824411450669436970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=8824411450669436970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8824411450669436970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8824411450669436970'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/10/hideaction-hidden-treasure.html' title='hide_action, a hidden treasure'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-7452647205328133358</id><published>2006-10-10T05:54:00.000-07:00</published><updated>2006-11-11T01:46:50.489-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>http://blogsearch.google.com/</title><content type='html'>I seem to be googling alot today, here is another Google baby.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogsearch.google.com/"&gt;Google Blog Search&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-7452647205328133358?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/7452647205328133358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=7452647205328133358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/7452647205328133358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/7452647205328133358'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/10/httpblogsearchgooglecom.html' title='http://blogsearch.google.com/'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-318957233940767628</id><published>2006-10-10T05:42:00.000-07:00</published><updated>2006-11-11T01:47:41.092-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Code Search</title><content type='html'>Trust only copy paste, Looks like Google embraces this idea...&lt;br /&gt;&lt;a href="http://google.com/codesearch"&gt;Google Code Search&lt;/a&gt; which allows a user to search for open source code snippets, the best part is that, in the results of code snippets it shows what license does the code snippet have, no need to download the code and look on to readme or license file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-318957233940767628?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/318957233940767628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=318957233940767628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/318957233940767628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/318957233940767628'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/10/google-code-search.html' title='Google Code Search'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-1379975460935507143</id><published>2006-09-29T04:55:00.000-07:00</published><updated>2006-09-29T05:04:58.524-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>Debug AJAX Requests</title><content type='html'>AJAX, on one hand it results in pleasant user experience, but on the other hand it might result in developers frustration when the error strikes as its very difficult to debug. &lt;br /&gt; The first solution to debug AJAX problems is to put print statements in your server-side code, but then it may lead you to exhaustive path testing through your code.&lt;br /&gt;The other way is to use &lt;a href="https://addons.mozilla.org/firefox/1843/"&gt;Firebug&lt;/a&gt;, a Mozilla firefox addon, which can be used to debug AJAX,javascript,CSS etc. errors.&lt;br /&gt;&lt;br /&gt;I use it extensively for AJAX, and I am impressed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-1379975460935507143?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/1379975460935507143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=1379975460935507143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1379975460935507143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/1379975460935507143'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/debug-ajax-requests.html' title='Debug AJAX Requests'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-5558365378933901606</id><published>2006-09-29T02:59:00.000-07:00</published><updated>2008-06-30T14:18:02.217-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Cascading Select Boxes with RJS</title><content type='html'>Problem: I have 2 select boxes in my web page. I want to change the value in the 2nd select box based on the value selected in first select box. yes thats possible(whats not possible with javascript?) but I will end up my day writing another piece of ugly looking javascript code.&lt;br /&gt;&lt;br /&gt;Solution:&lt;br /&gt;Some more ugly javascript code. wait a sec,somebody has already spent sometime on this...and the &lt;a href="http://rails.techno-weenie.net/tip/2006/6/20/cascading_select_boxes_with_rjs_even_on_ie"&gt;solution&lt;/a&gt;&lt;br /&gt;works as a charm on Mozilla Firefox as well as I.E 6&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Update: rails.techno-weenie closed down, hence I am posting the solution here,&lt;br /&gt;   Jun 20, 2006 2:35pm&lt;br /&gt;Avatar liquid 46 posts, 45 points  &lt;br /&gt;&lt;br /&gt;I have looked high and low for a solution to cascading select boxes. Asked questions here and on the rails ML. I have never found a solution that I understood. So I decided to roll my own.&lt;br /&gt;&lt;br /&gt;Basically you can get cascading select boxes working in FF with normal RJS and observe_field, but in IE there is no support for the innerHTML JS method for select boxes. Thus nothing happens in IE. The solution is to use a different JS method to replace the options in the select box.&lt;br /&gt;&lt;br /&gt;The method that is demonstrated here is as follows:&lt;br /&gt;&lt;br /&gt;   1. Cycle through each option in the target select box, and remove it&lt;br /&gt;   2. Construct DOM Nodes while cycling over the new data, createing options and setting the values, then attaching to the target select node&lt;br /&gt;&lt;br /&gt;You will need to include the following Javascript function in your page, either linked or embedded.&lt;br /&gt;&lt;br /&gt;function update_select_options( target, opts_array, clear_select_list ) {&lt;br /&gt;&lt;br /&gt;    if( $(target).type.match("select" ) ){ // Confirm the target is a select box&lt;br /&gt;&lt;br /&gt;        // Remove existing options from the target and the clear_select_list&lt;br /&gt;        clear_select_list[clear_select_list.length] = target // Include the target in the clear list&lt;br /&gt;&lt;br /&gt;        for( k=0;k &lt; clear_select_list.length;k++){&lt;br /&gt;            obj = $(clear_select_list[k]);&lt;br /&gt;            if( obj.type.match("select") ){&lt;br /&gt;                len = obj.childNodes.length;&lt;br /&gt;                for( var i=0;i &lt; len;i++){obj.removeChild(obj.firstChild);}&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Populate the new options&lt;br /&gt;        for(i=0;i &lt; opts_array.length;i++){&lt;br /&gt;            o = document.createElement( "option" );&lt;br /&gt;            o.appendChild( document.createTextNode( opts_array[i][0] ) );&lt;br /&gt;            o.setAttribute( "value", opts_array[i][1] );&lt;br /&gt;            obj.appendChild(o);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That doesn’t look very nice so I decided to use a helper. I have put this into the application_helper.rb.&lt;br /&gt;&lt;br /&gt;   1. # This helper method is used to generate the javascript to execute on the client&lt;br /&gt;   2. # It assumes that the function update_select_options is already in the open document&lt;br /&gt;   3. #&lt;br /&gt;   4. # Options&lt;br /&gt;   5. # &lt;tt&gt;:text&lt;/tt&gt; - The method to use on collection objects to get the text for the option&lt;br /&gt;   6. # &lt;tt&gt;:value&lt;/tt&gt; - The method to use on collection objects to get the value attribute for the option&lt;br /&gt;   7. # &lt;tt&gt;:include_blank&lt;/tt&gt; - Includes a blank option at the top of cascaded boxes&lt;br /&gt;   8. # &lt;tt&gt;:clear&lt;/tt&gt; - An array that contains the dom id's of select boxes to clear when target_dom_id changes&lt;br /&gt;   9. def update_select_box( target_dom_id, collection, options={} )&lt;br /&gt;  10.&lt;br /&gt;  11. # Set the default options&lt;br /&gt;  12. options[:text] ||= 'name'&lt;br /&gt;  13. options[:value] ||= 'id'&lt;br /&gt;  14. options[:include_blank] = true if options[:include_blank].nil?&lt;br /&gt;  15. options[:clear] ||= []&lt;br /&gt;  16. pre = options[:include_blank] ? [['','']] : []&lt;br /&gt;  17.&lt;br /&gt;  18. out = "update_select_options( $('" &lt;&lt; target_dom_id.to_s &lt;&lt; "'),"&lt;br /&gt;  19. out &lt;&lt; "#{(pre + collection.collect{ |c| [c.send(options[:text]), c.send(options[:value])]}).to_json}" &lt;&lt; ","&lt;br /&gt;  20. out &lt;&lt; "#{options[:clear].to_json} )"&lt;br /&gt;  21. end&lt;br /&gt;&lt;br /&gt;html | txt&lt;br /&gt;&lt;br /&gt;To test this out I made some sample models, imaginatively named,&lt;br /&gt;&lt;br /&gt;    * LevelOne&lt;br /&gt;    * LevelTwo&lt;br /&gt;    * LevelThree&lt;br /&gt;&lt;br /&gt;The code for a basic view is shown below. This doesn’t have many of the options set for the various fields so that it is clearer.&lt;br /&gt;&lt;br /&gt;   1. &lt;%= start_form_tag %&gt;&lt;br /&gt;   2. &lt;%= select( "level_one", "id", LevelOne.find(:all).collect{ |l1| [l1.name, l1.id] } ) %&gt;&lt;br /&gt;   3. &lt;%= select( "level_two", "id", [] ) %&gt;&lt;br /&gt;   4. &lt;%= select( "level_three", "id", [] ) %&gt;&lt;br /&gt;   5. &lt;%= submit_tag %&gt;&lt;br /&gt;   6. &lt;%= end_form_tag %&gt;&lt;br /&gt;   7.&lt;br /&gt;   8. &lt;%= observe_field "level_one_id",&lt;br /&gt;   9. {:url =&gt; {:action =&gt; 'level_one_update'},&lt;br /&gt;  10. :with =&gt; "level_one_id"} %&gt;&lt;br /&gt;  11.&lt;br /&gt;  12. &lt;%= observe_field "level_two_id",&lt;br /&gt;  13. {:url =&gt; {:action =&gt; 'level_two_update'},&lt;br /&gt;  14. :with =&gt; "level_two_id" } %&gt;&lt;br /&gt;15.&lt;br /&gt;&lt;br /&gt;html | txt&lt;br /&gt;&lt;br /&gt;And the matching code in the controller&lt;br /&gt;&lt;br /&gt;   1. def level_one_update&lt;br /&gt;   2. return unless request.xhr?&lt;br /&gt;   3. level_twos = LevelTwo.find(:all, :conditions =&gt; ["level_one_id=?", params[:level_one_id]] )&lt;br /&gt;   4. render :update do |page|&lt;br /&gt;   5. page &lt;&lt; update_select_box( "level_two_id",&lt;br /&gt;   6. level_twos,&lt;br /&gt;   7. {:text =&gt; :name,&lt;br /&gt;   8. :clear =&gt; ['level_three_id']} )&lt;br /&gt;   9. end&lt;br /&gt;  10. end&lt;br /&gt;  11.&lt;br /&gt;  12. def level_two_update&lt;br /&gt;  13. return unless request.xhr?&lt;br /&gt;  14. level_threes = LevelThree.find( :all, :conditions =&gt; ["level_two_id=?", params[:level_two_id]])&lt;br /&gt;  15. render :update do |page|&lt;br /&gt;  16. page &lt;&lt; update_select_box( "level_three_id",&lt;br /&gt;  17. level_threes,&lt;br /&gt;  18. {:text =&gt; :name} )&lt;br /&gt;  19. end&lt;br /&gt;  20. end&lt;br /&gt;&lt;br /&gt;html | txt&lt;br /&gt;&lt;br /&gt;Notice that the result of update_select_box needs to be written to the page object as javascript (via &lt;&lt; )&lt;br /&gt;&lt;br /&gt;That’s it. I haven’t had a chance to test it on various browsers since I only have FF 1.5 and IE 7. I believe there will be issues on Opera and older versions of browsers milage may vary.&lt;br /&gt;&lt;br /&gt;I hope that this helps… As always if there is any better ways to do this… I’m all ears&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-5558365378933901606?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/5558365378933901606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=5558365378933901606' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5558365378933901606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/5558365378933901606'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/cascading-select-boxes-with-rjs.html' title='Cascading Select Boxes with RJS'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-6995392347743504756</id><published>2006-09-25T07:23:00.000-07:00</published><updated>2006-11-11T01:50:31.055-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='Ebook'/><title type='text'>Ebook Marker</title><content type='html'>I was reading an ebook the other day and found it was very frustrating and time consuming to get back to the point where I had left reading in my previous encounter with the ebook, then I thought the way we leave a strand of string,cloth for marking inside a physical book, we should have something similar in an ebook to go the current reading position inside the ebook.&lt;br /&gt;&lt;br /&gt;Are there any Adobe guys looking at my blog?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-6995392347743504756?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/6995392347743504756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=6995392347743504756' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/6995392347743504756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/6995392347743504756'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/ebook-marker.html' title='Ebook Marker'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-8830400217838886841</id><published>2006-09-25T07:14:00.000-07:00</published><updated>2006-11-11T01:51:36.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Brought a Laptop</title><content type='html'>Finally, after loads of research and discussions I have purchased a Laptop. &lt;br /&gt;It is HP DV 2025 TU...Talking about looks its awesome...its a high end machine which is apt for my needs.&lt;br /&gt;Well last week I coudlnt resist taking it to bombay, and trying to work in the Volvo on my way(work..u see I am a busy guy).&lt;br /&gt;But without Internet its a dead machine, so now trying to find about worthy broadband deals, ppl say bsnl rocks but may be it doesnt have connectivity in my area(they havent reached the heaven yet:) common u bsnl guys)&lt;br /&gt;&lt;br /&gt;Oh and now my cousin from singapore offers me to bring a laptop from sgpore...brother its too late....(and now I am looking at all reasons why one should buy from India).&lt;br /&gt;&lt;br /&gt;Hope to use my laptop efficiently in cmng days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-8830400217838886841?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/8830400217838886841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=8830400217838886841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8830400217838886841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/8830400217838886841'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/brought-laptop.html' title='Brought a Laptop'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-115769101506988429</id><published>2006-09-07T21:42:00.000-07:00</published><updated>2006-11-11T01:52:33.313-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><title type='text'>LDAP for Internet</title><content type='html'>Do we need something on the lines of LDAP for Internet?&lt;br /&gt;I stronly believe that we do need. It stuck my mind when yet again I was trying to logon to this site and after several attempts still couldnt recall the username, password combination for that site, the ultimate solution, click forgot password link and get yourself an autogenerated password, ofcourse you would need to remember your login id and your pet's name(security question)&lt;br /&gt;I remember using some desktop tools which let you store username/password combination for every site and when ever you visit that site it will fill in details for you. but tis solutions will not work when you access Internet from various machines or shared desktops.&lt;br /&gt;So whats the solution? yes just 1 username/password for Internet. the giant hurdle on the way would be security, now how do we make sure noone breaches security?&lt;br /&gt;&lt;br /&gt;Lets wait n watch and see what big brother has in bag for us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-115769101506988429?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/115769101506988429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=115769101506988429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115769101506988429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115769101506988429'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/ldap-for-internet.html' title='LDAP for Internet'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-115763308542641269</id><published>2006-09-07T05:44:00.000-07:00</published><updated>2006-11-11T01:53:11.611-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Innovation Workshop</title><content type='html'>Today was the first day of a 2-days  &lt;a href="http://www.innovationworkshop.in/" title="Innovation Workshop"&gt;"Innovation Workshop"&lt;/a&gt;.  Having already spent some time in Ruby and RoR,it was kind of way to basic for me, but for a person who is just starting to learn ruby/rails can start rolling after these kind of workshops.&lt;br /&gt;&lt;br /&gt;Even if you are good at Ruby it might be worthwhile to attend such sessions as they let u  know the usages of various ruby features. Ruby Dynamics for example,before the session I knew how it works, but after session I know where I can apply that.&lt;br /&gt;&lt;br /&gt;Few things I learnt were&lt;br /&gt;&lt;br /&gt; &lt;li&gt;Less code better code, Camping web framework by why the lucky stiff has been written in 4k lines.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Principle of Least Surprise&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Usage of Irb(interactive ruby), ri(ruby index, similar to man utility on UNIX systems)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Why's funda of Read it aloud, read any line of ruby aloud and it would be an english sentence.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Blocks are similar to Anonymous Delegates of C#.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Eval is actually EVIL&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;Some portion of Ruby and the sweet giant Rails to be covered tommorow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-115763308542641269?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/115763308542641269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=115763308542641269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763308542641269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763308542641269'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/innovation-workshop.html' title='Innovation Workshop'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-115763293094336155</id><published>2006-09-07T05:40:00.000-07:00</published><updated>2006-11-11T01:58:08.367-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GK'/><category scheme='http://www.blogger.com/atom/ns#' term='Biofuels'/><title type='text'>Ethanol over Oil as a fuel</title><content type='html'>Dicussions have been going on from a while for the use of BioFuels as a fuel over oil(petroleum products/gasoline)&lt;br /&gt;&lt;br /&gt;A talk by &lt;a href="http://khoslaventures.com" target="_blank" title="Vinod Khosla"&gt;Vinod Khosla&lt;/a&gt; &lt;a href="http://video.google.com/videoplay?docid=-570288889128950913&amp;amp;q=vinod+khosla" target="_blank" title="Think Outside the Barrel"&gt;BioFuels: Think Outside the Barrel&lt;/a&gt; summarizes(well actually details out with a presentation having 130 slides!!!) on the advantages of using Ethanol as a fuel for vehicles over oil.&lt;br /&gt;&lt;br /&gt;Pros of using Ethanol&lt;br /&gt;&lt;br /&gt;1. Cheap ($0.75/gal when compared to $1.60/gal of petroleum)&lt;br /&gt;&lt;br /&gt;2. Reduction in green house gases which lead to global warming.&lt;br /&gt;&lt;br /&gt;3. No need to depend on Mid-East countries for importing Oil.&lt;br /&gt;&lt;br /&gt;4. Increase in Farm jobs for producing Ethanol.&lt;br /&gt;&lt;br /&gt;Challenges&lt;br /&gt;&lt;br /&gt;1. Oil companies dont wont to die.&lt;br /&gt;&lt;br /&gt;2. Production of &lt;a href="http://en.wikipedia.org/wiki/Flexible-fuel_vehicle" title="Flexible Fuel Vehicles"&gt;Flexible-fuel vehicles&lt;/a&gt; at a larger scale(General Motors has already started working on it)&lt;br /&gt;&lt;br /&gt;Many including Vinod are backing a ballot initiative in California -- &lt;a href="http://www.yesoncleanenergy.com/" title="California Clean Alternative Energy Initiative"&gt;the California Clean Alternative Energy Initiative&lt;/a&gt; -- that would charge oil companies an extraction fee for the oil they take from California, the nation's third largest oil-producing state. This would generate $4 billion in ten years, which would be used to reduce our petroleum usage by 25% and to fund research in our universities on clean technologies. The goal of the initiative is simple: cleaner, cheaper, and more reliable energy and fuels.&lt;br /&gt;&lt;br /&gt;I hope this initiative gets acceptance and soon we all drive ethanol run cars; I read it somewhere.. its the not the question of how many dollars oil is costing more, but it is whether we want to survive or not?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-115763293094336155?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/115763293094336155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=115763293094336155' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763293094336155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763293094336155'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/ethanol-over-oil-as-fuel.html' title='Ethanol over Oil as a fuel'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-115763278640321150</id><published>2006-09-07T05:38:00.000-07:00</published><updated>2006-11-11T01:57:03.785-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GK'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogspot'/><title type='text'>Whats common with Kannada Police Dept. and Los Angeles Police Dept.?</title><content type='html'>Both maintain a blog!&lt;br /&gt;&lt;br /&gt;Reason: so that news could go out to media persons and public in a fair manner&lt;br /&gt;&lt;br /&gt;Check out,&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://www.lapdblog.org/" title="LAPD BLOG"&gt;http://www.lapdblog.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://udupipolice.blogspot.com/" title="Udupi Police Dept"&gt;http://udupipolice.blogspot.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-115763278640321150?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/115763278640321150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=115763278640321150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763278640321150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763278640321150'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/whats-common-with-kannada-police-dept.html' title='Whats common with Kannada Police Dept. and Los Angeles Police Dept.?'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-115763268703680176</id><published>2006-09-07T05:36:00.000-07:00</published><updated>2006-11-11T01:56:23.035-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Yet Another Crush(Another post from Wordpress)</title><content type='html'>Yes yet another crush:)&lt;br /&gt;Lots of people have already fallen for her because of her simplicity, elegance and dynamics. Then I heard about this guy to whom she has been engaged since 3 years , &lt;a target="_blank" href="http://www.loudthinking.com/arc/000594.html" title="not long ago"&gt;not long ago&lt;/a&gt;&lt;br /&gt;Well the lady is none other than Ruby and the guy to whom she has been engaged is Rails.&lt;br /&gt;Can I impress her more than Rails?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-115763268703680176?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/115763268703680176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=115763268703680176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763268703680176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763268703680176'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/yet-another-crushanother-post-from.html' title='Yet Another Crush(Another post from Wordpress)'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-115763256987822704</id><published>2006-09-07T05:33:00.000-07:00</published><updated>2006-11-11T01:55:51.048-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wordpress'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogspot'/><title type='text'>Thanks to Wordpress for letting me export my blog posts</title><content type='html'>But unfortunately I dont see any import feature in blogspot :(.&lt;br /&gt;I have to now copy all the post data from xml file created by wordpress and paste it here in blogspot. After all I dont want to loose my earlier posts.&lt;br /&gt;so some posts from now are what I had posted when I was living in wordpress, which you might have already read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-115763256987822704?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/115763256987822704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=115763256987822704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763256987822704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763256987822704'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/thanks-to-wordpress-for-letting-me.html' title='Thanks to Wordpress for letting me export my blog posts'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-115763187062057607</id><published>2006-09-07T05:23:00.000-07:00</published><updated>2006-11-11T01:54:11.663-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='PuneHackathon'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Few words of experience at Pune Hackhathon</title><content type='html'>Before stating my experience(which is going to be pretty long), I would like to sincerely thank Vaibhav(Better labs), Shashank Date(Reevik Technologies) and all those who were involved in the organization of this event; it was a platform for people like me to boost our confidence levels by doing something like developing a web application in 36 hours.I also congratulate all teams for their best efforts in their respective applications.&lt;br /&gt;the bottom line is that"The event was a grand success!!"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2 Weeks Before Hackathon&lt;/strong&gt;(what the heck is hackathon?)&lt;br /&gt;I heard about Pune hackathon from the PuneRuby mailing list around 2 weeks in advance of the event.The first question I asked myself was "Will I be able to develop a complete web application in 2 days, and if I have to then I better start preparing for it from now on". Days went on, clogged in work at office and at home and as usual I just couldnt take out time to think of an IDEA for Pune Hackathon,&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;few days(3-4) before hackathon ( an idea to choose from a pool of ideas)&lt;/strong&gt;&lt;br /&gt;Managed to take out sometime after office hours and came with an idea to develop something for myself, Myself and my colleague Vishwanath came out with a bunch of ideas, but finally we chose Expense-O-Meter; being spendthrift, this would definitely turn out to be a handy tool for me atleast.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A day before Hackathon(Raring to go)&lt;/strong&gt;&lt;br /&gt;It was 22:00 hrs in the evening and we still hadn't dicussed anything beyond our website name; We(me and Vishwanath) went to Cafeteria to discuss on what all features to have inside our website; came up with few while having an Egg Sandwitch(it stimulated few ideas as I had just spent few another bucks on it). Anyway our discussion went on for couple of hours and then we drove back home promising each other that we would give each other a wake up call at 06:30 HRS or so(I had hit the bed at 02:00 in the morning)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The D-Day&lt;/strong&gt;&lt;br /&gt;It was 08:30 and my alarm for some reason didn't ring, similar things happened with Vishwanath, and thanks to Raingod for pouring rains like CATS and DOGS on the D-day. we managed to reached the venue at 10:30 and because of rains only few had turned up at 10:30. we waited for sometime, talked to Dibya, Shashank and Vaibhav on things related to ruby and RoR, explained them about our idea of developing Expens-o-Meter.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;On your marks, get, set and go.....&lt;/strong&gt;&lt;br /&gt;Vaibhav signalled the start of the event,we went on to our workstations and right away we prepared an xls(I am good at it!) listing milestones with estimated hours.&lt;br /&gt;On our way in Rails we learnt a lot of things in depth which we had covered in breadth before. things like using Ajax with rails, migrations, graphs in ruby, javascript etc. We modified the plan once every 3 to 4 hours to accomodate the slippages.&lt;br /&gt;In between this intensive work, Vaibhav dropped in to share his views and reasons to host such an event; the primary reason being to form a community of real enthusiasts who could help Indian tech industry to move towards developing PLATFORMS along with solutions which it currently indulges in.&lt;br /&gt;It was past midnight, and thanks to whistles of Akshay which kept us awake!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;It's a new day,&lt;/strong&gt;&lt;br /&gt;It was morning and we were still at Milestone 2 of 5 (5th milestone was real testing of the application); Thanks to Viki from Betterlabs from making our morning really good by helping out with kewl UI for our main page! the UI gave us a push and we were on the track and had quickly moved on to our 4th milestone, which was to develop reporting feature. we faced some problems while trying to use one of the Graph libraries of ruby and decided to work on completing other minor leftovers.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;In the End, it does matter!&lt;/strong&gt;&lt;br /&gt;36 hours were gone, and it felt like eternity to me; we had actually done a LOT of things in last 36 hours.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Presentation and PIZZA time&lt;/strong&gt;&lt;br /&gt;Everyone started presenting their work, I was amazed to see the features everyone had in their websites, many things had happened overnight; DalalSTreet by Pratik for indeed impressive of all.&lt;br /&gt;After a pizza break rest of presentations were done and it was the time to announce the results.&lt;br /&gt;Shashank asked few questions like how many of us had used Rails/Testing features, to which no hand raised :) the justification was that it was just 36 hours we had!&lt;br /&gt;Our project being rewarded 3rd came as a sweet surprise to me;I am sure there was a very narrow margin between rating of all the applications which were developed.&lt;br /&gt;here I am now with my msn nick being " This spike is not going to die",looking forward to enhance the application developed and putting it on to Internet soon.&lt;br /&gt;The journey of the ruby merchant begins......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-115763187062057607?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/115763187062057607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=115763187062057607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763187062057607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763187062057607'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/few-words-of-experience-at-pune.html' title='Few words of experience at Pune Hackhathon'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32010164.post-115763095796449727</id><published>2006-09-07T05:04:00.000-07:00</published><updated>2006-11-11T01:54:51.008-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogspot'/><title type='text'>Back to Blogspot</title><content type='html'>I am back to Blogspot, wow it feels so good after an horrible encounter with wordpress.com.&lt;br /&gt;So ppl keep watching this channel, posts will keep flowing in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32010164-115763095796449727?l=blog.jatinder.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jatinder.me/feeds/115763095796449727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32010164&amp;postID=115763095796449727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763095796449727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32010164/posts/default/115763095796449727'/><link rel='alternate' type='text/html' href='http://blog.jatinder.me/2006/09/back-to-blogspot.html' title='Back to Blogspot'/><author><name>Jatinder Singh</name><uri>http://www.blogger.com/profile/16429529533485360140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
