Archive for category Technology
Jnaapti – One Year On…
Posted by Gautham Pai in Education, My Updates, Technology on June 19, 2012
Time flies!
It has been a year since I started Jnaapti and it is time to take a step back and reflect on how things have fared during the last one year. I was reading through the mails and the Jnaapti weekly reports and was wondering if there is anything that I have to add to the 6 month report that I wrote back in December or if there is anything that I don’t agree to among the things I mentioned in that list.
So here goes:
-
Naming: Somehow, I don’t recall reading this anywhere, or atleast, didn’t think it was important. But, just like you do usability testing of your product, I think it is important to get the name tested with a few people before you christen your company. While choosing an Indian name, also remember to include people from various parts of India and abroad.
The name Jnaapti is a Sanskrit word which means to “acquire knowledge”. I had a few things in mind when choosing the name:- I wanted an Indian name – because the target segment was Indian to begin with
- I didn’t want to have a problem with branding, in acquiring domains etc
- Finally, I wanted the name to be generic enough to be used until the vision of the company has been achieved and shouldn’t require a change as I pivot.
Turns out, people don’t get it.
Here are some suggestions to people about naming a company:- Make sure the word is such that it can be pronounced by anyone and is easy to spell over the phone. You will loose out on a lot of branding if people search for the wrong keywords.
- How would people come across your name? Would you expect people to search for it – if not, the logo along with the name should be catchy.
- What are the closest other names to the name of your company? Is it easy to mis-spell it? If people search for it now, will Google suggest a more popular alternative? Do you expect to override it anytime soon?
- Is your audience global or local? If global, go for something that is not specific to your geography or atleast easy for people outside your geography to pronounce.
- Stay with the chosen word for atleast 3-4 days. Imagine yourself using it in conversations and see if you are comfortable with the word even after 3-4 days.
Personally, I prefer short, single words for company names.
-
Pivoting is not free: Don’t get me wrong. I am a big fan of lean principles and I still religiously follow a lot of them. And I do understand that pivoting is not about abandoning one idea and moving onto the other or changing your vision as if caught in a tornado but I guess it is possible that people think pivoting comes without a cost when in fact the reality is not so. In short, pivoting has the same issues as knowing when to shut down your startup – should we persevere or should we rethink?
When you have validated a part of your business model (eg: the demand, the problem/solution fit or say portions of your product) and decide to pivot another aspect of it, there is a good chance of temporary disruption in the flow (read target segment, getting users, revenue streams etc). It’s quite possible that you had been generating revenues due to your efforts, but now you don’t see it to be sustainable, so you decide to pivot. This may mean, you have to re-design your site/app experience, come up with a new marketing message and start over on the marketing efforts, and you need to be prepared to bear the cost. This may be tough, especially when you are bootstrapping the company. But then, you don’t have a choice because the whole idea of pivoting is to reduce the likelihood of reaching a destination that you didn’t intend to reach in the first place.
Between validation and scale is an important step – “validating the scale”. As described in the lean stack, there are 4 stages when it comes to building a product – Understand Problem, Define Solution, Validate Qualitatively, Verify Quantitatively. However the MVP that works in Stage 3 need not work in Stage 4 and may require a strategy pivot, so be careful in Stage 3 to ensure that the same solution holds when you get to Stage 4. This is easier said than done.
Recognize failures early – atleast have a weekly review of how things are going with regard to the company’s directions and make sure you make corrections in your path. Get it validated by people who can guide you. - Follow the ant philosophy: Learn from the horse’s mouth as he has described it well.
Perseverance is important. Sometimes it feels like you are putting in a lot of effort, but things don’t seem to work, but sometimes the exact opposite is true. I have seen this with marketing efforts. It takes time for marketing to reach fruition and it is important not to lose your patience when the going gets tough. - Have a strong social network or add someone to your team who does: I can’t say this enough and this builds on the 2 things I mentioned in my previous post – “Get out of the building” and “The strange story of co-incidences and chance meetings”. It always helps to have a strong social network (both online and offline). The number of new people I have met (online/offline) has crossed 200 since the time I started Jnaapti.
- Self discipline revisited: If you have decided on a rhythm, stick with it. Get good at reducing interruptions and handling unavoidable interruptions well. When meeting clients, time is not under your control, so get good at squeezing tasks into available slots between unavoidable interruptions. Time discipline is extremely important especially when you are working alone. Maintain a log of where you are spending your time and optimize what you can optimize. Get good at continual automation not just with engineering processes but with life! Make a note of key metrics that you want to track on a daily/weekly basis.
- Be prepared to learn: This may seem obvious, but sometimes you may not realize the effort involved. Running a one-person startup has meant that I had to learn how businesses function, understand sales and marketing, negotiation, valuation, funding, recruitment, building and maintaining relationships, understand lead generation, cost of customer acquisition, designing usable products, build a great user experience and a host of other things in addition to engineering. I like it and is one of the reasons I am doing this, but then, not everyone does.
When I started this journey, it was supposed to be a one year stride. The fact that it is Jun 2012 and I haven’t lost confidence means that this is going somewhere and I intend to continue along this path into the near future…
Jnaapti – A 6 month Report
Posted by Gautham Pai in Education, My Updates, Technology on December 1, 2011
This post is not quite about Jnaapti‘s vision and why I am doing it, but more about things that I have learnt since I founded Jnaapti.
I can’t believe it has been more than 6 months already and what an experience it has been! I can easily blog a few hundred pages about my experiences, but here is the MVP (Minimum Valuable Post) – the key things that other wantrepreneurs and newbie entrepreneurs can learn from:
- The art of self-discipline: If there is one thing that I should pick among the various things that I learnt in the last 6 months, I would pick being self-disciplined and maintaining a rhythm in the face of distractions that are not under your control. Time management is extremely important. When you are handling all aspects of business, there is a good chance that you need to meet someone at their convenience, or you are asked to provide a service (in my case training) and these are not under your control. So you need to get really good at handling these, and getting back to your work as soon as this is complete. For productivity freaks, I use a combination of Pomodoro technique, Hamster, Workrave, this hack and a simple Libreoffice document to manage all my data. I wish it could have been simpler and someday, I hope to continue my efforts in building productivity tools.
- Get out of the building: I can’t stress this enough. Nearly everytime I got out of the building and started speaking to people, there was some new insight or a business deal that happened. A lot of the times, it seems purely co-incidental (read the next point). The initial couple of weeks were very haphazard and it just seemed like a humongous project that was lying in front of me. While I did have a huge list of tasks/ideas to work on, I didn’t know where to begin. What should I build now? No clear answers. As I started hunting for answers, I ran into the Lean Startup concepts and fell in love with Ash Maurya, Eric Ries and Steve Blank‘s philosophies. I followed the lean canvas way of capturing the business model religiously and it has worked out very well. If anything, it helped reduce noise, cut to the chase and build something of value “now”. The idea of prioritizing validation and learning before scale has worked in my favor. The first cut of Jnaapti’s offering didn’t even have a software component and was entirely conducted over email – because I realized that the MVP didn’t need a software component. I concentrated less on the website messaging, since most of my contacts were through my personal network.
- The strange story of co-incidences and chance meetings: Nearly every business contract I got seems like a pure chance meeting and the more this happens the more you believe in what is written here. This kind of also proves that there is a critical mass of startups in Bangalore now, and there is a good chance that you will bump into someone who is a startup founder or early employee when you visit coffee shops or technical events. This has worked out so well that I have made it a point to meet, on an average one or two new people every week. Till date, I have met more than 80 new people (including Jnaapti Learners), and that’s an average of 10 people per month!
- My experiments with pricing: An early learning for me was about how you need to get pricing right and it’s almost always never. The inital couple of months I was demanding way too less for my services and slowly as I found out the value of my services, I tweaked it to a point which seems reasonable both for me and my clients. But that said, every new assignment is a new negotiation.
- Understanding waste reduction: When you are the only person working, and you have the 3 aspects of an organization in front of you – business, product and engineering – every moment you spend, you need to think twice. Is this the best use of my time? It helps a lot to reflect on how you spent your time and look at what you could have rather NOT done. This is the art of waste reduction.
On a similar note, I have started maintaining what are called “Implementation reports” for Jnaapti’s product development phases. An implementation report is an assessment of- how a specific phase fared
- what features we set out to build
- what was our reasoning about why they should be built
- how are the features being used now
- if they are not beng used, why so
- can its usage be improved
- should it be chucked
- how can we ensure that we don’t have such waste in future
- Getting to ramen profitability: There is one thing I can tell you. We, as software engineers in India, don’t value money (I am speaking generally). We get an awesome package (stop cribbing you guys) right out of college, and then we get into this spiral of work-get paid-work harder-get promoted-ask for a raise. And when things don’t work in our favor, we start complaining or switch our jobs looking for a better role or more pay. If you want to value money better, quit your job to know what others go through. In the face of inflation, the rupee v/s dollar prices and rising infrastructure costs it has been tough to keep up, but then you got to pay a price. I am close to achieveing ramen profitability and I hope things will be better next year. And while achieving ramen profitability is important, it is equally important to ensure that you achieve profitability via the business you are in and not via some job that doesn’t help you validate or learn more about your business. And yeah, if you want a piece of advice, to get to ramen profitability soon, just invest your savings in some place that is not easy to suck from!
I have taken enough breaks and I never felt that this was too demanding (although I do put in long hours once in a while). Needless to say, I am loving the freedom and the flexibility that I have and I wish I can continue this forever! Overall, it has been an amazing 6 months!
Dark Themes in Ubuntu
Posted by Gautham Pai in Technology on October 5, 2011
I was getting bored with my old Ubuntu theme, so I thought I will play around a little with dark themes.
So here goes:
Here are the list of things used:
- Wallpaper: Mount Snowdon, Wales
- Window Control: Black Grass
- Window Border: Step into Freedom
- Fonts: Ubuntu
- Compositing effects (eg: Transparency): Compiz
- Icons: Faenza
Moving your WordPress blog from Apache to Cherokee in 30 minutes
Posted by Gautham Pai in Technology, World Wide Web on April 15, 2011
In my post on VPS Hosting experiences, I had mentioned that inspite of doing server configuration tweaking, I found that load times were gradually increasing and I was experimenting with an alternative server named Cherokee.
The whole migration took less than half a day – including learning Cherokee, trying out locally and then using it in my blog. So what are the steps I followed to move to Cherokee?
I use Ubuntu 10.04 LTS as my dev system as well as on the production server – so one of the things that I am confident about is that, if something works in my dev environment, it is bound to work in the production setup, with minimal pains during deployment. So I wanted to first try out the entire setup – make sure everything is fine, and then replicate the setup on the production server.
I started by installing Cherokee from the PPA and also php5-cgi:
add-apt-repository ppa:cherokee-webserver/ppa
apt-get update
apt-get install cherokee
apt-get install php5-cgi
VPS Hosting Experiences
Posted by Gautham Pai in Technology, World Wide Web on February 19, 2011
So after the frustrating experiences with my shared hosting provider, I decided to move to VPS hosting once and for all. I knew that this would mean, spending more money, and having to spend more time and energy tweaking configurations and monitoring the site, I thought it will be worth the effort and price for the flexibility that I would get from it.
So sometime in late December, I made the move. After looking around and asking a few people, I finally decided to go with VPS.net. The movement from shared hosting to VPS was a breeze and I was up and running in under 2 hours. The experience with VPS.net until now has been pleasant.
Meanwhile, I am closely monitoring Google Webmaster Central and there are some very interesting observations and that is what I wanted to share here.
-
Gzipped Content
The first observation is how, when I moved from shared hosting to VPS, the data download size reduced drastically with no significant change in the number of pages crawled per day. This is because I use GZIP encoding, while my shared host did not (when you pay for bandwidth there is no incentive to reduce the size, now is there?!) -
Improvement in load times
The second observation is how the time to download also reduce drastically when I moved to VPS hosting. This was expected. While my server now has only my services running, I am not sure how many umpteen other websites were being served on my shared host. - Server configuration tweaking
Towards mid Jan, the load times started increasing. This is because I had a few other services hosted on the same machine and the server started thrashing. The biggest issue with most VPS providers is that they are very lenient on bandwidth and storage, but very stingy when it comes to memory. So I had 2 choices – either I upgrade my configuration and pay nearly twice the price, or I start playing with the Apache and PHP configurations and see if I can squeeze out more performance from the system. I decided to go for the latter. I cut down on the services hosted, disabled unnecessary modules, played with threads and child processes, and tweaking PHP configurations. But no matter what I did, the load times stayed up there, or worse, continued to increase and there was nothing I could think of.
Recently a friend of mine asked me to give Cherokee a try. Cherokee is considered to be blazingly fast and very lightweight compared to Apache. So I have moved my blog to Cherokee now and hope to monitor the performance closely over the next few days. - Google on steroids
Another observation is how Google suddenly decided to give my site a real test – and decided to download virtually all the pages possible in a single day – this happened a couple of days back and I am yet to discover why this happened. What I am happy about is that the load times were decent when this happened. -
Load times and Google Ranking
I can confirm that there is some corelation between page load times and rankings in Google. In December, when my site was taking as many as 3 seconds to load (Google said my site was slower than 94% of the sites in the world!) – some of the keywords for which my posts used to appear in the first page moved to the second or third pages. It was only in January did I see them come back to their original positions.
Overall, it has been a good experience – you learn a lot when you moved to VPS!
Google Docs, ODF and Data Portability
Posted by Gautham Pai in Technology, World Wide Web on January 29, 2011
Consider the code below to display a line of text in HTML:
<style>
.paragraph-text {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
</style>
...
<p><span class="paragraph-text">Here is a test line</span></p>
Now let’s say, we see some developer write it this way:
<style>
.T1_1 {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
.T1_2 {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
.T1_3 {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
.T1_4 {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
.T1_5 {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
.T1_6 {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
.T1_7 {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
.T1_8 {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
.T1_9 {font-family: Arial; font-size: 11pt; font-weight: normal; text-decoration: none}
</style>
...
<p class="P1">
<span class="T1_1">Here</span>
<span class="T1_2"> </span>
<span class="T1_3">is</span>
<span class="T1_4"> </span>
<span class="T1_5">a</span>
<span class="T1_6"> </span>
<span class="T1_7">test</span>
<span class="T1_8"> </span>
<span class="T1_9">line</span>
</p>
What would you say of the quality of the markup above?
Fun with X – hacks in Ubuntu
Posted by Gautham Pai in Technology on September 4, 2010
I have always wanted to have more control over my GUI windows so that I can control them and monitor them via commands. So when I looked around for tools to help me do that I found a couple in Ubuntu that help me do some pretty nifty stuff.
So here are a couple of quick hacks:
- Monitoring what you do on a daily basis:
Productivity geeks will love this! This is a script which can help you know what the active window title is and print it into a file. Just cron this script to run once a minute and you will have a pretty good picture of what you do on a daily basis. Want to know how much time you spend on Facebook? Try this script!
printf "`date "+%D %T"`: " >> active-window-log
active=`xprop -root | grep -P "^_NET_ACTIVE_WINDOW" | awk '{print $NF}'`
title=`xwininfo -id $active | grep -P "^xwin"` >> active-window-log
Try this script for a day and you will be amazed by the insights you get by looking at the output log.
- Monitoring a terminal for changes: How many times has it so happened that you had a terminal which was running a script and you were waiting for it to complete, but then you didn’t know how long it would take before it printed the next line of output? Wouldn’t it be great if you could monitor it?
So here is the command that you can use to monitor changes to a specific terminal:
window_id=`xwininfo | grep "Window id" | sed -e 's/.*Window id: //g' -e 's/ .*//g'`;
xwd -id "$window_id" > /tmp/initial;
while true;
do xwd -id "$window_id" > /tmp/final;
if [ -z "`diff /tmp/initial /tmp/final`" ];
then echo "No diff";
else echo "Windows differ";
rm /tmp/final /tmp/initial;
break;
fi;
sleep 3;
done
When you run this script, your mouse pointer changes to a cross-hair. Just point and click the terminal that you want to monitor and then allow it to continue with its work. As soon as there are changes, it will print “Windows differ”. Now you can as well make it send you a mail or start playing a song!
The cool thing about this script is, it shows how flexible Unix tooling is. The way the script works is by taking a ‘screenshot’ of the terminal every 3 seconds and comparing it with the original screenshot. If there is a change, then diff outputs something and hence becomes non-zero.
The scripts have been tested in Ubuntu. If you don’t have any of the commands, Ubuntu should prompt you to apt-get install them. Although not tested, it should work in any X based system.
A review of the Nokia 5230 (Nuron) Touchscreen Smartphone
Posted by Gautham Pai in Technology on August 26, 2010
| I have been waiting for a sub 200$ smart phone which is either Linux based or Android based and can work seamlessly in Ubuntu. For some weird reason I have been extemely stingy about paying for smart phones – I really don’t see a point in shelling out 30k (Rs) for a phone, when you can buy a laptop for a similar price or a netbook for half the price. Dell Netbooks are available for as low as 300$, and there are a few android tablets such as the OlivePad being introduced for even cheaper prices. Considering this I feel it is a stretch to even pay 200$ for a phone.
So when I learnt about the Nokia 5230, I was excited. It was neither Android based nor Linux based, but I could atleast keep up with the developments in the mobile space at a cheap price. It didn’t take me long to decide to buy one. This is the first smartphone I have owned, so needless to say I am excited about the features. All I really care about in a phone (other than the regular call/messaging features) is the browsing and PDA capabilities of the phone. I had earlier decided to go for the Nokia 5233, but it does not have GPS, and the 5230 comes with AGPS for an extra Rs. 1000/- so I decided to go for it. |
The power of Ubuntu – showing dynamic messages in your desktop background!
Posted by Gautham Pai in Technology on May 22, 2010
I worked on this cool hack to dynamically show Twitter messages embedded into the desktop background. The basic idea is to have some dynamic text (which could be fetched from the web) embedded in an SVG image, which is set as the desktop background. The SVG image contains the actual wallpaper that we intend to use.

Here are the steps:
- We first start by creating an SVG template file called wall-tmpl.svg with the following contents and saving it in the Wallpapers directory (let’s say it is ~/Theme/Wallpapers):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
<!ENTITY ns_svg "http://www.w3.org/2000/svg">
<!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
]>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1280" height="1024" viewBox="0 0 1280 1024" overflow="visible" enable-backgroun
d="new 0 0 132.72 127.219" xml:space="preserve">
<image xlink:href="~/Theme/Wallpapers/-your-favorite-wall-paper-" x="0" y="0" width="1280" height="1024"/>
<text x="100" y="200" fill="white" font-family="Nimbus Mono L" font-size="14" kerning="2">%text</text>
</svg>
- Next we create a script to fetch the most recent Twitter message and then embedding it in the image. The script is called change-wallpaper and is placed in the bin directory. It has the following:
text=`python -c "import urllib;print eval(urllib.urlopen('http://search.twitter.com/search.json?q=ubuntu&lang=en').read().replace('false', 'False').replace('true', 'True
').replace('null', 'None'))['results'][0]['text'].replace('\!','').replace('/','\/')"`
cat ~/Theme/Wallpapers/wall-tmpl.svg | sed "s/%text/$text/g" > ~/Theme/Wallpapers/wall.svg
- We then add the following entry to crontab to fetch Twitter messages every minute:
# m h dom mon dow command
* * * * * ~/bin/change-wallpaper
- Run the script once, it will create a file called wall.svg in your Wallpapers directory. Set this as your desktop background and watch the background change every minute!
You could get very creative with this. You could have your calendar reminders embedded directly into your desktop background or you could have dynamically fetched background images with your own random fortune quote. The possibilities are enormous!
Why Google AppEngine still sucks
Posted by Gautham Pai in Technology, World Wide Web on March 13, 2010
Last June, when I built the Twitter Trending Topics app using Google AppEngine, I had mentioned quite a few issues with the application building in Google AppEngine. After giving it about 9 months to mature, I thought I will take a look at it again with a fresh perspective on where it stands.
The first thing that I wanted to try was to revive my old application. The application has been inactive because it has surpassed the total stored data quota and I never managed to find time to revive it.
One of the biggest issues that I mentioned last time, was the ability to not be able to delete data from the application easily. There is an upper limit of 1GB on the total stored data. Considering that the data is schema-less (which means that you need more space to store the same data when compared to Relational Databases), this upper limit is severely restrictive when compared to the other quota limits that are imposed. There were about 800,000 entries of a single kind (equivalent of tables) that I had to delete!
So I started looking for ways to delete all the data available and came across this post. I decided to go with the approach mentioned here. The approach still seems to be to delete data in chunks and there is no simple way out. The maximum number of entries allowed in a fetch call is 500, which means I require 1600 calls to delete all the data.
Anyway, so I wrote a simple script as mentioned in the post above and executed it. I experimented with various chunk values and saw that 300 was the size that worked optimally; anything more either seemed to take a lot of time or actually timed out.
Here is the code that I executed:
from google.appengine.ext import db
from <store> import <kind>
def delete_all():
i = 0
while True:
db.delete(<kind>.all().fetch(300))
i = i + 1
print i
saved this file as purger.py and executed it as:
$ python appengine_console.py twitter-trending-topics
App Engine interactive console for twitter-trending-topics
>>> import purger
>>> purger.delete_all()
A seemingly simple script, but after about a couple of hours of execution (after having deleted roughly 200,000 entries), I started seeing a 503 Service Unavailable exception. I thought this was to do with some network issues, but realized soon that this was not the case. I had run out of my CPU time quota!
To delete 200,000 entries the engine had taken up 6.5 CPU hours and this it managed to do in less than 2 hours! It had, according to the graphs, assigned 4 CPU cores to the task and executed my task in the 2 hours. At this rate, it will take me 4 days to just delete the data from my application. The Datastore CPU time quota is 62.11 hours but there is an upper cap of 6.5 hours on Total CPU time quota – the Datastore CPU Time quota is not considered separate. I am not sure how this works!
As seen in the screenshot above, the script executed for about 2 hours before running out of CPU. There was no other appreciable CPU usage in the last 24 hours. Considering that there was no other task taking up CPU, the 6.42 hours of Datastore CPU time seems to be included in the 6.5 hours of Total CPU time. So how am I supposed to utilize the rest of the 55 hours of Datastore CPU time?
I am not sure if I am doing something wrong but considering that there are no better ways of doing things here are my observations:
- It is easy to get data into the system
- It is not easy to query the data (there is an upper limit of 500 and considering that joins are done in code, this is severely restrictive).
- There is a total storage limit of 1GB for the free account
- It is not easy to purge entities – the simplest way to delete data is to delete them in chunks
- Deleting data is highly CPU intensive – and you can run out of CPU quota fairly quickly.
So what kind of applications can we build that is neither IO intensive nor CPU intensive? What is Google’s strategy here? Am I missing something? Is anything wrong with my analysis?






Recent Comments