<?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:blogger='http://schemas.google.com/blogger/2008' 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-8761480874400225239</id><updated>2024-10-09T02:01:52.710-07:00</updated><category term="programming"/><category term="personal"/><category term="javascript"/><category term="ruby"/><category term="rails"/><category term="html"/><category term="globallogic"/><category term="ror"/><category term="workstreamr"/><category term="air"/><category term="css"/><category term="development"/><category term="travel"/><category term="dinesh"/><category term="birthday"/><category term="yahoo"/><category term="facebook"/><category term="friends"/><category term="interview"/><category term="java"/><category term="kerala"/><category term="cache"/><category term="gem"/><category term="google"/><category term="mac"/><category term="twitter"/><category term="1.9"/><category term="2.0"/><category term="bangalore"/><category term="coffeescript"/><category term="design"/><category term="flex"/><category term="grunt"/><category term="iphone"/><category term="less"/><category term="misc"/><category term="movies"/><category term="mysql"/><category term="node"/><category term="osx"/><category term="paidinterviews"/><category term="party"/><category term="rvm"/><category term="svg"/><category term="vacation"/><category term="worldcup"/><category term="1.9.2-p180"/><category term="3.2"/><category term="96.7"/><category term="a/b-test"/><category term="actionscript"/><category term="active messaging"/><category term="activeadmin"/><category term="activemq"/><category term="airtel"/><category term="amit"/><category term="ap4r"/><category term="application"/><category term="ashl"/><category term="assets"/><category term="asynchronous"/><category term="avatar"/><category term="backup"/><category term="bash"/><category term="beard"/><category term="bedrock"/><category term="berlin"/><category term="bike"/><category term="book"/><category term="bower"/><category term="buckets"/><category term="business"/><category term="change"/><category term="chucknorris"/><category term="classpath"/><category term="cloud"/><category term="code"/><category term="codepen"/><category term="collaboration"/><category term="concerns"/><category term="configuration"/><category term="cooking"/><category term="cricket"/><category term="crop"/><category term="csp"/><category term="currying"/><category term="dashcode"/><category term="death"/><category term="deployment"/><category term="dom mutation observer"/><category term="donbosco"/><category term="dubai"/><category term="easy_install"/><category term="engineer"/><category term="enthiosys"/><category term="europe"/><category term="express"/><category term="family"/><category term="fibonacci"/><category term="finance"/><category term="flash"/><category term="flux"/><category term="football"/><category term="fragment-cache"/><category term="franki"/><category term="funny"/><category term="generator"/><category term="gitesh"/><category term="goa"/><category term="graphite"/><category term="groups"/><category term="hack"/><category term="haml"/><category term="headers"/><category term="heroku"/><category term="holi"/><category term="hubot"/><category term="imagemagick"/><category term="innsbruck"/><category term="instagram"/><category term="instruments"/><category term="internet"/><category term="ipad"/><category term="ipod"/><category term="jayasu"/><category term="job"/><category term="joke"/><category term="layoff"/><category term="lexical"/><category term="library"/><category term="life"/><category term="like"/><category term="linkedin"/><category term="love"/><category term="malayalam"/><category term="mesos"/><category term="microsoft"/><category term="migration"/><category term="mongodb"/><category term="mongolab"/><category term="mumbai"/><category term="music"/><category term="mvc"/><category term="nitc"/><category term="node-sass"/><category term="nostalgia"/><category term="npm"/><category term="oatmeal"/><category term="oauth"/><category term="objectivec"/><category term="observer"/><category term="omniauth"/><category term="opensource"/><category term="overview"/><category term="packaging"/><category term="page"/><category term="paperclip"/><category term="passenger"/><category term="path"/><category term="php"/><category term="pip"/><category term="playlist"/><category term="politics"/><category term="prolyfill"/><category term="promotion"/><category term="ptpt"/><category term="puma"/><category term="pune"/><category term="python"/><category term="qrcode"/><category term="questions"/><category term="queues"/><category term="quit"/><category term="quote"/><category term="radio"/><category term="railjet"/><category term="rails-api"/><category term="railscasts"/><category term="railways"/><category term="rainbows"/><category term="rbenv"/><category term="react"/><category term="redis"/><category term="reshma"/><category term="review"/><category term="rishikesh"/><category term="router"/><category term="s3"/><category term="sass"/><category term="satire"/><category term="school"/><category term="scoping"/><category term="search"/><category term="seconds_until_end_of_day"/><category term="semicolons"/><category term="senior"/><category term="series"/><category term="service"/><category term="shilpi"/><category term="shimla"/><category term="shivpuri"/><category term="short"/><category term="simple_navigation"/><category term="socialgraph"/><category term="software"/><category term="sqlite3"/><category term="sse"/><category term="standards"/><category term="statsd"/><category term="storm"/><category term="story"/><category term="stowe"/><category term="sublimetext"/><category term="task"/><category term="tattoo"/><category term="traffic"/><category term="training"/><category term="trip"/><category term="twitpic"/><category term="unicorn"/><category term="vajra"/><category term="version1.0"/><category term="vienna"/><category term="vim"/><category term="w3c"/><category term="wave"/><category term="wc"/><category term="web"/><category term="webcomponents"/><category term="wedding"/><category term="wifi"/><category term="will_paginate"/><category term="wormhole"/><category term="xcode"/><category term="xss"/><category term="yoyo"/><category term="yui"/><title type='text'>&amp;lt;&amp;lt; Dinks &amp;gt;&amp;gt;</title><subtitle type='html'>Alice: I was just wondering if you could help me find my way.&#xa;Cheshire Cat: Well that depends on where you want to get to.&#xa;Alice: Oh, it really doesn&#39;t matter, as long as...&#xa;Cheshire Cat: Then it really doesn&#39;t matter which way you go.&#xa;Alice: .. as long as I reach somewhere ..</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>152</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-6494418676655052884</id><published>2015-05-31T04:20:00.000-07:00</published><updated>2024-02-16T10:28:14.364-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="lexical"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="scoping"/><title type='text'>Lexical Scoping in Ruby</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
A video explains better than words!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;479&quot; src=&quot;https://www.youtube.com/embed/7k3pqUFa-6w&quot; width=&quot;628&quot; youtube-src-id=&quot;7k3pqUFa-6w&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/6494418676655052884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/6494418676655052884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/6494418676655052884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/6494418676655052884'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2015/05/lexical-scoping-in-ruby.html' title='Lexical Scoping in Ruby'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/7k3pqUFa-6w/default.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Bergmannstraße, Berlin, Germany</georss:featurename><georss:point>52.4889683 13.395776899999987</georss:point><georss:box>52.479299800000007 13.375606899999987 52.4986368 13.415946899999987</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-7454249904329765839</id><published>2015-03-31T05:55:00.002-07:00</published><updated>2015-03-31T05:56:06.181-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="change"/><category scheme="http://www.blogger.com/atom/ns#" term="quit"/><title type='text'>Change</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Its been more than 3 years now and to tell the least, I have learned a lot. Starting from structuring an application to deploying and tagging. Monitoring if parts of the application works and taking actions and analysing.&lt;br /&gt;
&lt;br /&gt;
But during the last year my productivity and urge has gone down. Substantially. And I have myself to blame. I kept on latching on to my job and did not innovate and search for a new one or change something inside. Now I feel that my team has no trust in me and I am a useless part of the team. This has to change. This has to stop. And importantly I have to come out of this strong.&lt;br /&gt;
&lt;br /&gt;
I intend to look to for opportunities in Berlin and shape my future for the best!&lt;br /&gt;
&lt;br /&gt;
Look more at :-&lt;br /&gt;
&lt;br /&gt;
Nodejs&lt;br /&gt;
React&lt;br /&gt;
Backbone&lt;br /&gt;
Docker&lt;br /&gt;
Chef&lt;br /&gt;
Swift&lt;br /&gt;
SQS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/7454249904329765839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/7454249904329765839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7454249904329765839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7454249904329765839'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2015/03/its-been-more-than-3-years-now-and-to.html' title='Change'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>32.4639725 -27.91356399999998 72.5133075 54.703624000000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-20816381775567986</id><published>2015-03-01T11:09:00.001-08:00</published><updated>2015-03-01T11:09:45.481-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="grunt"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="task"/><title type='text'>No Deployment Friday Grunt Plugin</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
My First &lt;a href=&quot;http://gruntjs.com/creating-tasks&quot; target=&quot;_blank&quot;&gt;Grunt Plugin&lt;/a&gt; which just a simple thing! Stops a deployment if the day is a Friday (any day you define as a No Deployment day actually).&lt;br /&gt;
&lt;br /&gt;
Have a look at&amp;nbsp;&lt;a href=&quot;https://github.com/dinks/grunt-warn-friday&quot;&gt;https://github.com/dinks/grunt-warn-friday&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4hfzFOSI3CbfKnE5DSZqVD8XFtu6MlBB0o5tBHpdINq9LlN88pThvAZ1ieeSYM0lp_L7pCZo8_TMhnuXU6u-ZSthtlLCLdPqQPHKMpO2WtuGUgioPZ9OGAhjMAZ3TbZecGIkk7a2Dw-8/s1600/fail.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4hfzFOSI3CbfKnE5DSZqVD8XFtu6MlBB0o5tBHpdINq9LlN88pThvAZ1ieeSYM0lp_L7pCZo8_TMhnuXU6u-ZSthtlLCLdPqQPHKMpO2WtuGUgioPZ9OGAhjMAZ3TbZecGIkk7a2Dw-8/s1600/fail.gif&quot; height=&quot;395&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI58fFpGEJifHp8iHUaTwNkvVC9MTfcX9RcBTkzoqOEuv7pwGtT3KcmFLgATfnbP3UJnf4YZV_HvdekdqM6OihKiBUZ_yUkJd6onxU2pK7iej5x1ynq6G3C8ihT7pvHqQQyniSRmm9ln8/s1600/success.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI58fFpGEJifHp8iHUaTwNkvVC9MTfcX9RcBTkzoqOEuv7pwGtT3KcmFLgATfnbP3UJnf4YZV_HvdekdqM6OihKiBUZ_yUkJd6onxU2pK7iej5x1ynq6G3C8ihT7pvHqQQyniSRmm9ln8/s1600/success.gif&quot; height=&quot;372&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/20816381775567986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/20816381775567986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/20816381775567986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/20816381775567986'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2015/03/no-deployment-friday-grunt-plugin.html' title='No Deployment Friday Grunt Plugin'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4hfzFOSI3CbfKnE5DSZqVD8XFtu6MlBB0o5tBHpdINq9LlN88pThvAZ1ieeSYM0lp_L7pCZo8_TMhnuXU6u-ZSthtlLCLdPqQPHKMpO2WtuGUgioPZ9OGAhjMAZ3TbZecGIkk7a2Dw-8/s72-c/fail.gif" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Bergmannstraße, Berlin, Germany</georss:featurename><georss:point>52.4889683 13.395776899999987</georss:point><georss:box>52.479299800000007 13.375606899999987 52.4986368 13.415946899999987</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-7098248827384275897</id><published>2015-02-24T16:09:00.004-08:00</published><updated>2015-02-24T16:09:43.701-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bower"/><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="express"/><category scheme="http://www.blogger.com/atom/ns#" term="flux"/><category scheme="http://www.blogger.com/atom/ns#" term="grunt"/><category scheme="http://www.blogger.com/atom/ns#" term="heroku"/><category scheme="http://www.blogger.com/atom/ns#" term="mongodb"/><category scheme="http://www.blogger.com/atom/ns#" term="mongolab"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="node-sass"/><category scheme="http://www.blogger.com/atom/ns#" term="npm"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="react"/><title type='text'>Nodejs on Heroku</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
After hours of effort and suffering, I was able to deploy a &lt;a href=&quot;http://nodejs.org/&quot; target=&quot;_blank&quot;&gt;Node.js&lt;/a&gt; application to &lt;a href=&quot;https://www.heroku.com/&quot; target=&quot;_blank&quot;&gt;Heroku&lt;/a&gt;. This post reveals the effort that one has to make in deploying Node.js apps to Heroku.&lt;br /&gt;
&lt;br /&gt;
I had been not using Heroku for some time now and wanted to host a test application on Heroku. This test application has a DB connection to &lt;a href=&quot;http://www.mongodb.org/&quot; target=&quot;_blank&quot;&gt;MongoDb&lt;/a&gt;, uses the excellent &lt;a href=&quot;http://expressjs.com/&quot; target=&quot;_blank&quot;&gt;Express&lt;/a&gt; Framework in the server side and &lt;a href=&quot;http://facebook.github.io/react/&quot; target=&quot;_blank&quot;&gt;React&lt;/a&gt; with &lt;a href=&quot;https://facebook.github.io/flux/&quot; target=&quot;_blank&quot;&gt;Flux&lt;/a&gt; in the Frontend.&lt;br /&gt;
&lt;br /&gt;
The first thing that one immediately notices is that its not that easy to add add-ons in Heroku anymore. They have a policy now with specifying a Credit Card / Payment Details even though I would only like to avail one &lt;a href=&quot;https://devcenter.heroku.com/articles/dynos&quot; target=&quot;_blank&quot;&gt;Dyno&lt;/a&gt;. Previously I remember when I could add small add-ons to any &lt;a href=&quot;https://devcenter.heroku.com/articles/cedar&quot; target=&quot;_blank&quot;&gt;Cedar&lt;/a&gt; Instance. That was so much cooler. I went on to look at &lt;a href=&quot;https://www.openshift.com/&quot; target=&quot;_blank&quot;&gt;OpenShift&lt;/a&gt; from RedHat, but that was a much bigger pain than I expected.&lt;br /&gt;
&lt;br /&gt;
So back to Heroku. The first thing that I tried was to look at &lt;a href=&quot;https://mongolab.com/&quot; target=&quot;_blank&quot;&gt;MongoLab&lt;/a&gt; for a simple Db hosting. They have a &lt;a href=&quot;https://mongolab.com/plans/pricing/&quot; target=&quot;_blank&quot;&gt;nice free developer plan&lt;/a&gt; and thats what I went for. The url for the DB went onto the ENV Config for the new Heroku App created. All fine until now.&lt;br /&gt;
&lt;br /&gt;
Now came the actual building process. By default, if one does not specify the node and &lt;a href=&quot;https://www.npmjs.com/&quot; target=&quot;_blank&quot;&gt;npm&lt;/a&gt; versions in the package.json file, it take the latest versions from &lt;a href=&quot;http://semver.io/&quot;&gt;semver.io&lt;/a&gt;. So for node it took 0.12.0 (&lt;a href=&quot;https://semver.io/node/stable&quot;&gt;https://semver.io/node/stable&lt;/a&gt;) and for npm 2.6.0 (&lt;a href=&quot;https://semver.io/npm/stable&quot;&gt;https://semver.io/npm/stable&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
I have many packages in my test application and it failed compiling for a package called &lt;a href=&quot;https://github.com/sass/node-sass&quot; target=&quot;_blank&quot;&gt;node-sass&lt;/a&gt;@1.2.3. This was because of a known issue (&lt;a href=&quot;https://github.com/sass/node-sass/issues/550&quot;&gt;https://github.com/sass/node-sass/issues/550&lt;/a&gt;) and was fixed with an upgrade of node-sass. But my dependency came from another package and could not upgrade it myself. So I had to tie the version for npm and node.&lt;br /&gt;
&lt;br /&gt;
Once could do this using the engines option inside the package.json file.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&quot;engines&quot;: {&lt;br /&gt;
&amp;nbsp; &quot;node&quot;: &quot;0.10.x&quot;,&lt;br /&gt;&amp;nbsp; &quot;npm&quot;: &quot;2.3.0&quot;&lt;br /&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;/code&gt;

The next problem was with the actual building via &lt;a href=&quot;http://gruntjs.com/&quot; target=&quot;_blank&quot;&gt;grunt&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I use &lt;a href=&quot;https://github.com/taptapship/wiredep&quot; target=&quot;_blank&quot;&gt;wiredep&lt;/a&gt; to manage the &lt;a href=&quot;http://bower.io/&quot; target=&quot;_blank&quot;&gt;bower&lt;/a&gt; dependencies for me. It injects the dependencies very gracefully and in a fully configurable way. I use &lt;a href=&quot;http://fortawesome.github.io/Font-Awesome/&quot; target=&quot;_blank&quot;&gt;font-awesome&lt;/a&gt; too in the test app, but it never could add fonts to the dist folder after build. I only way I could do this was via a copy grunt task.&lt;br /&gt;
&lt;br /&gt;
The dependencies are added to the html file (according to the bower:css, bower:js comments) after the build. One normally would like to have the built version served on Heroku. My builds all go to the dist folder and therefore my script start looked like this&lt;br /&gt;
&lt;code&gt;
&lt;br /&gt;
&quot;scripts&quot;: {&lt;br /&gt;
&amp;nbsp; &quot;start&quot;: &quot;NODE_ENV=production node dist/server.js&quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;&lt;/code&gt;
Once the fonts got copied over successfully, the pending issue was to execute the bower install and grunt build task. This could be done via a post-install hook available with npm. One has just to write something similar to the line below&lt;br /&gt;
&lt;code&gt;
&lt;br /&gt;
&quot;scripts&quot;: {&lt;br /&gt;
&amp;nbsp; &quot;start&quot;: &quot;NODE_ENV=production node dist/server.js&quot;,&lt;br /&gt;
&amp;nbsp; &quot;test&quot;: &quot;grunt test&quot;,&lt;br /&gt;
&amp;nbsp; &quot;postinstall&quot;: &quot;bower install &amp;amp;&amp;amp; grunt build&quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;&lt;/code&gt;
The next problem that I faced was that bower and grunt were not a part of the dependencies list. Heroku by default has the setting NPM_CONFIG_PRODUCTION set to true. This means that the npm install only installs the items in the dependencies list and not the devDependencies list (logically). This meant that I either had to move all the grunt tasks and their deps to the dependencies list or set the variable to false. I preferred the latter&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;&lt;code&gt;heroku config:&lt;span class=&quot;pl-s3&quot;&gt;set&lt;/span&gt; NPM_CONFIG_PRODUCTION=&lt;span class=&quot;pl-s3&quot;&gt;false&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Now the postinstall was failing. It was not able to find the commands bower and grunt. This was because the commands never got installed globally. To go around this I made a shell file called post_install.sh which has these commands with the expanded paths (according to &lt;a href=&quot;http://gregtrowbridge.com/deploying-a-node-app-to-heroku-with-grunt-and-bower/&quot;&gt;http://gregtrowbridge.com/deploying-a-node-app-to-heroku-with-grunt-and-bower/&lt;/a&gt;)&lt;br /&gt;
&lt;code&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
./node_modules/bower/bin/bower install&lt;br /&gt;
./node_modules/grunt-cli/bin/grunt build&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;code&gt;&lt;code&gt;
&lt;/code&gt;&lt;/code&gt;
and the call from the scripts look like&lt;br /&gt;
&lt;code&gt;
&lt;br /&gt;
&quot;scripts&quot;: {&lt;br /&gt;
&amp;nbsp; &quot;start&quot;: &quot;NODE_ENV=production node dist/server.js&quot;,&lt;br /&gt;
&amp;nbsp; &quot;test&quot;: &quot;grunt test&quot;,&lt;br /&gt;
&amp;nbsp; &quot;postinstall&quot;: &quot;bash ./post_install.sh&quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;&lt;/code&gt;
The grunt-cli was not a part of my original devDependencies list and it had to be added for the command to execute properly.&lt;br /&gt;
&lt;br /&gt;
Now the application ran fine! Phew!&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/7098248827384275897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/7098248827384275897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7098248827384275897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7098248827384275897'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2015/02/nodejs-on-heroku.html' title='Nodejs on Heroku'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>32.463735 -27.91356399999998 72.513545 54.703624000000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-1973255318794740953</id><published>2015-01-30T10:53:00.000-08:00</published><updated>2015-01-30T10:53:43.074-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="generator"/><category scheme="http://www.blogger.com/atom/ns#" term="quote"/><title type='text'>Random Computer quote</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
A simple generator :P&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://dinks.github.io/computer-quotes/&quot;&gt;http://dinks.github.io/computer-quotes/&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/1973255318794740953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/1973255318794740953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/1973255318794740953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/1973255318794740953'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2015/01/random-computer-quote.html' title='Random Computer quote'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>52.48847 13.394715000000019 52.488809999999994 13.39534500000002</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-2348513942832885505</id><published>2015-01-24T16:30:00.000-08:00</published><updated>2015-01-24T16:30:45.077-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="currying"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type='text'>JavaScript Currying</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Generic currying in JavaScript is so great but it takes time to understand the code. Closures!&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&#39;use strict&#39;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;// subCurry(fn, 1)(2, 3)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;var subCurry = function (fn /* Multiple arguments possible */) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; var args = [].slice.call(arguments, 1); // Dont take the first argument&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; return function () {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; var thisArgs = Array.prototype.slice.call(arguments);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; return fn.apply(this, args.concat(thisArgs));&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; };&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;// curry(fn)(1)(2)(3)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;var curry = function (fn, length) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; // Length will only be available after the first curry&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; length = length || fn.length;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; return function () {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; if (arguments.length &amp;lt; length) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; var thisArgs = Array.prototype.slice.call(arguments);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; var combined = [fn].concat(thisArgs);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return curry(subCurry.apply(this, combined), length - arguments.length);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; } else {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // All arguments ok&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return fn.apply(this, arguments);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; };&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;var fn = function(x, y, z) { return x+y+z; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;var mFn = curry(fn);&lt;/span&gt;&lt;br /&gt;
&lt;code&gt;
&lt;/code&gt;
&lt;span style=&quot;font-family: monospace;&quot;&gt;console.log(mFn(1)(2)(3));&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/2348513942832885505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/2348513942832885505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/2348513942832885505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/2348513942832885505'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2015/01/javascript-currying.html' title='JavaScript Currying'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße, Berlin, Germany</georss:featurename><georss:point>52.4889683 13.395776899999987</georss:point><georss:box>52.479299800000007 13.375606899999987 52.4986368 13.415946899999987</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-777174328216458172</id><published>2014-12-19T06:58:00.000-08:00</published><updated>2014-12-19T06:58:14.315-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="music"/><category scheme="http://www.blogger.com/atom/ns#" term="playlist"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>A Developer Playlist</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
A Developer Playlist from&amp;nbsp;&lt;a href=&quot;http://www.musicforprogramming.net/&quot;&gt;http://www.musicforprogramming.net&lt;/a&gt;&lt;!-- SCM Music Player http://scmplayer.net --&gt;&lt;script data-config=&quot;{&#39;skin&#39;:&#39;skins/tunes/skin.css&#39;,&#39;volume&#39;:50,&#39;autoplay&#39;:true,&#39;shuffle&#39;:false,&#39;repeat&#39;:1,&#39;placement&#39;:&#39;top&#39;,&#39;showplaylist&#39;:false,&#39;playlist&#39;:[{&#39;title&#39;:&#39;Datassette&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_1-datassette.mp3&#39;},{&#39;title&#39;:&#39;Sunjammer&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_2-sunjammer.mp3&#39;},{&#39;title&#39;:&#39;Datassette&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_3-datassette.mp3&#39;},{&#39;title&#39;:&#39;Com Truise&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_4-com_truise.mp3&#39;},{&#39;title&#39;:&#39;Abe Mangger&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_5-abe_mangger.mp3&#39;},{&#39;title&#39;:&#39;Gods Of The New Age&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_6-gods_of_the_new_age.mp3&#39;},{&#39;title&#39;:&#39;Tahlhoff Garten + Untitled&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_7-tahlhoff_garten_and_untitled.mp3&#39;},{&#39;title&#39;:&#39;Connectedness Locus&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_8-connectedness_locus.mp3&#39;},{&#39;title&#39;:&#39;Datassette&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_9-datassette.mp3&#39;},{&#39;title&#39;:&#39;Unity Gain Temple&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_10-unity_gain_temple.mp3&#39;},{&#39;title&#39;:&#39;Miles Tilmann&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_11-miles_tilmann.mp3&#39;},{&#39;title&#39;:&#39;Forgotten Light&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_12-forgotten_light.mp3&#39;},{&#39;title&#39;:&#39;Matt Whitehead&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_13-matt_whitehead.mp3&#39;},{&#39;title&#39;:&#39;Tahlhoff Garten + Untitled&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_14-tahlhoff_garten_and_untitled.mp3&#39;},{&#39;title&#39;:&#39;Dan Adeyemi&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_15-dan_adeyemi.mp3&#39;},{&#39;title&#39;:&#39;Silent Stelios&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_16-silent_stelios.mp3&#39;},{&#39;title&#39;:&#39;Graphplan&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_17-graphplan.mp3&#39;},{&#39;title&#39;:&#39;Konx Om Pax&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_18-konx_om_pax.mp3&#39;},{&#39;title&#39;:&#39;Hivemind&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_19-hivemind.mp3&#39;},{&#39;title&#39;:&#39;Uberdog&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_20-uberdog.mp3&#39;},{&#39;title&#39;:&#39;Idol Eyes&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_21-idol_eyes.mp3&#39;},{&#39;title&#39;:&#39;Mindaugaszq&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_22-mindaugaszq.mp3&#39;},{&#39;title&#39;:&#39;Panda Magic&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_23-panda_magic.mp3&#39;},{&#39;title&#39;:&#39;RITES&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_24-rites.mp3&#39;},{&#39;title&#39;:&#39;_nono_&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_25-_nono_.mp3&#39;},{&#39;title&#39;:&#39;Abstraction&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_26-abstraction.mp3&#39;},{&#39;title&#39;:&#39;Michael Hicks&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_27-michael_hicks.mp3&#39;},{&#39;title&#39;:&#39;Big War&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_28-big_war.mp3&#39;},{&#39;title&#39;:&#39;Luke Handsfree&#39;,&#39;url&#39;:&#39;http://datashat.net/music_for_programming_29-luke_handsfree.mp3&#39;}]}&quot; src=&quot;http://scmplayer.net/script.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;!-- SCM Music Player script end --&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/777174328216458172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/777174328216458172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/777174328216458172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/777174328216458172'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2014/12/a-developer-playlist.html' title='A Developer Playlist'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße, Berlin, Germany</georss:featurename><georss:point>52.4889683 13.395776899999987</georss:point><georss:box>52.479299800000007 13.375606899999987 52.4986368 13.415946899999987</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-3866654784068502317</id><published>2014-11-17T13:56:00.000-08:00</published><updated>2014-11-17T13:56:43.637-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="engineer"/><category scheme="http://www.blogger.com/atom/ns#" term="review"/><category scheme="http://www.blogger.com/atom/ns#" term="senior"/><category scheme="http://www.blogger.com/atom/ns#" term="software"/><title type='text'>Recent Reads</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
From the book &quot;&lt;a href=&quot;http://theseniorsoftwareengineer.com/&quot; target=&quot;_blank&quot;&gt;The Senior Software Engineer&lt;/a&gt;&quot; from David Bryant&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
I had a code review once where the reviewer took issue with a stylistic decision that I had made. It had nothing to do with the underlying change or the correctness of the system. It was a classic &quot;agree to disagree&quot; situation and, as I was the maintainer of the code base, I kept the change the way I had done it. He complained to my boss, who then directed me to change it. &lt;b&gt;NOT COOL&lt;/b&gt;.&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
You may encounter a similar situation when having your code reviewed. &lt;b&gt;You may find that the reviewer is insistent that you do things &quot;their way&quot;&lt;/b&gt;. This is a difficult situation, especially if the other developer is either &lt;b&gt;senior&lt;/b&gt; to you or &lt;b&gt;experienced&lt;/b&gt;.&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
The first thing you do in this situation is re-think the change. Ask yourself if the reviewer has a point and if there really is something substantially wrong about the code in question. &lt;b&gt;Chances are, the reviewer is right&lt;/b&gt;.&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
If you are not convinced of this, ask the reviewer to explain in more technical terms why you should make the change they are suggesting. Explain that you don&#39;t see anything substantially wrong and that, &lt;b&gt;as the code&#39;s maintainer, you feel your style should be given more weight&lt;/b&gt;. This might either defuse the situation or lead to a deeper discussion of why the code is problematic.&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
In the end, the reviewer may just forget about your code, but &lt;b&gt;if the person is persistent and present roadblocks, you might need to just make their suggested changes just to move on&lt;/b&gt;. In the end, its &lt;b&gt;more valuable to ship your code than to &quot;be right&quot;&lt;/b&gt; in a code review.&lt;b&gt; If you end up taking this route, I would recommend you avoid including this person in future code reviews&lt;/b&gt;.&amp;nbsp;&lt;/blockquote&gt;
&lt;br /&gt;
Great read and great quote! &amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/3866654784068502317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/3866654784068502317' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/3866654784068502317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/3866654784068502317'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2014/11/recent-reads.html' title='Recent Reads'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total><georss:featurename>Bergmann Street, Berlin, Germany</georss:featurename><georss:point>52.4889683 13.395776899999987</georss:point><georss:box>52.479299800000007 13.375606899999987 52.4986368 13.415946899999987</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-8916822327887914496</id><published>2014-07-30T05:36:00.001-07:00</published><updated>2014-07-30T05:36:46.572-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="codepen"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="path"/><category scheme="http://www.blogger.com/atom/ns#" term="svg"/><title type='text'>Points and Animation</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
A simple code pen for travel between points and animation. Works for Firefox atleast!&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;codepen&quot; data-default-tab=&quot;result&quot; data-height=&quot;231&quot; data-slug-hash=&quot;iebuc&quot; data-theme-id=&quot;0&quot;&gt;
See the Pen &lt;a href=&quot;http://codepen.io/dinks/pen/iebuc/&quot;&gt;iebuc&lt;/a&gt; by Dinesh Vasudevan (&lt;a href=&quot;http://codepen.io/dinks&quot;&gt;@dinks&lt;/a&gt;) on &lt;a href=&quot;http://codepen.io/&quot;&gt;CodePen&lt;/a&gt;.&lt;/div&gt;
&lt;script async=&quot;&quot; src=&quot;//codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/8916822327887914496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/8916822327887914496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/8916822327887914496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/8916822327887914496'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2014/07/points-and-animation.html' title='Points and Animation'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-7433556515578261257</id><published>2014-05-26T08:11:00.000-07:00</published><updated>2014-05-26T08:11:05.031-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3.2"/><category scheme="http://www.blogger.com/atom/ns#" term="cache"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="seconds_until_end_of_day"/><title type='text'>seconds_until_end_of_day expires for Cache in Rails</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;tip-content&quot;&gt;
A colleague of mine had to cache some html until the end of the day but found it difficult because cache expects &lt;code style=&quot;overflow-y: hidden;&quot;&gt;expires_in&lt;/code&gt; which is relative. We cant pass an absolute &lt;code style=&quot;overflow-y: hidden;&quot;&gt;Time.now&lt;/code&gt; :P&lt;br /&gt;


&lt;br /&gt;
So we now have &lt;code style=&quot;overflow-y: hidden;&quot;&gt;seconds_until_end_of_day&lt;/code&gt; in &lt;code style=&quot;overflow-y: hidden;&quot;&gt;4.0.2&lt;/code&gt;, but we use Rails &lt;code style=&quot;overflow-y: hidden;&quot;&gt;3&lt;/code&gt; :(&lt;br /&gt;


&lt;br /&gt;
But patching &lt;code style=&quot;overflow-y: hidden;&quot;&gt;Time&lt;/code&gt; is simple&lt;br /&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot; style=&quot;overflow-y: hidden;&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot; style=&quot;overflow-y: hidden;&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;seconds_until_end_of_day&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;identifier&quot;&gt;end_of_day&lt;/span&gt;.&lt;span class=&quot;identifier&quot;&gt;&lt;span class=&quot;keymethods&quot;&gt;to_i&lt;/span&gt;&lt;/span&gt; - &lt;span class=&quot;identifier&quot;&gt;&lt;span class=&quot;keymethods&quot;&gt;to_i&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;identifier&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;a href=&quot;http://apidock.com/rails/v4.0.2/Time/seconds_until_end_of_day&quot;&gt;http://apidock.com/rails/v4.0.2/Time/seconds_until_end_of_day&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/7433556515578261257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/7433556515578261257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7433556515578261257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7433556515578261257'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2014/05/secondsuntilendofday-expires-for-cache.html' title='seconds_until_end_of_day expires for Cache in Rails'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 5, 10961 Berlin - Kreuzberg, Germany</georss:featurename><georss:point>52.4897202 13.388833400000067</georss:point><georss:box>32.4650212 -27.919760599999933 72.514419199999992 54.697427400000066</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-7648469568263682485</id><published>2014-04-29T05:51:00.000-07:00</published><updated>2014-04-29T05:51:07.463-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="migration"/><category scheme="http://www.blogger.com/atom/ns#" term="observer"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Observers and Migratios</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The past day we created a model migration and then added an observer for the model after the migration. Surprisingly, the observer (now added in the application.rb file) was loaded first by environment which then checks for the model and tries to fire a DB query for columns.&lt;br /&gt;
&lt;br /&gt;
This fails and therefore the migration does not go through.&lt;br /&gt;
&lt;br /&gt;
So for future reference, always migrate first and then add the observer!&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/7648469568263682485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/7648469568263682485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7648469568263682485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7648469568263682485'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2014/04/observers-and-migratios.html' title='Observers and Migratios'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>52.4885975 13.39495100000002 52.488682499999996 13.395109000000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-4752766436683471065</id><published>2014-03-28T15:44:00.000-07:00</published><updated>2014-03-28T15:44:33.930-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chucknorris"/><category scheme="http://www.blogger.com/atom/ns#" term="coffeescript"/><category scheme="http://www.blogger.com/atom/ns#" term="hubot"/><category scheme="http://www.blogger.com/atom/ns#" term="joke"/><title type='text'>Chuck Norris Hubot</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;I stumbedupon an API which spits out random Chuck Norris Jokes and I ended up writing a smal hubot for this :)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;The API points to &lt;a href=&quot;http://api.icndb.com/jokes/random&quot;&gt;&lt;span class=&quot;s&quot;&gt;http://api.icndb.com/jokes/random&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
 &lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Try it out &lt;a href=&quot;https://github.com/dinks/chuck-norris-hubot&quot; target=&quot;_blank&quot;&gt;Chuck Norris Hubot&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/4752766436683471065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/4752766436683471065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/4752766436683471065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/4752766436683471065'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2014/03/chuck-norris-hubot.html' title='Chuck Norris Hubot'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße, Berlin, Germany</georss:featurename><georss:point>52.4889625 13.395889699999998</georss:point><georss:box>52.479294 13.375719699999998 52.498630999999996 13.416059699999998</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-472039393539496712</id><published>2014-03-10T12:09:00.000-07:00</published><updated>2014-03-10T12:09:40.223-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cache"/><category scheme="http://www.blogger.com/atom/ns#" term="fragment-cache"/><category scheme="http://www.blogger.com/atom/ns#" term="html"/><category scheme="http://www.blogger.com/atom/ns#" term="less"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="simple_navigation"/><title type='text'>Caching Simple Navigation</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Morale: &lt;a href=&quot;https://github.com/codeplant/simple-navigation&quot;&gt;Simple Navigation&lt;/a&gt; is not that simple&lt;br /&gt;
&lt;br /&gt;
We, in our firm, have different types of user navigation for different types of users. We wanted the flexibility of creating our navigation from the backend&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;41874e7b-808c-4a57-8aaa-a60d3bf268b6&quot; id=&quot;66ee10f2-6b7d-4782-8436-b72bbe864a7d&quot;&gt;(&lt;/span&gt;rails)&amp;nbsp;so that there is just one file to maintain with all configurations. Simple Navigation works great in this aspect.&lt;br /&gt;
&lt;br /&gt;
The configuration is complex, but is absolutely generic. We have a couple of navigations to start with, for the normal application and when a user visits the application via the iPad.&lt;br /&gt;
&lt;br /&gt;
The navigation for the normal user takes more than 500ms to render. NOT GOOD! We decided on caching the html. For this we need to split the navigation yet again. With respect to logged in users. &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;b03148ce-5e89-4062-bb1a-6dcbad207b69&quot; id=&quot;d66794e7-1c94-41f4-8b7e-18a2329c5ffb&quot;&gt;Therefore we&lt;/span&gt; now have 4 types of navigation, &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;b03148ce-5e89-4062-bb1a-6dcbad207b69&quot; id=&quot;9ef520ab-1178-41b8-bc17-560e1d2a6245&quot;&gt;loggedout&lt;/span&gt;-normal,&amp;nbsp;&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;b03148ce-5e89-4062-bb1a-6dcbad207b69&quot; id=&quot;e77554bd-0cd4-4eda-b16f-d1e68a28c38d&quot;&gt;loggedin&lt;/span&gt;-normal,&amp;nbsp;&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;b03148ce-5e89-4062-bb1a-6dcbad207b69&quot; id=&quot;575e931b-3dd0-43e5-893b-2058f28b5f8e&quot;&gt;loggedout&lt;/span&gt;-iPad,&amp;nbsp;&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;b03148ce-5e89-4062-bb1a-6dcbad207b69&quot; id=&quot;786dcb53-ee6a-4d29-909a-116472b82e11&quot;&gt;loggedin&lt;/span&gt;-iPad.&lt;br /&gt;
&lt;br /&gt;
We also had some badges on the navigation for unopened items. The next step was to remove these from the navigation file. We created a notifications controller and wrote a small javascript, which takes data from the json&amp;nbsp;response of the show method of this controller, and updated the corresponding sections in the navigation.&lt;br /&gt;
&lt;br /&gt;
Now came the hard part. Caching.&lt;br /&gt;
&lt;br /&gt;
We need to define keys for the Caching itself first.&lt;br /&gt;
&lt;br /&gt;
For a logged out normal user, this would be quite straight forward. Get the locale of the navigation bar. All the users with the same locale got the same navigation bar.&lt;br /&gt;
&lt;br /&gt;
For logged out normal users it would be a little tricky. We have some user specific stuff in the navigation bar such as the username. Therefore, we need the user_id. The user could change his locale and this would trigger a change in the updated_on field &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;f8044479-3f0f-444f-8644-ec8a926b4aec&quot; id=&quot;3eb51f6a-29d7-4823-8219-b58da73db59b&quot;&gt;on&lt;/span&gt; the Users table. This would mean that we need to include this in the key as well. We have a specific link for backend&amp;nbsp;services if the user has admin privileges. For this we need to evaluate the roles of the user. An MD5 has been used to facilitate this.&lt;br /&gt;
&lt;br /&gt;
We need to Cache the non highlighted navigation bar for sanity purposes. Then we plan to highlight the section according to the pages that are rendered. For this we could either create a javascript to add the correct classes or create a stylesheet&amp;nbsp;which highlights the correct section on verification of the correct classes.&lt;br /&gt;
&lt;br /&gt;
We decided to create a stylesheet for this. The stylesheet reads the configuration from the simple_navigation configuration and creates the correct CSS. The file is a LESS file. We extracted the styles to highlight the navigation items into some &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;41bddc39-3118-4601-ae78-d3201fb3168c&quot; id=&quot;5117e030-9790-4751-8900-1873c3026169&quot;&gt;mixins&lt;/span&gt;&amp;nbsp;and used these &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;41bddc39-3118-4601-ae78-d3201fb3168c&quot; id=&quot;266309d3-ff3d-4a26-ad3a-4f22f9d46a50&quot;&gt;mixins&lt;/span&gt;&amp;nbsp;inside our custom classes.&lt;br /&gt;
&lt;br /&gt;
The next tough part is the sub navigation. While this problem still lurks, we are trying to get away from the sub navigation altogether.&lt;br /&gt;
&lt;br /&gt;
While this post is clearly not technical and is conceptual, this might help some others&amp;nbsp;trying to solve something similar to this.&lt;br /&gt;
&lt;br /&gt;
:)&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/472039393539496712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/472039393539496712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/472039393539496712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/472039393539496712'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2014/03/caching-simple-navigation.html' title='Caching Simple Navigation'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>32.4637695 -27.91356399999998 72.5135105 54.703624000000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-4610592854634527633</id><published>2014-01-07T05:13:00.001-08:00</published><updated>2014-01-07T05:13:12.674-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Altering a MySQL Table</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In a normal world without a lot of records, altering (adding, deleting columns and indices) a table is an easy job. Have a look at the syntax &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/alter-table.html&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Its essentially creation of a copy of the original table, applying the alter table to the new table and copying row by row until the end of the table is reached. The essential problem with this is that the row by row copy locks the table because we don&#39;t want inconsistencies while we copy. I.e.&amp;nbsp;&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;c89fb1ea-c402-48a5-8630-795b6d5f30f6&quot; id=&quot;6b8b0cb6-9ed8-4968-8526-cbb00c5adae4&quot;&gt;no&lt;/span&gt; &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;c89fb1ea-c402-48a5-8630-795b6d5f30f6&quot; id=&quot;3c8f8158-898a-4b54-9f7f-aaeb3224a7e5&quot;&gt;writes&lt;/span&gt;&amp;nbsp;during the copy.&lt;br /&gt;
&lt;br /&gt;
If the table has lots of rows then this becomes a real problem.&lt;br /&gt;
&lt;br /&gt;
It seems that those intelligent guys have a solution to this too.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;One Approach&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;2e7683f4-8dfb-4a02-8fd9-61150a5036ed&quot; id=&quot;038f2aa9-c4cf-4b1a-92f3-f6fadcd82bf5&quot;&gt; :&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
- Make changes on the Slave and Upgrade the Slave to Master.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Another (Facebook&#39;s Way)&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;f8299997-7fee-4db2-bf4f-228cd29800fa&quot; id=&quot;4edf84e7-9a37-498e-b843-94b0a9328400&quot;&gt; :&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
- Create a temporary table which is a copy of the main table&lt;br /&gt;
- Apply the changes to the temp table&lt;br /&gt;
- Add something which could be used to run changes on the temp table&lt;br /&gt;
- Copy data from the main table to the temp table&lt;br /&gt;
- Lock the main table&lt;br /&gt;
- Replay the changes on the temp table&lt;br /&gt;
- Rename the temp table to the original table after renaming the original table &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;da5054f3-3fa7-42f7-98a4-63080572c11d&quot; id=&quot;799f4667-1735-480c-a3cf-919f5c07edc7&quot;&gt;to&lt;/span&gt; something else&lt;br /&gt;
&lt;br /&gt;
Phew&lt;br /&gt;
&lt;br /&gt;
Thanks to &lt;a href=&quot;https://github.com/spickermann&quot;&gt;Martin&lt;/a&gt; for the star in &lt;a href=&quot;http://github.com/&quot;&gt;&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;26b9d108-adfa-4dd9-beb6-dce88f05eb74&quot; id=&quot;f7b24c4e-e17a-40ad-834b-0be1df04e7b9&quot;&gt;github&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.facebook.com/note.php?note_id=430801045932&quot;&gt;http://www.facebook.com/note.php?note_id=430801045932&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/soundcloud/lhm&quot;&gt;https://github.com/soundcloud/lhm&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/4610592854634527633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/4610592854634527633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/4610592854634527633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/4610592854634527633'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2014/01/altering-mysql-table.html' title='Altering a MySQL Table'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>32.464 -27.91356399999998 72.51328 54.703624000000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-8074993035700672585</id><published>2013-12-25T15:47:00.001-08:00</published><updated>2013-12-25T15:47:58.682-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="1.9"/><category scheme="http://www.blogger.com/atom/ns#" term="2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="a/b-test"/><category scheme="http://www.blogger.com/atom/ns#" term="buckets"/><category scheme="http://www.blogger.com/atom/ns#" term="groups"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="series"/><title type='text'>Bucket Maker</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
After some days of research and work, I managed to create a &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;8bfe9df5-aa10-4670-8c5d-9c7226a75dcc&quot; id=&quot;983d5db7-3497-4aee-9b72-54d793c7069f&quot;&gt;gem&lt;/span&gt; which focused on Creating buckets for objects and querying them when needed&lt;br /&gt;
&lt;br /&gt;
Have a look at&amp;nbsp;&lt;a href=&quot;https://github.com/dinks/bucket_maker&quot;&gt;https://github.com/dinks/bucket_maker&lt;/a&gt;&amp;nbsp;which is a gem for Rails 3.2 -&amp;gt; 4 .&lt;br /&gt;
&lt;br /&gt;
Comments most appreciated !&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/8074993035700672585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/8074993035700672585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/8074993035700672585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/8074993035700672585'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/12/bucket-maker.html' title='Bucket Maker'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>32.463747 -27.91356399999998 72.513533 54.703624000000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-7082488930653481007</id><published>2013-12-19T12:20:00.000-08:00</published><updated>2013-12-19T12:20:35.041-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gem"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>That Great Feeling</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Words can&#39;t express that feeling when you upload something to a community that everyone&amp;nbsp;can use !&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://rubygems.org/profiles/dvasudevan&quot;&gt;https://rubygems.org/profiles/dvasudevan&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
:)&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/7082488930653481007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/7082488930653481007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7082488930653481007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7082488930653481007'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/12/that-great-feeling.html' title='That Great Feeling'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>52.1793695 12.749583000000019 52.797910499999993 14.040477000000021</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-1933346374687323122</id><published>2013-12-01T10:21:00.000-08:00</published><updated>2013-12-01T10:21:34.634-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="1.9"/><category scheme="http://www.blogger.com/atom/ns#" term="2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Module extensions 1.9 and 2.0</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I did not know that this threw TypeError&amp;nbsp;on 1.9 but passes for 2.0&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;1b9e7d13-c01a-4323-acbc-8d76b1d08a08&quot; id=&quot;4d486e91-7724-4369-9197-5943cc67687a&quot;&gt;x&lt;/span&gt; = Module&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;1b9e7d13-c01a-4323-acbc-8d76b1d08a08&quot; id=&quot;cd4e94d6-d2ea-413c-a155-e0cf9b9716eb&quot;&gt;.&lt;/span&gt;new { def foo; end }&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Module&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;f02af47a-1359-4f45-84d8-425f8a6acccf&quot; id=&quot;09bbd4b4-dd1f-4997-9b80-97882f1ed082&quot;&gt;.&lt;/span&gt;new { define_method &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;f02af47a-1359-4f45-84d8-425f8a6acccf&quot; id=&quot;b2db24cf-2f60-42b2-b33b-6297be9914fc&quot;&gt;:&lt;/span&gt;bar, &lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;f02af47a-1359-4f45-84d8-425f8a6acccf&quot; id=&quot;cd96ec00-2f99-4f6e-9a59-0a24c83eb35a&quot;&gt;x.&lt;/span&gt;instance_method&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;f02af47a-1359-4f45-84d8-425f8a6acccf&quot; id=&quot;c1ac87f0-2903-4591-818a-2662129258a5&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;f02af47a-1359-4f45-84d8-425f8a6acccf&quot; id=&quot;a19e2eb8-72b9-4563-b00a-0f3e06e042c2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;f02af47a-1359-4f45-84d8-425f8a6acccf&quot; id=&quot;d36e3fe3-4623-45b5-8647-529e701f56cd&quot;&gt;foo&lt;/span&gt;) }
&lt;/code&gt;
&lt;br /&gt;
&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;21afa77d-cc88-46a1-b7f3-fd6114b5003b&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;GINGER_SOFTWARE_mark&quot; ginger_software_uiphraseguid=&quot;21afa77d-cc88-46a1-b7f3-fd6114b5003b&quot; id=&quot;9181c570-9d89-4726-9642-688ac25e0f8b&quot;&gt;From&lt;/span&gt; Rails !&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/1933346374687323122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/1933346374687323122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/1933346374687323122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/1933346374687323122'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/12/module-extensions-19-and-20.html' title='Module extensions 1.9 and 2.0'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>50.023787999999996 8.23145600000002 54.953492 18.55860400000002</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-5966355290485725534</id><published>2013-10-13T04:41:00.000-07:00</published><updated>2013-10-13T04:41:30.558-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fibonacci"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>Fibonacci - Golden Ratio</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In mathematics, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Fibonacci_number&quot;&gt;Fibonacci numbers or Fibonacci series or Fibonacci sequence&lt;/a&gt; are the numbers in the following integer sequence: 0, 1, 1,2, 3, 5, 8, 13, 21, 34, 55, 89, 144 ...&lt;br /&gt;
&lt;br /&gt;
I have always done the one with recursion (or iteration). But mathematics says we could do it with the &lt;a href=&quot;http://en.wikipedia.org/wiki/Golden_ratio&quot;&gt;Golden Ratio&lt;/a&gt; ..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/dinks/6961041.js&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/5966355290485725534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/5966355290485725534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/5966355290485725534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/5966355290485725534'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/10/fibonacci-golden-ratio.html' title='Fibonacci - Golden Ratio'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>32.4637905 -27.91356399999998 72.513489499999991 54.703624000000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-7626467989576338184</id><published>2013-10-12T10:46:00.000-07:00</published><updated>2013-10-12T10:46:18.576-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bedrock"/><category scheme="http://www.blogger.com/atom/ns#" term="dom mutation observer"/><category scheme="http://www.blogger.com/atom/ns#" term="html"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="prolyfill"/><category scheme="http://www.blogger.com/atom/ns#" term="standards"/><category scheme="http://www.blogger.com/atom/ns#" term="w3c"/><category scheme="http://www.blogger.com/atom/ns#" term="webcomponents"/><title type='text'>Dom Mutation Observers and other Topics</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
A great video about Dom Mutation Observers&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;//www.youtube.com/embed/eRZ4pO0gVWw&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
Some notes to read as well&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://infrequently.org/2012/04/bedrock/&quot;&gt;http://infrequently.org/2012/04/bedrock/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://smus.com/how-the-web-should-work/&quot;&gt;http://smus.com/how-the-web-should-work/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.x-tags.org/&quot;&gt;http://www.x-tags.org/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.polymer-project.org/&quot;&gt;http://www.polymer-project.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/7626467989576338184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/7626467989576338184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7626467989576338184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7626467989576338184'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/10/dom-mutation-observers-and-other-topics.html' title='Dom Mutation Observers and other Topics'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>32.463802 -27.91356399999998 72.513477999999992 54.703624000000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-8291522101592904123</id><published>2013-10-08T03:41:00.002-07:00</published><updated>2013-10-08T03:41:43.258-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="configuration"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="sublimetext"/><title type='text'>Js for Sublime</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Setting up a build system for &lt;a href=&quot;http://www.sublimetext.com/&quot;&gt;Sublime Text&lt;/a&gt;&amp;nbsp;for &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;d0670dd7-aed5-4202-950d-c6c9aadb6291&quot; ginger_sofatware_uiphraseguid=&quot;80f5f7d0-f2c4-45cc-b355-8d3a6a0f3452&quot; grcontextid=&quot;js:0&quot;&gt;js&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Let your interpreter be Node. If you don&#39;t have &lt;a href=&quot;http://en.wikipedia.org/wiki/Node.js&quot;&gt;Node&lt;/a&gt;, I would recommend installing it from &lt;a href=&quot;http://nodejs.org/&quot;&gt;here&lt;/a&gt;. It uses the &lt;a href=&quot;http://en.wikipedia.org/wiki/V8_(JavaScript_engine)&quot;&gt;Google V8 Engine&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Open Tools -&amp;gt; Build System and select a New Build System&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Name it whatever you want it to be (this will show up in the Build Options)&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Add the following to it&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;code&gt;
{&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&amp;nbsp;&quot;cmd&quot;: [&quot;node&quot;, &quot;$file&quot;, &quot;$file_base_name&quot;],&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&amp;nbsp;&quot;working_dir&quot;: &quot;$&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;5a104ce2-4af9-4253-8ba3-61567834e3ea&quot; ginger_sofatware_uiphraseguid=&quot;a758d54f-ea77-4f09-989a-93b2256f0272&quot; grcontextid=&quot;{:0&quot;&gt;{&lt;/span&gt;project_path&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;a2ba79e2-70bf-427f-accb-784a8c651cbc&quot; ginger_sofatware_uiphraseguid=&quot;a758d54f-ea77-4f09-989a-93b2256f0272&quot; grcontextid=&quot;::1&quot;&gt;:&lt;/span&gt;$&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;8d5b2c38-5431-4c9d-a893-a09c89d965ec&quot; ginger_sofatware_uiphraseguid=&quot;a758d54f-ea77-4f09-989a-93b2256f0272&quot; grcontextid=&quot;{:2&quot;&gt;{&lt;/span&gt;folder}}&quot;,&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&amp;nbsp;&quot;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;ffe8343b-b36e-4bda-bf34-7f6216b15e89&quot; ginger_sofatware_uiphraseguid=&quot;e1a37dba-7eb0-48d1-8b4b-b10868b7cdac&quot; grcontextid=&quot;selector:0&quot;&gt;selector&lt;/span&gt;&quot;: &quot;*&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;7c8e24f9-b87c-4a18-be4c-6bd897712bda&quot; ginger_sofatware_uiphraseguid=&quot;e1a37dba-7eb0-48d1-8b4b-b10868b7cdac&quot; grcontextid=&quot;.:1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;b236ee52-2832-4170-bad9-91a49a362da0&quot; ginger_sofatware_uiphraseguid=&quot;e1a37dba-7eb0-48d1-8b4b-b10868b7cdac&quot; grcontextid=&quot;js:2&quot;&gt;js&lt;/span&gt;&quot;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;}
&lt;/code&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The syntax could be understood from this &lt;a href=&quot;http://docs.sublimetext.info/en/latest/file_processing/build_systems.html&quot;&gt;link&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Restart sublime and open the file. &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;51f67ae8-cb6f-4625-b7f1-86edf204e087&quot; ginger_sofatware_uiphraseguid=&quot;7b81f8c8-d3bd-4c29-b26d-134a94a3308a&quot; grcontextid=&quot;Goto:0&quot;&gt;Goto&lt;/span&gt; Tools -&amp;gt; Build System and set the build system to the name you gave.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Run Command&amp;nbsp;+ B and it will work !&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
All the build files go into&amp;nbsp;/Library/Application Support/Sublime Text 2/Packages/User&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
:)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/8291522101592904123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/8291522101592904123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/8291522101592904123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/8291522101592904123'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/10/js-for-sublime.html' title='Js for Sublime'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>52.4885975 13.39495100000002 52.488682499999996 13.395109000000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-461056256900856020</id><published>2013-10-02T06:35:00.000-07:00</published><updated>2013-10-02T06:35:24.494-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="easy_install"/><category scheme="http://www.blogger.com/atom/ns#" term="gem"/><category scheme="http://www.blogger.com/atom/ns#" term="graphite"/><category scheme="http://www.blogger.com/atom/ns#" term="pip"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="statsd"/><title type='text'>Statsd</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
During the last couple of days, I was trying to find myself around &lt;a href=&quot;https://github.com/etsy/statsd&quot;&gt;Statsd&lt;/a&gt; from Etsy. It seems to be a wonderful tool which lets users send stats (or tracking) to a server which in turn could be visualized using tools like &lt;a href=&quot;http://graphite.readthedocs.org/en/latest/&quot;&gt;Graphite&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The set up is quite simple. Add the &lt;a href=&quot;https://github.com/reinh/statsd&quot;&gt;Statsd gem&lt;/a&gt; to your application&#39;s &lt;a href=&quot;http://bundler.io/v1.3/gemfile.html&quot;&gt;Gemfile&lt;/a&gt; and then write a &lt;a href=&quot;http://guides.rubyonrails.org/rails_on_rack.html&quot;&gt;Rack Middleware&lt;/a&gt; which sends out information to the predefined server. Before sending out information, we need to setup the Statsd &lt;a href=&quot;http://nodejs.org/&quot;&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;f6a2e306-286a-495e-aa80-2e03bc07c8bb&quot; ginger_sofatware_uiphraseguid=&quot;093c0a32-ea35-4f56-8b21-6ba22f9bc9c3&quot; grcontextid=&quot;NodeJS:1&quot;&gt;NodeJS&lt;/span&gt;&lt;/a&gt; Server and give the IP and port for the Gem to work.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://matt.aimonetti.net/posts/2013/06/26/practical-guide-to-graphite-monitoring/&quot;&gt;Matt Aimonetti&lt;/a&gt; has written a &lt;a href=&quot;http://matt.aimonetti.net/posts/2013/06/26/practical-guide-to-graphite-monitoring/&quot;&gt;great post&lt;/a&gt; about setting up the service.&lt;br /&gt;
&lt;br /&gt;
I have found it damn hard to set up &lt;a href=&quot;http://graphite.wikidot.com/installation&quot;&gt;Graphite&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The download is easy. &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;c701d44b-93db-4739-93c3-c2cc768ec1d0&quot; ginger_sofatware_uiphraseguid=&quot;939a6f30-3150-4471-94ff-0e6813a6f5af&quot; grcontextid=&quot;git:0&quot;&gt;git&lt;/span&gt; clone the 3 repositories and then run check_dependencies.&lt;br /&gt;
&lt;br /&gt;
Install all the required libraries using pip. Now comes the hard part. A 2D graphics library called &lt;a href=&quot;http://cairographics.org/&quot;&gt;Cairo&lt;/a&gt; is a dependency for Graphite and a library called &lt;a href=&quot;http://cairographics.org/pycairo/&quot;&gt;py2cairo&lt;/a&gt; (&lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;a631cc7d-a165-4ff7-be38-92ca4edf1698&quot; ginger_sofatware_uiphraseguid=&quot;fe46c25b-7f31-4ae1-938f-862718c9beb4&quot; grcontextid=&quot;pycairo:0&quot;&gt;pycairo&lt;/span&gt; if python &amp;gt;2.7) is to be installed.&lt;br /&gt;
&lt;br /&gt;
I would suggest installing &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;8ed33af6-bc94-40b0-8ef8-2d472a454d8f&quot; ginger_sofatware_uiphraseguid=&quot;d65c9ada-ffb8-4c89-8a14-c0b08c54ca88&quot; grcontextid=&quot;cairo:0&quot;&gt;cairo&lt;/span&gt;&amp;nbsp;using&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;9be0eabf-8403-4bdc-a3b6-0cf573a67247&quot; ginger_sofatware_uiphraseguid=&quot;e3777e15-3040-4eb0-9f09-345078debd26&quot; grcontextid=&quot;sudo:0&quot;&gt;sudo&lt;/span&gt; brew &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;37fa350b-4bb4-47f4-aea1-4d17972fc09f&quot; ginger_sofatware_uiphraseguid=&quot;e3777e15-3040-4eb0-9f09-345078debd26&quot; grcontextid=&quot;install:1&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;f3fe670c-d529-4a4e-9f60-79c8a41b197d&quot; ginger_sofatware_uiphraseguid=&quot;e3777e15-3040-4eb0-9f09-345078debd26&quot; grcontextid=&quot;cairo:2&quot;&gt;cairo&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://brew.sh/&quot;&gt;Homebrew&lt;/a&gt; is better than &lt;a href=&quot;http://www.macports.org/&quot;&gt;MacPorts&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Install &lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;167f1cbe-9c47-45a6-bfdf-6174556a63c4&quot; ginger_sofatware_uiphraseguid=&quot;a077b28e-8f3e-4e91-90f5-8f18883be1d3&quot; grcontextid=&quot;pycairo:0&quot;&gt;pycairo&lt;/span&gt; using &lt;a href=&quot;https://pypi.python.org/pypi/pip&quot;&gt;pip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;6e863a85-7f07-4cea-aa1e-f67775c5ed4a&quot; ginger_sofatware_uiphraseguid=&quot;fa7fadb1-778f-47e0-886f-b0d3ebff0aad&quot; grcontextid=&quot;sudo:0&quot;&gt;sudo&lt;/span&gt; pip install &lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;aaa1b2d2-6a71-4a49-91e9-98cf91e9e0ee&quot; ginger_sofatware_uiphraseguid=&quot;fa7fadb1-778f-47e0-886f-b0d3ebff0aad&quot; grcontextid=&quot;pycairo:1&quot;&gt;pycairo&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Or&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
easy_install &lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;b60bc472-6cd3-4f7d-b9f4-dbe451a8d6ff&quot; ginger_sofatware_uiphraseguid=&quot;351c3214-bdb2-47eb-9515-3845e38e6434&quot; grcontextid=&quot;pycairo:0&quot;&gt;pycairo&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
You might get errors when importing the module for &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;2b36e2de-afb8-4c31-a36b-779cb44d0dc7&quot; ginger_sofatware_uiphraseguid=&quot;07615cdc-156e-4004-a8a1-c2f7a79050d3&quot; grcontextid=&quot;cairo:0&quot;&gt;cairo&lt;/span&gt;. This might be because you installed it via &lt;a href=&quot;http://pythonhosted.org/distribute/easy_install.html&quot;&gt;easy_install&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If it does not work (it did not because I have 2 versions of python), symlink&amp;nbsp;from the site-packages/Cairo to the place where python&amp;nbsp;searches for site-packages.&lt;br /&gt;
&lt;br /&gt;
Then run check_dependencies again and you are good to go. I still have to setup Graphite. But I hope I&#39;ll have less obstacles after this.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/461056256900856020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/461056256900856020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/461056256900856020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/461056256900856020'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/10/statsd.html' title='Statsd'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>52.488555 13.394872500000019 52.488724999999995 13.39518750000002</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-3890189291273229052</id><published>2013-09-21T16:34:00.000-07:00</published><updated>2013-09-21T16:34:20.438-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="concerns"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="puma"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="rails-api"/><category scheme="http://www.blogger.com/atom/ns#" term="rainbows"/><category scheme="http://www.blogger.com/atom/ns#" term="redis"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="rvm"/><category scheme="http://www.blogger.com/atom/ns#" term="sqlite3"/><category scheme="http://www.blogger.com/atom/ns#" term="sse"/><category scheme="http://www.blogger.com/atom/ns#" term="unicorn"/><title type='text'>Experimenting with Rails 4</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I had some time this week and I had to try out the &lt;a href=&quot;http://weblog.rubyonrails.org/2013/6/25/Rails-4-0-final/&quot; target=&quot;_blank&quot;&gt;Rails 4&lt;/a&gt; and &lt;a href=&quot;https://www.ruby-lang.org/en/news/2013/06/27/ruby-2-0-0-p247-is-released/&quot; target=&quot;_blank&quot;&gt;Ruby 2&lt;/a&gt;. That&#39;s exactly what I did !&lt;br /&gt;
&lt;br /&gt;
I did not try out Key based Cache Expirations or Etag stuff. But I did try out some &lt;a href=&quot;http://en.wikipedia.org/wiki/Server-sent_events&quot; target=&quot;_blank&quot;&gt;Server Sent Events&lt;/a&gt; stuff. And it went pretty well.&lt;br /&gt;
&lt;br /&gt;
I started out installing Ruby 2 with &lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;6c5a56ec-5d19-489d-ac49-21e471cfbe16&quot; ginger_sofatware_uiphraseguid=&quot;5663c12e-8b31-41e1-9f7d-89e598d7ed78&quot; grcontextid=&quot;rvm:0&quot;&gt;&lt;a href=&quot;https://rvm.io/&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;6c5a56ec-5d19-489d-ac49-21e471cfbe16&quot; ginger_sofatware_uiphraseguid=&quot;5663c12e-8b31-41e1-9f7d-89e598d7ed78&quot; grcontextid=&quot;rvm:0&quot;&gt;rvm&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;(I use &lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;d4486c16-891f-4e3d-9402-8414ba7dac2f&quot; ginger_sofatware_uiphraseguid=&quot;5663c12e-8b31-41e1-9f7d-89e598d7ed78&quot; grcontextid=&quot;rvm:1&quot;&gt;rvm&lt;/span&gt;&amp;nbsp;and don&#39;t&amp;nbsp;use &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;bfe5abb1-5f3f-4526-914b-4ced7cc6bf2d&quot; ginger_sofatware_uiphraseguid=&quot;5663c12e-8b31-41e1-9f7d-89e598d7ed78&quot; grcontextid=&quot;to:2&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;039ca601-bf56-40ae-a159-f86169900b2c&quot; ginger_sofatware_uiphraseguid=&quot;5663c12e-8b31-41e1-9f7d-89e598d7ed78&quot; grcontextid=&quot;rbenv:3&quot;&gt;rbenv&lt;/span&gt;&amp;nbsp;for some reason). I got through installing 2.0, but when I tried to use a specific gem_set for a test application, I got an error from &lt;a href=&quot;http://rubini.us/&quot; target=&quot;_blank&quot;&gt;Rubinius&lt;/a&gt; for some odd reason. It said that &lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;c12ff02c-d26f-485d-9216-ecd5bb0c9bb3&quot; ginger_sofatware_uiphraseguid=&quot;391fc45d-6695-458f-836c-7366d7f824a4&quot; grcontextid=&quot;rbx:0&quot;&gt;rbx&lt;/span&gt;&amp;nbsp;was to be installed. Somehow it messed up the whole setup and I had to do away with gem_sets. I also had to remove the rbx* installation directory because it was bursting warnings to the console every time&amp;nbsp;the &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;e7c8083f-405b-4ebe-b5d4-ba2608d99a85&quot; ginger_sofatware_uiphraseguid=&quot;e888e2e1-e6da-4352-8bbd-92f3db50c5dc&quot; grcontextid=&quot;rvm:0&quot;&gt;rvm&lt;/span&gt;&amp;nbsp;was set.&lt;br /&gt;
&lt;br /&gt;
You must &lt;a href=&quot;https://rvm.io/rvm/upgrading&quot; target=&quot;_blank&quot;&gt;upgrade&lt;/a&gt; RVM :)&lt;br /&gt;
&lt;br /&gt;
This &lt;a href=&quot;http://igor-alexandrov.github.io/blog/2012/11/05/yet-another-ruby-shootout/&quot; target=&quot;_blank&quot;&gt;benchmark&lt;/a&gt; is a great read for 2.0&lt;br /&gt;
&lt;br /&gt;
I wrote the version to the &lt;a href=&quot;http://rvm.io/workflow/projects&quot;&gt;.&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;e711d99b-9aae-4064-ae7c-9afab7bb4923&quot; ginger_sofatware_uiphraseguid=&quot;6b872454-bba8-42c5-b55a-c276167f33fc&quot; grcontextid=&quot;ruby:0&quot;&gt;ruby&lt;/span&gt;-version&lt;/a&gt; file and that was the start of the project.&lt;br /&gt;
&lt;br /&gt;
I wanted to do something which had some real time communication. Tic Tac Toe seemed to be a nice choice.&lt;br /&gt;
&lt;br /&gt;
There was then this weird problem with &lt;a href=&quot;http://www.sqlite.org/&quot;&gt;sqlite3&lt;/a&gt;. It, for some odd reason, could not find the native binding of sqlite3. The path was correctly set but it just could not find the path. I had to spend some hours of debugging to find this out and a lot of googling !&lt;br /&gt;
&lt;br /&gt;
The error was&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;line number1 index0 alt2&quot;&gt;
&lt;code class=&quot;css plain&quot;&gt;/&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;1ceaed41-9e4f-4aea-a3ff-16d58455f85f&quot; ginger_sofatware_uiphraseguid=&quot;bb78c4df-1267-49f6-b86f-7f9ae6f0f25d&quot; grcontextid=&quot;usr:0&quot;&gt;usr&lt;/span&gt;/&lt;/code&gt;&lt;code class=&quot;css value&quot;&gt;local&lt;/code&gt;&lt;code class=&quot;css plain&quot;&gt;/share/gems/gems/sqlite&lt;/code&gt;&lt;code class=&quot;css value&quot;&gt;3&lt;/code&gt;&lt;code class=&quot;css value&quot;&gt;-1.3&lt;/code&gt;&lt;code class=&quot;css plain&quot;&gt;.&lt;/code&gt;&lt;code class=&quot;css value&quot;&gt;7&lt;/code&gt;&lt;code class=&quot;css plain&quot;&gt;/lib/sqlite&lt;/code&gt;&lt;code class=&quot;css value&quot;&gt;3&lt;/code&gt;&lt;code class=&quot;css plain&quot;&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;35a3de1f-9bd0-4930-ab00-7e3f918f04a9&quot; ginger_sofatware_uiphraseguid=&quot;bb78c4df-1267-49f6-b86f-7f9ae6f0f25d&quot; grcontextid=&quot;.:1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;76c52bed-6c24-411f-83c1-394801c3691d&quot; ginger_sofatware_uiphraseguid=&quot;bb78c4df-1267-49f6-b86f-7f9ae6f0f25d&quot; grcontextid=&quot;rb:2&quot;&gt;rb&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;3191e85e-0976-4660-8e27-9acc366f780c&quot; ginger_sofatware_uiphraseguid=&quot;bb78c4df-1267-49f6-b86f-7f9ae6f0f25d&quot; grcontextid=&quot;::3&quot;&gt;:&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;css value&quot;&gt;6&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;55da2280-f780-4e43-958c-c3747093a9fb&quot; ginger_sofatware_uiphraseguid=&quot;bb78c4df-1267-49f6-b86f-7f9ae6f0f25d&quot; grcontextid=&quot;::4&quot;&gt;:&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;css plain&quot;&gt;in &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;cd0e8962-848d-4793-a718-3e4232649805&quot; ginger_sofatware_uiphraseguid=&quot;bb78c4df-1267-49f6-b86f-7f9ae6f0f25d&quot; grcontextid=&quot;`require:5&quot;&gt;`require&lt;/span&gt;&#39;: cannot load such file -- sqlite&lt;/code&gt;&lt;code class=&quot;css value&quot;&gt;3&lt;/code&gt;&lt;code class=&quot;css plain&quot;&gt;/sqlite&lt;/code&gt;&lt;code class=&quot;css value&quot;&gt;3&lt;/code&gt;&lt;code class=&quot;css plain&quot;&gt;_ruby (LoadError)&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
This &lt;a href=&quot;http://ahmedemad.wordpress.com/2013/05/17/ruby-on-rails-install-run-error/&quot; target=&quot;_blank&quot;&gt;post&lt;/a&gt; saved me at last. Seems like we have to change the actual file of the gem to get this thing running.&lt;br /&gt;
&lt;br /&gt;
In the case of &lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;df271837-f0b5-445d-b658-5adc06d4603c&quot; ginger_sofatware_uiphraseguid=&quot;dc74cd28-7fc0-412a-83ca-575436d6a973&quot; grcontextid=&quot;rvm:0&quot;&gt;rvm&lt;/span&gt;,&amp;nbsp;the file would be under&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
~/&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;4bb822da-c961-476c-bbe1-6d73bcea5bac&quot; ginger_sofatware_uiphraseguid=&quot;8cec21d4-5138-4d8f-999d-4ead0788e6e5&quot; grcontextid=&quot;.:0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;5e621571-4e87-486e-b591-3b6f536c73a3&quot; ginger_sofatware_uiphraseguid=&quot;8cec21d4-5138-4d8f-999d-4ead0788e6e5&quot; grcontextid=&quot;rvm:1&quot;&gt;rvm&lt;/span&gt;/gems/ruby-2.0.0-p247/gems/sqlite3-1.3.8/lib/sqlite3&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;42a0655b-8000-4c42-b3e1-55d975d99c97&quot; ginger_sofatware_uiphraseguid=&quot;8cec21d4-5138-4d8f-999d-4ead0788e6e5&quot; grcontextid=&quot;.:2&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;b7097b38-64de-4d20-875f-95ebd7deeaeb&quot; ginger_sofatware_uiphraseguid=&quot;8cec21d4-5138-4d8f-999d-4ead0788e6e5&quot; grcontextid=&quot;rb:3&quot;&gt;rb&lt;/span&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;fef26385-1f11-479b-8c51-7997d3de4673&quot; ginger_sofatware_uiphraseguid=&quot;99c89076-c375-41ab-b568-e1753c93ad57&quot; grcontextid=&quot;and:0&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;fef26385-1f11-479b-8c51-7997d3de4673&quot; ginger_sofatware_uiphraseguid=&quot;99c89076-c375-41ab-b568-e1753c93ad57&quot; grcontextid=&quot;and:0&quot;&gt;and&lt;/span&gt; you will have to change the loading locations relative like&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
~/.rvm/gems/ruby-2.0.0-p247/gems/sqlite3-X-X-X/ext/sqlite3/sqlite3_native&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;&lt;/code&gt;
Once this is done, rails &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;cea7a428-5b67-4f5e-b198-06e6e7203f36&quot; ginger_sofatware_uiphraseguid=&quot;c2e710e8-de4d-4cdb-ab90-78764f9a2102&quot; grcontextid=&quot;finds:0&quot;&gt;finds&lt;/span&gt; it and loads it. This, I think, is &lt;b&gt;NOT&lt;/b&gt; good for a &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;12da4e75-b37a-447c-866f-a5f6c2863899&quot; ginger_sofatware_uiphraseguid=&quot;e3e0e2f8-5ea2-4ac8-97b7-ce9a9422ca8a&quot; grcontextid=&quot;Continous:0&quot;&gt;Continous&lt;/span&gt; Integration Server.&lt;br /&gt;
&lt;br /&gt;
Server Side Events came next. I went through this &lt;a href=&quot;http://tenderlovemaking.com/2012/07/30/is-it-live.html&quot; target=&quot;_blank&quot;&gt;excellent post&lt;/a&gt; on how to get started with SSE. I managed to add Redis pub/sub with SSE after looking through this &lt;a href=&quot;http://rubysnippets.com/2013/04/10/rails-4-live-streaming-versus-node-dot-js/&quot; target=&quot;_blank&quot;&gt;post&lt;/a&gt;. And ultimately used some Thread Processing to get it less Non Blocking as per this &lt;a href=&quot;http://stackoverflow.com/questions/14268690/actioncontrollerlive-is-it-possible-to-check-if-connection-is-still-alive&quot; target=&quot;_blank&quot;&gt;post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Another problem I had was with the servers. I started with &lt;a href=&quot;http://unicorn.bogomips.org/&quot;&gt;Unicorn&lt;/a&gt; which was a bad choice. Unicorn kills connections because it is meant for fast processing. For persistent connections, we need to have &lt;a href=&quot;http://puma.io/&quot;&gt;Puma&lt;/a&gt; or &lt;a href=&quot;http://rainbows.rubyforge.org/&quot;&gt;Rainbows!&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I started using Puma but I did the mistake of not putting&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;9233c473-4541-4db2-813a-29072fa45de7&quot; ginger_sofatware_uiphraseguid=&quot;342ae7a5-2ab2-4ba6-91a1-7738c913a9f4&quot; grcontextid=&quot;config:0&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;69878c9f-758f-450b-9269-7b54f81b18ad&quot; ginger_sofatware_uiphraseguid=&quot;342ae7a5-2ab2-4ba6-91a1-7738c913a9f4&quot; grcontextid=&quot;.:1&quot;&gt;.&lt;/span&gt;preload_frameworks = true&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;3f33d439-a791-4344-b1aa-010bc8246621&quot; ginger_sofatware_uiphraseguid=&quot;c0e1f44b-eee6-4459-a84f-170ad553ea80&quot; grcontextid=&quot;config:0&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;bb1f9252-d0d6-4cec-9776-4e55bfd0dcb2&quot; ginger_sofatware_uiphraseguid=&quot;c0e1f44b-eee6-4459-a84f-170ad553ea80&quot; grcontextid=&quot;.:1&quot;&gt;.&lt;/span&gt;allow_concurrency = true
&lt;/code&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;&lt;/code&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;1cbb52d9-1a54-4c00-bebf-e62cee9a8c2f&quot; ginger_sofatware_uiphraseguid=&quot;ee0a2313-2ba6-4640-bc2c-609d3fcc3ba4&quot; grcontextid=&quot;in:0&quot;&gt;in&lt;/span&gt; the application&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;cb0d2d3f-9c3d-4ac6-acd2-16e781e682d6&quot; ginger_sofatware_uiphraseguid=&quot;ee0a2313-2ba6-4640-bc2c-609d3fcc3ba4&quot; grcontextid=&quot;.:1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;3aa09acd-8326-4b6d-8cf4-5fdc41f88a7f&quot; ginger_sofatware_uiphraseguid=&quot;ee0a2313-2ba6-4640-bc2c-609d3fcc3ba4&quot; grcontextid=&quot;rb:2&quot;&gt;rb&lt;/span&gt; file. Only one request was permitted because of this flaw. This is to be removed later (I have no idea why this is not default ?).&lt;br /&gt;
&lt;br /&gt;
But that did not solve my problems. Puma constantly gave me errors like&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;afd557af-92af-4a4d-8910-59c5855327ea&quot; ginger_sofatware_uiphraseguid=&quot;ab35964c-a3f3-4be1-855b-b6785aa7fff4&quot; grcontextid=&quot;ThreadError:0&quot;&gt;ThreadError&lt;/span&gt;: Attempt to unlock a mutex which is locked by another thread&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;1b25c2e9-205d-416f-90f2-2cb8843817b8&quot; ginger_sofatware_uiphraseguid=&quot;1e9bf96d-1db3-4ac5-b62e-198649227cb7&quot; grcontextid=&quot;which:0&quot;&gt;which&lt;/span&gt; is not good. It never called the ensure block (don&#39;t know why) and I seriously doubt the sockets to be open :|&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;c59c7306-00dd-4aa1-ab77-d5ed38555b61&quot; ginger_sofatware_uiphraseguid=&quot;dae53d8f-1272-4457-9371-fc3a65335af3&quot; grcontextid=&quot;Thats:0&quot;&gt;Thats&lt;/span&gt; when I tried Rainbows! I added the rainbow&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;f7648ae5-0933-43fd-92dd-4b88b893541f&quot; ginger_sofatware_uiphraseguid=&quot;e523aed5-1ae3-4d0a-908d-372fc8ab1917&quot; grcontextid=&quot;.:0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;5b6a0424-a97e-4be9-8f8e-51162bf14cb6&quot; ginger_sofatware_uiphraseguid=&quot;e523aed5-1ae3-4d0a-908d-372fc8ab1917&quot; grcontextid=&quot;rb:1&quot;&gt;rb&lt;/span&gt; file for server config and started the server. It worked great for me !&lt;br /&gt;
&lt;br /&gt;
I also understood that attr_accesible is no more for rails and its all about &lt;a href=&quot;http://www.sitepoint.com/rails-4-quick-look-strong-parameters/&quot; target=&quot;_blank&quot;&gt;Strong Parameters&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I tried adding &lt;a href=&quot;https://github.com/rails-api/rails-api&quot;&gt;rails-&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;800436cf-b6b7-48cb-a550-7629196fb3e5&quot; ginger_sofatware_uiphraseguid=&quot;a38bdada-a4a1-4e74-956f-c106d6563267&quot; grcontextid=&quot;api:0&quot;&gt;api&lt;/span&gt;&lt;/a&gt; to the project (this was my first time). It was only after some time that I realized that the stack for rails-&lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;d659b734-5d33-4877-b2d9-03de64842d63&quot; ginger_sofatware_uiphraseguid=&quot;7d243373-f94c-4e3f-a152-baecb1a6cb12&quot; grcontextid=&quot;api:0&quot;&gt;api&lt;/span&gt; removes the Rack for Session handling because it aims for the Processing to be as less as possible&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Rack:&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;1266cf38-1809-4844-b381-8108ed058552&quot; ginger_sofatware_uiphraseguid=&quot;cea0ca03-587e-40cb-ac21-140a25a0874e&quot; grcontextid=&quot;::0&quot;&gt;:&lt;/span&gt;Session:&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;3990f2d2-c550-4c90-add7-84c00e4051ae&quot; ginger_sofatware_uiphraseguid=&quot;cea0ca03-587e-40cb-ac21-140a25a0874e&quot; grcontextid=&quot;::1&quot;&gt;:&lt;/span&gt;Cookie&lt;/pre&gt;
&lt;br /&gt;
I was working with an existing Rails application and I did not want this feature. I tried adding&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;2b28a42f-961f-4fb4-856e-5d60bcf6cfcd&quot; ginger_sofatware_uiphraseguid=&quot;e71b886e-c71b-4ad6-8cb0-e27da64fa75a&quot; grcontextid=&quot;config:0&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;50453613-cb9a-4452-9426-2f33d84cfff4&quot; ginger_sofatware_uiphraseguid=&quot;e71b886e-c71b-4ad6-8cb0-e27da64fa75a&quot; grcontextid=&quot;.:1&quot;&gt;.&lt;/span&gt;api_only = false
&lt;/code&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;&lt;/code&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;a5d6c539-c7ee-4a8c-9f5b-5154deb4514f&quot; ginger_sofatware_uiphraseguid=&quot;34c50c34-fd04-469e-abdf-491cb62f6d74&quot; grcontextid=&quot;to:0&quot;&gt;to&lt;/span&gt; the application&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;ca3c4484-2f4f-4678-9814-4d574af2b23c&quot; ginger_sofatware_uiphraseguid=&quot;34c50c34-fd04-469e-abdf-491cb62f6d74&quot; grcontextid=&quot;.:1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;d4ccc009-4a7a-4d73-bdf0-2a2e75dea2cc&quot; ginger_sofatware_uiphraseguid=&quot;34c50c34-fd04-469e-abdf-491cb62f6d74&quot; grcontextid=&quot;rb:2&quot;&gt;rb&lt;/span&gt; file. But that did not help me.&lt;br /&gt;
&lt;br /&gt;
I had to add the particular require for the &lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;7289dd83-0cc3-4118-ae7f-47dc131c3844&quot; ginger_sofatware_uiphraseguid=&quot;6fe59cc1-9547-48e7-94aa-1ed041baa5d9&quot; grcontextid=&quot;api:0&quot;&gt;api&lt;/span&gt;&amp;nbsp;for this to work in the Gemfile&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;4529fabc-f348-4501-b84f-556818fa6f4d&quot; ginger_sofatware_uiphraseguid=&quot;c5a82f69-b071-4de1-be3a-db828089febe&quot; grcontextid=&quot;gem:0&quot;&gt;gem&lt;/span&gt; &#39;rails-&lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;92fec71a-04ce-41b3-bf50-34523649bb27&quot; ginger_sofatware_uiphraseguid=&quot;c5a82f69-b071-4de1-be3a-db828089febe&quot; grcontextid=&quot;api:1&quot;&gt;api&lt;/span&gt;&#39;, require: &#39;rails-&lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;2606096d-4d15-415f-8647-794cf2a994e1&quot; ginger_sofatware_uiphraseguid=&quot;c5a82f69-b071-4de1-be3a-db828089febe&quot; grcontextid=&quot;api:2&quot;&gt;api&lt;/span&gt;/action_controller/&lt;span class=&quot;GINGER_SOFATWARE_noSuggestion GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;bc1dd638-5229-4fad-b661-ab11322b657f&quot; ginger_sofatware_uiphraseguid=&quot;c5a82f69-b071-4de1-be3a-db828089febe&quot; grcontextid=&quot;api:3&quot;&gt;api&lt;/span&gt;&#39;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
I wanted to try my bit with the &lt;a href=&quot;https://github.com/pluginaweek/state_machine&quot;&gt;state machine&lt;/a&gt; and I managed to write this inside &lt;a href=&quot;http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns&quot;&gt;Concerns&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href=&quot;https://github.com/dinks/MxXandO&quot;&gt;POC&lt;/a&gt; is still incomplete, but I loved doing this after a long time !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/3890189291273229052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/3890189291273229052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/3890189291273229052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/3890189291273229052'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/09/experimenting-with-rails-4.html' title='Experimenting with Rails 4'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße 26, 10961 Berlin, Germany</georss:featurename><georss:point>52.48864 13.39503000000002</georss:point><georss:box>52.4693025 13.354689500000021 52.507977499999996 13.435370500000019</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-7969408265727115332</id><published>2013-09-06T06:53:00.000-07:00</published><updated>2013-09-06T06:53:20.284-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="mesos"/><category scheme="http://www.blogger.com/atom/ns#" term="opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="storm"/><category scheme="http://www.blogger.com/atom/ns#" term="twitter"/><category scheme="http://www.blogger.com/atom/ns#" term="wormhole"/><title type='text'>Feeling Little</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Today I managed to catch up on some reading and it actually made me feel so tiny and insignificant.&lt;br /&gt;
&lt;br /&gt;
Like the action is elsewhere. And looking up some of the high profiles in LinkedIn, I feel that to do something significant one needs at least a PhD/MS.&lt;br /&gt;
&lt;br /&gt;
Some links&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://gigaom.com/2013/09/04/new-open-source-tech-marathon-wants-to-make-your-data-center-run-like-googles/&quot;&gt;http://gigaom.com/2013/09/04/new-open-source-tech-marathon-wants-to-make-your-data-center-run-like-googles/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://gigaom.com/2013/07/29/airbnb-is-engineering-itself-into-a-data-driven-company/&quot;&gt;http://gigaom.com/2013/07/29/airbnb-is-engineering-itself-into-a-data-driven-company/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blog.twitter.com/2011/engineering-behind-twitter%E2%80%99s-new-search-experience&quot;&gt;https://blog.twitter.com/2011/engineering-behind-twitter%E2%80%99s-new-search-experience&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blog.twitter.com/2011/twitter-search-now-3x-faster&quot;&gt;https://blog.twitter.com/2011/twitter-search-now-3x-faster&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blog.twitter.com/2010/twitters-new-search-architecture&quot;&gt;https://blog.twitter.com/2010/twitters-new-search-architecture&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/twitter&quot;&gt;https://github.com/twitter&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://mesos.apache.org/&quot;&gt;http://mesos.apache.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://gigaom.com/2013/06/14/a-real-time-bonanza-facebooks-wormhole-and-yahoos-streaming-hadoop/&quot;&gt;http://gigaom.com/2013/06/14/a-real-time-bonanza-facebooks-wormhole-and-yahoos-streaming-hadoop/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://developer.yahoo.com/blogs/ydn/storm-yarn-released-open-source-143745133.html&quot;&gt;http://developer.yahoo.com/blogs/ydn/storm-yarn-released-open-source-143745133.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.facebook.com/notes/facebook-engineering/wormhole-pubsub-system-moving-data-through-space-and-time/10151504075843920&quot;&gt;https://www.facebook.com/notes/facebook-engineering/wormhole-pubsub-system-moving-data-&lt;/a&gt;&lt;a href=&quot;https://www.facebook.com/notes/facebook-engineering/wormhole-pubsub-system-moving-data-through-space-and-time/10151504075843920&quot;&gt;through-space-and-time/10151504075843920&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://amplab.cs.berkeley.edu/projects/spark-lightning-fast-cluster-computing/&quot;&gt;https://amplab.cs.berkeley.edu/projects/spark-lightning-fast-cluster-computing/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://nerds.airbnb.com/introducing-chronos/&quot;&gt;http://nerds.airbnb.com/introducing-chronos/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.mesosphere.io/about&quot;&gt;http://www.mesosphere.io/about&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/7969408265727115332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/7969408265727115332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7969408265727115332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7969408265727115332'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/09/feeling-little.html' title='Feeling Little'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Bergmannstraße, Berlin, Germany</georss:featurename><georss:point>52.4889625 13.395889699999998</georss:point><georss:box>52.479294 13.375719699999998 52.498630999999996 13.416059699999998</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-4128562269311481593</id><published>2013-08-28T02:17:00.002-07:00</published><updated>2013-08-28T02:17:46.296-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="europe"/><category scheme="http://www.blogger.com/atom/ns#" term="innsbruck"/><category scheme="http://www.blogger.com/atom/ns#" term="railjet"/><category scheme="http://www.blogger.com/atom/ns#" term="railways"/><category scheme="http://www.blogger.com/atom/ns#" term="travel"/><category scheme="http://www.blogger.com/atom/ns#" term="vienna"/><title type='text'>Vienna to Innsbruck on Rails</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
We had a short get away the past weekend to Innsbruck. We had decided to board a train from Vienna to Innsbruck after we landed by plane in Vienna. I had looked up the prices and found it to be reasonable.&lt;br /&gt;
&lt;br /&gt;
We &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;831b6a23-e4b4-4786-9f56-8fc4f6713515&quot; ginger_sofatware_uiphraseguid=&quot;2de6ea63-d2e6-4130-a74a-b9ab6e0edf74&quot; grcontextid=&quot;reached:0&quot;&gt;reached&lt;/span&gt; from the airport to the railway station on time and had to buy the tickets from the vending machine. The tickets cost me about 58 per person. We hoped on the Rail Jet train, in second class and found the cabins to be almost full. I and Reshma managed to get hold of a seat which was made for children. There was a small screen in front of us where all the animation movies were run. So time flew ! We watched clips of Donald, Mickey, Goofy, UP! &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;6fa4981d-fac3-4c4d-b51a-af2845f61119&quot; ginger_sofatware_uiphraseguid=&quot;2aab7824-d777-4e3b-a75c-78bb42f77cdd&quot; grcontextid=&quot;including:0&quot;&gt;including&lt;/span&gt; others.&lt;br /&gt;
&lt;br /&gt;
The train stopped at St Polten, Linz, Salzburg to reach Innsbruck. It would be too less if I were to describe the scenic beauty of this route. Mountains on the left and right with luscious green fields, cattle and watch dogs, trees matriculately&amp;nbsp;placed all cut and clean. What a view ! A breath taking treat to the eyes. The houses were all so beautifully placed as though a great painter had portrayed his dreams.&lt;br /&gt;
&lt;br /&gt;
If you are &lt;span class=&quot;GINGER_SOFATWARE_correct&quot; ginger_sofatware_markguid=&quot;bc80032b-adbf-4c7e-af64-f3ee440e4c1b&quot; ginger_sofatware_uiphraseguid=&quot;53d64736-75e3-4158-90d2-9aaa8f12a1d8&quot; grcontextid=&quot;plan:0&quot;&gt;plan&lt;/span&gt; to go to Vienna try this route ! You won&#39;t&amp;nbsp;be sad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/4128562269311481593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/4128562269311481593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/4128562269311481593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/4128562269311481593'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/08/vienna-to-innsbruck-on-rails.html' title='Vienna to Innsbruck on Rails'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Innsbruck, Austria</georss:featurename><georss:point>47.2692124 11.404102400000056</georss:point><georss:box>47.0968724 11.081378900000056 47.4415524 11.726825900000057</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8761480874400225239.post-7224436703582165500</id><published>2013-06-28T05:22:00.000-07:00</published><updated>2013-06-28T05:22:07.333-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kerala"/><category scheme="http://www.blogger.com/atom/ns#" term="travel"/><title type='text'>Trip To Kerala</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
It took me more than a year to find some time to go to my home place. The wait was worth it. I managed to enjoy the Monsoons to the fullest extend, spend quality time with my Mom and Dad, visit Kumarakom with Friends and meet up some NITC batchmates. At the end, 2 weeks was not enough time.&lt;br /&gt;
&lt;br /&gt;
The next time around I will go for more than 3 weeks. :)&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;&lt;b&gt;Dinesh&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dineshakadinks.blogspot.com/feeds/7224436703582165500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8761480874400225239/7224436703582165500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7224436703582165500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8761480874400225239/posts/default/7224436703582165500'/><link rel='alternate' type='text/html' href='http://dineshakadinks.blogspot.com/2013/06/trip-to-kerala.html' title='Trip To Kerala'/><author><name>dineshvasudevan</name><uri>http://www.blogger.com/profile/00646091955831507572</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Nadavaramba, Kerala, India</georss:featurename><georss:point>10.3191797 76.217493500000046</georss:point><georss:box>10.303557699999999 76.197323500000053 10.3348017 76.237663500000039</georss:box></entry></feed>