Wednesday, December 22, 2010

The 2G Debate

Government sold 2G licenses at very low prices causing huge losses. These licenses are valid for 20 years. Why 20 years? Why not give licenses per year? Why not per month? And why license?

How about government implementing a gateway which could allot spectrum dynamically with say few seconds of granularity, with rates that are based on congestion rates at any time of the day. Basically any telecom provider can get as much spectrum as he needs, programmatically, at granularity of few seconds within few milliseconds. It is not impossible to build such a system and with fraction of the cost at which the spectrum was sold and would give maximum flexibility to all operators so that they only pay for what they use and gives government maximum money because rates can be changed by government as and when appropriate.

This would be a great system to maximize government revenue and offers maximum flexibility to every operator. Chances are this will never be built. How will operators make money and how will politicians make money in that case.  See Non-Markets.


Friday, November 12, 2010

Partition Tolerance & Calculated Consistency

This is the part about CAP theorem that I don't understand. A system which is not tolerant to partitions, can be made to be consistent and available as per CAP.  I don't understand the tolerant part...and its implications. Basically when I give up tolerance what have I exactly given up because the only two things system really needs is consistency and availability. Partitions cause lost of availability or consistency because of shared state.

Is it possible to be not tolerant and still be consistent and available? Or does being not tolerant inherently assume either not consistent or not available or both? A single node system doesn't have any problems with partitions, but when the single node goes down, it is not available.  Thus I believe it is not possible to have a available system without replication and under network partitions replicated systems will become inconsistent if they have to be available. An alternate way of defining CAP theorem would be to use replication, consistency and latency as the base constructs. A node never coming up has infinite latency, whereas partitions would have some upper bound on latency (by including human intervention).

Much of the discussion around CAP theorem has been based around the NoSQL dbs. These systems use the key-value data model. The main problem is that we always think of interactions as read or write operations. Whenever a write occurs it modifies the original value in arbitrary possible ways, making it hard to measure the cost of being inconsistent. Consider a system where we think of writes as changes. Further if these changes have the property that irrespective of in which order they are applied they will yield the same result. In such a case all we need is a reliable way of sending messages to nodes. The degree of inconsistency is directly related to the latency in delivering messages.

The second area where I believe we can reduce the impact of inconsistency is by moving the decision of choosing consistency or availability in the db nodes itself. Consider a system which stores objects with code instead of just data. A change is just an invocation of a method on the object that changes the object state. Now if this method is aware of the currently available nodes, it can choose to be inconsistent or available depending upon the impact of the change.  Example: Consider a shopping cart application that needs to decrease its inventory count by 1. Also assume that we have 10 replicas. Now when 10 concurrent clients want to buy the same item and somehow these operations end up happening concurrently on all the replicas, we have two extreme options. One to serialize them and second to let them happen in parallel and be inconsistent. Now consider that we have only 1 item, in that case running this in parallel will cause problems as we are selling stuff we don't have. Only one of the requests should succeed.  But if we had 1000 such items, the impact of inconsistency is not much. Each node will think the current item count is 1000, whereas it would have changed from 1000 to 990. Thus if we know the impact or magnitude of inconsistency, we can take a better call at runtime to decide if we should prefer availability or consistency.  For example in the case above, it is OK to be inconsistent if each node does 100 transactions without consulting with any other node. Depending upon number of nodes it is consistent with, this number can be refined as long as possible to give availability assuming other nodes will use the same strategy.

Monday, November 08, 2010

Earlier posts on FOSS

These two are on the future of selling software as a business.

Free Software Bubble

This one talks about how to make money by writing open source software.

How to make money from open source?

This one tries to provide a solution to the issues presented above by redefining the role of operating systems. It goes on to provide a business model for software in which OS plays an important role.

Thoughts on OS

This one has some advise for Microsoft but seems like Apple heard it first.

Why Microsft should make windows 7 mobile free?

Friday, October 22, 2010

Scriptable Object Cache

UPDATE:  Scriptable object cache is now available Cacheismo

Over the last few months, I have become a fan of Lua, especially because of the coroutine support. In fact more than Lua, I have become great fan of Kahlua, the java implementation of the Lua Language. The first product of this fascination was a Lua Http Proxy. This is what it looks like:

function proxy(context, httpRequest)
   local request = httpRequest
   local request1 = NewLuaHttpRequest("HTTP/1.1", request:getMethod(), request:getUri())
  local request2 = NewLuaHttpRequest("HTTP/1.1", request:getMethod(), request:getUri())
  local requests = {request1, request2}
  local responses = luaSendRequestAndGetResponseInParallel(context, requests)
   local finalResponse = responses[1]
          finalResponse:setContent(responses[1]:getContent() .. responses[2]:getContent()) 
         luaSendResponse(context, finalResponse)

All this code does is that when it gets a request, it makes two parallel requests and then sends back concatenated response. Fairly simple ?  No. To the naked eye this is a single threader blocking code, but when you combine this with the power of Lua coroutines you get a proxy which is as simple to write as single threaded blocking code, but underneath you have the full power of java non blocking IO. You can probably have 100K concurrent connections running this code concurrently using may be 4 or 8 threads. That is where simplicity meeds speed and speed meets power or flexibility. It will be trivial to build upon this to build a node.js alternative which is much much easier to code without loosing the speed and gaining platform independence in bonus.

Now to the main topic Scriptable Object Cache. As I mentioned in the last post about the java memcache,  I wanted to add some Lua to it. The result was a cache which could contain object instead of bytes. This is where redis fits in, but what if you wanted to store a object specific to your needs. Here is how to implement Set functionality.

function new() 
  local  hashset = {}
  return hashset

function put(hashset, key) 
  return "STORED"

function exists(hashset, key)
  if (hashset[key] == 1) then
     return "EXISTS"
  return "NOT_FOUND"

function delete(hashset, key)
     hashset[key] = nil
  return "DELETED"

function count(hashset)
  return #hashset

function getall(hashset)  
        local result = ""
for k,v in pairs(hashset) do
           result = result .. k .. " " 
   return result

function union(hashset, hashset2)  
        local newhashset = {}
for k,v in pairs(hashset) do
              newhashset[k] = 1
for k,v in pairs(hashset2) do
             newhashset[k] = 1
   return getall(newhashset)

function intersection(hashset, hashset2)  
        local toIter
        local toLookup
        local newHashSet = {}

        if (#hashset > #hashset2) then 
            toIter = hashset2
            toLookup = hashset
            toIter = hashset
            toLookup = hashset2

for k,v in pairs(toIter) do
           if (toLookup[k] == 1) then 
               newHashSet[k] = 1
   return getall(newHashSet)

function __init__(context) 

Once you code or copy this the following interface exists:
> new set1     # creates a new set
> invoke set1 put a 
> invoke set1 put b
> new set2 
> invoke set2 put b
> invoke set2 put c
> invoke set1 union set2

I haven't written the client, so don't know what is the performance, but I wouldn't be surprised if it runs at about 50% the speed of memcached.  But wait what about the speed benefits because of not having to do get and update? And by the way how do you update? Using CAS in a loop?  

What we have done here is inverted the responsibility. Instead of doing stuff in the code and putting it in the cache, what we can do now is do the stuff atomically in the cache itself. 

  1. Define you own objects using Lua scripts 
  2. Base code is java so runs on any platform and OS
  3. No CAS in loop. CAS only tells you things have gone wrong. Here you have the flexibility of doing the right thing in the first place.
  4. No need to define key patterns to store stuff using different keys. Define your object instead. Define its methods and what they return. As a bonus all stuff on a given object is atomic.
  5. Performance. Updating a 1000 entry list in memcached would need getting the object, updating it and store using CAS. If fails repeat. Now just define a single function which does the update and you are done. 
This is not complete yet. I plan to add persistence and simplify the interfaces a bit.  Stay tuned. 

Memcached in Java

Over the last few weeks I was just playing around with some non blocking java code. I had read that jmemcache which works using Netty runs at about 50% the speed of memcached. So I wrote a simple cache implementation and picked up some code from the jmemcache project and I had my own memcached in java. Works at about 80%-90% of the speed of memcached, which I believe is very good given the quadruple data copy involved ... java bytes arrays to java byte buffer to native byte buffer to the kernel.


  • Works on all platforms (32 bit, 64 bit)
  • Works on all OSes which have java.. windows, linux, solaris, hp-unix, mac, etc
  • No slab reallocation issues as we don't have any slabs
  • Multi threaded
  • Pure java. No third party dependency.
  • 10%-20% performance drop
  • Cpu utilization is higher than memcached
  • Objects are not tightly packed, so uses a bit more memory

Testing was done using the xmemcached client and their benchmark code.

PS: Java gathering write still has memory leak on 64 bit linux.

Tuesday, October 19, 2010

Banks can only Collapse

Banks don't make losses.  They can only collapse and so do governments.

With Variable or Adjustable Home Loan or Mortgage,  banks can always keep interest rates high enough for the consumer. Hence the only way for banks to loose money is when consumers are unable to pay the loans i.e defaults. This is not the norm, but under extreme circumstances that is the only choice left for the consumer.

This smells like the old kingdoms where a stupid King will continue to raise taxes on the people without bothering to help them, resulting in either a take over or a revolution. All systems are created by people, for the people and when they start being unfair and unjust, people break the system.  It is the responsibility of the government to create regulations and laws to create systems which are fair and just, so that people don't break the systems. Breaking systems is costly, but sometime systems don't leave enough choice.

Money is a system. It is a system of trust. Economic depression happens when people don't trust money anymore.  In other words economy works when people trust money. And it is the responsibility of the government to make sure they do. It is hard to factor in how much people trust money into equations and hence it is left out, but that is the most important factor for the economy to work. The God Father and Hindi remake Sarkar show a glimpse of that other kind of economy.

Any business that cannot make losses can only collapse. Government, banks, corruption, Windows, Apple, Google Search, Facebook, Ebay, etc.  When their is no choice, people invent something new.

Thursday, October 14, 2010

The not so virtue of selfishness

Ayn Rand talked a lot about selfishness and how that is good for everybody. Corruption is a direct consequence of selfishness. See Corruption and Capitalism.

How do you define selfishness? As much as I think about it, it sort of boils down to being logical or making the best possible choice for yourself, both of which are incomplete definitions.

Example: Say, I am a doctor. I need to catch a flight. The only taxi ready to go to the airport is charging me 10X the regular price. 

By conventional thinking the taxi driver is selfish. But so am I, because that is the logical and best possible choice I have.  Once I pay 10X the price and I understand the virtue of selfishness, I will also start charging my patients 10X the price when I know they don't have a choice. Yet again, patients are selfish as they are being logical and making the best possible choice and so am I.  

What we have done here is that by being selfish, people start screwing each other when they know the other person doesn't have a choice. Banks do it, Oil companies do it, Facebook, Apple, Google, Microsoft, IBM, Cisco, Oracle do it.  Someday the pharmacy will do it, airlines will do it, your maid will do it, your wife will do it, your children will do it..everyone will do it. 

So what we get is a screwed up society to live in by being selfish. But if I did think this through and felt that if I start screwing people, eventually I will end up in a screwed up society which I don't want, I might stop screwing people when they don't have choice. Now this again is a selfish choice to make.   

This is my problem with selfishness. What you do by being selfish could be anything and is just limited by your own ability to think and decide for yourself. Being selfish is good if and only if everyone has same IQ.

Tuesday, October 05, 2010

On Reality, Truth & levels of Abstractions

Much of the philosophy literature is full of the notion of identity, consciousness and perception. Table is a table and not a chair kind of stuff. What actually exists and what is just our perception.

Chair is a chair. It is made of wood. But no chair is also made of plastic and metals. Even wooden chair has metal nails and may be some glue and polish. Sofa is also a chair. It could have leather or cloth. The wood itself is made of molecules and molecules are made of atoms and then atoms are made of electrons and protons and neutrons, which themselves are made of sub atomic particles.

Technically the reality is based on sub-atomic particles which we can't see.

This brings us to the core conjecture of this post: the Reality & Truth is just a comfortable level of abstraction.

It will be useless to talk about recipe of fried chicken at the level of sub atomic particles or molecules. Or discussing the design of a building in terms of atoms. If you are making a atomic reactor, yes that is the level at which you need to think. May be sub atomic particles are made of further small units and if someone making a atomic reactor cannot explain his truths on current theory, he will further invent a better level of abstraction to deal with those things.

Things are grey, but it is efficient/simple to talk using black and white. Company distinguishes  between the people based on their roles  - manager, developer, QA, architect, etc. Political parties distinguish between people based on voting units or religion or caste or gender or education etc. Banks distinguish the same set of people based on their net worth or ability to repay loan etc. Police looks at them as criminals or non criminals. Doctors would have a different way of people classification. If we don't do such kind of classification to abstract out what is important and what is not, it will be impossible to get anything done in the world. For every one, this is the reality and at the same time it is a comfortable level of abstraction.

Every calculation in the world which uses pi is incomplete and yet we use it because it simplifies life. You can choose as many digits as you like, whatever you are comfortable with. Reality & Truth is just a comfortable level of abstraction, as long as they work, all abstractions are good enough substitute for reality. The only problem is we get so comfortable with these abstractions that we cease to think beyond them which by the way was the very reason for creating them in the first place.  All we need to do is to be aware of these abstractions, so that instead of beating our head on why things are not making sense, just think beyond the abstractions and invent new ones which make sense, until they also break.  The bigger problem is that we share these abstractions with other people in the world and unless they too feel the need, it is very hard to make them adjust/agree to a new "uncomfortable" abstractions (They are comfortable with the current setup).

Newton did a great job at describing motion and then Einstein questioned how do you measure it. Both theories are currently in use depending upon which suites the given problem. Before google all search engines looked at each page as a collection of words and then google defined each page using the link structure around it.  When Zynga copied from other games on facebook, they had figured out that it was not about the quality of the game, but about how do you use the facebook platform to grow the user base. When IBM was thinking PC is the business, Microsoft figured out that OS is what makes the difference and is the strategic point of control.

Well the point is that many innovations in business or science are simply the result of looking at the problem differently, using different level of abstraction. The same is true for any form of knowledge we have ever encountered. Yet the world continues to struggle with what is reality, this is reality and this is not, fighting wars, writing blogs, doing marketing and propaganda. I guess if we could knock off the word reality/truth and simply use abstraction, world would be much much peaceful.

Sunday, October 03, 2010

Developers Out There - API 101

 Developers out there:

  • are building their own companies to make money
  • are writing open source software, because they enjoy the respect they get from the community and can make money later by consulting or writing books about their software
  • are making iphone & android apps because people pay for them
  • are making facebook apps, because they get this huge user base of 500 million users. If successful their app can bring huge amount of money from adds, or if they are making games then from virtual goods.
It was and it is about the money honey.

Zynga for all practical purposes is a developer for facebook. If Zynga makes a billion dollars out of virtual goods using facebook, they do bring 300 millions to facebook. Facebook gets a huge screen real estate they can use for advertisements which is exclusively created by Zynga.  May be facebook makes more money from Zynga than what Zynga makes from facebook.  This is called partnership.

The most stupid thing companies do after opening up their API's is to wait for developers to build applications and give no meaningful monetization model to developers. That leaves no other choice except advertisements for developers. Companies like twitter are even worse, who copy the innovation of their API developers and kill them. 

Developers are out their to make money.

1) First figure out how you will make money.
2) Second figure out how you will make money if developers use your API. 
3) Third share your profits with the developers based on how much business developer brings to you.

Let developers make the choice if they want $10 per booking vs $0.001 per add view and how do they optimize their app for their choice.  Developers are not super excited by Facebook, Iphone, Android or Google. They are excited by the opportunity to make it big. 500 million * $ 0. 001 is a big number. But so is $10 * 50K or $100 * 5K or $1K * 500 or $10K * 50.

Ayn Rand

I liked Ayn Rand when I first read her in 1999 but something about her writing kept disturbing me for a long time.  Their was something inhuman about the characters.  

I believe Ayn Rand characters are automata, finite state machines. They don't wonder, or get surprised,  or grow or evolve. Every decision they need to take in their life is decidable without an iota of doubt. They are able to model every situation, are dead sure about their model and can find their optimal response.

This, I believe is not quite true for humans.

Friday, October 01, 2010

The Idiot Religion

  • All follower of this religion are idiots.
  • They are open, acceptable and proud of the fact that they are idiots
  • Every one who doesn't follows the idiot religion is intelligent and hence all idiots are expected to be very respectful to everyone who is not an idiot.
  • Idiots don't have any God of their own and they don't care about who started the world or what will happen after they die.
  • Idiots value human life and everything created, invented, believed by humans including all possible Gods, languages, roads, buildings, property, schools, etc.  
  • Idiots forgive. As idiots they are expected to make mistakes.
  • Idiots always question their own beliefs. They are idiots and hence could be wrong all the time.
  • Idiots understand that world is neither fair not perfect because it is run by idiots. Hence for their own goodwill and for the goodwill of the world, it is important for them to always try to improve their understanding of the world and use it to create a better world. 
  • Idiots use consensus or probabilistic voting to take collective decisions. As idiots their decisions are anyway idiotic which is by definition acceptable behavior. They can always revise their decisions if they don't work as expected.   

Tuesday, September 28, 2010

Writing High Performance Software

After working for five years on http proxy, caching, high speed file logging, distributed quota, I believe the following summarizes the results of my experience.

1) Make sure you use all the CPU
2) Reduce your CPU usage

As innocent as they look, they are by no means simple to achieve.  Locks, system calls, network settings, kernel, number of threads, contention, context switches, memory allocation, etc will make it difficult to saturate the CPU.  Reducing your CPU usage is comparatively easy, just use the profiler. This itself is a bit tricky because some profilers will use global locks when collecting data points and we get a perfect example of Heisenberg Uncertainty Principle in action. 

I think of software in three dimensions. Speed, Simplicity and Power. 
Speed       - How fast it runs 
Simplicity - How simple is it to use / maintain 
Power      - The range of problems that can be solved using it 

Think iphone. Think SQL. Memcache has speed and simplicity, but not powerful enough. 

Writing high performance software is fun, but don't forget the simplicity and power aspects of it. If it is not simple and not powerful, most likely no one will care about how fast it runs. If you make it simple and speedy, your target customer set becomes small. Not everyone is solving the exact same problem. Make it speedy and powerful and customers will have tough time using it. They will probably claim it is not powerful, because that power is hidden, not simple enough to use. Make it simple and powerful and not speedy,  customers will compare it with some other product which has high TPS and won't buy. Not that they need the speed, but only to future proof their investment. Every customer feels they will grow and need more and more. 

Overdoing speed, simplicity or power will have some impact on the rest two. Make sure to choose the right combination. 

Sunday, September 26, 2010

Apples and Oranges

Rs 12 is more than Rs 10.
20% growth is better than 18%.
140bhp is more than 120bhp.

It is easy to compare apples to apples. Any one who went to school can understand it. Doing something better than something you have already done is of course  easy to figure out. Study harder and get more marks. Put in more hours and try to get another feature in the release.  Hire more people to get the work done faster. This is natural usage of high school math.

Science or Arts, Medical or Non-Medical, MBA or MS, Job or Business, India or US, stocks or cash. Most questions of life which are worth their salt will force you to compare apples to oranges. Some people tend to be believe they can compare anything using their monitory value.  Well ask them to choose between accelerator, brake and steering.

1  +  1 =  2

1 electron   + 1 proton    = 1 neutron
1 cannibal  + 1 cannibal = 1 cannibal

1 manager  + 2 developers = some work done
2 managers + 1 developer  = don't know
0 manager + 1000's of developers = linux kernel

Math abstracts. It makes us blind to details.  It is good to be blind to details and then it is also bad to be blind to details.  May be you are not dealing with all apples. May be you have few oranges and bananas.
Prerequisite to comparing apples to oranges is realizing you are dealing with not just apples.

Tuesday, September 21, 2010

If Money Expired & people had choice

Money doesn't expires. Its value may decrease over time because of inflation, but it will still work. It may grow if you keep it in bank. But what if money expired...

1) Don't save. Its value will become zero eventually.
2) The only way to survive is by working, by being of value to others.
3) Don't cheat people to extract more money from them. Unless you can use it immediately, having more money doesn't makes you any richer as it will expire.
4) No point in robbing a bank...can't use all the money before it expires

We have two economies working in parallel. The economy of people working, creating value and making life easier on the planet. The second economy is the economy of speculation.  This is what I think causes economic depressions.  I think money is a great invention, but it has its own limitations. Money was intended as a tool to make people help each other now, with belief that they will be helped in future. It is a sane way to make the world exist. 

I believe that money should only do two things:
1) Allow you to use it and expire if you don't use it
2) Allow you to invest and be always at the risk of loosing it. (Loan is not investment)

The third thing is choice. People should always have a choice and more importantly the frequency of choice across all things should be in the same order.  How often can you re-negotiate your salary or your home loan? How often can you change price for your stocks?  In business model terms, it is called install base profit. This happens because people don't have a choice after they make a choice. What if you could buy a car and give it back the next day paying the usage charges? What happens if you could simultaneously work for two/three companies and decide to work each day which company you will work for based on how much money they are giving that day?  The frequency of choice creates great efficiency in the system. What if you could change your vote any day?  Choice makes the demand/supply model work. That is why 5Kg sugar costs less per KG than 1Kg of sugar because what you are trading is your choice. People should have choice and they should be able to exercise it with similar frequency across everything they buy. It is stupid to have stock markets change at millisecond basis, but your home loan fixed for 20 years and your vote for 5 years.

I don't know how to conclude this now.  Capitalism and socialism are not the only options. I think we can make world a better place. We need to push money down at the place it really belongs and bring people up - the place they really belong.

Wednesday, September 01, 2010

Using if

If is very powerful construct of programming languages. Most bug fixes involve adding another "if" or handling the else part properly. Many bug fixes would need adding "ifs" at multiple places. I think of "ifs" as design problem. If essentially means doing something different based on some criteria. If multiple functions needs to check for the same criteria and do something (same or different), then what we are really doing is "adding some functionality" which perhaps belongs to a separate object, to all the places we are adding "ifs". May be what we need is a new object/function to abstract that functionality or perhaps declaring a new interface and adding multiple implementations. Ifs allow us to live with design problem by having special cases, whereas the whole point of design is not to have special cases, just simplicity.


Hindi forces us to think about everything in terms of male and female. TV चल रहा है या TV चल रही है. Kannada and English don't have sounds.  ख, त्त , थ. Punjabi doesn't have very strong notions of half letters. As we keep adding new words to the languages, it would be nice to add new sounds/letters also. Languages we use were invented long, long time ago. May be we should invented new languages which are keyboard friendly, capture enough sounds, have simple grammar,  is easier to learn even for adults, stops forcing us to think in terms of male/female, is computer understandable (avoid NLP) and perhaps easy to work with Text-2-Speech & Speech-2-Text converters.

Tuesday, August 31, 2010


Publishing a feed to all your friends is not viral, it is spam. If publishing a feed results is all your friends also publishing the feed, then that is viral. To make something viral is not about publishing your feed as many times as possible, to make something viral is about causing the receiver of the feed to want to republish it.

Monday, August 30, 2010


If everybody in the world has enough money to keep in bank such that they can easily survive on interest alone, who will do the work? This will not work for obvious reasons, but this is what everyone dreams to achieve.

May be money should have a half life.

Jammu Airport

Few things happened at Jammu Airport which defies all economics:

1) Taxi service is controlled by a union guy. I wanted a taxi for a day without specifying how much kilometer I will travel. The guy simply refused to give me a per km rate as his commission depends on total value of the travel charges. With per KM model he doesn't knows beforehand what is his commission and hence the refusal to act on this stupid per KM model.
2) The taxis are assigned in round robin fashion. As the number of taxis increase without any increase in tourist traffic (less demand and more supply) the taxi charges will be increased to compensate the decrease in per taxi profit.

Sunday, August 29, 2010

Demand & Supply

One of the fundamental premises of classical economics is the rule of demand and supply. In a free market when demand is more and supply is less, prices go high and when demand is less and supply is more, the prices go down.  This works most of the time but not all the time. Here is when it doesn't works.

  • Free markets are hard to achieve. Typically we have less number of producers and high number of consumers in any market. This gives unfair advantage to producers to artificially keep the prices high simply because their number is small enough to organize. Real Estate, Sabzi Mandi, Auto Stand, etc are some of the places where producers will typically unite and charge high prices.  With GroupOn and other demand aggregator sites, what we now see in consumers uniting to create artificially lower demand to impact the prices. This would not be required in a free market.
  • The second factor is how many times the buying decision is taken. We don't change phone numbers often, which means even if the new plan from Airtel is very good, it will not create enough demand. If I have bought a house at some price, any changes is price later are irrelevant for me. The same is the case with home loan, because of the switching charges and no guaranty by the bank on the floating home loan rate. Only when the buying happens over and over again, it is possible for the demand/supply rule to be effective. If it doesn't happens often enough, the equilibrium is lost. Same is the case with representative democracy where we end up voting only once in five years.  Demand/Supply will not work if consumers just have to make this decision only once or twice. The markets will only be fair if consumer needs to choose over and over and not when they are stuck with their choice for lifetime or a big duration of time.
  • The third factor is the time of delivery of the product or service. If the product is only scheduled to be delivered, the decision of payment has already been made and the quality of service/product doesn't comes into picture, only its expectation. When an enterprise buys some software from other company, it is paying for the product as well as the maintenance charges which will happen only in the future. When we sit in an auto, we will know if his meter is bad or the driver is slow or reckless only when have made the buying decision. Or when buying a house, the house will be delivered only in the future which means actual cost of house will be known only in the future.  What this really means is that it is impossible for us to take an informed decision about the purchase or at least is fairly complicated decision to make, which gives the producer unfair advantage it terms of setting prices.
What I want to say is that their exist enough markets which appears to be free but are not, because they don't give consumers enough time/chances to revise their decisions and this gives unfair advantage to the producers, which means fair market theory fails and we need government intervention or group buying or really establish fair prices in these markets.

Sunday, August 22, 2010


Every subject, philosophy, area of interest defines some set of principles which provide the basic framework for thinking about the subject. Be it physics or computer science or politics or economics, every subject will define something. It is impossible to talk about anything unless we define it. This act of definition does two things: it simplifies thinking about the subject and at the same time what is doesn't defines becomes insignificant, forgettable. Think of a clean sheet of paper and then think of a line drawn on it or a circle. Suddenly we have a left side and a right side or inside of circle and outside of the circle. The act of definition allows us to focus on somethings and make us blind to what is not defined.

Einstein talked about countable and uncountable things, I am taking this one step behind....only what is defined could be countable or uncountable, what is not defined is simply outside the scope, irrelevant, unknown, unthinkable.

As a programmer I need to define endless concepts to simplify my code. And often the concepts become weak when new features are added, which break the existing code contracts. I don't think it is possible to avoid inventing concepts, but I feel the less the better. If it was possible to write code without inventing these concepts, I would be happy, but they are necessary evil. They allow understanding the code, they make some things very easy to do, but the very act of defining them limits the kind of problems that can be solved using them. And eventually the code rewrite/refactoring is needed.

I find this very similar to what happens in life, except that the code is the "language" we talk (the sum total of human knowledge) and every one speaking that language is its "developer".  The whole world is writing a software called "language" and it is hard to change meanings when everyone in the world is working on the same piece of code. So the human race continues to be backward compatible, maintaining the legacy code, even though we might be badly needing a rewrite.  Things like nation states, religion, money, government, inheritance, etc. the foundations of our existence may already have reached their end of life, but we will continue to be trapped because we defined them sometime in our history. May be the problem of poverty, corruption, unemployment, wars,  nuclear race, global warming, religious intolerance,  alienation, etc cannot be solved in the realm of our "language".  They are end result or logically valid outcomes of the conceptual models of world we have defined over the years.

May be we need a redesign but that too will need to be defined...and then thousands of years later it will also becomes obsolete.


Everybody wants people in their lives to be understanding. The point at which we believe we understood is exactly the point at which we stop understanding. This is fairly obvious. What is the point of trying to understand when you have understood. But what if you have not understood but you think you have? When we are in conversation with the belief that we may not have understood, that is when we really are in a position to understand and are being understanding.

Saturday, August 14, 2010

Thoughts on OS

OS design has not changed much from what we read in the text books. This says a lot about progress in Operating Systems. Yes the OS has become much more complex, much more efficient and much more faster, but we have not changed it fundamentally for a long time now. The computing industry as a whole has had a fantastic run in the last two decades but somehow OS was missed.

Here is my vision for the next generation of Operating Systems.

  1. OS is free and can be open source.
  2. Applications can only be installed via Application Store (iPhone/iPad Model). Someone verifiable owns every application that runs on the OS.
  3. Application updates are owned and installed via Application Store. No need to write your own update installer and delay system startup.
  4. Non Application Store owned Applications run in Virtualized Environment. To make sure you can run your hello world.
  5. Applications are all free to install, with may be one month trial period and zero commitment. No need to ask for email address and how you found us to get a license key. OS ensure that your application is not used without user agreement to pay for the services.
  6. Applications are charged by usage. OS defines usage.  Applications define charges. The usage could be how much time the app was running or was being viewed or interacted with or amount of data saved or amount of memory used. 
  7. Applications can use user data, with users permission. Access is defined and controlled by OS. Don't store everything about user in your own format. Use what user has already defined. This could be font sizes or my picture or folder to save things or auto backup policy, etc
  8. Applications can add new system calls and interfaces. Other applications can use those "system calls and interfaces". These higher level "system calls" can be the basis for new Applications. This is the API model. First everyone was making websites and now everyone is exposing API's. What if the API was dynamically available in the OS itself and instead of people writing new websites using the API, used the same API to build native applications.
  9. The higher level system calls can be local as well as remote. Thus Applications would have the choice of implementing these system calls by sending over code to the OS or ask OS to send over the API arguments to the remote service.  
  10. Every one in the API stack is paid by usage. If someone writes a good cypto algorithm and tons of applications use it, he is paid, even though he never created an application in the current sense of software development. My dear dear open source developers would finally avoid putting GNU license in the code and can easily make some money. 
I guess the place I am coming from is that instead of making browser the OS, why not let OS be the browser. It is much better place to implement the functionality that browsers are being called upon to support.

The other problem worth fixing is the licensing. SaaS providers have done a good job but the problem is everyone needs to handle the scalability aspects of it. If OS could handle the subscriptions based pricing, SaaS companies can let the code run on the client machine itself. Downloaded software is the best scalable software architecture I have ever seen.

Yet another problem is the open source free software. I hate it. Well not exactly hate it but it is unfair. Developer should get credit for the software he writes and hence the whole concept of higher level system calls. Write whatever part of the software you are comfortable with and OS will ensure you get the money when someone decides to use it. The app store funda essentially ensures responsibility for your software. It is like a license to drive a vehicle..doesn't prevents accidents but everyone knows whom to blame. More than OS, what I am proposing is a business model for open software development. Don't worry about marketing, don't worry how you will get the money, don't worry how to patch and upgrade the software, don't even worry about scalability -- just write quality software. Reuse what you can from existing "high level system calls" without signing deals and just focus on getting things done for your customer. Amen.

Sunday, August 08, 2010

Home Loan Switching Charges & Floating Interest Rate

Why do they exist in the first place? They conflict with the basics of capitalistic society. The basic idea of capitalism is free trade. I want a product or service and I will pay for it. The fair price is decided by market forces. If someone else provides the same product or service at a cheaper price, I would like to buy from other player. Home Loan Switching charges create a barrier in making such a choice. If this was allowed we would see lot of Home Loan Switching and perhaps better interest rates. Basically make the market fair at least.

Floating Interest Rate is another faux. It is decided by the bank. It can vary from customer to customer. It looks nice to negotiate 8% at the start of home loan, but three months down the line bank is free to make it 11%.  If it were a function of loan amount or duration, I would understand it, but making it an arbitrary measure which is solely control by bank is as stupid as banking can be or as smart as banking can be, depending upon how you look at it.

Come to think of it, I don't like the concept of loan at all. Yes I know how good it is because it lets you buy house and stuff and it will take you long time to save enough money if you do it without loan, etc. The place I am coming from is not their should be no loans, but loans of different variety. Investment is a better word. This is how I believe this should work.

  1. Banks can invest in my home.
  2. They get a share of the house. To start with it could be 80%-90% depending upon the "investment amount" 
  3. If I sell the house before construction is complete or at any point in time decided by me, bank get money proportional to their share in the house.
  4. I can always buy back home shares from the bank by paying money to the bank any time I want and as much as I want.  The price for share depends on the current price of the property.
  5. Until the time I pay back the full amount, bank gets the percentage share of the rental income I get or I can get from the property.

This approach solves few problems.

  1. No interest.
  2. Banks take higher risks and get higher returns and so do I.
  3. Unless sold, the real value of the property is rental. That is all that I have to pay to the bank (as per their percentage)
  4. If at any point, I feel that the property is not working out for me, I can easily sell it off and bank will help me with this, so that both me and bank can have comfortable exits. If the property rates crash, banks suffer as much as me.
  5. Property rates will be reasonable. If the value of property is 10 lakhs, banks don't care it you buy it at 15 or 20 or 50 lakhs. The more the better, because they get more money. When banks end up owning 90% of the property, they will work with the builder to get better prices for the customer.
Hope government makes it a regulation or someone with enough money decided to do it this way. Their is lot to do to make this habitable.

Related - Where is money? and Frequency of choice and Reinventing money

Wednesday, July 21, 2010

Science & Observation

This is how science works:
1) do experiment  & observe the results
2) develop a hypothesis which explains the results
3) done...until someone observes something that cannot be explained

What if we cannot do the experiment? Like switching from democracy to something else? Or making drugs legal? etc. What if the duration of impact of the experiment spans lifetime of an individual and makes it impossible to observe. Any experience whose patterns "size" is bigger than the amount of time we spend in that experience would remain a mystery for us. While stuck in a traffic jam we can wonder what is causing it, but we cannot really know what happened because we will only be able to see anything when the jam is over.  Does a software rewrite makes sense for a startup? If the startup runs out of funds before completing the rewrite or never does a rewrite because of fear that it will run out of funds, the experiment remains incomplete.

The only way to understand such patterns is via communication.  I am using the word communication in the extreme sense. Not restricted to just people talking, but newspaper, history, journals, blogs, tweets, etc. Don't know how theory of relativity looks when we add the extra element of communication between observers into it.

Wednesday, July 14, 2010


Agriculture is a high risk business. It is probably also low returns business. And most of rural India does agriculture for living.

  1. Loan from Government (Private Banks don't give loans to small farmers)
  2. Weather predictions, untimely rains
  3. Lock in, can only grow one thing at one time
  4. Access to electricity, water, quality seeds,  fertilizers, etc
  5. No access to global demand/supply patterns. No collaboration.
  6. Intermediaries involved in final sale. 
  7. Transportation costs, storage costs.
So many things can go wrong in a single cultivation cycle and even if that doesn't happens other conditions  can cause losses. Every (few) years, government ends up waving off the loans to support farmers. Diesel prices are kept artificially low to help farmers. No income tax on income from agriculture. In Punjab government gives free electricity to farmers. It is magical at in spite of all these measures, farmers continue to live miserable lives. Agriculture is an important and big business and yet the farmers who takes all the risk and government pays all the loans from tax payers money and it is the intermediaries who make all the money.

I believe we can do this better. Agriculture Micro VC - AMVC

  1. Like any high risk business, agriculture should be driven by investment and not loan. AMVC invests in farmers every season. The funding depends upon final share of the output. If the final produce is less, AMVC bears the loss. If produce is good, both farmer and AMVC makes money. 
  2. To make it high return business, we need AMVC who could operate at a large scale to cut out the intermediaries. The difference between price to farmer and price to final consumer is anywhere between 3X to 6X. AMVC should represent its member farmers to operate as a BIG farmer who could have much more negotiating power than individual farmers. Moreover the time of harvesting could be decided subjected to deals/sales to cut out the storage requirements and unnecessary transportation. 
  3. AMVC should have access to what the local/global requirements are can control what is cultivated and in how much quantity. Every body cultivating the same thing, only brings prices down and losses for farmers. By helping farmers decide on what to cultivate based on what others are cultivating, farmers can cut down their losses because of high supply/low demand problems.
  4. Since it is AMVC whose money is at stake all the time, it becomes its responsibility to do everything necessary to make sure that farmers are successful, because that is the only way for AMVC to be successful.
I don't know the specifics of the agriculture industry, but I feel AMVC model can help in uplifting farmers and reducing the risk burden they carry all the time. 

Probabilistic Voting

Voting based on majority has one problem. Majority wins, always.

This is not a good thing as the whole idea of voting is representation. Majority based voting will always cut out the minority. Instead, consider probabilistic voting. Instead of making the decision based on majority, if the votes only decide the probability of decision, then the final outcome can be anything except that majority decision will be chosen with high probability. This ensures representation of all classes and over a reasonable number of decisions each class gets probabilistic representation.

Monday, June 21, 2010


Over the last few years we have seen use of IT in the voting. We now have e-voting machines. Some people also talk about online voting and then their are tons of debates about security of such mechanisms.

Lets assume for a while that security concerns will be addressed sometime in the future. That just leaves us with the same old democracy just happening online. I think the next level of democracy should not be limited to just "automation" of the voting process. Technology can play a vital role in defining what democracy of the future looks like. Think of why we have to choose our representatives and why only once in five years? It is a technical problem. You can't have a billion people come together and sit under one roof and decide about their future. The machinery was designed to solve this very problem. family, small villages and corporate boardrooms don't have representatives, they don't need as all stake holders can fit in one room.

In next four five years everyone in India will have a mobile phone (if they don't have it already). All reality shows are doing voting using SMS to choose their top stars and making money along the way. If people can vote for their favorite starts every week, why can't they choose their representatives every week. Why can't they suspend their vote for the representative for a week and choose to participate directly in the law making.

Today many people in India will be willing to cast their vote in favor of a candidate for may be Rs 500 - Rs 1000. Since a single winner is elected per constituency, depending upon number of candidates in election, all you need is may be 10%-20% votes to get elected. For a five year term, per day cost of vote is less than a rupee.

What If:
  • Their were no elections
  • You could vote using SMS, any time of the day, week, month, year
  • You could change your vote anytime
  • You could split your vote 
  • You could loan your vote to someone who you think can better decide how you use your vote
  • If their was no parliament, everything happens over Goto-Meeting and as many people who want to participate directly or through their representatives could participate. 
Basically the whole election process becomes flexible in terms of time (duration of being a representative) and in space (number of representatives). Think of it like a stock exchange for politics. A true representative of public's political sentiments.

What do we get:
  • People who sell their vote, get a better price throughout their lives
  • People are always in control, politicians are always on toes
  • Much better participation of people. Everyone can find time to send one SMS (from anywhere)
  • The whole disconnect of "people" and "government" goes away as people are government - all the time. 
  • No need for nominations. Anyone can make anybody else their representative and let them choose their representative or participate themselves. 
  • If you want to do good for the country, convince people first

Friday, June 11, 2010

Taking Input - Program/UI

I went to pay the electricity bill at BDA. The machine refused to read the bar code on the bill, so I choose the manual method. I had to fill about seven or eight fields. I couldn't find three of them on the bill and gave up. I am sure the bar code doesn't encodes all of inputs, but possibly some unique number which can find out all the eight fields that the machine wanted me to enter. If electricity department could print the number represented by bar code in decimal digits on the bill itself, I could have easily paid my bills and had to just enter one number.

Passport form is another example of the same problem. You need to write your address at least 4 times at various places. Simple website would go a long way.

Any website which wants to know your country will invariably show you a dropdown  with more than 200 entries. Auto complete would be so much nice to use.

Car is a great example of good user interface. Steering is large enough to control turn, only five gears, not two and not twenty, just right, clutch, brake and accelerator. Minimal and complete. It takes couple of weeks to get used to it, but after that it works well. The feedback is immediate and speed/fuel/rpm monitoring is right in front. The big horn to shout is right on the steering, along with indicators. Each of the controls are of a certain size and at a certain distance from the driver and I bet that is the metric of importance/frequency of use of the control.

I wish someone writes a UI framework which can use user feedback (not another form but by logging what user does with the UI) to make it easier for the user to use the UI.  It could hide the features which are not used, keep a cache of recently used features, increase/decrease size of the buttons (clickable, touchable area) to make it easy to click or may be allow user to create a shortcut. Microsoft Office does some of these things and I guess others can do it too and probably do a much better job of it. 

Sunday, May 23, 2010


From the college days......

 It was a very usual kind of Sunday and I was in a very usual kind of mood ..the one you have after rising up at 11 am on Sundays.  It is a very perfect blend of lethargy and the feeling "to do something".  Most of my "to do something" feelings land me  at Daryaganj or "Sanjay Van" or "Hauz Khas Woodland". This very day I went to Daryaganj. The bus was filled up to brim if something like that is defined for buses and with heat of 2 pm it was quite a relief when I  got down.

               I filled up my time with browsing and bargaining and by some demand made by the intestinal juices landed up at a sweet shop. I like sweets and I like gulab-jamun.  So I ordered one . "Bhai Sahib yeh eq plate gulab jamun milenge (? + . ) " .  I must make it clear here that the plate I  referred to was actually a "leaf plate". 

              This "leaf plate " concept is actually very practical and useful. It is made from leaves of the trees and not the tree itself while paper is made from trees. So in one lifetime a tree may produce millions of "leaf plates" but may be only a few thousand "paper-plates".  Second the shopkeeper does not have to worry about washing the dishes. Third one can take it and eat wherever whenever one wishes.  Now not all shopkeepers use leaf plates. Some use plastic bags.  First of all plastic is not nature friendly. It is not bio-degradable. Second if you try to eat a gulab-jamun from a plastic bag you will invariably apply "chashni" to various parts of your hand which is hard to clean and disgusting to lick in public. But if one uses "leaf plates" such problems don't arise. You can easily manage with your fingers and hence lick them at leisure. That is business as usual in India, they even show such stuff in tv adds.

          Anyway I just got my "leaf plate" with two gulab jamuns and started eating. The shopkeeper seemed to be a good citizen because he had put up a small dustbin just outside his shop.  The dustbin was completely filled and some of the "leaf plates" had fallen outside the dustbin. There was a beggar who looked like kind of mad and he was scrutinizing the dustbin for plates which had some of the contents left. Every now and then he will select a plate and lick it completely. He must be in his forties but his innocent happiness on tasting sugar was drooling on his face. He didn't begged anyone for something, largely ignored, he was busy in his pursuit of non empty plates. Just then a Bhai Sahab finished of his  stuff and his plate became the root of the heap over the  dustbin. This diverted the attention of the beggar and he left the one plate he was holding in his hand to get this new one. I had about half of gulab jamun left. Something just stopped me from eating it. I guess it had something to do with the concept of how few things either to be possessed or done may not have much significance in our own lives but they have lots of significance in other people's lives, who are insignificant for us.

            I don't care what it was but then this beautiful and most generous thought came to my mind, why don't I give this half gulab-jamun to him. It will take him at least 10 plates to make one half gulab-jamun.  The idea wasn't really bad and all I had to do was to throw my plate into the dustbin. He would have taken care from there on. But at the same time another thought came to my mind.  Why should I throw this into dustbin?  Don't I have any respect for this man? I can give it to him in his hand, that will be befitting. I could not decide which of the two choices was better.  If I throw it in the dustbin, I have no significance for the mad man. His relationship existed solely with the dustbin. He was eating what other have thrown into it, a waste, and hence he was not begging.  Its like some people borrow money from bank and some deposit into back, but people who borrow money are not grateful to people who deposit. They don't have any relationship with each other.  The other choice of giving it directly to the mad man would make him a "begger" which currently he was not. Point to be noted he was not begging.

Showing respect was disrespectful and showing disrespect was respectful. I ate all that was left, kept the plate with myself and walked away.

Wednesday, May 19, 2010

YooMoot - I like this startup


Read about this startup yesterday and it looks interesting. Sometime when reading a blog, you feel like leaving a comment and then you either need to sign up on the site or do it anonymously. Once this is done it is hard to know if someone commented on your comment or asked for more information. The only way to do it is to keep visiting the site often.

I think the best way to solve this problem is to come up with an API.
  • create topic (url of blog post)
  • post comment (url of blog post, optional inReplyTo)
  • get comments (url of blog post) - returns tree of comments
So as a user, all I do is register with a siteX which manages all my comments.
As a blog owner, I use the API of the site to authenticate users and storage API for storing and retrieving comments. Bundle in some default java script to show the functionality on a page.

Now it is fairly straight forward for siteX to show me all the comments I have written and all the replies I have got.  Given the open API, someone might as well write iphone/andriod app to do it all from the phone. Similarly when I go to siteY where I commented, I still see all my comments and replies.

I guess where I am comming from is Internet as file system, one account, user owns what he writes, irrespective of where it shows up. He can change/delete it any time. It is fairly easy to extend the concept to "virtual files" like my photographs, or presence information or location etc which may or maynot be stored with siteX, but siteX plays to role of a gatekeeper to my personal information and any other siteY that wants to use it, has to go through siteX to access it.

In short siteX is my home directory. I am not sure how far YooMoot will take this concept, but looks powerful, if they can solve the chicken and egg problem.

Monday, May 10, 2010

Streamlining Patents

Patent Fee Hike is the way US Patent Office is planning to reduce the number of patents filed. The article argues about how this will impact small companies.  I thought about the problem few months ago. Here is how I feel this can be done.

  • The goal of Patent should not be to stop others from using it, but to allow people to use it for a price. Making price very high ensures no one use it.
  • The total estimated value in dollars of the Patent should be provided at the time Patent is granted. This number essentially means how much money does the inventor thinks he can make by keeping this secret and having complete monopoly over the use of his invention.
  • Patent Office will take a percentage (say 10%) for granting this patent.
  • The total estimated value of a patent can be changed over the life time of the patent by giving correspoding percentage to Patent Office.
  • When someone wants to use the patent they pay a percentage of the total estimated value of the patent.
  • Once total payout for a patent exceeds the total estimated value, the patent becomes void.
Here are the benefits of this approach:
  • People will not file patents just like that because they need to worry about how much is that patents worth. Either the company should have money or some investor should believe that patent is worth it because money is at stake. Ideally the inventor should make some percentage of the money he claims he can make. 
  • It helps small companies. IBM files thousands of patents every year. They cannot claim all of their patents are worth billion dollars, because they don't have that many dollars. This forces IBM or other large enterprises to attach "real value" to their patents, which means some of them are going to be cheap and hence usable.
  • Instead of 20 years, the patent is void once its achieves its total estimated value. This is good both for the inventor as he gets his money and for the user of the invention, because he can either wait for inventor to make money or pay it himself.
May be I should file a patent on this, so that when some Patent Office implements it, I get some money ;)

More thoughts on the subject - Patents Necessary Evil

Sunday, March 28, 2010

Pay for Online News

Rupert Murdoch will be making people pay for online news in UK. I like it. From free to going behind a paywall is probably a little harsh. News Publishers can always control when Google indexes their stories and how much it indexes by putting things with and without authentication. Google is still good as it brings users to the websites. Instead of putting all content forever behind paywall they can have partial content indexed by google as soon as possible, but make it free (un authenticated) after some time. The "after some time" will depend on kind of news and kind of consumers. Sometime 10 minutes would be enough and sometimes it could be an hour or a day. Basically change the business model from one dependent on advertizements to one based on quality and timing.

Monday, March 22, 2010

Parliament Vs GotoMeeting

I read some where that it costs about Rs 25K per minute to run parliament. Apart from parliament we have so many states each having its own legislative assembly with comparable number of members. This is big sum of money. I am assuming this includes cost of getting the MP's to delhi, their stay and food and travel, etc.

May be we should give GoToMeeting a try. Cost is negligible. Security of communication is not an issue as we anyways show this live on TV.  Disruptions would be impossible as speaker can mute every one. Speaker can easily ensure time limit on what each person speaks, cut his time or give him more time as he feels. Speaker will be body can throw shoes at each other...but we can still have "poke" or "finger" or "hai-hai" or "zindabad-murdabad" or "throw a shoe" gestures to keep the spirit alive. To ensure attendence Speaker can also send them reminder or make  the server keep calling them to just annoy them for a while.

Sunday, March 21, 2010

Pink Autos?

At last an all women taxi service was launched in Chennai few months back. News Link.  Similar services were available in other parts of world much before.

I think it is great idea but needs a bit of indianization. Most women in Bangalore would be using Auto than Taxi for usual reasons of cost, speed and reasonable privacy. I think instead of Taxi,  Pink Auto  would make lots of sense for Bangalore and other metros.

This is how a typical Auto trip works out:
1) Walk upto auto stand or keep waiting for Auto whereever you are
2) Some of them will run away the moment you say Indira Nagar or Marathalli.
3) Some of them will say 20 rupees extra or will say 100 rupess
4) Finally you will find someone who doesn't says any of those things and you get in it.
5) After two kilometers you will see that his meter is running at 1.5 or 2X the speed.
6) At this point you have probably spent 30 minutes, so depending upon your energy level you might just stop and repeat the process or continue thinking at least I am going home/office.
7) This doesn't ends here. Finally when you take out a 100 rupee note to pay for 85 rupees, the auto driver will tell you he doesn't have change.

I think this can be done a lot better.  If managed by a corporate similar to how Meru manages taxis, this is a much bigger market (cost of auto is 0.5 times of taxi and number of women using autos is probably 10X or more that of women using taxi ) and their is no competetion. Apart from peace of mind for women travelers it opens up another opportunity for being self sufficient  for many uneducated or less educated women who are currently restricted to work as laborers or house maids.

Since most women would be using Autos for cummuting to work and home, it is a simple logistics problem. Have something like a membership card for 10% discount and keep track of who travels from which place to which place at what time and you can easily know all you need to solve this problem in the best possible ways.

- monthly plans, pick any pink auto or you will be told which auto at which time
- allow shared auto at lower costs
- allow post payments of bills

It is a solvable problem and it is a problem worth solving and in the process you can make money.

Friday, March 19, 2010


Talk to anyone in Bangalore two "truths" come out very soon. Auto drivers drive really bad. Taxi drivers drive really bad. Talk to someone who drives Santro and the next truth would be Swift drivers are next after Auto and Taxi drivers.

If you say all drivers are bad it is not useful information because it applies to everyone and their is nothing you can do about it. If you say driver of car KA 08 XXXX is bad, it is probably correct but not useful again (How many car numbers can you remember?). So I feel that humans (at least in Bangalore) generalize it to a point where the information can become big enough to look useful. Avoid meddling with Auto, Taxi and Swift drivers. Cool...I imparted some wisdom ;) It doesn't means it is only means it is now worth discussing/talking about.

Learning & Context

We have a Guard at the entrance of our apartment building. He always stop the cars going outside the building to give way to the cars coming inside the building. This is a very good strategy because of two reasons:
1) Any car that comes inside will always find parking because only residents cars can come inside.
2) The road outside is not very broad. The car going outside can easily cause deadlock if it goes out at the point when some other car has come near the gate.

I am not sure if the Guard understands these two points. If by any change he has to do the same work at a mall or theater and if he continues to use what he has learned he will always cause deadlocks. They have limited parking - any car coming inside is not guaranteed to find parking space.

When learning something it is important to learn the context also because unless used in the same context, whatever you learn may not be applicable.

Monday, March 08, 2010

ReInventing Money

Money is an abstraction used by people to exchange goods or services from other people in exchange of goods or services they provide to other people. It replaced a systems called barter system where goods or services could only be exchanged for goods or services, to a system where they could be exchanged for money.

Money is pretty good thing. I want to see a doctor and I am a software professional. Chances are the doctor don't need me to fix his software, so how do I take his services. Money. We talk about alienation of people, of money minded nature of people, of hatred in the society, of people being less human, insensitive to other people...and the cause is money. Money disconnects people with people. That is its objective. But on the contrary money is the most human thing, which connects arbitrary, unknown people and makes them solve your problems. With industrialization and modern corporate culture is it companies that now solve most of our problems and not individuals. Well it is still some person finally but even persons are now virtualized by corporates. For example my relationship with Airtel is nothing more than a support call. My web search is just a page called google. Point is with every passing day we are trying really really hard to dismantle the structure of human interdependence with virtualization. We should stop complaining that people don't care about people any more because we are the ones creating/destroying it.

Here are some of the properties of money that are not shared by the model of human interdependence.
  • It devaluates. I have to pay more for the same thing in some time in future. It is really not needed but it does happens with money.
  • It is immortal. If I die I won't be able to write software for anyone. But if I have money, someone can still use it after I die. It gives its inheritors the same power as it gave to its creator whereas skills or services or goods (unless non perishable) will not work in the same way. Land for example will not give you money unless you cultivate it. Its mortality is still dependent on the dependent.
  • It gives you interest (via banks). My skills or goods when not in use give me nothing. They only help me get something when I give them to someone else.
  • Stock market is yet another kind of bank which gives you more interest with condition that you might loose your money.
If their is no inflation, we really don't need the banks to give us interest. Whatever we saved is probably all we need when we retire. Inversely do we have inflation because it helps banks? I don't know..may be. I don't have the statistics but I am sure banks made tons of money before every depression. What really is the instrument for making people help each other without both needing something from each other at the same time looks stupidly different, a beast of its own, when we look at things like banks, loans, interest, futures, derivatives, mutual funds, stock markets, etc.

Human interdependence is a zero sum game. With inflation, interest and stock markets money is not. Money was invented long long time ago. We have changed tons of things in last last few thousand years without touching money. I think if we think about this problem from scratch we can invent better models for people to help each other.