Google Analytics

Monday, December 27

The Good and Bad of Facebook "Like"

I have mixed feelings for the Facebook "Like" button.

In the Facebook universe, "like" is the uniform mechanism for interacting with various pieces of content flowing around. You can Like status updates, photos, comments on updates and photos, Pages and even ads! One interaction to rule them all. The reasoning behind it is that it reduces friction and leads to more people clicking on the like button. This is what Facebook would want the users to do. But what does it mean for us? How do you feel about coloring the whole world in the 2 colors of "like" and .. well, "no comments"?

From the perspective of somebody who likes the human languages a lot, it is distressing. One feature of human languages is that they are wonderfully precise. The variety of expressions and words available to describe very similar but distinct actions, feelings, things is not only useful but also charming. And this precision is very selective. Different cultures develop these fine grained vocabularies for different aspects of life. For example, in Indian languages, most of the relatives get a unique term. Mama, chacha, tau, mausi, bua and others while English stops at cousins. Similarly, there are differences in how the spatial references are made depending on the kind of terrain the speakers mostly deal with. These distinctions make the use of the language more efficient. We can convey a lot more in fewer words.

As opposed to that, "like" is totally and utterly devoid of all contexts and subtle differences. When I see the 600 people like Pothi.com, I have no idea if they like the updates we put on the page, they like us because they worked with us or if they are in general appreciative of the idea. "I'm a Fan" is not much better but it at least teases apart those who simply like the idea from those who are actual users. You feel hesitant in clicking "I'm a Fan" for a good reason - you may not be a fan. You may only approve of the idea. But instead of getting a drop down with 2 options - "I'm a Fan", "I like the idea" - we go to only "Like". Isn't it ironical that we want more people to express more by making the very act of expressing yourself, dumb?

However I also like "Like" for a very different reason. Especially it's presence on the status updates and comments section. These days, many of us perpetually live in multiple long distance relationships - with our siblings, our parents, other relatives, our friends, batchmates, schoolmates. In another time, many of the relationships will simply wither away as geographical distances increased - Away from eyes, Away from heart was the saying. Now instead of those, we have these zombie like relationships which are given a shot of life one status update a time. Thanks to Facebook, the random trivia of our lives are being put to some use at least.

In a face to face relationship, there are a lot of things which cannot be replicated in the online medium. The approval you can read in your sister's eyes, the pat from you friend on the back, a little nod of the head - the unsaid things which matter so much. In the online medium, some of them convert into comments but most of the time, a comment is just too wordy. You just want to nod. Or wave. Or pat the person on his/her back. That is when I love the "like". It substitutes for all those social cues. When my friends "like" my moody status update from late night, it feels good. It feels like a hug and a pat on the back. And it is sufficiently understated unlike the obnoxious "hugs" and "kisses" you can send using third party apps.

Of course, it is unlikely that we will ever move to more sophisticated expression on the social networks. The only way is downwards from here. That is why I think it is important more then ever to heed PG's advice and write once in a while.

Update: Just as I published this post, Blogger prompted me to enable "Reactions" for the posts. What is "Reactions"? Well a "like" where you can define multiple options like "Agree", "Love It", "Hate It" and users can select anyone with a click. Now that was a wish fulfilled very quickly. I am beginning to "like" this Santa fellow! :)

Monday, December 20

New Year Resolutions That Last

In another 10 days, 2010 will be past. A past, we can never visit again. But we are humans, a inherently optimistic lot. We don't worry about past, we look forward to future. Well atleast sometimes :)

One of the most popular and perhaps the most way of looking forward to coming year is to take resolutions. While they hardly last for more than few weeks in most cases, everyone keeps taking them every year. Which is fine - they make you exercise for at least for those few weeks. Anything is better than nothing!

Now one way to make your resolutions last longer would be give them some momentum before hand. Why not start working on that reading list right away? Or start getting up a little early everyday starting today. By the time new year rolls in, you would already have started the journey, perhaps even stopped and started again. That should prove to be more effective then suddenly getting up on 1st of January and telling yourself that you are a changed person now.

Try it. I am trying. Been trying to squeeze in about half an hour of exercise in the morning schedule. Also trying out a new working schedule - some exciting things already planned for the first quarter of next year.


And while I was busy doing all this, 29 turned me.

Wednesday, November 24

You cannot borrow trust

If you ever find yourself saying, "If you don't believe me, you can ask <insert a trusted party>", stop. It is already too late. You cannot make up for the lack of trust by borrowing it from someone.
On the other hand, you can borrow money in a time of crunch. So when faced with a choice between keeping somebody's trust or saving some money, choice should be obvious.

Friday, November 12

How to get Google to fund your startup right after college!

If you are a hacker and a student in India and you are interested in doing a startup, you have a golden opportunity in your hands.

The Google Summer of Code (GSoC) program offers $5000 for a 4 month project you do for one of the participating open source projects. You get a mentor, hands on experience of implementing something which will potentially be used by real users and also get to be a part of an ever growing community of hackers in India.

Now let us say, you were able to get into the program. So you have access to:

Money
At today's conversion rate, $5000 translates to Rs.2,22,000/- approximately. After paying taxes (which comes at max to about Rs.6500/- assuming male and no other income), you are left with 2,15,000 in your hands. For a college student, 4 months expenses can be as low as Rs.10,000 when living on campus. But let us keep it at Rs.25,000/- assuming you really decided to live it up. Still there are ~Rs.1,90,000 in your account.

Excellent Pool of Co-founders
If you are on any of the mailing lists like OCC, HeadStart or follow the forums like Pluggd.in, NASSCOM Emerge, you can find any number of would-be-entrepreneurs looking for co-founders, especially technical co-founders. Through the GSoC community, you know a fine set of technical geeks who are willing to spend their summers working on arcane parts of free software projects. Guess what! These are the guys everyone is looking for but is unable to find. Grab one of them and find something of mutual interest. Bonus: your seed fund just doubled. If you want to be extra secure, just find one more co-founder. :)

Experience of actually building something
Assuming you participated in GSoC out of love of hacking and not for money, you already have more experience at building real things than most of the graduating students and most of the alumni of past 2-3 years. 

Initiative & Timing
There will not be a better time. Do GSoC in the final year of your college and then use the money to work on your dream startup immediately afterward. You will be in the flow and free of other burdens and worries. If it doesn't work out after 1 year, just think that you took 1 year extra to complete your degree ;-). With the skill set you develop, you will find a good job any given day.

So don't let this golden opportunity pass you by. If only GSoC had existed while I was in college!

Monday, November 8

Python - A good introductory programming language?

First a little experiment. The other day, I needed to count words in a string. One straightforward method for this is to break the string into tokens and count them:
def count_words_split(sen):
    return len(sen.split())
This is nice since split automatically takes care of multiple consecutive spaces if present. However in my case all the words were guaranteed to be separated by 1 space only. So following should get the job done with a little less work:
def count_words_count(sen):
    return sen.count(' ') + 1

This is essentially a single pass over the string with no need to create an intermediate list of strings and so should run faster. Surprisingly, on Python 2.5, the first method is twice as fast as the second one. I have no idea why. However sanity is restored on Python 2.6 and the second version is not only faster but also gets better with increasing size of input.

This got me thinking about a good introductory programming language. I learned programming with C and algorithms with Java. Many people have argued that Python makes a better introductory programming language. I have also liked Python in the one year I have been using it. One nice feature of CPython, the primary Python implementation, is that the critical parts of your program where you have need-for-speed can be written as C extensions thus getting a significant performance benefit. Many standard Python modules are written as C extensions.

To a newcomer, however, it is not always clear what is implemented in C and what is not. Most of the time it is OK for somebody who is only learning to program. However an important part of learning to program is to learn about various data structures and the algorithms and how they compare on problems. Now if it so happens that an algorithms that should run faster in theory ends up slower because it uses parts of language implemented in pure Python while the other algorithm silently makes use of parts ported to C and runs faster, it can be confusing. This was the situation I found myself in while running my 2 algorithms on Python 2.5.

In fact, even beyond python, I would argue that a good introductory programming language should be consistent in the results it generates even if they are not the fastest. Perhaps Jython is a better bet in that sense since it will make sure that there are no optimized C modules skewing the timing results. Perhaps it is possible to create a dumb-down version of CPython which will not use modules written in C, using pure Python replacements instead.

PS: In fact, given that algorithms often have a space-time trade-off, even GC might play spoilsport. So does that mean going back to C? :)

Sunday, July 18

Why I am not excited about the new Rupee Symbol!

While the media initially went all gaga over the new Rupee symbol which somehow seems to have pushed us into an "elite" club, the reports have started coming in that it will be a while before the symbol gets into regular usage.

Anyone with interest in Indian language computing is well aware of the fractured state of the Unicode usage. Most of the media houses still use a proprietary font for their content. Even govt uses many incompatible fonts in the data created by it. Result is a typical " जल बिच मछली प्यासी" situation. Even though large amounts of text is available in digital format, it is useless for a lot of purposes. A lot of people cannot view it properly without installing tons of fonts, it cannot be searched or indexed and it is useless for most computing purposes. Lack of huge amount of digital text is one major problem hampering research in NLP for Indian languages.

With the introduction of Rupee symbol, the situation can become even worse. First it needs to be approved and incorporated in the Unicode standard which itself might take up to 2 years. Then we will need Unicode fonts that include this glyph. Since ISCII is controlled by the Indian govt, it will be able to incorporate it much faster and non-unicode fonts will continue to be used in govt works. This will further delay the adoption of Unicode.

In the view of the above, the whole exercise of giving a symbol to Rupee, is not a mere symbolic exercise which we can just ignore if we don't care about it. It has all the potential to make the state of Indian Language Computing worse then it is today.

Friday, July 9

Inaugural issue of Pothiz is here!

Inaugural issue of Pothiz - a new free online magazine is now available on Pothi.comJaya is the force behind this one.
I am also trying to write a story for the next issue - a sci-fi epic :-D. Entries are due by 16th July. Let's see how far you can continue to write code and story without mixing them up too much!

Tuesday, July 6

How to setup Facebook vanity URL for fan pages

What is a Facebook Vanity URL?
Facebook vanity url is a url like http://www.facebook.com/pothidotcom which is shorter and easier to remember as compared to the default
http://www.facebook.com/pages/Pothicom/18749584929?ref=mf

How can you set it up for your page?
It took me a bit of searching to find this but you just need to visit http://www.facebook.com/username and you can setup vanity urls for all your pages.

Fixing Logrotate on Ubuntu Jaunty Server Edition

After about one year of having used the VPS based on Ubuntu Jaunty, recently I had the need to go look at my Apache logs. Now Apache log on my desktop machine are always nicely rotated by logrotate without me having to do anything. However on the server, I found a gigantic 1.2 GB other_vhosts_access.log staring at me with no rotation whatsoever in last 1 year.

So I began to learn about logrotate. Running logrotate by hand produced the following which was obviously not true.

abhaya@www$ sudo logrotate -d /etc/logrotate.conf
rotating pattern: /var/log/apache2/*.log weekly (52 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
log does not need rotating
considering log /var/log/apache2/error.log
log does not need rotating
considering log /var/log/apache2/other_vhosts_access.log
log does not need rotating

The contents of the status file (/var/lib/logrotate/status) which logrotate uses to determine which log files need rotating was surprisingly empty:

abhaya@www$ cat /var/lib/logrotate/status
logrotate state -- version 2

So for some reason, logrotate was not able to write to the status file and so no logs were being rotated. Following the advice in this thread, I deleted the status file and ran the logrotate again as following:

abhaya@www$ sudo logrotate -d  /etc/logrotate.conf

And again got the same result as before. Surprised, I tried the command exactly as suggested in the thread:

abhaya@www$ sudo logrotate -v  /etc/logrotate.conf

And voila:

abhaya@www$ cat /var/lib/logrotate/status
logrotate state -- version 2
"/var/log/btmp" 2010-7-6
"/var/log/wtmp" 2010-7-6
"/var/log/samba/log.nmbd" 2010-7-6
"/var/log/samba/log.smbd" 2010-7-6
"/var/log/mysql/mysql-slow.log" 2010-7-6
"/var/log/mysql/mysql.log" 2010-7-6
"/var/log/mysql.log" 2010-7-6
"/var/log/dpkg.log" 2010-7-6
"/var/log/apt/term.log" 2010-7-6
"/var/log/apache2/other_vhosts_access.log" 2010-7-6
"/var/log/apache2/error.log" 2010-7-6
"/var/log/apache2/access.log" 2010-7-6

Just one last problem remained. With this setup, logs would start rotating only next week and I did not want my Apache log files to get any bigger then they already were. So I cheated by manually editing the status file and pushing the date against the apache logs about a week earlier.


"/var/log/apache2/other_vhosts_access.log" 2010-6-28
"/var/log/apache2/error.log" 2010-6-28
"/var/log/apache2/access.log" 2010-6-28

And ran the logrotate by hand once again. The logs duly rotated and hopefully will rotate as expected in the weeks to come.

Sunday, January 31

Recommendations

Why is it that while as a customer anyone can recommend or not recommend my company to others but as a company/provider, I cannot recommend or not recommend a customer to other companies?

Think about it! A registry of PITA customers who are not only going to waste your time, but also going to blame you for it!

Over 1.5 years of Pothi.com, I have interacted with so many wonderful people both as customers, as people who believe in us and people who have been constructively critical. Without them we may not have even lasted so long - they supported us and told us that we were useful when our output was very raw and crude. They pointed fingers and poked holes which helped us improve. It is for all those nice people that I feel this strong urge to single out the jerks and show them for what they are.

We love our customers and see them as our partners. We plan our activities with them, take their suggestions quite seriously and want to succeed with them. Right now I am trying hard to not let these one off nut cases push us off track!

Needed to get this out of my system. World is just so unfair sometimes.

Friday, January 8

Entrepreneur or Escapist?

Recently MVP guys started this meme on Twitter which asks #whyamientrepreneur? I am sure every entrepreneur at one time or the other has asked him/herself this question. Some ask it even before they start, while others ask it when they are considering quitting. Either way the answers which come out are quite eye opening - a wide range of reasons bring people to startups. Somebody wanted to create jobs, somebody just wanted to break free from artificial restrictions imposed by the system. Others wanted to be their own boss. All of these are very inspiring reasons and I am sure they have been given with complete honesty. But here is my question to all of the entrepreneurs - Are you an entrepreneur because you are an escapist?

Before I explain what I mean, let me explain what I do not mean. Those who came to do a startup because they wanted to break out of the system or didn't fit in are not escapist by my definition. Neither are those who wanted to "escape" the corporate culture and belong to a smaller team. All those are good kinds of "escapism".

The bad kind of escapism is the one because of which your customer service sucks. Or because of which you haven't followed up on that lead that opened up couple of weeks ago. Or the one because of which your product is never ready to ship. Since you are your own boss in a startup and there are always more on your plate than you can handle, it is easy to keep picking up things you feel comfortable with, things which look like fun and in summary, things which are easy for you (they may look hard to others). If you are a techie, you can always keep working on the next feature believing/hoping that after this your product will be market ready. The truth is - it is not the product, it is you who is not market ready. Or if you are a salesman, you can keep selling your product while relying on outsourced developers and not understanding one bit what goes into it. Since nobody is going to grab your neck for it, it is easy to just let go of that one bad instance of customer service and not call back, not follow up on it. Nobody likes to talk to angry customers. It is easy to escape when nobody is holding you responsible for it.

Entrepreneurship is not about starting your own company, it is about the attitude with which we approach the world, our daily life. Are we pushing ourselves everyday? Are we stepping out of our comfort zones? What new have we learned in past 1 month? Honest answers to these questions may not give you a successful startup but might make you a better entrepreneur.