<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Ruby Hacker, Haskell Enthusiast, Thoughtworker</description><title>Arvind Kunday</title><generator>Tumblr (3.0; @kunday)</generator><link>http://www.kunday.com/</link><item><title>Will google drive succeed?</title><description>&lt;div&gt;
&lt;p&gt;&lt;span&gt;There has been lot of fuzz around the interwebs about the launch of &lt;/span&gt;&lt;a href="https://drive.google.com" target="_blank"&gt;&lt;span&gt;google drive&lt;/span&gt;&lt;/a&gt;&lt;span&gt;. Google is a late entrant into the online personal file syncing business while competitors like box.net and dropbox are well established and asserting dominance. Is it just another me-too product from google is it something that google values and cherishes?&lt;/span&gt;&lt;/p&gt;
&lt;strong&gt;&lt;strong&gt;&lt;span&gt;&lt;/span&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/strong&gt;
&lt;p&gt;&lt;span&gt;Google has asserted in the past that the &lt;a href="http://www.dustincurtis.com/files.html" target="_blank"&gt;concept of files is dead&lt;/a&gt; and how it shuttered the near complete GDrive project which provided a tight integration between the local file system and online filesystem. What led google to change it’s minds about the file syncing market? As &lt;/span&gt;&lt;a href="https://plus.google.com/116651741222993143554/posts" target="_blank"&gt;&lt;span&gt;Sundar Pitchai&lt;/span&gt;&lt;/a&gt;&lt;span&gt; points &lt;/span&gt;&lt;a href="http://allthingsd.com/20120424/sundar-pichai-google-drive-is-about-context-where-competitors-are-about-files/?mod=googlenews" target="_blank"&gt;&lt;span&gt;out&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, google drive is a natural evolution of google docs and collaboration being one of its key strengths.  &lt;/span&gt;&lt;/p&gt;
&lt;strong&gt;&lt;strong&gt;&lt;span&gt;&lt;/span&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/strong&gt;
&lt;p&gt;&lt;span&gt;By taking the concept of filesystem/drive to the App ecosystem, google is taking a bold step into a filesystem less future. Though it is counter intuitive, it enables a whole different class of applications that can be built apart from managing files. It lets you edit documents, presentations, diagrams and much more.  All of it online and the user doesn’t have to care about where the files are stored as long as they can access them.&lt;/span&gt;&lt;/p&gt;
&lt;strong&gt;&lt;strong&gt;&lt;span&gt;&lt;/span&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/strong&gt;
&lt;p&gt;&lt;span&gt;There are tons of apps in &lt;/span&gt;&lt;a href="https://chrome.google.com/webstore/category/collection/drive_apps" target="_blank"&gt;&lt;span&gt;google chrome webstore&lt;/span&gt;&lt;/a&gt;&lt;span&gt; which lets you open &lt;/span&gt;&lt;a href="http://app.8reader.com" target="_blank"&gt;&lt;span&gt;epubs&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, &lt;/span&gt;&lt;a href="https://chrome.google.com/webstore/detail/bdehgigffdnkjpaindemkaniebfaepjm" target="_blank"&gt;&lt;span&gt;build mind mapping graphs&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, video editing(these are available only on the chrome webstore) and lot more. Sooner or later, there will be apps which cover most of the stuff we do, all online and google drive could be the center of all the data that’s being fed. It’s same as the promise of iCloud, except that iCloud is geared towards native apps than web apps. &lt;/span&gt;&lt;/p&gt;
&lt;strong&gt;&lt;strong&gt;&lt;span&gt;&lt;/span&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/strong&gt;
&lt;p&gt;&lt;span&gt;Google drive is also important to google chrome os which forces the users to shuttle files between online apps back and forth due to a lack of a shared underlying file system. Now, google drive can act like the datasource(if the apps are integrated with google drive), people can create a document in one app and continue editing in another app seamlessly. Google executives have already confirmed that google drive will be merged into &lt;/span&gt;&lt;a href="http://www.wired.com/wiredenterprise/2012/04/google-gdrive-chrome-os/" target="_blank"&gt;&lt;span&gt;chrome os&lt;/span&gt;&lt;/a&gt;&lt;span&gt; in later builds.&lt;/span&gt;&lt;/p&gt;
&lt;strong&gt;&lt;strong&gt;&lt;span&gt;&lt;/span&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/strong&gt;
&lt;p&gt;&lt;span&gt;Let’s wait and watch how this plays out for google.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Update: Google drive &lt;a href="http://techcrunch.com/2012/04/27/google-drive-arrives-in-chromeos-developer-channel/" target="_blank"&gt;arrives&lt;/a&gt; for chrome os in developer channel.&lt;/p&gt;
&lt;/div&gt;</description><link>http://www.kunday.com/post/21890869827</link><guid>http://www.kunday.com/post/21890869827</guid><pubDate>Thu, 26 Apr 2012 22:23:00 -0400</pubDate><category>google</category><category>drive</category><category>gdrive</category><category>googledrive</category><category>tech</category><category>ramblings</category><dc:creator>arvind</dc:creator></item><item><title>ruby debugger config</title><description>&lt;p&gt;Whenever you notice a strange behaviour in the code or unable to assert the strange behaviour via a test, it&amp;#8217;s helpful to launch the debugger and start inspecting the variables / try evaluating the piece of code. The REPL has so far been the best features offered by any good dynamic or functional language like ruby, haskell, clojure, python etc.&lt;/p&gt;
&lt;p&gt;You could install ruby debugger for ruby 1.9 using the traditional gem command or adding it to the Gemfile depending on your environment.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;gem install ruby-debug19&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The debugger can then be invoked anywhere in the code by requiring the debugger.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;require &amp;#8216;ruby-debug/debugger&amp;#8217;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The debug console is pretty advanced in terms of functionality and can be used in the same way as gdb. However, more often you use the debugger, typing eval every time gets tedious. You can avoid this by typing in &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;set autoeval&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;By doing so, every single line of code you type in the console will be immediately evaluated in the context of the currently executing code.&lt;/p&gt;
&lt;p&gt;Also, when the debugger launches, it gives the next line of code it&amp;#8217;s about to evaluate. In most cases, this should be fine but it helps to see few lines around the code. You can enable this by&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;set autolist&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once this is set, it will show the line surrounding the current code execution.&lt;/p&gt;
&lt;p&gt;Or you can set this is the environment default by setting it up in .rdebugrc. This is how my  .rdebugrc looks like this.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;set autolist&lt;/p&gt;
&lt;p&gt;set autoeval&lt;/p&gt;
&lt;p&gt;set autoreload&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For a full list of debug commands, look up the &lt;a href="http://cheat.errtheblog.com/s/rdebug/" title="cheatsheet" target="_blank"&gt;cheat sheet&lt;/a&gt;. Also check pivotal labs &lt;a href="http://pivotallabs.com/users/chad/blog/articles/366-ruby-debug-in-30-seconds-we-don-t-need-no-stinkin-gui-" target="_blank"&gt;article&lt;/a&gt; on quickly setting up debugger for rails.&lt;/p&gt;</description><link>http://www.kunday.com/post/21633345048</link><guid>http://www.kunday.com/post/21633345048</guid><pubDate>Mon, 23 Apr 2012 01:21:25 -0400</pubDate><category>config</category><category>debugger</category><category>hacks</category><category>rdebugrc</category><category>ruby</category><dc:creator>arvind</dc:creator></item><item><title>csshx - handy tool to ssh multiple boxes</title><description>&lt;p&gt;One of the major pains in managing many servers is at times you would want to do some command like changing to a particular directory and tail a log file. It&amp;#8217;s painful and time consuming having to ssh to each of these boxes manually and execute the commands over and over again. While there are tools like &lt;a href="http://puppetlabs.com/" target="_blank"&gt;puppet&lt;/a&gt; and &lt;a href="http://www.opscode.com/chef/" target="_blank"&gt;chef&lt;/a&gt; to automate software installations, it could be a over kill for such a simple situation.&lt;/p&gt;
&lt;p&gt;I recently came across &lt;a href="http://code.google.com/p/csshx/" target="_blank"&gt;csshx&lt;/a&gt; (works only on mac) which perfectly solves this problem. csshx will attempt to create multiple ssh connections to list of servers you specify and give you a seperate terminal where you can key in commands which will be executed in all the other open windows(AppleScript magic).&lt;/p&gt;
&lt;p&gt;Say for example you would like to connect to two servers 192.168.1.1 and 192.168.1.2 and tail a log file, you could do this using csshx with the following command,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;csshx &amp;#8212;login username 192.168.1.1&amp;#160;192.168.1.2&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and voila, you have two windows with a login to each of these boxes and a red window to enter your commands. This will be copied across to all the other terminals. csshx also has an awesome set of keyboard shortcuts that you could master to get things by quickly.&lt;/p&gt;
&lt;p&gt;You can install csshx using brew by typing the command:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;brew install csshx&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For people using other package managers refer their info site, or you can download the csshx script directly from &lt;a href="http://code.google.com/p/csshx/" target="_blank"&gt;google code&lt;/a&gt;.&lt;/p&gt;</description><link>http://www.kunday.com/post/18941402097</link><guid>http://www.kunday.com/post/18941402097</guid><pubDate>Thu, 08 Mar 2012 03:11:00 -0500</pubDate><category>ssh</category><category>tricks</category><category>puppet</category><category>chef</category><dc:creator>arvind</dc:creator></item><item><title>Tweaks to default Hg config</title><description>&lt;p&gt;The default mercurial installation does not support colours, pager or a progress bar by default. Unlike git, hg is highly customisable with python and a ton of extensions are available. Some of these extensions are &lt;a href="http://mercurial.selenic.com/wiki/UsingExtensions" target="_blank"&gt;bundled with mercurial&lt;/a&gt; and other &lt;a href="https://bitbucket.org/sjl/mercurial-cli-templates" target="_blank"&gt;nice ones&lt;/a&gt; can be found across the web. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Color Output:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mercurial by default outputs all the diffs and logs using the default colour of the terminal. Mercurial standard library has support for colours by adding this line to .hgrc.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[extensions]&lt;/p&gt;
&lt;p&gt;color=&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Progress Bar:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mercurial is generally fast but in certain cases(like a slow network) or a big repository, some of the commands take a considerable amount of time and mercurial command line does not produce any output until the action is complete. You can get a kickass progress bar by adding the following line in .hgrc.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[extensions]&lt;/p&gt;
&lt;p&gt;progress=&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pager:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most of the mercurial output is redirected to STDOUT without using less / more support. While this makes sense for default install, its painful when reading big diff logs or trying to traverse the hg graph log. You can add support to use less by adding this to your .hgrc.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[extensions]&lt;/p&gt;
&lt;p&gt;pager=&lt;/p&gt;
&lt;p&gt;[pager]&lt;/p&gt;
&lt;p&gt;pager = LESS=&amp;#8217;FSRX&amp;#8217; less&lt;/p&gt;
&lt;p&gt;ignore = version, help, update, serve, record&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Git diff:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For people who are used to reading git diff formatted files, you can enable use git diff format by specifying the following to your .hgrc&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[diff]&lt;/p&gt;
&lt;p&gt;git = True&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My .hgrc can be found in this &lt;a href="http://journal.kunday.com/post/10517711503/hgrc-my-hg-config" target="_blank"&gt;gist&lt;/a&gt;.&lt;/p&gt;</description><link>http://www.kunday.com/post/18768072305</link><guid>http://www.kunday.com/post/18768072305</guid><pubDate>Sun, 04 Mar 2012 21:17:00 -0500</pubDate><category>mercurial</category><category>hg</category><category>dot_files</category><dc:creator>arvind</dc:creator></item><item><title>Feature Toggles, Feature Branching and Branch by Abstraction</title><description>&lt;p&gt;Note: For people who argue only one of it is good, please read &lt;a href="http://www.sci.brooklyn.cuny.edu/~sklar/teaching/s10/cis20.2/papers/brooks-no-silver-bullet.pdf" target="_blank"&gt;this&lt;/a&gt;. Its written by Fredrick Brooks, one of the seminal guys in software engineering. &lt;/p&gt;

&lt;p&gt;Purpose: Main aim of this article is to spur a thoughtful discussion around the topic than religious opinions or fear mongering about how other option is scary.&lt;/p&gt;

&lt;p&gt;There is so much of debate around &lt;a href="http://martinfowler.com/bliki/FeatureToggle.html" target="_blank"&gt;feature toggles&lt;/a&gt; and &lt;a href="http://martinfowler.com/bliki/FeatureBranch.html" target="_blank"&gt;feature branches&lt;/a&gt;. Most of the existing literature seems to be around each one of it rather than contrasting them and giving a holistic picture. Some of the ones that do give like &lt;a href="http://www.thoughtworks.com/perspectives/30-06-2011-continuous-delivery" target="_blank"&gt;this&lt;/a&gt; seems to be missing the big picture. Here is my attack at the whole situation.&lt;/p&gt;

&lt;p&gt;Why These?&lt;/p&gt;
&lt;p&gt;Before we delve any deeper lets look at the various reasons around why we would need these techniques in first place.&lt;/p&gt;
&lt;p&gt;1. Ability to release at any time. Delay in the development of a particular feature does not halt the entire production release cycle.&lt;/p&gt;
&lt;p&gt;2. Ability for the business to hide features / AB test them / do a delayed release of a particular functionality / back out a particular feature.&lt;/p&gt;

&lt;p&gt;For purposes of argument, this article will focus only on 1. Look here for debate around 2.&lt;/p&gt;

&lt;p&gt;The Promise of Feature Toggles:&lt;/p&gt;
&lt;p&gt;1. Continuously integrating changes in CI and if anything goes wrong could be reverted back.&lt;/p&gt;
&lt;p&gt;2. Functionalities can be switched off if the integration does not go well.&lt;/p&gt;
&lt;p&gt;3. No merge hell / Semantic merge conflicts&lt;/p&gt;
&lt;p&gt;4. Code changes made are immediately in trunk available for the entire team for review.&lt;/p&gt;

&lt;p&gt;To Note:&lt;/p&gt;
&lt;p&gt;1. Feature Toggles aren’t necessarily used only in case of Large features, it could be used to hide certain functionalities that could be as simple as introducing a field to a form.&lt;/p&gt;

&lt;p&gt;Arguments against Toggles:&lt;/p&gt;
&lt;p&gt;1. Every Toggle added to the system needs to be checked with state on and off. So the more toggles in system would mean more combinations to test. &lt;/p&gt;
&lt;p&gt;2. Some toggles cannot be clearly done in a clear way. In some places it could be as simple as a change in the injected object to if statements clobbered everywhere across the code.&lt;/p&gt;
&lt;p&gt;3. Since feature toggles themselves involve code, we could accidentally be exposing something that’s potentially untested / that should not be displayed(How do you think the apple rumours(like this) are fuelled anyways?) &lt;/p&gt;
&lt;p&gt;4. The longer the Toggle is existent in the system, the more expensive it is.&lt;/p&gt;

&lt;p&gt;The Promise of Feature Branches:&lt;/p&gt;
&lt;p&gt;1. Well tested code after QA’ing ends up in master.&lt;/p&gt;
&lt;p&gt;2. Master can be deployed at any arbitrary moment.&lt;/p&gt;
&lt;p&gt;3. Ability to track which changes went to each story/feature.&lt;/p&gt;
&lt;p&gt;4. Ability to isolate noise when working on something big like a refactor(note: large refactoring is usually bad and should be done incrementally as much as possible).&lt;/p&gt;

&lt;p&gt;Arguments against Branching:&lt;/p&gt;
&lt;p&gt;1. Delays Testing(wait, am I getting wrong or qa’s don’t start testing until we call the story complete, in case of feature branching its after developer calls it complete.)&lt;/p&gt;
&lt;p&gt;2. Merge Hell and Semantic Conflicts.&lt;/p&gt;
&lt;p&gt;3. Integrating with CI less often.&lt;/p&gt;


&lt;p&gt;Feature Bits&lt;/p&gt;
&lt;p&gt;1. The arguments in feature bits of Facebook kind of invalidates the whole statement&lt;/p&gt;

&lt;p&gt;Authoritative Articles about the subject.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://techcrunch.com/2011/05/30/facebook-source-code/" target="_blank"&gt;http://techcrunch.com/2011/05/30/facebook-source-code/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.facebook.com/video/video.php?v=10100259101684977&amp;amp;oid=9445547199&amp;amp;comments" target="_blank"&gt;https://www.facebook.com/video/video.php?v=10100259101684977&amp;amp;oid=9445547199&amp;amp;comments&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;strong&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/strong&gt;</description><link>http://www.kunday.com/post/18351387544</link><guid>http://www.kunday.com/post/18351387544</guid><pubDate>Sun, 26 Feb 2012 19:58:00 -0500</pubDate><category>feature_toggles</category><category>feature_branching</category><category>branch_by_abstraction</category><dc:creator>arvind</dc:creator></item><item><title>Traveller's Ancedote, an open mail to redbus</title><description>&lt;p&gt;I have been a regular user of &lt;a title="redBus" target="_blank" href="http://www.redbus.in/"&gt;redbus&lt;/a&gt; for the past one year and had some annoyances, issues with redbus. I decided to mail them and see what they feel about those issues. I got an impromptu reply from their head of marketing and I am publishing the email publicly just for the benefit of everyone.&lt;/p&gt;
&lt;p&gt;Here is my mail followed by their reply.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have been a regular user of Rebus since last year and hats off to you guys,you guys provide one of the best online booking services I have ever used.As a software engineer myself, providing a usable end product to a customer is always the most difficult rather than the engineering that went to the product.&lt;/p&gt;
&lt;p&gt;My experience with red bus usage has extremely good but some buses charge ridiculous amount of money and provide a really bad user experience. I have seen people being maltreated with rude words and the customer scolding red bus for selling shitty tickets. At times the buses are so bad that you don&amp;#8217;t really know if you will really make it to your final destination.&lt;/p&gt;
&lt;p&gt;Even though red bus has very little to do with any of the above, not everyone will understand that its a problem anyone will face when they try to run such a startup.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In summary the common problem I have faced with red bus so far is:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1. Quality of buses&lt;/p&gt;
&lt;p&gt;2. Cost/Price of the tickets&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I am interested to know how you guys are trying to mitigate the problem, also i have few suggestions &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1. Introducing Red bus Certified Program ( Similiar to ratings but not aggregated from the users)&lt;/p&gt;
&lt;p&gt;Redbus could tag a bunch of operators based on your own travel experiences and double check with the operators, based on the badge of the travel operator, someone can choose to buy the ticket or not. This is different from ratings as ratings data could be quite tampered by the operator itself. I have travelled in bad buses which had good ratings in redbus site.&lt;/p&gt;
&lt;p&gt;2. Introducing something like a Customer grievance cell as a pilot who will present at some of major boarding points and classify the ratings of buses based on customer experiences. This gives a sense of good will to the customer as they have some one to go walk and talk in case he is irritated by the quality of operator during the beginning of travel itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Simple Improvements:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1. Changing values in drop downs don&amp;#8217;t retain the sorted result, kind of annoying&lt;/p&gt;
&lt;p&gt;2. Why should booked buses come on the list?(Should&amp;#8217;nt the cancel option be more explicit or show a tool tip)&lt;/p&gt;
&lt;p&gt;3. An option to say any seat when there are only few seats available as back and forth you don&amp;#8217;t get to book any of the seats.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other outstanding annoyances:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Getting an exception page when something goes wrong (/ error in some .aspx page) should not be a problem most of the time but might confuse naive users as redbus involves credit card transactions and as such.&lt;/p&gt;
&lt;p&gt;- Arvind Kunday&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And here is the reply I got from Mayank(Head of marketing)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Arvind,&lt;/p&gt;

&lt;p&gt;Thanks for all the insightful feedback and the compliments likewise.&lt;/p&gt;

&lt;p&gt;We recognize the issues you&amp;#8217;ve spoken of. The best thing that can be done in the situation we are in is to give our customers the freedom to rate buses and we can in turn make this information available to everyone. We can&amp;#8217;t certify any single bus because that means guaranteeing a level of service when it&amp;#8217;s not in our control. We do plan to have a boarding point assistance -something that you mentioned in your mail.&lt;/p&gt;
&lt;p&gt;So, to tackle the quality of the buses we have introduced two features - one is the user ratings and the other one is a -ve alert. The bad rated buses are highlighted in red. You can hide them by using a filter above the&amp;#8221;ratings&amp;#8221; tab. Even if you do select a poor rated bus, we&amp;#8217;ll alert you that it&amp;#8217;s been rated badly by other travelers and on the parameters it got rated badly. Hence we ensure that you are taking an informed decision at every step.&lt;/p&gt;
&lt;p&gt;We are also in the process of weeding out the really bad service level operators.&lt;/p&gt;
&lt;p&gt;On the pricing front, we have a feature that informs customers of high prices. If you search for Diwali tickets, you&amp;#8217;ll notice that bus operators have hiked fares because of the demand and supply. Very similar to what you see in airlines. Pricing is neither regulated/dictated by redBus nor any government body and every bus operator does so at their own will. Sometimes for good reason and sometimes for profiteering. When they ply buses on some high demand days, they genuinely incur higher costs in terms of taxes so they pass on that additional cost to the customers. Of course, redBus has nothing to do with such pricing. In fact we mark it as a high price so that customers know so.&lt;/p&gt;
&lt;p&gt;On the simple improvements you&amp;#8217;ve suggested, point no. 2 - we show sold out buses because many of our customers would like to know if there actually is a 3 PM bus or not. Even if it&amp;#8217;s sold out, they can use that information for future reference while planning their trip. It&amp;#8217;s our responsibility to reflect the market, hence we show what&amp;#8217;s sold out. You can ignore those. We will soon put a filter above the &amp;#8220;status&amp;#8221; tab to avoid annoyance from sold out buses.&lt;/p&gt;
&lt;p&gt;The other improvements you&amp;#8217;ve suggested are being worked on.&lt;/p&gt;
&lt;p&gt;-Mayank&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I am actually looking forward to meet those guys in person and try understand how they are solving these problems. Its quite challenging indeed.&lt;/p&gt;</description><link>http://www.kunday.com/post/1494973351</link><guid>http://www.kunday.com/post/1494973351</guid><pubDate>Sat, 06 Nov 2010 04:41:15 -0400</pubDate><category>rebus</category><category>india</category><category>bus</category><category>mail</category><category>review</category><dc:creator>arvind</dc:creator></item><item><title>Excerpts from Leslie Lamport's Interviews</title><description>&lt;p&gt;&lt;b&gt;Sources:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;A Discussion with Leslie Lamport&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;An Interview with Leslie Lamport&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;1. When asked about some of the important problems in distributed systems.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;On the theory side, recognizing a problem has been harder than solving it. &lt;/b&gt;Since you are asking about problems that are already recognized to be problems, the answer is probably none. On the practical side, I don’t think I have any more insight into that than most other people.&lt;/p&gt;
&lt;p&gt;2. &lt;i&gt;When asked about&lt;/i&gt; &lt;i&gt;currently available formal methods are unable to prove correctness of large software systems, such as real operating systems. What is your advice to software developers for bridging this gap between algorithms (which can be analyzed) and full software systems?&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;People fiercely resist any effort to make them change what they do. Given how bad they are at writing programs, one might naively expect programmers to be eager to try new approaches. But human psychology doesn’t work that way, and instead programmers will find any excuse to dismiss an approach that would require them to learn something new. &lt;b&gt;On the other hand, they are quick to embrace the latest fad (extreme programming, templates, etc.)&lt;/b&gt; that requires only superficial changes and allows them to continue doing things basically the same as before. In this context, it is only fair to mention that people working in the area of verification are no less human than programmers, and they also are very reluctant to change what they do just because it isn’t working.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;3. The fundamental idea behind verification is that one should think about what a program is supposed to do before writing it&lt;/i&gt;. Thinking is a difficult process that requires a lot of effort. &lt;b&gt;Write a book based on a selection of distorted anecdotes showing that instincts are superior to rational judgment and you get a best seller.&lt;/b&gt; Imagine how popular a book would be that urged people to engage in difficult study to develop their ability to think so they could rid themselves of the irrational and often destructive beliefs they now cherish. So, trying to get people to think is dangerous. Over the centuries, many have been killed in the attempt.&lt;b&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;4. I think my most important contribution is my work on writing structured proofs, which is perhaps more relevant to mathematicians than computer scientists. &lt;b&gt;In the unlikely event that I&amp;#8217;m remembered 100 years from now, I expect it will be for that.&lt;/b&gt;&lt;/p&gt;</description><link>http://www.kunday.com/post/300048298</link><guid>http://www.kunday.com/post/300048298</guid><pubDate>Fri, 25 Dec 2009 11:22:36 -0500</pubDate><category>leslie-lamport</category><category>general</category><category>interviews</category><dc:creator>arvind</dc:creator></item><item><title>Ordered Pairs in Naive Set Theory</title><description>&lt;p&gt;&lt;b&gt;Ordered Pair&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;An ordered pair of a and b, with first co-ordinate &lt;i&gt;a&lt;/i&gt; and  second co-ordinate &lt;i&gt;b&lt;/i&gt;&lt;b&gt; &lt;/b&gt;is defined by,&lt;/p&gt;
&lt;p&gt;(a,b) = {{a}, {a,b}}&lt;/p&gt;
&lt;p&gt;The proof for the above ordered pair is given by,&lt;/p&gt;
&lt;p&gt;If (a,b) and (x,y) are two ordered pairs, then (a,b) = (x,y) if and only if a=x and b=y.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Proof:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;If in case,&lt;b&gt; a = b, &lt;/b&gt;then, (a,b) =&amp;gt; the singleton set of {{a}} or the singleton set of {{b}}.&lt;/p&gt;
&lt;p&gt;Also, conversely, if (a,b) itself is a singleton set, results in {a} = {a,b}, so {b} ϵ {a,b} so which leads to a=b&lt;/p&gt;
&lt;p&gt;On the other hand if we assume , (a,b) = (x,y) then both of them have to be singletons which can lead to&lt;/p&gt;
&lt;p&gt;Singletons on both the sides, like {a} = {x}, so that a = x.&lt;/p&gt;
&lt;p&gt;Also both the pairs should have atleast have one element which is not a singleton({a,b} and {x,y}), it results to  {a,b} ={x,y}.&lt;/p&gt;
&lt;p&gt;Now since we already know that b ϵ {a,b}, b is also a subset of {x,y}.&lt;/p&gt;
&lt;p&gt;Since a=x, b also cannot be equal to x and hence, b = y.&lt;/p&gt;
&lt;p&gt;T his completes the proof that, (a,b) = (x,y) If and only if a=x and b=y.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Cartesian product:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;When A and B are two sets, we can define a set which contains the ordered pair (a,b) such that a is in A and b is in B.&lt;/p&gt;
&lt;p&gt;Assuming above, we can conclude that {a} ϲ A and {b} c B, implies that {a,b} c A U B. Also, {a} C (A U B) and {b} C {AUB}, which implies, (a,b) C {A U B}.&lt;/p&gt;
&lt;p&gt;There is an important observation from this, {a}, {b}, {a,b} are actually some of the members of the power set of the elements of the set {a,b}.  So we can conclude that, (a,b) ϵ ‽(a,b). Its also obvious that ‽(a,b) has more elements than the ordered pair hence we can define a new set ‽(‽(a,b)) when a ϵ A and b ϵ B.&lt;/p&gt;
&lt;p&gt;Applying the axiom of specification and axiom of extension we can obtain the set A X B which is the Cartesian product  such that&lt;/p&gt;
&lt;p&gt;A X B = {x:x=(a,b) for some a in A and some b in B}.&lt;/p&gt;
&lt;p&gt;We can take forward the equation in a converse order for any set of ordered pairs there exists a set R such that, for sets A and B, R C (A X B).&lt;/p&gt;
&lt;p&gt;Now, ({a},{a,b}) ϵ U R. Now, since {a,b} is one of the subsets of the ordered pair, its safe to assume that, {a,b} ϵ U R. This also assumes that a and b also belongs to UUR.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Projections&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Its also often desirable to construct projections (like projection in relation algebra for example). By using the definitions,&lt;/p&gt;
&lt;p&gt;A = { a: for some b in ((a,b) ϵ  R)}&lt;/p&gt;
&lt;p&gt;B = { b: for some a in ((a,b) ϵ  R)}&lt;/p&gt;</description><link>http://www.kunday.com/post/300031578</link><guid>http://www.kunday.com/post/300031578</guid><pubDate>Fri, 25 Dec 2009 11:03:46 -0500</pubDate><category>naive-set-theory</category><category>math</category><dc:creator>arvind</dc:creator></item><item><title>Compliments in Set Theory</title><description>&lt;p&gt;&lt;b&gt;Relative Difference &lt;/b&gt;&lt;br/&gt;If A and B are two sets, then the diﬀerence between A and B, the relative compliment of B in A, is the set A - B deﬁned by (note that = is just a abuse that &lt;br/&gt;we use to ϵ) &lt;br/&gt;&lt;i&gt;A − B = xϵA&amp;#160;: xϵ′ B &lt;/i&gt;&lt;br/&gt;This does not necessarily mean &lt;i&gt;B ⊂ A &lt;/i&gt;&lt;br/&gt;But when the above condition holds true, then &lt;br/&gt;&lt;i&gt;A − B = A − (A ∩ B) &lt;/i&gt;&lt;br/&gt;For the sake of simplicity, we assume a set U , the universe on which we can assume that all sets that we create are subsets of them. &lt;br/&gt;Given a set A, we can deﬁne a set which is the absolute compliment of A, which is A’, which also provides that&lt;i&gt;&lt;b&gt; (A’)’ = A. &lt;/b&gt;&lt;/i&gt;&lt;br/&gt;Also as with all ∅, &lt;br/&gt;&lt;i&gt;&lt;b&gt;∅’ = E and E’ = ∅ &lt;/b&gt;&lt;/i&gt;&lt;br/&gt;Also, its easy to prove that, &lt;br/&gt;A ∩ A′ = ∅ &lt;br/&gt;Also, &lt;br/&gt;A ⊂ B if andonlyif , B′ ⊂ A′&lt;/p&gt;
&lt;p&gt;Lets proceed to prove the above one. Lets assume the if part, if B′ ⊂ A′&amp;#160;: if xϵA, its self evident that xϵ′ A, and since B′ ⊂ A′ which clearly implies that , x ⊂ B′ which leaves us withxϵAandxϵB. Proceeding with the only if part, A ⊂ B if xϵB′ the clearly, xϵ′ B and since AϵB, its self evident that xϵ′ A, which proves the above one. &lt;br/&gt;Moving forward with the De Morgans Laws, &lt;br/&gt;&lt;b&gt;(A ∪ B)′ = (A′ ∩ B′ ) &lt;/b&gt;&lt;br/&gt;Lets proceed to prove the above , lets assume xϵ left side then xϵ′ (A ∪ B) which &lt;br/&gt;means, xϵ′ A and xϵ′ B which directly leads to xϵA and xϵB. Proceeding to the &lt;br/&gt;right side, if xϵrightside then xϵ′ A and xϵ′ B which means that x is not present in &lt;br/&gt;either A or B which leads to x being in A or B, hence, (A∪ B)′ = (A′ ∩ B′ ).&lt;/p&gt;
&lt;p&gt;Hence, Demorgan Law have been proved. Similiarly, we can also prove that &lt;br/&gt;(A ∩ B)′ = A′ ∩ B′ &lt;br/&gt;&lt;b&gt;Principle of duality of Sets &lt;/b&gt;&lt;br/&gt;One of the major implication of De morgans law is that, all theorems in Set &lt;br/&gt;theory come in pairs.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;i&gt;So if an inclusion or an equation containing, unions, intersections and compli- &lt;br/&gt;ments of a sub-set E, we replace al l the sub-sets by its compliments, inverse its &lt;br/&gt;unions and intersections and reverse the inclusion , we arrive at a new theorem. &lt;br/&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Symettric Diﬀerence &lt;/b&gt;&lt;br/&gt;&lt;i&gt;A + B = (A − B) ∪ (B − A) &lt;/i&gt;&lt;br/&gt;This is the kin of XOR operation http&amp;#160;: //en.wikipedia.org/wiki/Exclusivedisjunction &lt;br/&gt;This is commutative and associative. &lt;br/&gt;&lt;b&gt;Why is theory of intersections only applicable to non ∅ sets&amp;#160;? &lt;/b&gt;&lt;br/&gt;Lets just assume a set, where xϵX&amp;#160;: xϵof ∅ &lt;br/&gt;Lets try to prove the other part, If this does not hold true, then ∅ must contain &lt;br/&gt;a set X such that xϵX ′ , which of course is ridiculous, which proves the point. &lt;br/&gt;To clear this, we can deﬁne a sub set in the Universe U, such that, ϱ(All subsets &lt;br/&gt;of universe) &lt;br/&gt;&lt;i&gt;xϵU |xϵX f oreveryX inϱ&lt;/i&gt;&lt;/p&gt;</description><link>http://www.kunday.com/post/293696609</link><guid>http://www.kunday.com/post/293696609</guid><pubDate>Mon, 21 Dec 2009 14:07:55 -0500</pubDate><category>naive-set-theory</category><category>math</category><dc:creator>arvind</dc:creator></item><item><title>Asymptotic Notations</title><description>&lt;p&gt;Why use Asymptotic analysis?&lt;br/&gt;&lt;br/&gt;Since its a well known fact that for a small input set, all algorithms perform well regardless of the complexity, so to determine the complexity we need to analyze the algorithm for large values of n , typically n -&amp;gt; infinity. Also we need to bound the computed value between two values(a range) , or in short create a subset within which the execution time of the algorithm falls.&lt;br/&gt;&lt;br/&gt;An asymptote of the curve is a line such that the distance between the curve and the line approaches zero as they tend to infinity. So, we use this to determine the function which is fixed while n-&amp;gt; infinity.&lt;br/&gt;&lt;br/&gt;Asymptotic notations are calculated based on if the asymptotic lower and upper bounds can be calculated for a function properly.&lt;br/&gt;&lt;br/&gt;Various Notations&lt;br/&gt;&lt;br/&gt;Θ  - when both asymptotic upper and lower bounds can be calculated and is tight.&lt;br/&gt;&lt;br/&gt;θ -  when only asymptotic upper bound can be calculated and is tight.&lt;br/&gt;&lt;br/&gt;Ω - when only asymptotic lower bound can be calculated and is tight.&lt;br/&gt;&lt;br/&gt;o - when the asymptotic upper bound can be calculated but cannot be tight.&lt;br/&gt;&lt;br/&gt;ω -Only when the asymptotic lower bound can be calculated but cannot be tight.&lt;br/&gt;&lt;br/&gt;Θ Notation:&lt;br/&gt;For functions g(n) and f(n), we define a function, Θ(g(n)) such that,&lt;br/&gt;Θ(g(n)) ϵ { f(n): c1,c2,n0, all non-negative constants for, 0 ≤ c1g(n) ≤ f(n) ≤ c2g(n)}&lt;br/&gt;&lt;br/&gt;What it essentially means is that, by using the above description, we obtain a set of f(n)&amp;#8217;s where f(n) lies between the upper and lower bounds, effectively sandwiching f(n) within c1g(n) and c2g(n).&lt;br/&gt;&lt;br/&gt;So, we obtain a set f(n) ϵ Θ(n), for sake of convenience we use the notation, f(n) = Θ(n).&lt;br/&gt;&lt;br/&gt;This makes, g(n) asymtotically tight bound for f(n) meaning that f(n) is equal to g(n) within a given constant factor C0.&lt;br/&gt;&lt;br/&gt;Assumptions:&lt;br/&gt;&lt;br/&gt;∀ f(n) ϵ Θ(n), f(n) has to be asymptotically nonnegative for sufficiently large values of n.&lt;br/&gt;&lt;br/&gt;Also, it requires g(n) to be asymptotically nonnegative as otherwise, Θ(g(n)) =  ∅&lt;br/&gt;&lt;br/&gt;So we reach a point where, any function computed with Θ(n) has to be asymptotically nonnegative.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;When computing Θ(n), lower-order terms of a function can be ignored when computing the Θ(n) as its insignificant for large values of n.&lt;br/&gt;Similiarly, to compute the value of the constants c1 and c2 which define the bounds of the function, its enough if we pick a lower bound value lesser than the higher-order term and upper bound greater than the higher-order term.&lt;br/&gt;&lt;br/&gt;For any asymptotically nonnegative function with a higher-order term 0 or if its constant we use , Θ(n0) = Θ(1). (though its sure that 1-&amp;gt; infinity). This notation is just used to make clarity that the function computes in constant amount of time.&lt;br/&gt;&lt;br/&gt;θ notation:&lt;br/&gt;When we have only an fixed asymptotic upper bound, we use θ(g(n)) (pronounce as big oh.)&lt;br/&gt;&lt;br/&gt;For functions f(n) and g(n), we define a function θ(g(n)) such that,&lt;br/&gt;θ(g(n)) ε {f(n), for constants , c and n0, such that 0 ≤ f(n) ≤ c.g(n) ∀ n ≥ n0}&lt;br/&gt;&lt;br/&gt;θ(g(n)) is a subset of θ(g(n)), if it exists as Θ notation is stronger than θ notation.&lt;br/&gt;&lt;br/&gt;-&amp;gt; is most commonly used as asymptotic upper bound characterizes the worst-case behavior of an algorithm.&lt;br/&gt;-&amp;gt; we arrive at an θ notation by looking at the structure of a program&lt;br/&gt;&lt;br/&gt;What we mean by saying a program is θ(n2) what we mean is for any value of n, above a specified n0, running time is bounded above the value of the function f(n).&lt;br/&gt;&lt;br/&gt;Ω notation:&lt;br/&gt;When we have only an fixed asymptotic lower bound, we use Ω(g(n)) (pronounced as  big omega.)&lt;br/&gt;&lt;br/&gt;For functions f(n) and g(n), we define a function Ω(g(n)) such that,&lt;br/&gt;Ω(g(n)) ε {f(n), for constants, c and no, such that 0 c.g(n) ≤ f(n)  for all n &amp;lt; n0 }&lt;/p&gt;

&lt;p&gt;Following figure gives a clear understanding of the above notations:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_kuwwkm9D9G1qz4u69.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;Theorem 1:&lt;br/&gt;For functions f(n) and g(n), f(n) ε Θ(g(n)) if and only if f(n) ε θ(g(n)) and f(n) ε Ω(g(n)).&lt;br/&gt;&lt;br/&gt;o notation:&lt;br/&gt;The asymptotic upper bound provided by \theta notation may or may not be tight. For ex, 2n ε θ(n2) is not tightly bound. In such cases we use little-oh of g(n)&lt;br/&gt;For functions f(n) and g(n), we define a function o(g(n)) such that,&lt;br/&gt;o(g(n)) ε {f(n), for constants c and n0, 0 ≤ f(n) ≤ c.g(n) for n&amp;gt;n0 and n0 a constant greater than 0}&lt;br/&gt;&lt;br/&gt;ω notation:&lt;br/&gt;When we have have an asymptotic lower bound provided by ω notation may or may not be tight.&lt;br/&gt;In such case,&lt;br/&gt;For functions f(n) and g(n), we define a function ω(g(n)) such that,&lt;br/&gt;ω(g(n)) = { f(n), for constants, c and n0, 0 ≤ c.g(n) ≤ f(n)}&lt;/p&gt;</description><link>http://www.kunday.com/post/290464306</link><guid>http://www.kunday.com/post/290464306</guid><pubDate>Sat, 19 Dec 2009 12:17:00 -0500</pubDate><category>asymptotic-notations</category><category>algorithms</category><dc:creator>arvind</dc:creator></item><item><title>Ignite talk on Cloning Einstein</title><description>&lt;blockquote&gt;Recently, i gave a talk in Ignite Chennai. The idea of Ignite is , if you are given 5 minutes and just 20 slides, What would you say? The idea is to present ideas concisely and briefly and ignite thoughts in the minds of listeners. In Chennai, this is the first ignite that is held and was conducted by Thoughtworks, the company where i currently work on. This is article is derived from the talk that i gave there.&lt;/blockquote&gt;
&lt;p&gt;Just to arouse the curiosity of the listeners, i decided to name it as “How would it be to clone Einstein”. In-fact, When people talk about cloning, what immediately flashes in human brain is cloning an individual. After all, even Time magazine has run more than 3 &lt;a title="Time Magazine – Cloning Covers" href="http://www.time.com/time/covers/0,16641,1101010219,00.html" target="_blank"&gt;covers&lt;/a&gt; advertising the same conception. The irony is the&lt;b&gt;science of cloning&lt;/b&gt; is not just creating an identical copy of human beings, but a lot more.&lt;/p&gt;
&lt;p&gt;Cloning can be broadly classified into two groups, Reproductive Cloning and Therapeutical Cloning. Reproductive cloning is concerned more about creating identical copies of an organism and this is the most common type of cloning that we hear in news, like &lt;a title="Dolly the Sheep" href="http://en.wikipedia.org/wiki/Dolly_%28sheep%29" target="_blank"&gt;Dolly the Sheep&lt;/a&gt; and the Interp. Ibex. The less known type of cloning is Therapeutical Cloning which has a lot of tricks up the sleeve that can increase the longevity of an individual.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Reproductive Cloning&lt;/b&gt; is a very imperfect science(link to xkcd comic) and it might take many generations to reach perfection. Instead, what Therapeutical Cloning concerns itself is with whatever we have in hand, how can we put it to benefit of the human society. &lt;a title="Stem Cell Research" href="http://en.wikipedia.org/wiki/Stem_cell_research" target="_blank"&gt;Stem cell research&lt;/a&gt; is one such branch of cloning which concerns itself on organ replacement.&lt;/p&gt;
&lt;p&gt;When a tree’s branch is cut down, The tree has a unique ability to grow the same kind of part, in this case leaves to serve the same function(photosynthesis). Given that a plant can re-create a cut down part by creating a re-placement to satisfy the function is something the ‘things’ in animal kingdom(i mean most of them, there are some animals which grow after a part is cut) lack. Stem cell research tries to get a solution for this. In this case, it just does not limit itself to external visible parts such as hands or legs.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Stem Cell Research&lt;/b&gt; attempts to fix this gap by using highly replicable cells such as the embryonic cells and cells from bone marrow. This is a lot different as we create only parts of the human body to aid the longevity. For example, a person with a defective heart or blood cancer could use the help of Stem Cells to heal the heart or blood cancer. Its a elixir which could save the life of countless ailing people, only that this time its from scientists and not from monks.&lt;/p&gt;
&lt;p&gt;Recent Statistics point out that there are more than 153,000 deaths every day and the global life expectancy is put at &lt;a href="http://geography.about.com/library/weekly/aa042000b.htm" target="_blank"&gt;70 years&lt;/a&gt; around the globe. But not all who people die are 70 years old. Coupled to this is the fact that average life expectancy is decreasing owing to our increasingly bad lifestyle. Of course, Stem cell research will not solve all the healthcare problems that face us, but could at-least help someway or the other.&lt;/p&gt;</description><link>http://www.kunday.com/post/217452715</link><guid>http://www.kunday.com/post/217452715</guid><pubDate>Mon, 19 Oct 2009 17:05:00 -0400</pubDate><category>chennai</category><category>cloning</category><category>ignite</category><category>ignite-chennai</category><category>general</category><dc:creator>arvind</dc:creator></item></channel></rss>

