<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6400536</id><updated>2026-05-13T14:24:08.884+08:00</updated><category term="event"/><category term="chennai"/><category term="python"/><category term="programming"/><category term="startup"/><category term="agile"/><category term="photography"/><category term="bangalore"/><category term="django"/><category term="barcamp"/><category term="catalyst"/><category term="management"/><category term="chennaiopencoffee"/><category term="proto.in"/><category term="india"/><category term="opencoffee"/><category term="unconference"/><category term="learning theory"/><category term="recursion"/><category term="screencast"/><category term="barcampbangalore4"/><category term="bcb4"/><category term="chennaiocc"/><category term="silverstripe"/><category term="decorators"/><category term="games"/><category term="google"/><category term="leanstartup"/><category term="pipesCamp"/><category term="testing"/><category term="&quot;web services&quot;"/><category term="ahmedabad"/><category term="aws"/><category term="dcamp"/><category term="idea"/><category term="mumbai"/><category term="presentation"/><category term="pune"/><category term="review"/><category term="silvercatalyst"/><category term="skillscamp"/><category term="tieunc"/><category term="ubuntu"/><category term="usability"/><category term="wiki"/><category term="&quot;app engine&quot;"/><category term="&quot;cloud computing&quot;"/><category term="amazon"/><category term="bcm3"/><category term="chennaigeeks"/><category term="comics"/><category term="coverage"/><category term="coworking"/><category term="cricket"/><category term="crowdsourcing"/><category term="delhi"/><category term="demo"/><category term="djangodash"/><category term="erlang"/><category term="foss"/><category term="frisbee"/><category term="genesis"/><category term="gis"/><category term="hiring"/><category term="html5"/><category term="lightningtalk"/><category term="microsoft"/><category term="mobile"/><category term="momo"/><category term="mylapore"/><category term="occ"/><category term="opensource"/><category term="pil"/><category term="pip"/><category term="postgres"/><category term="ror"/><category term="sales"/><category term="sem"/><category term="sevensteps"/><category term="techmeets"/><category term="trivandrum"/><category term="ultimate"/><category term="venturecapital"/><category term="vit"/><title type='text'>/home/siddhi</title><subtitle type='html'>Software, management and photography</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>458</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6400536.post-3555686870534505939</id><published>2012-07-22T13:20:00.000+08:00</published><updated>2012-07-22T13:21:32.098+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Why did VCs/angels miss investing into Interview Street at an early stage?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Recently &lt;a href=&quot;http://articles.economictimes.indiatimes.com/2012-07-17/news/32714378_1_average-seed-funding-sameer-guglani-indian-startups&quot;&gt;Y Combinator selected TapToLearn and Plivio into their program&lt;/a&gt;. This is after they selected &lt;a href=&quot;http://www.interviewstreet.com/&quot;&gt;Interview Street&lt;/a&gt; in an earlier batch.&lt;br /&gt;
&lt;br /&gt;
I don&#39;t know TopToLearn and Plivio personally, but Vivek from Interview Street was pretty active in the Chennai startup scene for a long time before moving to Bangalore and finally into YC. &lt;br /&gt;
&lt;br /&gt;
He bootstrapped for many years while pivoting on several themes. Apart from &lt;a href=&quot;http://themorpheus.com/&quot;&gt;Morpheus&lt;/a&gt;, who bought into his idea, why didn&#39;t any other Indian investor buy into it? &lt;br /&gt;
&lt;br /&gt;
I&#39;m sure a lot of VCs and angel networks would be kicking themselves now. They had a chance to invest early into a global startup that is now going places, and they missed the chance. Instead they will invest millions into the next shaky e-commerce, travel or deal site. &lt;br /&gt;
&lt;br /&gt;
It&#39;s embarrassing when they have these companies growing right under their noses, and it takes YC to recognise them. &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/3555686870534505939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/3555686870534505939?isPopup=true' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/3555686870534505939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/3555686870534505939'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2012/07/why-did-vcsangels-miss-investing-into.html' title='Why did VCs/angels miss investing into Interview Street at an early stage?'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-6147430550853985863</id><published>2012-01-09T01:47:00.001+08:00</published><updated>2012-01-09T01:47:36.526+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="chennaiocc"/><category scheme="http://www.blogger.com/atom/ns#" term="chennaiopencoffee"/><category scheme="http://www.blogger.com/atom/ns#" term="leanstartup"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Minimum Viable Product &amp; the Tour My App roadmap</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Recently there has been a lot of noise made about minimum viable products (MVP). MVP was the topic at this month&#39;s Chennai Open Coffee Club. Unfortunately I couldn&#39;t make it at the last minute, so there are my thoughts on MVP and our approach to building Tour My App.&lt;br /&gt;
&lt;br /&gt;
We recently launched a new product called &lt;a href=&quot;http://tourmyapp.com/&quot;&gt;Tour My App&lt;/a&gt;. This is a product through which you can create &quot;tours&quot; to guide users step by step through the actions required to complete tasks in your web application. In this post I&#39;ll explain how we are applying the MVP concept in Tour My App. &lt;br /&gt;
&lt;br /&gt;
First some history.&lt;br /&gt;
&lt;br /&gt;
We&#39;ve always wanted a tour functionality in our other product - &lt;a href=&quot;http://toolsforagile.com/&quot;&gt;Tools For Agile&lt;/a&gt;. We searched for various solutions, but didn&#39;t find anything that fit our needs. In the meantime, &lt;a href=&quot;http://www.thestartupcentre.com/&quot;&gt;The Startup Center&lt;/a&gt; had an event called In 50 Hours. The premise of the event is simple - build a product from scratch in 50 hours. &lt;a href=&quot;http://kausikram.in/&quot;&gt;Kausikram&lt;/a&gt; went ahead and built an initial prototype of Tour My App over the weekend. The idea was to later on incorporate that into our product. However, during the demo at In 50 Hours, many people expressed interest in having that functionality in their products as well. We then decided to split this functionality into a separate product. &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://tourmyapp.com/&quot;&gt;Tour My App&lt;/a&gt; was born.&lt;br /&gt;
&lt;br /&gt;
Having decided to build it out into a separate product, we now needed to figure out our release plan. Here is where the MVP concept enters the picture. MVP is a principle to build just enough of the product to validate your assumptions. They may be assumptions on user adoption, pricing model, sales model, technology... anything relating to the product. We have some idea about all these factors when we start, but they are all assumptions. How do we validate it? What we do not want to do is to build a big product and then learn that many of our assumptions are wrong. So, our goal was to build the product piece by piece in order to answer the most important questions up front. &lt;br /&gt;
&lt;br /&gt;
Out of all the questions, the top questions right now were&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Is Tour My App solving a real problem?&lt;/li&gt;
&lt;li&gt;Will people pay to have this problem solved? &lt;/li&gt;
&lt;/ol&gt;
The idea for Tour My App comes directly from a problem we faced ourselves. We badly wanted this functionality in Tools For Agile. Our analytics showed that many users signed up for Tools For Agile but would leave before they performed a single action. If we could get users started easily, then we could make our users much more productive - and increase the chance they would become heavy users.We were ready to spend money to get this solved, but we couldn&#39;t find any other product that we could use. We were desperate to get a solution. That is why after a few months of looking, Kausik decided to just write it himself.&lt;br /&gt;
&lt;br /&gt;
But this is just one data point. Were there other companies like this? And would they pay to have it solved?&lt;br /&gt;
&lt;br /&gt;
These were the questions we wanted to answer.&lt;br /&gt;
&lt;br /&gt;
So we did something unconventional - we charged for the beta.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Generally beta testers get the product free. So why did we charge for it? In usual terminology, beta testers are &lt;i&gt;testers&lt;/i&gt;. This means that they are given a buggy product and are expected to report bugs. In exchange for this service, they get the product free. In our case, the product is not buggy. We even have a &lt;a href=&quot;http://demo.tourmyapp.com/&quot;&gt;demo page showing it in action&lt;/a&gt;. We want people, not to test the product, but to solve their problems.&lt;br /&gt;
&lt;br /&gt;
The initial beta pool is a set of companies who really have a serious problem, are willing to pay to get the problem solved and the problem is serious enough that they want to explore solutions right now, rather than wait for the application to go live later.&lt;br /&gt;
&lt;br /&gt;
In other words, we want to filter out the people who signed up for beta expecting a free toy to play with, and focus on those who &lt;i&gt;need&lt;/i&gt; Tour My App.&lt;br /&gt;
&lt;br /&gt;
So what does all this have to do with MVP? And if the product is production quality, then why are we in beta?&amp;nbsp; Simple, the &lt;i&gt;quality &lt;/i&gt;is at production level, but the product isn&#39;t finished.&lt;br /&gt;
&lt;br /&gt;
You see we only built the bare minimum functionality to run a tour. There is still no UI, no sign up page, no login page. In order to save a tour, we have to go into the database and create user accounts and store the data manually.&lt;br /&gt;
&lt;br /&gt;
Why did we do this? Because building those features now doesn&#39;t help us answer the questions we want answered at this point. The MVP is the &lt;i&gt;minimum&lt;/i&gt; you need to build to get answers to your questions. So we cut out these features for now. We&#39;ll build it later.&lt;br /&gt;
&lt;br /&gt;
We are sitting down with the beta companies, and together figuring out what different kinds of tours they need. Based on that we will add the data to run the tour into the database and the tour can then be deployed live into the app.&lt;br /&gt;
&lt;br /&gt;
The discussions will also highlight whether we need to add more functionality into Tour My App or not. We have thousands of potential features in our minds. We are not going to implement any of them until we come across a beta customer that needs it. Then we will build it. So we are not building features based on assumptions, or coolness, but only when see a need in front of our face.&lt;br /&gt;
&lt;br /&gt;
In this phase we want to answer the question: Can we build the kinds of tours that customers need?&lt;br /&gt;
&lt;br /&gt;
Once we figure out the answer to that question, and are satisfied that we are doing a good job of solving beta customer problems, &lt;i&gt;only then &lt;/i&gt;will we build out the frontend, the website, the signup page, login page and all that. All that is simple - there is no unknown risk there.&lt;br /&gt;
&lt;br /&gt;
Then we will open to the public with the live application.&lt;br /&gt;
&lt;br /&gt;
PS: Do you think you are losing customers (and therefore, lots of revenue) because some proportion of users cannot figure out the steps required to complete tasks in your web application? Is the problem so bad that you want a solution right now and are willing to pay to have it solved? &lt;a href=&quot;http://tourmyapp.com/&quot;&gt;Then give us your email and we&#39;ll bring you into the beta program.&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/6147430550853985863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/6147430550853985863?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6147430550853985863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6147430550853985863'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2012/01/minimum-viable-product-tour-my-app.html' title='Minimum Viable Product &amp; the Tour My App roadmap'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-6006776041948641310</id><published>2011-09-02T13:11:00.002+08:00</published><updated>2011-09-02T13:16:48.177+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pip"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>pip re-installing wrong version of a package</title><content type='html'>I recently ran into a pip gotcha that left me scratching my head for hours. &lt;br /&gt;&lt;br /&gt;When you install a package for the first time using pip, it will download the package into a build directory, unzip it there and install from there. Even if you uninstall it, the copy in the build directory remains intact. The next time you reinstall, pip checks if there is already a version in the build. If its there, then it directly installs that without downloading it again.&lt;br /&gt;&lt;br /&gt;This is usually fine, unless you uninstalled in order to install a different version. In that case you might be mystified as to why the same old version is installed again.&lt;pre class=&quot;source&quot;&gt;pip install pycrypto==2.3&lt;br /&gt;pip uninstall pycrypto&lt;br /&gt;pip install pycrypto==2.0.1 # still installs pycrypto 2.3!!&lt;/pre&gt;The solution to this is to simply delete the package copy from the build directory.&lt;br /&gt;&lt;br /&gt;If you are using virtualenv, then the build directory will be a top-level folder inside the virtualenv.</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/6006776041948641310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/6006776041948641310?isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6006776041948641310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6006776041948641310'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2011/09/pip-re-installing-wrong-version-of.html' title='pip re-installing wrong version of a package'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-5022750802060079261</id><published>2011-09-01T01:03:00.002+08:00</published><updated>2011-09-01T01:26:59.240+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pil"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Installing Python Imaging Library on Ubuntu</title><content type='html'>&lt;a href=&quot;http://siddhi.blogspot.com/2011/08/setting-up-postgres-on-ubuntu-1004.html&quot;&gt;Continuing on setting up the VPS&lt;/a&gt;, its now time to install the Python Imaging Library. This is another major pain in the neck.&lt;br /&gt;&lt;br /&gt;On Windows, PIL comes nicely bundled with everything. On Linux, it gets compiled, and the stupid part is that different bits of support get compiled in depending on what you have installed. PIL will silently skip components and say that the compile was successful. It&#39;s only when you run the application do you find out that some parts of PIL are not installed. Big, big, pain. If you are doing automated provisioning of machines, &lt;span style=&quot;font-style:italic;&quot;&gt;then you have to be careful that you have the right packages in place before you &lt;a href=&quot;http://www.pip-installer.org/&quot;&gt;pip install&lt;/a&gt; PIL&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The two components that I am interested are PNG support and Truetype font support, because thats what we use for our app.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;PNG Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you want PNG support, you need to have the zlib library installed. &lt;pre class=&quot;source&quot;&gt;sudo apt-get install zlib1g&lt;br /&gt;sudo apt-get install zlib1g-dev&lt;/pre&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;JPEG Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;JPEG requires libjpeg62&lt;pre class=&quot;source&quot;&gt;sudo apt-get install libjpeg62&lt;br /&gt;sudo apt-get install libjpeg62-dev&lt;/pre&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;TrueType Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You&#39;ll need the libfreetype6 package installed&lt;pre class=&quot;source&quot;&gt;sudo apt-get install libfreetype6&lt;br /&gt;sudo apt-get install libfreetype6-dev&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/5022750802060079261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/5022750802060079261?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/5022750802060079261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/5022750802060079261'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2011/09/installing-python-imaging-library-on.html' title='Installing Python Imaging Library on Ubuntu'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-2175846167111527057</id><published>2011-08-31T23:29:00.003+08:00</published><updated>2011-09-01T00:32:24.687+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="postgres"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Setting up Postgres on Ubuntu 10.04</title><content type='html'>We&#39;ve just migrated our Django build server to a new box, and I&#39;m currently installing all the necessary dependencies. Even though I&#39;ve done this many times, I still keep forgetting the steps to do it properly, so this blog post will document the steps for future reference.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;PostgreSQL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Installing postgres is a major pain, because there are so many annoying small things to do to get it working properly.&lt;br /&gt;&lt;br /&gt;First, before you do anything you want to ensure that &lt;a href=&quot;http://blog.lnx.cx/2009/08/13/fixing-my-missing-locales/&quot;&gt;you set up your locale&lt;/a&gt; to UTF-8.&lt;pre class=&quot;source&quot;&gt;locale-gen en_US.UTF-8&lt;br /&gt;update-locale LANG=en_US.UTF-8&lt;/pre&gt;If you forget to do this and its not setup by default, then postgres will use ASCII which is probably not what you want. If you sill forget this (yes, I forgot), and you haven&#39;t put in any data yet, then you can &lt;a href=&quot;http://jacobian.org/writing/pg-encoding-ubuntu/&quot;&gt;drop and recreate your postgres cluster&lt;/a&gt;.&lt;pre class=&quot;source&quot;&gt;pg_dropcluster --stop 8.4 main&lt;br /&gt;pg_createcluster --start -e UTF-8 8.4 main&lt;/pre&gt;Okay, with that out of the way..&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Installing Postgres&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The latest version of Postgres on Ubuntu 10.04 is Postgres 8.4&lt;pre class=&quot;source&quot;&gt;sudo apt-get install postgresql-8.4&lt;/pre&gt;You&#39;ll also need the dev package to compile psycopg2 later&lt;pre class=&quot;source&quot;&gt;sudo apt-get install libpq-dev&lt;/pre&gt;And don&#39;t forget the python dev packages to compile psycopg2&lt;pre class=&quot;source&quot;&gt;sudo apt-get install python-dev&lt;/pre&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Setting up Postgres&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;By default postgres is configured to use your system users for authentication. If you want to use a specific user/password combination, you&#39;ll need to change this.&lt;br /&gt;&lt;br /&gt;Open up /etc/postgresql/8.4/main/ph_hba.conf and change&lt;pre class=&quot;source&quot;&gt;local all all ident&lt;/pre&gt;to&lt;pre class=&quot;source&quot;&gt;local all all md5&lt;/pre&gt;Then restart postgres.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Create a postgres user and database&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These are the two commands for creating a user and database. If you intend to run the Django unit tests, then dont forget to give CREATEDB permission for the user.&lt;pre class=&quot;source&quot;&gt;CREATE USER username WITH PASSWORD &#39;password&#39; CREATEDB;&lt;br /&gt;CREATE DATABASE db_name OWNER username ENCODING &#39;UTF-8&#39;;&lt;/pre&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Compiling psycopg2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You should be able to &lt;a href=&quot;http://www.pip-installer.org/&quot;&gt;pip install&lt;/a&gt; psycopg2. Note that it needs to be compiled, so you should have build-essential package installed beforehand.&lt;pre class=&quot;source&quot;&gt;sudo apt-get install build-essential&lt;br /&gt;pip install psycopg2&lt;/pre&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;There is a gotcha here:&lt;/span&gt; &lt;a href=&quot;https://code.djangoproject.com/ticket/16250&quot;&gt;psycopg2 version 2.4.2 is NOT compatible with Django 1.3&lt;/a&gt;. Either use the trunk version of Django or use psycopg2 version 2.4.1.&lt;pre class=&quot;source&quot;&gt;pip install psycopg2==2.4.1&lt;/pre&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Troubleshooting&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;make or gcc is not found&lt;/span&gt;: install the build-essential package&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;postgres gives the error &quot;ERROR:  new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)&quot;&lt;/span&gt;: You haven&#39;t set the locale properly before installing postgres. See the top of the post for setting the locale&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Django gives the error &quot;Got an error creating the test database: permission denied to create database&quot;&lt;/span&gt;: If you want to run unit tests, the user must have the CREATEDB permission&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;postgres gives the error FATAL:  Ident authentication failed for user &quot;username&quot;&lt;/span&gt;: You need to edit the pg_hba.conf file to turn off ident authentication and set it to md5 instead&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;psycopg2 gives the error &#39;PyType_GenericAlloc&#39; undeclared (first use in this function)&lt;/span&gt;: Install the python-dev package&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;psycopg2 gives the error pg_config: command not found:&lt;/span&gt; Install the libpg-dev package&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/2175846167111527057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/2175846167111527057?isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2175846167111527057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2175846167111527057'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2011/08/setting-up-postgres-on-ubuntu-1004.html' title='Setting up Postgres on Ubuntu 10.04'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-4985731762571533341</id><published>2011-08-01T12:40:00.004+08:00</published><updated>2011-08-01T17:11:27.318+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="djangodash"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>My Django Dash 2011 experience</title><content type='html'>&lt;strong&gt;About Django Dash&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://djangodash.com/&quot;&gt;Django Dash&lt;/a&gt; is an online, weekend Django hackathon. You get 48 hours to develop a Django app of some sort, from scratch. &lt;br /&gt;&lt;br /&gt;Apart from being a lot of fun, its a great way to squeeze in a bunch of learning over a short period of time. &lt;a href=&quot;http://kausikram.in&quot;&gt;Kausik&lt;/a&gt; and I set out to build a badge generation application.&lt;br /&gt;&lt;br /&gt;(View the site here - &lt;a href=&quot;http://www.printmybadge.com&quot;&gt;Make My Badge&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The idea&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A lot of people probably know about the badge generation python script. This is a script that takes a list of people, a badge template and generates badges for all the attendees. The badges can be printed out and laminated beforehand for attendees to pick up at the event registration.&lt;br /&gt;&lt;br /&gt;The badge design itself is based on a simple principle (surprisingly violated by a huge number of events!) - keep the name large and easy to read from across the hall. We wanted to avoid badges where the name of the event is prominent but the name of the person is tiny. I&#39;m also not a fan of handwritten badges. Not only do they look ugly, but the scribbling is rarely readable. &lt;br /&gt;&lt;br /&gt;We also wanted to auto-scale the font size based on the length of the name, and to split long names into two lines so that we could use larger font sizes. These badges have been used in a number of events in Chennai, and have always been popular, with some people even preserving them as souvenirs. (&lt;a href=&quot;http://www.flickr.com/photos/protoin/2709843725/&quot;&gt;See the badge in use&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;One of the problems with the script is that you need some technical knowledge to generate the badge. This made it complicated for a people to generate badges for an event. It also made it difficult to generate and print badges on the fly at the registration desk for on the spot registrants. &lt;br /&gt;&lt;br /&gt;We decided to build a web app in 48 hours to do everything that the badge generator did, but as a Django site.&lt;br /&gt;&lt;br /&gt;Something that we wanted to do (apart from developing the site of course) was to get up to date on the current cutting edge technology in the Python/Django space. Sure we use a lot of cutting edge tools for &lt;a href=&quot;http://toolsforagile.com&quot;&gt;ToolsForAgile.com&lt;/a&gt; but that application is now almost 3 years old. Although we do keep updating it, its a big application and updating platforms and infrastructure can take time. Plus we wanted to &lt;a href=&quot;http://www.energizedwork.com/weblog/2006/01/spike.html&quot;&gt;do a quick spike&lt;/a&gt; of some of the technologies so that we could take the learning back to our product. Django Dash was the perfect opportunity for that.&lt;br /&gt;&lt;br /&gt;Here are some of the things we learned&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Django deployment scenarios&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When we first developed our product, the only option for python and django deployments was to use &lt;a href=&quot;http://httpd.apache.org/&quot;&gt;Apache&lt;/a&gt; with &lt;a href=&quot;http://www.modpython.org/&quot;&gt;mod_python&lt;/a&gt;. Then the &lt;a href=&quot;http://wsgi.org/wsgi/&quot;&gt;WSGI&lt;/a&gt; standard was finalised and &lt;a href=&quot;http://code.google.com/p/modwsgi/&quot;&gt;mod_wsgi&lt;/a&gt; came along. mod_python is now officially end-of-line with no more support available for it.&lt;br /&gt;&lt;br /&gt;Today one popular deployment configuration is to use an &lt;a href=&quot;http://nginx.net/&quot;&gt;nginx&lt;/a&gt; frontend server to serve static files, with a reverse proxy to an Apache + mod_wsgi configuration to serve dynamic files. &lt;br /&gt;&lt;br /&gt;Apart from Apache, a lot of other backend servers are becoming popular, most notably &lt;a href=&quot;http://gunicorn.org/&quot;&gt;gunicorn&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Django hosting&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There are now a gazillion hosting providers for Django. When we started out with &lt;a href=&quot;http://toolsforagile.com&quot;&gt;ToolsForAgile.com&lt;/a&gt; the only option was to roll your own setup on a VPS or dedicated server. You still want to do that for complex deployment setups, but there are now any number of django specific hosts for the common scenarios - &lt;a href=&quot;http://ep.io&quot;&gt;ep.io&lt;/a&gt;, &lt;a href=&quot;http://gondor.io&quot;&gt;gondor.io&lt;/a&gt;, &lt;a href=&quot;http://stable.io&quot;&gt;Stable&lt;/a&gt;, &lt;a href=&quot;http://dotcloud.com&quot;&gt;Dotcloud&lt;/a&gt;, &lt;a href=&quot;http://apphosted.com&quot;&gt;AppHosted&lt;/a&gt;, &lt;a href=&quot;http://djangozoom.com&quot;&gt;DjangoZoom&lt;/a&gt;. Ken Cochrane has an excellent series of blog posts with &lt;a href=&quot;http://kencochrane.net/blog/2011/06/django-hosting-roundup-who-wins/&quot;&gt;a comparison of django hosting providers&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;All these services allow you to simply deploy, while they handle setting up the deployment stack, load balancing and auto scaling for you.&lt;br /&gt;&lt;br /&gt;And of course, for the simpler use cases, there is always good old &lt;a href=&quot;http://www.webfaction.com&quot;&gt;Webfaction&lt;/a&gt;. I&#39;ve hosted various sites with them for four years, with not a single problem so far.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ep.io&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;ep.io and gondor.io were sponsoring Django Dash, so apart from setting up a custom stack on a Linode VPS, participants also had the choice of deploying on one of these services. We decided to try out ep.io for our submission.&lt;br /&gt;&lt;br /&gt;Overall, I must say that I really liked ep.io. It was a bit complicated to get my head around first. It took a while to get file uploads, static files and celery set up. That was more to do with the fact that we were using ep.io for the first time. Once setup, deployment was a breeze. All we had to do was to upload the project using their command line client and ep.io would automatically provision the app with all the required services. They also have an interface where you can push your project directly via git or mercurial.&lt;br /&gt;&lt;br /&gt;I should note here that the ep.io client only works in linux as it requires ssh to execute remote commands. Since we were on windows, it took us a fair while to hack up the client and hook it up to do its work through Putty instead.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;pip&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is the first time we exclusively used &lt;a href=&quot;http://www.pip-installer.org&quot;&gt;pip&lt;/a&gt; along with a requirements.txt file to sync up the python dependencies of all the local dev environment as well as the remote server setup. It worked really well. pip rocks!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Celery&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://celeryproject.org/&quot;&gt;Celery&lt;/a&gt; is a distributed task queue. It&#39;s amazing how popular it has become in such a short span of time. For our submission, we decided to try out celery to generate the badge images asynchronously through the tasks queue. &lt;br /&gt;&lt;br /&gt;Celery can work on top of a number of transports. Popular configurations are to use it over an &lt;a href=&quot;http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol&quot;&gt;AMQP broker&lt;/a&gt; like &lt;a href=&quot;http://www.rabbitmq.com/&quot;&gt;RabbitMQ&lt;/a&gt; or over &lt;a href=&quot;http://redis.io/&quot;&gt;Redis&lt;/a&gt;. We used it over RabbitMQ (which in turn requires &lt;a href=&quot;http://www.erlang.org/&quot;&gt;Erlang&lt;/a&gt;), whereas ep.io supports celery over Redis. The nice thing is that we just had to tell ep.io that we wanted to use celery and it would set everything up, including launching the celery daemon, configuring it to use redis and what not.&lt;br /&gt;&lt;br /&gt;On our side, we used &lt;a href=&quot;http://pypi.python.org/pypi/django-celery&quot;&gt;django-celery&lt;/a&gt;, a Django integration of celery. With djcelery you can create a tasks.py file in your app with a bunch of task definitions which you can call asynchronously through a view. &lt;br /&gt;&lt;br /&gt;After some initial setup hiccups, it worked like a charm, allowing us to push out the badge image generation out to the workers. When badge generation was done, it would trigger another task to zip up all the images and allow the user to download a single zip with all the badges. Everything happening through Celery. It was pretty exciting to see the whole flow in action.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Django 1.3&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We used Django 1.3 for this submission. Our product is built on a version of django that is somewhere between 1.1 and 1.2.&lt;br /&gt;&lt;br /&gt;We got a chance to play with some of the new stuff in 1.3. We got a chance to try out class based generic views, the new logging setup, TemplateResponse, some improvements to the admin, and a bunch of other stuff.&lt;br /&gt;&lt;br /&gt;The admin interface itself is a huge section to explore. We briefly thought about doing the whole site through a custom admin interface, but we were running out of time so we shelved the idea for the time being.&lt;br /&gt;&lt;br /&gt;Django 1.3 also has a completely new way of dealing with static files. The old django-staticfiles app has been added as a contrib package and is now the official way to handle static files. The old way had a single static directory with all the static files in it. You now have to put your static files either under an app folder, or in a global static dir. You then call the collectstatic management command to pull in all the static files into a directory that the frontend server will serve. &lt;br /&gt;&lt;br /&gt;Similarly, there seems to have been a change in the way uploaded files are handled. Previously they used to go under the static folder. They now get a folder of their own.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What got done in 48 hours&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We eventually ran out of time on all the features that we wanted. Thats not surprising, with the amount of new stuff we were using for the first time. It took almost one and a half days to setup and get comfortable with ep.io, celery, django-celery and all the changes in Django 1.3, and getting them to work properly on the local dev environment and online on ep.io.&lt;br /&gt;&lt;br /&gt;However, since we built the whole app incrementally, we managed to get the important features in. If you go to &lt;a href=&quot;http://www.printmybadge.com&quot;&gt;Make My Badge&lt;/a&gt; you&#39;ll be able to login, generate and download a sample set of badges. You can create events, though you need to go to the admin interface to add people to the event.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What is left to do?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We ran out of time before we could integrate django-registration for new users to register. We&#39;ve created a sample user through the admin interface for now. We also wanted to be able to upload a list of event attendees through a CSV upload form, but couldn&#39;t put that in. As a workaround, you need to add people through the admin interface.&lt;br /&gt;&lt;br /&gt;Apart from those two main features, there were lots of UI design work that we wanted to do which we couldn&#39;t finish.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Where are we going from here?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Once the event judging is over, we have a bunch of enhancements to add. The CSV upload feature, for example, got done about 2 minutes past the deadline. We want to put that in. Integration with django-registration is also ready on the development environment. &lt;br /&gt;&lt;br /&gt;We want to eventually add integration with a payment system. Charge Rs.1 per badge generated or something like that. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Overall Impressions&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Django Dash was awesome fun. Although we couldn&#39;t complete everything we sure did learn a lot of new things that we can take back into other projects. And now that we know the tech, I&#39;m pretty certain we can have a similar app complete in 48hrs.&lt;br /&gt;&lt;br /&gt;I was just going through some of the teams, and here are some submissions that I found. Remember, all these were done by scratch in 48 hours! - &lt;a href=&quot;http://drawnby.jupo.org/&quot;&gt;Drawn by&lt;/a&gt;, &lt;a href=&quot;http://familyfeed.vorushin.ru/&quot;&gt;Family Feed&lt;/a&gt;, &lt;a href=&quot;http://proposalmatic.dwaiter.com/&quot;&gt;ProposalMatic&lt;/a&gt;, &lt;a href=&quot;http://future-fi.com/&quot;&gt;FutureFI&lt;/a&gt;, &lt;a href=&quot;http://www.goalrally.com/index&quot;&gt;Goal Rally&lt;/a&gt;, &lt;a href=&quot;http://djangolint.trilandev.com/&quot;&gt;Django Lint&lt;/a&gt;, &lt;a href=&quot;http://www.consolitweet.com/&quot;&gt;ConsoliTweet&lt;/a&gt;, &lt;a href=&quot;http://www.courtside.me/&quot;&gt;Courtside&lt;/a&gt;, &lt;a href=&quot;http://linky.ep.io/&quot;&gt;Linky&lt;/a&gt;, &lt;a href=&quot;http://gitawesome.com/&quot;&gt;Git Awesome&lt;/a&gt;, &lt;a href=&quot;http://stardust.andrewsmedina.com/&quot;&gt;Stardust&lt;/a&gt;, &lt;a href=&quot;http://setwithme.ep.io/&quot;&gt;Set With Me&lt;/a&gt;, &lt;a href=&quot;http://74.207.230.202/&quot;&gt;Libman&lt;/a&gt;, &lt;a href=&quot;http://showofffr.com/&quot;&gt;Show Offfr&lt;/a&gt;, &lt;a href=&quot;http://smartlinky.com/&quot;&gt;SmartLinky&lt;/a&gt;, &lt;a href=&quot;http://staste.unfoldthat.com/&quot;&gt;Staste&lt;/a&gt;, &lt;a href=&quot;http://djangodocs.com/#/1.3/search/&quot;&gt;Django Docs&lt;/a&gt;, &lt;a href=&quot;http://playcodewar.com/&quot;&gt;Code War&lt;/a&gt;, &lt;a href=&quot;https://github.com/superbobry/grepo&quot;&gt;Grepo&lt;/a&gt;, &lt;a href=&quot;http://www.codrspace.com/&quot;&gt;Codr Space&lt;/a&gt;, &lt;a href=&quot;http://myimg.at/&quot;&gt;My Img&lt;/a&gt;, &lt;a href=&quot;http://96.126.125.5/&quot;&gt;Gearoscope&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/4985731762571533341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/4985731762571533341?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/4985731762571533341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/4985731762571533341'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2011/08/my-django-dash-2011-experience.html' title='My Django Dash 2011 experience'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-2172842332682182304</id><published>2011-03-17T23:09:00.003+08:00</published><updated>2014-03-22T03:24:41.140+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="leanstartup"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Why your startup should not start with a Freemium biz model</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I&#39;m reading Ash Maurya&#39;s book &lt;a href=&quot;http://book.runningleanhq.com/&quot;&gt;Running Lean&lt;/a&gt; that I picked up from AppSumo&#39;s Lean Startup bundle [The bundle gives you $6000 worth of ebooks and web app subscriptions for only $99. Its a total bargain, but only 3 days to go before the offer expires, so get it soon - &lt;a href=&quot;http://www.appsumo.com/?r=d3fI&quot;&gt;use this link&lt;/a&gt; and I&#39;ll get a $10 credit :)].&lt;br /&gt;
&lt;br /&gt;
There is a section on the freemium pricing model and why startups &lt;strong&gt;should not&lt;/strong&gt; start with freemium. This part really resonated with me because we fell into many of these problems early on. The reasons against freemium are: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Low or no conversions&lt;/em&gt;: Startups often give away too much in the free plan, leaving users with no need to upgrade&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Long validation cycle&lt;/em&gt;: Conversion rates on upgrades are low, so its hard to validate the pricing model&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Focusing on the wrong metric&lt;/em&gt;: Causes a premature shift in focus from building the right product for paying customers to new user sign up&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Low signal to noise ratio&lt;/em&gt;: Free users may give feedback that paying users dont care about&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Free user&#39;s aren&#39;t free&lt;/em&gt;: It costs time and money to support free users&lt;/li&gt;
&lt;/ul&gt;
Do you think freemium works? What are your thoughts?&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;This post is a part of the&amp;nbsp;&lt;a href=&quot;http://siddhi.blogspot.com/2000/01/selected-archive.html&quot;&gt;selected archive&lt;/a&gt;.&lt;/i&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/2172842332682182304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/2172842332682182304?isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2172842332682182304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2172842332682182304'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2011/03/why-your-startup-should-not-start-with.html' title='Why your startup should not start with a Freemium biz model'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-6446750316550067193</id><published>2011-01-18T17:32:00.004+08:00</published><updated>2014-03-22T03:25:03.989+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="idea"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Why New Ideas Can Be Bad</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
This is a great post from Tim Kastelle: &lt;a href=&quot;http://timkastelle.org/blog/2010/10/avoiding-the-deadly-trap-in-idea-management&quot;&gt;Why New Ideas Can Be Bad&lt;/a&gt; which ties in with my blog post from last year: &lt;a href=&quot;http://siddhi.blogspot.com/2010/05/too-many-people-excited-by-ideating-not.html&quot;&gt;Too many people are ideating, not enough are executing&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Tim references a talk by Scott Belsky at the &lt;a href=&quot;http://the99percent.com/&quot;&gt;99% conference&lt;/a&gt;. Here is what Belsky says:&lt;br /&gt;
&lt;blockquote&gt;
When ideas are new, we have lots of excitement and energy. However, once we settle into trying to make the idea real, the levels of both excitement and energy go down – it starts to feel more like work. How do we respond to this?&lt;br /&gt;
&lt;br /&gt;
According to Belsky, the natural response is to look for the excitement of a new idea again – and succumbing to this temptation is deadly.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;a href=&quot;http://timkastelle.org/blog/2010/10/avoiding-the-deadly-trap-in-idea-management&quot;&gt;Read the whole thing.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;This post is a part of the&amp;nbsp;&lt;a href=&quot;http://siddhi.blogspot.com/2000/01/selected-archive.html&quot;&gt;selected archive&lt;/a&gt;.&lt;/i&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/6446750316550067193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/6446750316550067193?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6446750316550067193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6446750316550067193'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2011/01/why-new-ideas-can-be-bad.html' title='Why New Ideas Can Be Bad'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-371779565976229484</id><published>2010-12-21T17:24:00.004+08:00</published><updated>2014-03-22T03:21:12.700+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sales"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Sales Stories</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
This post is the first in a series of stories on selling.&lt;br /&gt;
&lt;br /&gt;
This stories in this post are from the book &lt;a href=&quot;http://www.amazon.com/Hope-Not-Strategy-Winning-Complex/dp/0071418717/&quot;&gt;Hope is not a strategy&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;On targeting the pain point&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;
Early in my sales career as an account manager, I was in the back of the room while one of my product specialists was presenting a system. We were extremely proud of the functionality and about halfway through the presentation, our product rep put up a slide and said, &quot;Now, if you were a hospital, you&#39;d really like this feature.&quot;&lt;br /&gt;
&lt;br /&gt;
What!? I was utterly stunned. I thought to myself, &quot;They&#39;re not a hospital-they&#39;re a bank! They&#39;re never going to be a hospital; they&#39;ll always be a bank!&quot;&lt;br /&gt;
&lt;br /&gt;
How preposterous, the idea of showing a hospital feature to a bank.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;But this is no less preposterous than showing somebody a solution to a problem they don&#39;t have&lt;/em&gt;-or a feature for which they have no need. You might as well show a hospital feature to a bank.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;strong&gt;On trust&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;
The evaluation process was grueling. Two vendors were pitted against each other and were required to do detailed benchmark implementations in the evaluation of their products. It was an exhausting, detailed process with perhaps twelve to twenty people on each vendor&#39;s side.&lt;br /&gt;
&lt;br /&gt;
In the end, we won by a couple of points, but we broadened that advantage into a business partnership. Their executives met our chairman. We had a corporate visit. We continued to talk about implementation and support and widened the gap. We actually reached a measure of business partnership before they signed the contract.&lt;br /&gt;
&lt;br /&gt;
At dinner the night before the contract signing for multiple financial systems, the client said, &quot;Oh by the way, do you have a fixed asset system?&quot;&lt;br /&gt;
&lt;br /&gt;
&quot;Certainly&quot;&lt;br /&gt;
&lt;br /&gt;
&quot;How much is it?&quot;&lt;br /&gt;
&lt;br /&gt;
&quot;Seventy-five thousand dollars.&quot;&lt;br /&gt;
&lt;br /&gt;
&quot;Add it to the proposal.&quot;&lt;br /&gt;
&lt;br /&gt;
I thought, &quot;They just bought a system sight unseen. How could they have required such detailed evaluation in the beginning and now they have bought a system they never even looked at?&quot;&lt;br /&gt;
&lt;br /&gt;
But they went further.&lt;br /&gt;
&lt;br /&gt;
They added the graphic user interface for all the systems, which they knew was in the prototype phase. There were no references for this three-hundred-thousand-dollar product at that time. The opportunity went from six hundred thousand dollars to almost a million dollars, and forty percent of it was on products they had never seen.&lt;br /&gt;
&lt;br /&gt;
How could they evaluate in the beginning in such detail and buy products sight-unseen now?&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;The answer is trust&lt;/em&gt;. They trusted our products based on the ones they had evaluated. If those worked, then these must. They trusted us as a company because they had met our top executives, they&#39;d been to our headquarters, and they knew we were a stable industry leader with a good track record of delivery. And they trusted us personally because we understood their business and we had become friends&lt;/blockquote&gt;
Got more stories that you would like to share? Add it in the comments below.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;This post is a part of the&amp;nbsp;&lt;a href=&quot;http://siddhi.blogspot.com/2000/01/selected-archive.html&quot;&gt;selected archive&lt;/a&gt;.&lt;/i&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/371779565976229484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/371779565976229484?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/371779565976229484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/371779565976229484'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/12/sales-stories.html' title='Sales Stories'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-6930619801914889293</id><published>2010-12-19T11:07:00.004+08:00</published><updated>2010-12-19T12:09:55.246+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="chennaigeeks"/><category scheme="http://www.blogger.com/atom/ns#" term="event"/><category scheme="http://www.blogger.com/atom/ns#" term="html5"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="techmeets"/><title type='text'>The Scavenger app from my Chennai Geeks presentation</title><content type='html'>This weekend I presented at the &lt;a href=&quot;http://groups.google.com/group/chennaigeeks&quot;&gt;Chennai Geeks meet&lt;/a&gt; on using HTML5 to build mobile applications. As a part of the talk, I showed a sample scavenger application that was built using HTML5. &lt;br /&gt;&lt;br /&gt;The application defined a list of scavenger locations, and used the &lt;a href=&quot;http://dev.w3.org/geo/api/spec-source.html&quot;&gt;Geolocation API&lt;/a&gt; to check you in when you were close to one of the defined locations. The app used &lt;a href=&quot;http://dev.w3.org/html5/webstorage/&quot;&gt;Local Storage&lt;/a&gt; to save the list of previously visited locations and the timestamp when you last checked in. Finally we used some &lt;a href=&quot;http://www.w3.org/TR/css3-mediaqueries/&quot;&gt;CSS3 Media Queries&lt;/a&gt; to show some additional information when the app was accessed through a desktop browser.&lt;br /&gt;&lt;br /&gt;To run the application, just copay and save the code below and open the html file in Firefox 3.6, Google Chrome, iPhone or Android browser.&lt;br /&gt;&lt;br /&gt;Here is the source code for the application:&lt;pre&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;title&amp;gt;Fivesquare&amp;lt;/title&amp;gt;&lt;br /&gt;  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;json2.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;header {font-size: 11px;}&lt;br /&gt;h1 {font-family: Verdana,Helvetica,sans-serif; font-size:25px;}&lt;br /&gt;.error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}&lt;br /&gt;.error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}&lt;br /&gt;.notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}&lt;br /&gt;.success {background:#E6EFC2;color:#264409;border-color:#C6D880;}&lt;br /&gt;.location {background: #eeeeee; border-radius: 15px; -moz-border-radius: 15px; -webkit-border-radius: 15px; margin: 5px 0; padding: 10px;}&lt;br /&gt;.visited {background:#ccff99; font-weight: bold;}&lt;br /&gt;.location-distance {display:block; color: #555555; font-weight:normal; font-size: 0.8em;}&lt;br /&gt;.location-checkin {display:block; font-weight:normal; font-size: 0.9em;}&lt;br /&gt;&lt;br /&gt;/* Dont show distance and timestamp on small screens */&lt;br /&gt;@media only screen and (max-width: 480px) {&lt;br /&gt;.location-distance {display:none;}&lt;br /&gt;.location-checkin {display:none;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;Number.prototype.toRad = function() {&lt;br /&gt;    return this * Math.PI / 180;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// List of locations. Format: [&quot;location name&quot;, lat, long]&lt;br /&gt;var LOCATIONS = [&lt;br /&gt;  [&amp;quot;Thoughtworks&amp;quot;, 13.01245, 80.201451],&lt;br /&gt;  [&amp;quot;Ashoka Pillar&amp;quot;, 13.035028, 80.212512],&lt;br /&gt;  [&amp;quot;Kathipara&amp;quot;, 13.007359, 80.20394]&lt;br /&gt;];&lt;br /&gt;&lt;br /&gt;// Haversine formula to calculate distance (in km) between two lat/long coordinates&lt;br /&gt;function distance(lat1, lon1, lat2, lon2) {&lt;br /&gt;    var R = 6371; // km&lt;br /&gt;    var dLat = (lat2-lat1).toRad();&lt;br /&gt;    var dLon = (lon2-lon1).toRad(); &lt;br /&gt;    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +&lt;br /&gt;        Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * &lt;br /&gt;        Math.sin(dLon/2) * Math.sin(dLon/2); &lt;br /&gt;    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); &lt;br /&gt;    var d = R * c;&lt;br /&gt;    return d;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function check_in(index) {&lt;br /&gt;    jQuery(&amp;quot;#status-bar&amp;quot;).html(&amp;quot;&amp;lt;div class=&amp;#39;success&amp;#39;&amp;gt;Checked in to &amp;quot; + LOCATIONS[index][0] + &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;);&lt;br /&gt;    var check_ins_str = localStorage[&amp;quot;check_ins&amp;quot;];&lt;br /&gt;    if (!check_ins_str) { check_ins_str = &amp;quot;{}&amp;quot;; }&lt;br /&gt;    var check_ins = JSON.parse(check_ins_str);&lt;br /&gt;    var location = LOCATIONS[index];&lt;br /&gt;    check_ins[location[0]] = new Date();&lt;br /&gt;    localStorage[&amp;quot;check_ins&amp;quot;] = JSON.stringify(check_ins);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function show_distance(index, d) {&lt;br /&gt;    var container = jQuery(&amp;quot;#locations-container&amp;quot;).find(&amp;quot;#location-&amp;quot;+index);&lt;br /&gt;    container.append(&amp;quot;&amp;lt;span class=&amp;#39;location-distance&amp;#39;&amp;gt;&amp;quot; + Math.floor(d*100)/100 + &amp;quot; km away&amp;lt;/span&amp;gt;&amp;quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function success(pos) {&lt;br /&gt;    var distance_list = [];&lt;br /&gt;    for (var i=0; i&amp;lt;LOCATIONS.length; i++) {&lt;br /&gt;        var d = distance(pos.coords.latitude, pos.coords.longitude, LOCATIONS[i][1], LOCATIONS[i][2]);&lt;br /&gt;        show_distance(i, d);&lt;br /&gt;        distance_list.push([i, d]);&lt;br /&gt;    }&lt;br /&gt;    distance_list.sort(function(a,b) { return a[1] &amp;gt; b[1]; });&lt;br /&gt;    if (distance_list[0][1] &amp;lt; 2) {&lt;br /&gt;        check_in(distance_list[0][0]);&lt;br /&gt;    } else {&lt;br /&gt;        jQuery(&amp;quot;#status-bar&amp;quot;).html(&amp;quot;&amp;lt;div class=&amp;#39;notice&amp;#39;&amp;gt;No checkins&amp;lt;/div&amp;gt;&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function error() {&lt;br /&gt;    jQuery(&amp;quot;#status-bar&amp;quot;).html(&amp;quot;&amp;lt;div class=&amp;#39;error&amp;#39;&amp;gt;Unable to get position&amp;lt;/div&amp;gt;&amp;quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function locate_user() {&lt;br /&gt;    navigator.geolocation.getCurrentPosition(success);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function render_previous_check_in(index, check_in_date) {&lt;br /&gt;    var container = jQuery(&amp;quot;#location-&amp;quot; + index);&lt;br /&gt;    container.addClass(&amp;quot;visited&amp;quot;);&lt;br /&gt;    container.append(&amp;quot;&amp;lt;span class=&amp;#39;location-checkin&amp;#39;&amp;gt;Last checked in on &amp;quot; + check_in_date + &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function show_checkins() {&lt;br /&gt;    var check_ins_str = localStorage[&amp;quot;check_ins&amp;quot;];&lt;br /&gt;    if (!check_ins_str) return;&lt;br /&gt;    var check_ins = JSON.parse(check_ins_str);&lt;br /&gt;    for (var i=0; i&amp;lt;LOCATIONS.length; i++) {&lt;br /&gt;        var previous_check_in = check_ins[LOCATIONS[i][0]];&lt;br /&gt;        if (previous_check_in) {&lt;br /&gt;            render_previous_check_in(i, previous_check_in);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function show_locations() {&lt;br /&gt;    var container = jQuery(&amp;quot;#locations-container&amp;quot;);&lt;br /&gt;    for (var i=0; i&amp;lt;LOCATIONS.length; i++) {&lt;br /&gt;        container.append(&amp;quot;&amp;lt;div class=&amp;#39;location&amp;#39; id=&amp;#39;location-&amp;quot; + i + &amp;quot;&amp;#39;&amp;gt;&amp;lt;span class=&amp;#39;location-name&amp;#39;&amp;gt;&amp;quot; + LOCATIONS[i][0] + &amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;jQuery().ready(function() {&lt;br /&gt;    show_locations();&lt;br /&gt;    show_checkins();&lt;br /&gt;    locate_user();&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;  &amp;lt;header&amp;gt;&lt;br /&gt;    A HTML5 mobile app demo by &amp;lt;a href=&amp;quot;http://siddhi.blogspot.com&amp;quot;&amp;gt;Siddhi&amp;lt;/a&amp;gt;&lt;br /&gt;    &amp;lt;h1&amp;gt;Fivesquare&amp;lt;/h1&amp;gt;&lt;br /&gt;  &amp;lt;/header&amp;gt;&lt;br /&gt;  &amp;lt;div id=&amp;quot;status-bar&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;notice&amp;quot;&amp;gt;Checking your location...&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div id=&amp;quot;locations-container&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/6930619801914889293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/6930619801914889293?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6930619801914889293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6930619801914889293'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/12/scavenger-app-from-my-chennai-geeks.html' title='The Scavenger app from my Chennai Geeks presentation'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-2579821942164844478</id><published>2010-11-29T11:40:00.001+08:00</published><updated>2010-11-29T11:40:08.647+08:00</updated><title type='text'>HTML5 Multimedia: My presentation at Doctype Html5</title><content type='html'>Here are the slides from my presentation at &lt;a href=&quot;http://www.doctypehtml5.in&quot;&gt;Doctype Html5&lt;/a&gt; (Chennai edition). The presentation is a very quick, very high level overview in using SVG, canvas and video with HTML5.&lt;div style=&quot;width:425px&quot; id=&quot;__ss_5932149&quot;&gt;&lt;strong style=&quot;display:block;margin:12px 0 4px&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/Siddhi/html5-multimedia&quot; title=&quot;HTML5 Multimedia&quot;&gt;HTML5 Multimedia&lt;/a&gt;&lt;/strong&gt;&lt;object id=&quot;__sse5932149&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=multimedia-101127094859-phpapp02&amp;stripped_title=html5-multimedia&amp;userName=Siddhi&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed name=&quot;__sse5932149&quot; src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=multimedia-101127094859-phpapp02&amp;stripped_title=html5-multimedia&amp;userName=Siddhi&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;padding:5px 0 12px&quot;&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/Siddhi&quot;&gt;Siddhi&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/2579821942164844478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/2579821942164844478?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2579821942164844478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2579821942164844478'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/11/html5-multimedia-my-presentation-at.html' title='HTML5 Multimedia: My presentation at Doctype Html5'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-3341177008887809748</id><published>2010-11-24T22:22:00.003+08:00</published><updated>2010-11-24T23:34:42.422+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="event"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Really disappointed with TiE Entrepreneur Awards</title><content type='html'>I attended &lt;a href=&quot;http://www.tieconchennai.org/&quot;&gt;TiECon Chennai&lt;/a&gt; today. This is the big annual event organized by &lt;a href=&quot;http://tiechennai.org/&quot;&gt;TiE Chennai&lt;/a&gt; for the entrepreneur community here. I&#39;ll put down my detailed experience notes elsewhere, in this post I want to talk about the &lt;a href=&quot;http://www.tieconchennai.org/entrepreneurawards.html&quot;&gt;TiE Chennai Entrepreneur of the Year awards&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;TiE gives these awards to entrepreneurs every year in a variety of categories - social entrepreneur, start up, family entrepreneur and so on.&lt;br /&gt;&lt;br /&gt;This time I had a chance to check out the award winners for the last three years, and to say I was completely disappointed is an understatement.&lt;br /&gt;&lt;br /&gt;The &lt;span style=&quot;font-style:italic;&quot;&gt;entrepreneur&lt;/span&gt; awards were all given to huge, well established companies. Most of these people had been running their companies for &lt;span style=&quot;font-style:italic;&quot;&gt;15 years or more&lt;/span&gt;. Some over 25 years. I can understand giving them an award when they were in the startup phase, but 20 years after they established their company? And we are talking companies that have &lt;span style=&quot;font-style:italic;&quot;&gt;hundreds of crores in revenue&lt;/span&gt;. Many of these are &lt;span style=&quot;font-style:italic;&quot;&gt;publicly listed companies&lt;/span&gt;. &lt;a href=&quot;http://www.tieconchennai.org/entrepreneurawards.html&quot;&gt;See the previous award winners here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;How the heck can you call these startups? Why is TiE giving Entrepreneur of the Year awards to them? Will we see Narayana Murthy and Mukesh Ambani being awarded next year?&lt;br /&gt;&lt;br /&gt;There is no way that entrepreneurs in the audience are going to relate to these companies. Far from being an inspiration, it is extremely deflating that a forward thinking organization like TiE chose to ignore actual startups and instead promote the big, well established names :(</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/3341177008887809748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/3341177008887809748?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/3341177008887809748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/3341177008887809748'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/11/i-attended-tiecon-chennai-today.html' title='Really disappointed with TiE Entrepreneur Awards'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-7634232282191983765</id><published>2010-10-04T12:55:00.003+08:00</published><updated>2010-10-04T13:36:45.931+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="chennaiocc"/><category scheme="http://www.blogger.com/atom/ns#" term="chennaiopencoffee"/><category scheme="http://www.blogger.com/atom/ns#" term="event"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>3 Oct OCC Meetup Roundup</title><content type='html'>We had the October 2010 meetup of the Chennai OCC. Tony Aug, VP IT of Sanmina had come down to attend the meet. Once of the big problems startups often have is understanding how large enterprises make decisions. This is really important in the context of B2B enterprise sales. So it was really good to have Tony come down and talk about the executive perspective when purchasing software.&lt;br /&gt;&lt;br /&gt;Some points from the meetup -&lt;ul&gt;&lt;li&gt;The #1 reason for purchase in a recessionary environment right now is to cut costs. If you can show substantial cost reductions, then that is a big win.&lt;/li&gt;&lt;li&gt;Many cloud/SaaS startups dont understand the security and privacy needs of enterprises. Eg: A company like Sanmina with operations in 20 countries need to run only on certified infrastructure that comply to EU security and privacy regulations, HIPAA, and a host of other regulations. Startups right now cannot guarantee all this&lt;/li&gt;&lt;li&gt;Pricing: $10/user a month sounds reasonable, but multiply it by 50,000 users and it becomes huge. So you will need to find a way to get it into the team on one pricing model and then switch to another pricing model (possibly a flat price) when rolling out to the whole organization&lt;/li&gt;&lt;li&gt;Dont forget about switching costs. Once an organization has spent tons of money on training and integration, it is unlikely that they will switch over, even to a superior product, unless there is a really easy path for them to do so&lt;/li&gt;&lt;li&gt;Subscription pricing is great because it allows organizations to get started without expensive capital expenditure. The old model was to buy expensive servers, install expensive software, training, integration and then you could look to get RoI. The new model is to subscribe and cancel if it doesn&#39;t work out&lt;/li&gt;&lt;li&gt;You can expect a small team to pay by credit card, but larger orders will need a purchase order and go via the purchasing department. Once that happens a lot of other stakeholders will look at it and question the need for the purchase. So you will have to answer to these other stakeholders too.&lt;/li&gt;&lt;li&gt;Lock-in is important in a subscription service. Most companies will want to be sure that they can get their data out at any time&lt;/li&gt;&lt;li&gt;Sanmina is a huge believer in open source - cuts costs and there is a community to help. For mission critical systems they pay for commercial support&lt;/li&gt;&lt;li&gt;Escrow: Larger companies will usually ask startups that the source code be put in escrow. In case the startup closes down, the company gets access to the source.&lt;/li&gt;&lt;li&gt;Using tools like Linkedin, it is really easy nowadays to find a path to get to a decision maker in any company&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/7634232282191983765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/7634232282191983765?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/7634232282191983765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/7634232282191983765'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/10/3-oct-occ-meetup-roundup.html' title='3 Oct OCC Meetup Roundup'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-4219674602033950913</id><published>2010-09-22T13:17:00.003+08:00</published><updated>2010-09-22T13:41:25.463+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="event"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><category scheme="http://www.blogger.com/atom/ns#" term="tieunc"/><title type='text'>The difference between a conference and an unconference</title><content type='html'>One of the things I really like about unconferences is that there is very little &quot;gyan&quot; and a lot of experience sharing. This came home to me when participating in a session on hiring.&lt;br /&gt;&lt;br /&gt;The question was: &quot;What strategies do you follow for hiring and building a team?&quot;&lt;br /&gt;&lt;br /&gt;This same topic was discussed in a panel in the NASSCOM Product Conclave last year, with some VCs on the panel. In typical panel style, a lot of gyan was thrown around: &quot;Hire only the best people&quot;, &quot;Top people create top teams&quot; etc.&lt;br /&gt;&lt;br /&gt;That&#39;s stating the obvious. I mean which startup doesn&#39;t want to hire the best people? Do these VCs believe startups are intentionally hiring poor people because they believe its a better strategy??&lt;br /&gt;&lt;br /&gt;The fact is that there are a lot of on the ground challenges to hiring that these panelists are hand waving away with their gyan:&lt;ol&gt;&lt;li&gt;Startups are always short of cash and cannot match the compensation in bigger companies&lt;/li&gt;&lt;li&gt;A lot of startups hire good guys only for them to leave in 6-12 months&lt;/li&gt;&lt;li&gt;Really good guys are hard to find&lt;/li&gt;&lt;li&gt;Most employees are not interested in stock options (a lot of Silicon Valley returned VCs talk about stock options... one wonders if they have actually recruited in India)&lt;/li&gt;&lt;/ol&gt;At the end of the panel, the audience is usually unsatisfied. The panelists tell them what they already know without a word on tackling ground level challenges that they face. &lt;br /&gt;&lt;br /&gt;Now compare that with an unconference. Once more this topic came up at the TiE unconference.&lt;br /&gt;&lt;br /&gt;Look at the answers this time:&lt;ol&gt;&lt;li&gt;Many top people are around in smaller cities, who are not taken by big companies because of a lack of english skills. They are smart and make good startup employees&lt;/li&gt;&lt;li&gt;Find a few people who believe in your vision and then complement them with freshers&lt;/li&gt;&lt;li&gt;Look at 6 month internships - lots of smart people available as interns&lt;/li&gt;&lt;li&gt;Look at your requirements - not all types of work require the best people. Some types of work are repetetive and may just make good employees bored.&lt;/li&gt;&lt;li&gt;Look at the attitude and teach the skills&lt;/li&gt;&lt;/ol&gt;These are strategies that are coming from the experience of people who actually have to tackle these on-the-ground problems. At the end, the participants feel charged up with ideas to take back and implement the next day.&lt;br /&gt;&lt;br /&gt;This is really what makes an unconference different for me. The focus on real solutions to real problems is invaluable.</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/4219674602033950913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/4219674602033950913?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/4219674602033950913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/4219674602033950913'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/09/difference-between-conference-and.html' title='The difference between a conference and an unconference'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-2253181078943020970</id><published>2010-09-11T21:42:00.005+08:00</published><updated>2010-09-11T22:21:55.561+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="event"/><category scheme="http://www.blogger.com/atom/ns#" term="tieunc"/><category scheme="http://www.blogger.com/atom/ns#" term="unconference"/><title type='text'>Interesting Themes for the TiE unconference</title><content type='html'>I was looking at the position papers for the &lt;a href=&quot;http://www.chennaievents.org/TieUnconference&quot;&gt;TiE Unconference&lt;/a&gt;. Position papers are topics that participants want to discuss at the unconference. &lt;br /&gt;&lt;br /&gt;I&#39;ve taken some that caught my eye and organized them into themes.(Find these topics interesting? Then &lt;a href=&quot;http://www.chennaievents.org/TieUnconference&quot;&gt;register for the TiE Unconference&lt;/a&gt; and participate in the discussions)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Product-Market Fit&lt;/strong&gt;&lt;blockquote&gt;You may have an initial hypothesis about why your product is useful to enterprises. How do you validate it? There are several factors: which customers to reach out to feedback? How do you identify the *right* person within the org. for feedback? How do you evaluate their response? etc.&lt;/blockquote&gt;&lt;blockquote&gt;How does an entrepreneur determine if his product really has a market fit that can guarantee rapid growth for the enterprise? The question becomes relevant when the product addresses a latent need that is not very explicit in the market place. What are the typical pointers to a &#39;successful&#39; or an &#39;unsuccessful&#39; product?&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Scaling&lt;/strong&gt;&lt;blockquote&gt;there are many good companies which are doing great jobs in their niche. but very few Ideas scale, how can these companies tweak their business model, and focus to become large profitable organization&lt;/blockquote&gt;&lt;blockquote&gt;A good idea and you start enthusiastically by yourself or with friends. The founding team is all excited and there are no &#39;rules&#39;. Works for sometime, but after a few years, when revenues start happening and the start up has to move to next level....&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Marketing/Sales&lt;/strong&gt;&lt;blockquote&gt;Bootstrapped startups have very low or nonexistent marketing budgets. If you&#39;re making a product for the global market, how can you make sure your product is found by the right people?&lt;/blockquote&gt;&lt;blockquote&gt;We are a young startup with a service offering of online ERP and HR software. We are facing a lot of roadblock in marketing SAAS to our target clientèle (which are mostly old-style brick and mortar firms) and especially with a slim sales force. Would like to see if some inputs could be got on this.&lt;/blockquote&gt;&lt;blockquote&gt;We are a startup with a service offering of Management Consultation and Leadership training. We are facing a lot of roadblock in marketing our Webinar to the right audience inspite of knowing them. Would like to see if some inputs could be got on this.&lt;/blockquote&gt;&lt;blockquote&gt;The idea is to understand the dynamic behind catching customers into a cloud and to retain them by providing continuously improved services.&lt;/blockquote&gt;&lt;blockquote&gt;Building a product that can be consumed online implies that it&#39;s location agnostic. How to target companies in the valley being in India ? Is it a necessity to be in the US? &lt;/blockquote&gt;&lt;blockquote&gt;Would like to hear about market entry experiences of product startups with specific reference to early stage high yield marketing techniques.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Direction of TiE&lt;/strong&gt;&lt;blockquote&gt;For TiE education, Mentoring and Networking are the pillars. These are delivered through various events in different formats: Talks, My-Story sessions, Panel discussions, Member networking sessions, Unconference (from now) etc..It will be useful to know how our members value these and what additional or alternate delivery formats and activities should we consider to be relevant and aligned with our members&#39; expectations.&lt;/blockquote&gt;&lt;blockquote&gt;To understand better where TiE stands in the entrepreneur ecosystem today, and what role do start ups think TiE can play for them and how?&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Innovation&lt;/strong&gt;&lt;blockquote&gt;There is no dearth of ideas on solving problems. How can we leverage all the collective intelligence in the high tech industries to foster social innovation. How can we leverage technologies to improve the life of rural folk?&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Recruiting&lt;/strong&gt;&lt;blockquote&gt;How do we identify great co-workers ? How do we build a team that lasts through the rough years ? How do we build a team that creates great products ?&lt;/blockquote&gt;&lt;blockquote&gt;How Recruiting the right people is the Key to Scale up and Establish your Start up&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Services to Products&lt;/strong&gt;&lt;blockquote&gt;The difference starts from recruitment, development, environment and also the technology. The things to be taken care for getting the people shift their base from project based working to products.&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/2253181078943020970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/2253181078943020970?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2253181078943020970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2253181078943020970'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/09/some-interesting-position-papers-from.html' title='Interesting Themes for the TiE unconference'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-3242190279284000716</id><published>2010-09-10T15:30:00.000+08:00</published><updated>2014-03-22T03:25:39.257+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sevensteps"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Twelve Reasons Why Businesses Fail</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
From Naeem Zafar&#39;s book &lt;strong&gt;Seven Steps to a Successful Startup&lt;/strong&gt;:&lt;br /&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Solving a problem that most users are not willing to pay to solve your way&lt;/li&gt;
&lt;li&gt;Thinking that you can do it all by yourself&lt;/li&gt;
&lt;li&gt;Lacking trust among team members&lt;/li&gt;
&lt;li&gt;Being overconfident and not questioning yourself&lt;/li&gt;
&lt;li&gt;Lacking a crisp, singular focus&amp;amp;emdash;Trying to be everything to everyone&lt;/li&gt;
&lt;li&gt;Marketing myopia&lt;/li&gt;
&lt;li&gt;Confusing a hobby with a business&lt;/li&gt;
&lt;li&gt;Pricing incorrectly and not knowing your real competition&lt;/li&gt;
&lt;li&gt;Failing to properly define your market and customers&lt;/li&gt;
&lt;li&gt;Not having enough financial resources available&lt;/li&gt;
&lt;li&gt;Focusing on a market segment too small to sustain you&lt;/li&gt;
&lt;li&gt;Starting a business for the wrong personal reasons&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;i&gt;This post is a part of the&amp;nbsp;&lt;a href=&quot;http://siddhi.blogspot.com/2000/01/selected-archive.html&quot;&gt;selected archive&lt;/a&gt;.&lt;/i&gt;&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/3242190279284000716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/3242190279284000716?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/3242190279284000716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/3242190279284000716'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/09/twelve-reasons-why-businesses-fail_10.html' title='Twelve Reasons Why Businesses Fail'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-8561096482915570582</id><published>2010-09-06T12:18:00.007+08:00</published><updated>2010-09-06T15:22:50.840+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="chennaiocc"/><category scheme="http://www.blogger.com/atom/ns#" term="chennaiopencoffee"/><category scheme="http://www.blogger.com/atom/ns#" term="event"/><title type='text'>5th Sep OCC Meetup Roundup</title><content type='html'>A couple of links from the discussions at yesterdays OCC meetup&lt;br /&gt;&lt;br /&gt;- Naeem Zafar&#39;s Seven Steps to a Successful Startup - &lt;a href=&quot;http://www.scribd.com/doc/15245595/7-Steps-to-Successful-Startup&quot;&gt;http://www.scribd.com/doc/15245595/7-Steps-to-Successful-Startup&lt;/a&gt;&lt;br /&gt;- Steve Blank&#39;s blog - &lt;a href=&quot;http://steveblank.com/&quot;&gt;http://steveblank.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We started out with a theme - &lt;strong&gt;How do you find your first customer?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Suresh pointed out that we need to differentiate between customer (who pays) and a user (who uses the software). What we really need in the beginning is a user who can validate our assumptions. Once you have a validated model, then it is a lot easier to find a paying customer.&lt;br /&gt;&lt;br /&gt;The conversation went on to &lt;strong&gt;How desperate is your customer&#39;s need?&lt;/strong&gt; The more desperate the need is, the easier it is to find and sell. Sometimes entrepreneurs work on products that that are not solving really desperate problems. A company may have a hundred problems, but stakeholders only have time to only solve 5-10 of them a year. Is the problem you are solving in their top-10?&lt;br /&gt;&lt;br /&gt;Here is a story from Steve Blank&#39;s book The Four Steps to the Epiphany (summarized):&lt;br /&gt;&lt;blockquote&gt;Imagine a bank with a line as customers wait for an hour to cash paychecks. You have a product that could reduce waiting time to ten minutes. You meet the president and tell him you have a product that could solve his problem. What does the president say?&lt;ol&gt;&lt;li&gt;&quot;What problem?&quot; - The president doesnt realize they have a problem. They won&#39;t become customers anytime soon. They are late adopters&lt;/li&gt;&lt;li&gt;&quot;Yes I feel bad about it and give them cups of water&quot; - They know they have a problem but are not motivated to solve it. It&#39;s not an important problem to them.&lt;/li&gt;&lt;li&gt;&quot;This is a big problem, we are losing $500,000 a year! I&#39;m looking for a a product that will cut processing time by 70%, cost less than $150,000 and integrate with our back end&quot; - Getting warm. Recognize they have a problem and have visualised a solution&lt;/li&gt;&lt;li&gt;&quot;I requested our IT department to develop a solution, but it doesn&#39;t work and keeps crashing.&quot; - Hot. They have a problem and are spending money on solutions, but nothing works.&lt;/li&gt;&lt;li&gt;&quot;Boy, if we find a vendor who solves this, we can spend the $500,000 I&#39;ve budgeted for it!&quot; - Fiery hot. Ready to spend big, but no solution in sight. Perfect first customer&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;In case we thought the last type of customer doesn&#39;t exist, Dorai told a story of how he was talking about his vision to a customer and it was such a desperate problem that they paid him in advance to create a product to solve it. You know you have a market when customers are willing to part with their money even before you have started development. Steve Blank calls these customers &quot;Earlyvangelists&quot;. &lt;br /&gt;&lt;br /&gt;This tied in with the theme of a track at the upcoming Nasscom Product Conclave, which is &lt;strong&gt;Sell, Develop, Market, Sell&lt;/strong&gt;. In other words, first sell your vision, and get someone to buy into it. Only then start with development. Where most of us think of selling as the last step, it really should be the first one.&lt;br /&gt;&lt;br /&gt;From there we went into Steve Blank&#39;s Customer Development method and Naeem Zafar&#39;s 7 steps (links above). Both methods advocate having a customer to validate assumptions even before you start development. &lt;br /&gt;&lt;br /&gt;The discussion also went into 2 common product development strategies&lt;br /&gt;&lt;br /&gt;- Find a customer, then develop the product (Customer Development method)&lt;br /&gt;- Create products, launch, and go for customer usage (Web 2.0 VC method?)&lt;br /&gt;&lt;br /&gt;and the pros and cons of each method. With that we broke up for networking.</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/8561096482915570582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/8561096482915570582?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/8561096482915570582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/8561096482915570582'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/09/5th-sep-occ-meetup-roundup.html' title='5th Sep OCC Meetup Roundup'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-9013938721166574721</id><published>2010-09-04T12:29:00.002+08:00</published><updated>2010-09-04T12:29:00.680+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability"/><title type='text'>Usability: Webinar timings</title><content type='html'>&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCub9qr_HItUm2L0S0aSyaXMk3PFPShm5gF79gwbf_5S4AohG2i_WVdrl2AW8JIMmauE1wKndBgvPtCB5uZnHzkPnra5HXQy2lk-PE1IpNB8T2B7e2xlmpFw8UWxXLBLRTe-G0hw/s1600/webinar.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5511797816885390194&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Here is an image from a GoToMeeting&#39;s webinar page. I&#39;ve logged into the webinar and it tells me to come back at another time.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Here is the problem&lt;/strong&gt;: &lt;br /&gt;&lt;br /&gt;Now I have to go to a timezone page and figure out the local time when this event is happening. And if daylight savings is involved there is a really good chance that I&#39;ll be off by 1 hour end end up missing the event.&lt;br /&gt;&lt;br /&gt;This is not just an issue with GoToMeeting. I&#39;ve seen it time and again with most webinar providers. And I&#39;ve missed my fair share of webinars because of messing up the conversion (especially with daylight savings involved!!).&lt;br /&gt;&lt;br /&gt;Why does it tell me the time in the PDT timezone? Why can&#39;t it use javascript on the browser to convert the time into my local timezone?&lt;br /&gt;&lt;br /&gt;Or, at least have a message like &quot;This webinar starts in 12 hours, 45 minutes&quot;. That way I get a fairly good idea of when it&#39;s going to happen.</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/9013938721166574721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/9013938721166574721?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/9013938721166574721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/9013938721166574721'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/09/usability-webinar-timings.html' title='Usability: Webinar timings'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCub9qr_HItUm2L0S0aSyaXMk3PFPShm5gF79gwbf_5S4AohG2i_WVdrl2AW8JIMmauE1wKndBgvPtCB5uZnHzkPnra5HXQy2lk-PE1IpNB8T2B7e2xlmpFw8UWxXLBLRTe-G0hw/s72-c/webinar.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-2287331315498878844</id><published>2010-09-01T12:12:00.004+08:00</published><updated>2010-09-01T12:28:12.072+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability"/><title type='text'>Usability: The facebook event page</title><content type='html'>&lt;img style=&quot;margin:0 10px 10px 0;width: 400px; height: 366px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTKzFu5lIY0ftecfAOZXgs5G0WGcHGPb3jITbp3OQR8PmPxnEKRPm9J_Ltm5OUhcaP6LhuNLL8JucmESEO1ZO4RBvRc3m6uuXFL3c6Ef1oNr2NpCg00xffxQjdmy5NePteQCe2ag/s400/facebook_event.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5511794359980549554&quot; /&gt;&lt;br /&gt;&lt;br /&gt;The image above shows an event page in Facebook. Notice that there are two links called Share (highlighted in red).&lt;br /&gt;&lt;br /&gt;The top link shares the event with your friends on your profile. The other one, much more prominent, just writes on the event wall for other attendees to read.&lt;br /&gt;&lt;br /&gt;What is the chance of mixing them up (or even missing out the top link entirely)?&lt;br /&gt;&lt;br /&gt;I&#39;ve seen instances where people intending to share the event with their friends use the link below, and end up writing on the event page wall.&lt;br /&gt;&lt;br /&gt;Is there a way to make this clearer?</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/2287331315498878844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/2287331315498878844?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2287331315498878844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2287331315498878844'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/09/usability-facebook-event-page.html' title='Usability: The facebook event page'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTKzFu5lIY0ftecfAOZXgs5G0WGcHGPb3jITbp3OQR8PmPxnEKRPm9J_Ltm5OUhcaP6LhuNLL8JucmESEO1ZO4RBvRc3m6uuXFL3c6Ef1oNr2NpCg00xffxQjdmy5NePteQCe2ag/s72-c/facebook_event.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-349805482757330461</id><published>2010-08-17T10:53:00.006+08:00</published><updated>2010-08-17T12:00:40.237+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="leanstartup"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Dont forget to validate your assumptions</title><content type='html'>There is just so much you can learn from customers (or potential customers) that you should spend at least one day a week talking to them. You&#39;ll be amazed at what you can learn.&lt;br /&gt;&lt;br /&gt;Technical founders especially love dreaming up cool stuff and getting to coding. &lt;br /&gt;&lt;br /&gt;This is a huge mistake.&lt;br /&gt;&lt;br /&gt;I recently spoke to one of our customers and asked them what their favourite feature was. I was stunned when they mentioned that sending email when a comment was added was a killer feature for them. &lt;br /&gt;&lt;br /&gt;The shock was because we always thought this feature as a commodity feature. I mean, every tool out there has the ability to send email when a comment is added. We had a whole lot of really killer features, but this was one of the key features?? &lt;br /&gt;&lt;br /&gt;So I probed further. &lt;br /&gt;&lt;br /&gt;Turns out that other tools only send out emails for discussions that you are involved in. Our tool sends out emails for everything. Think of a mailing list - you get every email whether you participated or not. Whereas a forum only sends you notification for new replies in the threads where you participated. It was something like that.&lt;br /&gt;&lt;br /&gt;We always thought sending email for everything was a limitation. It was on our roadmap to refine it and make it send email selectively. &lt;br /&gt;&lt;br /&gt;Well, guess what? Rather than being a limitation, it was actually a feature! And a killer feature for them. &lt;br /&gt;&lt;br /&gt;So I called another customer - and this was an important differentiating feature for them too!&lt;br /&gt;&lt;br /&gt;In a startup, we make a ton of assumptions. Don&#39;t forget to get them validated. Usually what the customer thinks is important is not what you assumed it would be.</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/349805482757330461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/349805482757330461?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/349805482757330461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/349805482757330461'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/08/dont-forget-to-validate-your.html' title='Dont forget to validate your assumptions'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-2922765035469424708</id><published>2010-05-30T16:52:00.005+08:00</published><updated>2010-05-30T17:58:48.039+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="idea"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Too many people are ideating, not enough are executing</title><content type='html'>Here is a pet peeve of mine that is strong enough to actually wake up this blog from hibernation.&lt;br /&gt;&lt;br /&gt;I&#39;ve been seeing this &quot;&lt;a href=&quot;http://wordnetweb.princeton.edu/perl/webwn?s=ideation&quot;&gt;ideating&lt;/a&gt;&quot; word being tossed around as the new cool thing. Every event now seems to have an ideation workshop or innovation workshop. We&#39;ve been &lt;a href=&quot;http://www.youtube.com/watch?v=ruz6LkrxM14&quot;&gt;doing innovation jams at Proto.in&lt;/a&gt; for ages now. This weekend we had an &lt;a href=&quot;http://www.ideacamp.in/&quot;&gt;IdeaCamp&lt;/a&gt; event here in Chennai.&lt;br /&gt;&lt;br /&gt;These days even organizations like &lt;a href=&quot;http://www.nasscom.in/upload/emergeoutconclave2010/nasscom_emergeout_program_agenda_22april.pdf&quot;&gt;Nasscom&lt;/a&gt; and &lt;a href=&quot;http://www.businessblogging.org/connect2009/blog/?p=115&quot;&gt;CII&lt;/a&gt; are jumping on the ideation bandwagon. &lt;br /&gt;&lt;br /&gt;The premise is simple: get a bunch of people together, bounce ideas off the crowd and make it better.&lt;br /&gt;&lt;br /&gt;As an entrepreneur, I find these sessions seriously turning off. I used to be excited about them, but not anymore.&lt;br /&gt;&lt;br /&gt;Invariably no one brings up the hard questions: Whats the market for this idea? How will you price it? Are there any competitors? How much will it cost to build? How will you fund it?&lt;br /&gt;&lt;br /&gt;And finally, when the event is over everyone forgets the idea and gets back to normal work. &lt;br /&gt;&lt;br /&gt;Count up all the ideas from all the innovation jams, ideation sessions, BarCamps, IdeaCamps over the last four years... then count out how many have been executed on. My guess is zero.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;The ideas are basically dead on arrival.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So why do we have so many ideation sessions?&lt;br /&gt;&lt;br /&gt;Its fun. Its collaborative. And everyone likes to escape from the present and imagine the future. Execution is hard, and execution is definitely not-fun. Ideation is instantaneous, and best of all free! I feel sorry for execution - its hard, long, time consuming, and expensive :(&lt;br /&gt;&lt;br /&gt;But lets face it: &lt;span style=&quot;font-style:italic;&quot;&gt;ideas are a dime a dozen&lt;/span&gt;. Execution is what counts. &lt;br /&gt;&lt;br /&gt;Everyone remembers Edison&#39;s quote: Genius is 1% inspiration, 99% perspiration. &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;So, how about we stop ideating and start executing?&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/2922765035469424708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/2922765035469424708?isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2922765035469424708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2922765035469424708'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/05/too-many-people-excited-by-ideating-not.html' title='Too many people are ideating, not enough are executing'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-2533503245656942283</id><published>2010-01-14T00:07:00.001+08:00</published><updated>2010-01-14T00:09:46.385+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chennai"/><category scheme="http://www.blogger.com/atom/ns#" term="event"/><category scheme="http://www.blogger.com/atom/ns#" term="foss"/><category scheme="http://www.blogger.com/atom/ns#" term="startup"/><title type='text'>Leveraging FOSS for Startups</title><content type='html'>I&#39;ve uploaded yesterdays presentation at Anna University on Leveraging FOSS for Startups.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width:425px;text-align:left&quot; id=&quot;__ss_2898275&quot;&gt;&lt;a style=&quot;font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/Siddhi/leveraging-free-and-open-source-software-for-startups&quot; title=&quot;Leveraging Free and Open Source Software for Startups&quot;&gt;Leveraging Free and Open Source Software for Startups&lt;/a&gt;&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fossaukbc-100112134850-phpapp02&amp;stripped_title=leveraging-free-and-open-source-software-for-startups&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fossaukbc-100112134850-phpapp02&amp;stripped_title=leveraging-free-and-open-source-software-for-startups&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;&quot;&gt;View more &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/&quot;&gt;documents&lt;/a&gt; from &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/Siddhi&quot;&gt;Siddhi&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/2533503245656942283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/2533503245656942283?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2533503245656942283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/2533503245656942283'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2010/01/leveraging-foss-for-startups.html' title='Leveraging FOSS for Startups'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-5840868957745374846</id><published>2009-09-28T17:39:00.002+08:00</published><updated>2009-09-28T17:50:01.253+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="event"/><category scheme="http://www.blogger.com/atom/ns#" term="india"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Test Driven Development in Python</title><content type='html'>Here are the slides for my talk at &lt;a href=&quot;http://in.pycon.org&quot;&gt;Pycon India&lt;/a&gt; this weekend. The talk was on doing test driven development in Python and it looked at 3 frameworks - unittest, py.test and nose.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width:425px;text-align:left&quot; id=&quot;__ss_2072136&quot;&gt;&lt;a style=&quot;font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/Siddhi/test-driven-development-with-python&quot; title=&quot;Test Driven Development With Python&quot;&gt;Test Driven Development With Python&lt;/a&gt;&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tddwithpython-090926120714-phpapp01&amp;stripped_title=test-driven-development-with-python&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tddwithpython-090926120714-phpapp01&amp;stripped_title=test-driven-development-with-python&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;&quot;&gt;View more &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/&quot;&gt;documents&lt;/a&gt; from &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/Siddhi&quot;&gt;Siddhi&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/5840868957745374846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/5840868957745374846?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/5840868957745374846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/5840868957745374846'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2009/09/test-driven-development-in-python.html' title='Test Driven Development in Python'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-6743821111508911279</id><published>2009-05-13T20:59:00.004+08:00</published><updated>2009-05-13T22:55:29.994+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Pattern Matching With PEAK-Rules</title><content type='html'>I came across this interesting article on &lt;a href=&quot;http://monkey.org/~marius/pattern-matching-in-python.html&quot;&gt;Pattern matching in Python&lt;/a&gt;. The article asks: Can we recreate in Python the pattern matching semantics present in languages like Haskell and Erlang.&lt;br /&gt;&lt;br /&gt;For those not familiar with the way pattern matching works, I&#39;ve copied the example from the article above.&lt;pre class=&quot;source&quot;&gt;%% handle(Path, Method)&lt;br /&gt;handle(&quot;/&quot;, _) -&gt;&lt;br /&gt;  not_a_resource;&lt;br /&gt;handle(Path, &#39;PUT&#39;) -&gt;&lt;br /&gt;  create_new_resource(Path);&lt;br /&gt;handle(Path, &#39;POST&#39;) -&gt;&lt;br /&gt;  update_resource(Path);&lt;br /&gt;handle(Path, &#39;GET&#39;) -&gt;&lt;br /&gt;  retrieve_resource(Path);&lt;br /&gt;handle(_, _) -&gt;&lt;br /&gt;  invalid_request.&lt;/pre&gt;What the above code does is to return &quot;not a resource&quot; if you call the handle function with the path parameter as &quot;/&quot; and any method. If you call handle with any path and method parameter as &quot;GET&quot; then it calls retrieve_resource(Path) and so on.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PEAK-Rules&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A method to replicate this in Python was given using match objects, but I thought hey why go through all this trouble when &lt;a href=&quot;http://pypi.python.org/pypi/PEAK-Rules&quot;&gt;PEAK-Rules&lt;/a&gt; does most of this for us?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Multimethod Dispatch&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;PEAK-Rules is a library that enables multimethod dispatch in Python. Those with an OO background will recognise a specific instance of this in method overloading. When an overloaded method is called, execution can go to different method implementations depending upon the type of the parameters passed. In generic multimethod dispatch, you can route execution based on any criteria that you define. PEAK-Rules brings this sort of generic multimethod dispatch to Python.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;An Example&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So lets take a concrete example. Our goal is to rewrite the above Erlang code in Python using two libraries: PEAK-Rules and an add-on called prioritized_methods that allows prioritised method ordering.&lt;br /&gt;&lt;br /&gt;First, you&#39;ll need to get install &lt;a href=&quot;http://pypi.python.org/pypi/PEAK-Rules&quot;&gt;PEAK-Rules&lt;/a&gt; and &lt;a href=&quot;http://pypi.python.org/pypi/prioritized_methods&quot;&gt;prioritized_methods&lt;/a&gt;. You can pick them up from the links given or if you&#39;ve got setuptools, then you can just easy_install them.&lt;br /&gt;&lt;br /&gt;Then type out the following code:&lt;pre class=&quot;source&quot;&gt;&gt;&gt;&gt; from peak.rules import abstract, when&lt;br /&gt;&gt;&gt;&gt; from prioritized_methods import prioritized_when&lt;br /&gt;&gt;&gt;&gt; @abstract()&lt;br /&gt;... def handle(path, method):&lt;br /&gt;...     pass&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; @prioritized_when(handle, &quot;path == &#39;/&#39;&quot;, prio=1)&lt;br /&gt;... def not_a_resource(path, method):&lt;br /&gt;...     print &quot;not a resource&quot;&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; @when(handle, &quot;method == &#39;GET&#39;&quot;)&lt;br /&gt;... def get_resource(path, method):&lt;br /&gt;...     print &quot;getting&quot;, path&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; @when(handle, &quot;method == &#39;PUT&#39;&quot;)&lt;br /&gt;... def create_resource(path, method):&lt;br /&gt;...     print &quot;creating&quot;, path&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; @when(handle, &quot;method == &#39;POST&#39;&quot;)&lt;br /&gt;... def update_resource(path, method):&lt;br /&gt;...     print &quot;updating&quot;, path&lt;br /&gt;...&lt;/pre&gt;Here is what is happening: &lt;br /&gt;&lt;br /&gt;We first define an abstract function handle(path, method). Do this by placing the @abstract() decorator on it. &lt;br /&gt;&lt;br /&gt;Now consider this snippet:&lt;pre class=&quot;source&quot;&gt;&gt;&gt;&gt; @when(handle, &quot;method == &#39;GET&#39;&quot;)&lt;br /&gt;... def get_resource(path, method):&lt;br /&gt;...     print &quot;getting&quot;, path&lt;br /&gt;...&lt;/pre&gt;This defines one implementation for the handle function. It says, when the handle function is called, and the condition given is True (in this case method == &quot;GET&quot;), then call the implementation given below (here: the get_resource function). &lt;br /&gt;&lt;br /&gt;Similarly we define the other implementations to be called on some other conditions. &lt;br /&gt;&lt;br /&gt;The only thing left is the usage of @prioritized_when. Now, when a call is made to handle(&quot;/&quot;, &quot;GET&quot;), we see that the condition for not_a_resource as well as get_resource are satisfied. Which implementation should be called? In this case, we use the @prioritized_when decorator and set the priority to 1. This tells the system to give priority to this implementation in case of conflict in match.&lt;br /&gt;&lt;br /&gt;Here is how the output looks:&lt;pre class=&quot;source&quot;&gt;&gt;&gt;&gt; handle(&quot;/&quot;, &quot;GET&quot;)&lt;br /&gt;not a resource&lt;br /&gt;&gt;&gt;&gt; handle(&quot;/&quot;, &quot;POST&quot;)&lt;br /&gt;not a resource&lt;br /&gt;&gt;&gt;&gt; handle(&quot;/home&quot;, &quot;PUT&quot;)&lt;br /&gt;creating /home&lt;br /&gt;&gt;&gt;&gt; handle(&quot;/home&quot;, &quot;POST&quot;)&lt;br /&gt;updating /home&lt;br /&gt;&gt;&gt;&gt; handle(&quot;/home&quot;, &quot;GET&quot;)&lt;br /&gt;getting /home&lt;/pre&gt;Pretty cool! The best part of this is that you can dispatch on virtually any condition. While the resulting code is a little more verbose than the Erlang example, its not too bad and it does the job well.</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/6743821111508911279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/6743821111508911279?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6743821111508911279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/6743821111508911279'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2009/05/pattern-matching-with-peak-rules.html' title='Pattern Matching With PEAK-Rules'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6400536.post-1197330272925429958</id><published>2009-04-02T19:57:00.001+08:00</published><updated>2009-04-02T20:04:29.857+08:00</updated><title type='text'>Wall Street Arithmetic</title><content type='html'>From &lt;a href=&quot;http://blogs.law.harvard.edu/philg/2009/04/01/wall-street-number-theory/&quot;&gt;Philip Greenspun&lt;/a&gt;:&lt;blockquote&gt;I attended a seminar this evening presented by one of our largest banks (name not mentioned to protect some friendships).  A middle manager introduced Eugene White, an economist from Rutgers.  “I earned nothing last year,” said the hard-working bank employee.  “Zero for 2008.  No bonus.  No options.  No stock.”&lt;br /&gt;&lt;br /&gt;Over dessert and coffee I asked one of the guy’s subordinates if the boss wouldn’t also have gotten some sort of base salary.  “Sure,” he replied, “but maybe as low as $500,000 per year.”  How did that round to zero?  “Well, he might have made $12 million the year before.”&lt;br /&gt;&lt;br /&gt;And you thought Peano arithmetic was challenging….&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://siddhi.blogspot.com/feeds/1197330272925429958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6400536/1197330272925429958?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/1197330272925429958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6400536/posts/default/1197330272925429958'/><link rel='alternate' type='text/html' href='http://siddhi.blogspot.com/2009/04/wall-street-arithmetic.html' title='Wall Street Arithmetic'/><author><name>Siddhi</name><uri>http://www.blogger.com/profile/16893177345726416004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/x/blogger/84/194/1600/650229/1.jpg'/></author><thr:total>0</thr:total></entry></feed>