A letter to myself

I turn 22 in ~3 hours. Never cared much about birthdays but for the past three years, I write a letter to myself one year in the future, and ten years in the future. I use http://www.futureme.org who’s never forgotten to send me my memorabilia.

Two years ago, I had hit rock bottom in my life so far. I wrote to myself asking to have changed, and last year was a more pleasant email.

Here’s what I hoped to have achieved by this date:

  1. Got an internship at Google or somewhere similar. (I was at Google when I wrote it) [DONE]
  2. Got a tattoo which is 2in x 2in and says “42” and nothing more. [DONE] :)
  3. Clear out all pending courses. [DONE]
  4. Lose last remaining excess weight to a target below 64 kilograms. [DONE]
  5. Learn to stay in the here and now. Focus on the task at hand. [DOING]
  6. Write a good deal of code. [DONE]
  7. Run the 7 kilometers in under 40 minutes [Did it in 31].
  8. Spend more time with friends, and force them if they are busy [DONE]
  9. Migrating the website to Appengine or something. [Meh. if it ain’t broke, don’t fix it]

It’s nice to be able to go back and see what I was up-to two years ago due to the fancy archive feature. It feels good to know that you did what you intended to do, and maybe even a little more.

I’m off to write an email to myself, which will be delivered next year. If you’re reading this – future me, Hello!

On Roy Schestowitz and BoycottNovell.com

On June 28th 2009, my motorcycle gets towed due to a made-up parking violation while I went for my evening run. Two hours of trying to get my vehicle out of the impound (having left my wallet at the office and no money to get back) later, I manage to recover it. Utterly frustrated, I get back expecting to relax a little and maybe work on my Summer of Code project. I open up my RSS reader and I see this link pop up. It was Richard M Stallman “warning” people about potential issues with a certain project. The first thing I think is “Screw this guy”.

So I fire up vi (yes, almighty VI. I love vi ^_^), and start ranting with a very catchy “Fuck you Richard Stallman” as the title. I was always for avoiding half-baked opinion posts, let alone about some topic people felt so strongly about. The crux of the article was that non-copyleft licenses were good, copy left licenses were evil, and why I felt so. The post flew off into the cloud as quickly as they dropped from my fingers. One thing I regret is making a minor personal insult at Roy Schestowitz, the author of BoycottNovell.com, as I often disagreed with his principles and methods. I removed the offending statements after conversing with Roy personally and understanding that he’s a nice guy just on the different side of a debate I never wished to even know about, let alone participate in.

I also take this opportunity to publicly apologize to Roy for any personal comments I wrote about him.

Soon, the comments and emails started trickling in. What it was about was immaterial right now. Most of them were good natured and it was allright. I thought a little freedom of speech couldn’t ever hurt me back. I was wrong. I’d made an explicit disclaimer in the beginning, which goes something like:
“This has nothing to do with the fact that I’m an intern at Microsoft, and am contributing an Add-in to the MonoDevelop project”

So let’s get this straight:
Day job - Intern at the MS Research lab in Bangalore, India. Works on Multilingual systems
Free time - Contribution to MonoDevelop as a Summer of Code project. works on task-centric programming

Now I wrote this post from home, using a personal computer, using a personal internet connection and personal time. My employer had absolutely ZERO involvement in any activities at that time, and I’d even declared earlier on.

Imagine my surprise when someone points me to this article [screenshot here]:

“Another person, who describes himself as an “intern at Microsoft [who is] writing an extension to the MonoDevelop project,” has just written about this. “Fuck you, Richard Stallman,” screams the headline of his blog post where he complains about Stallman’s stance on Mono. It’s interesting to know that Microsoft is helping MonoDevelop, which helps Windows of course [1, 2, 3]. The foul-mouthed rant also links to libel about me (personal attacks) and about this subject in general. Not bad for proponents of Mono who are also working for Microsoft, eh? At least there is a pattern.”

There are some significant issues I had with this paragraph:

1. It takes my *Disclaimer* out of context, and twists it. It doesn’t even link to the original article to verify authenticity.
2. It makes it look like working on MD is part of my job description. It is not - for future reference.
(for example, if you copied the text “working on MD is part of my job description” and pasted it somewhere, it would be utterly misleading. That’s what happened)
3. Suddenly It’s written that I represent my employer, which I do not, and never wish to.
4. “MonoDevelop helps Windows” because it has a community preview port? Emacs releases a windows port, and so does apache, python, and vi - but they never explicitly help Windows eh?

Does it matter where I work and what I do? You never see anyone saying that I contribute patches to other projects, organize camps at college to help people learn Linux usage and what not. I do many things in my personal time, related to the industry, or otherwise. Judge what I do and what I write by it’s own merits, and don’t bring an employer into it and complicate things.

To my shock, another post pops up, linking to the previous one. [screenshot here]

“Microsoft staff may openly say “Fuck you, Richard Stallman”, but there are rebuttals to this disgraceful behaviour. Stallman was being polite and rational.”

The snippet links to the previous BN article. Suddenly a twist in words turn into an absolute horrible lie. What’s worse, someone inside might think that I’m representing MS and my company thinks I’m to blame. I can take any amount of flames and corrections, but don’t put my career at risk, especially one that hasn’t even begun. This hurts my credibility and potentially my future prospects - no telling how many people pick up these things and mutilate it.

There is an explicit contract which tells me that I’m responsible for what I do on my own time. 5:30 PM onwards, I’m just a 21 year old guy, not “MS Staff”. The offending post was made around 6:30 PM GMT+0530. My employer has nothing to do that post, except that the fine coffee they provide was still in my bladder at time of writing.

So much for freedom of speech eh? I should watch what I say from now on.

Now I write a long email to Roy apologizing and requesting he take away the offending portions. This goes beyond name calling, and can affect my career. I even go on IRC and speak to him, and turns out he’s actually a really nice guy, albeit a little overtly passionate about his field of interest.

In fact, since all their IRC logs are public, you can even see when I joined inside and spoke to him, with the IRC handle “antileet”. The records will be available here. Mirrored over here.

I am only glad I was able to get on Roy’s better side, as very few people with my alliances have. As someone pointed out to me, I’m an “extremely juicy target” for someone in his position. I look forward to the day when I’ll enjoy reading his articles which document the forefront of what the community is upto, and bond the world with positive constructive information.

He understands and adds an Addendum stating that my statements should not be attributed to my Employer. Unfortunately, and understandably, he refuses to remove the original content as a response to the name calling that was involved earlier on. Now I am still concerned that the addendum isn’t prominent and a search for the title phrase leads people to my weblog, often with a false impression. Moreover, the content is untrue and deserves to be taken down.

This gives me an explicit need to clarify my position and situation along with proof, in case someone finds the original article, and leave no room for doubt and misrepresentation.

This post isn’t an opinion or a notice but more of a clarification. I’m done with ranting and I’ve learned my lesson to speak about positive, constructive topics. But it’s also a warning to take everything one reads with a pinch of salt. Tommorow an article on that website will reference my misfortune, and what was originally a misunderstanding becomes a lie, which becomes a proof of something to support an opinion or argument.

I do not want to make any judgements or statements about what I described in this post. I can only hope the community can resolve it’s differences and unite.

Saddened? Losing faith in humanity? Here a youtube video of a girl with a beautiful voice singing and playing Tool’s “Right in Two” that always cheers me up. Now if you’ll excuse me, the semicolon key and the curly braces on my keyboard are feeling neglected because I haven’t written any code in a little while - no more plaintext for me :)

Project Conn’r – Easy, open, cross-network communication framework

Close connection - Verbundenheit by alles-schlumpf.One Minute Sales pitch: Conn’r is an open source platform to allow developers to build applications that allow users to exchange realtime information freely between a user‘s client and all the other social contacts from existing social networks – thereby making the humble sign up form redundant. A user with any social network credentials can communicate with another user of the same client as long as they share a common link on atleast one of the many (extendable) supported social networks. This library is being written to prevent companies like Facebook, Twitter, and Google to have sole control over being able to write social applications that exploit their friend graph. With Conn’r - anyone can write an application that works out of the box with all social networks.

Let me illustrate with an example. Suppose I want to write a social whiteboard client application – where users can collaborate with friends and come up with new ideas. I would have to create a new network, add a friend graph database, and make multiple architectures, including a realtime comet-based communication architecture. Last but not least, users will have to sign up and ask others to sign up as well – something which will cause adoption percentage to drop.

If a developer uses Connr to handle all the communications instead, all a user has to enter his/her credentials for any major social network like Twitter, Facebook, MySpace, Google, FriendFeed. The Connr framework will identify all of your friends and send them to a confidential server (which will also be open source). Since the server has also got information of all the other Twitter, Myspace, Facebook, etc users available, it looks for all the relevant connections and connects the users using a jabber bridge.

connr

To illustrate roughly how conn’r works, I have drawn up a rough flowchart. It’s largely self explanatory, and you can download a high resolution version of it or the original .dia source.

The framework does two major functions:

  1. Determine social connections, and find out which of them are connected to the same Connr server.
  2. Abstract a jabber connection by making sure that clients are compatible and to send data of unlimited sizes.

To write an application like Google Wave – with realtime communications between all your friends will become absolutely trivial. We envision a new wave of applications where any user is not limited by what social applications his network provider builds. You can build desktop client apps which use this functionality but also build web-based applications which do not involve a sign up procedure.

The development team:

The project has finished the planning stages. My friend from college Sanket Agarwal is looking into automating Prosody, a blazing fast lua based XMPP server, which we will use to handle the communications, he will start writing the serverside components to match users from various social networks in either C++ or Scala. My personal involvement so far is only the idea, and part of the C#/Mono client library which was extracted from another file-sharing type project I had tried to build earlier.

We will be hosting all our code on Github and I own http://connr.com so I guess the project will live over there. The name was originally for our anonymous chat project but I feel this one has more steam.

(Image from Flickr user alles-schlumpf. Creative commons by-nc-sa)

On Mono and the GPL

Coming here because of something that you read on BoycottNovell.com? Please read this article first. Thank you.

Post has been removed. Turns out you can’t post your opinion without having everyone who disagrees come down upon you with a thunderous force. I didn’t know anything about what I was speaking about, let alone enough to pass judgement on.

I apologize to anyone who is offended and encourage them to email me - anirudh@anirudhsanjeev.org with good, constructive advice which might help me become a better contributor to the community.

Congratulations Omegle, you beat us to it.

Over the past couple of months or so, me and a friend were working on an idea, and we kept the details of the same mostly to ourselves. It was called “Connr”, a shortened version of “connector”.

The whole idea was to connect a visitor to another random visitor and let them speak. It was a good idea, and there wasn’t really anybody else who had an idea like this. We were planning to launch early next month on an amazon EC2 server.

Today, I found out about “Omegle“, a service that does exactly what ours does. It received coverage from many major weblogs, including XKCD’s, thus making our product completely redundant even if we do decide to launch it. While our product was more impressive on the backend, and we already figured out how to solve some of the problems that they are facing, they were first - and in this industry that’s all that counts.

While we are terribly disheartened by our idea not making it into the big league, we learnt a lot, and we’re glad that an independent student like us, rather than a faceless corporation got in on this idea.

I would like to wish Leif Brooks, creator of Omegle the best of luck for a successful application.

How to send 420 characters per twitter message

I’m not a big fan of twitter since I closed my account a year ago. I was sick last night and watching the Colbert Report because I couldn’t sleep and Stephen Colbert was interviewing Biz Stone, cribbing about the 140 character limit. I had an idea which seemed great when I thought of it - to apply some on-the-fly compression by exploiting text encoding. Now the idea doesen’t seem so shiny after all.

Abstract:
To send upto 420 characters per twitter message. This will be done by processing the large text to fit into 140 characters. The 140 characters will be the same length and will not appear differently to the server, but will be a jumbled mess of text for any human who reads it. But on running an inflation algorithm on the same text, another user can get back the 420 character message.

Background:
Today, we’ll be exploiting the encoding that Twitter uses for it’s text: UTF-8. UTF-8 is variable length from one to four octets for each character. Since most english messages use ASCII character set, only the first octet is used, and any ascii string is utf-8 compatible by default. It’s a fantastic idea that saves space, and allows the full unicode alphabet because of it’s enormous size in case all four octets are used. Most of the regular english content that you read ever uses more than two or three octets.

Core Idea:
Construct a utf-8 character with 4 bytes. The first byte signals the start of a 4-byte sequence(thus having a value between 240 and 244).
Use each of the three octets to store a different ascii character. This way three ascii characters appear as one utf-8 character, thus only one out of 140 characters is used up. To deflate, read one utf-8 character, and interpret each of the final octets as an ascii character.

Technical complications:

  1. The first byte can’t be used :(. It has to be a value between 240-244.
  2. The second, third and fourth byte can have only 0×80-0xBF (that is 128-191) as the content. This means the size of the character set that we can compress is 64. Sufficient for Alphanumeric characters and spaces. UTF-8 is not to blame here however. A full four-byte encoded character can have 64*64*64 variations (multiply that by 4 considering that the descriptor byte in the first slot can have four combinations), and you get yourself a fine encoding format.
  3. Any non-alphanumeric character would be left alone because it won’t fit in the space that we have for each octet.
  4. Any string polluted with non-alphanum characters would compress real poorly. Consider ‘http://is.gd/1f4′ or something like that. ‘htt’ will be one character, ‘p’ will be one, ‘is’ and ‘gd’ and ‘1f4′ would be singular characters. The code will have to make sure that we don’t use 4 octets by default, or fill in the remaining octets with blanks and discard them during inflation.

Implementation:
I’m guessing the implementation is easy enough, though text encoding is one of the hardest things for me to get right. I’m going to try to use the System.Text.UTF8Encoding and Sytem.Text.Encoder classes to read the bytes and re-construct a new string. I’ll dump the code here when I feel like it.

Ideally, there should be implementations in each major language - javascript, python, C++, C#, actionscript - which are used to write twitter apps. Ideally, a greasemonkey script can be run which looks for compressed utf-8 text and decodes them in the twitter page itself.

Disadvantages:

  1. All clients should necessarily have an inflation script running.
  2. Supports only alphanumeric characters+space
  3. Won’t be searchable.(unless you re-encode the search query itself)

Closing words:
Die twitter! die!

Suse Studio is overflowing with awesome.

After about five months of waiting, I got invited to Suse Studio Alpha. If you don’t know what Suse Studio is, and you are interested to know what it is, (congratulations, you are part of a very small sample set) it’s this:

Suse Studio as far as I used it, is a tool to help you build Ready-to-deploy variant of the opensuse 11.1 distribution. The only catch is that you can have as many or as few packages as required. This allows you to build very specialized “appliances”.

If I wanted to make a distribution catering specifically to multimedia based packages, it’s a throwaway task. You go to the website, add packages from their intuitive web2.0-ish application, and click build. Ten minutes later, a spanking new application is ready for your usage.

I see several use cases of this:

  1. A power user who also uses opensuse can make a distribution perfectly catering to his/her taste.
  2. Perfect for deploying specialized tools in offices, etc. I can make a appliance catered specifically for java development(and later, stab my head with a butter knife), and deploy it on thousands of computers around.
  3. Many more, I’m not going to elucidate here.

If you are truly interested in finding out how it works, you can see the screencast over here.

But here’s my two free-as-in-beer cents on the tool.

  1. Oh god! How did they even manage to build that thing. It’s mind boggling. And they made it a web application. Holy shit! It builds an ISO while you sip coffee! The only thing that can make it better if it can automatically do all your work, write a few research papers for you and store them on the image so it’ll be on your desktop when you start using it.
  2. Will this convince me to move out of my long-term relationship with debian/ubuntu? Probably not.
  3. Will this convince me to build the most badass distro, and waste an evening trying it out when I should be doing something productive? Heck yeah!
  4. While there’s no point in this for me, there’s no doubt that a lot of people will find this really useful to distribute customized applications.

You can look at a screenshot of how it works for me. I was building an appliance with lots of development packages. Finding packages are realy easy with the feature of “patterns”. It’s sort of like groups of packages, like “C++ Development” which do not deserve their own category yet.

I would love to see a tool like this for debian. I’m pretty sure it won’t be much harder than suse’s tool to build. The clock counts down before the open-source hippies ruin a great tool’s reputation claiming that the server-side code is proprietary, despite knowing that it runs on server farms and took a really long time to get running.

Rest assured, this is an awesome product which will make a big impact and not just a novellty(the puns!!! someone make them stop).

Identity Crisis

Anglicizing Indian names in the US is quite common these days. Let’s face it, some names are hard to pronounce. When I was in the US eight years ago I remember mine getting butchered in as many ways as one can count. A few people who knew they had to stay abroad for a longer time did not want to have to spell out their name or correct pronunciation every time they met someone new.

For example, my friend and mentor, Vikram Dendi, who was in the US from his undergraduate times claimed to have shortened it to “Vik” every once in a while when I met him in Bangalore.

Over the past eight years, somehow, people started calling me “Andy”, and it’s stuck surprisingly well. It’s rare to find anyone call me by my given name in college, not for any cultural significance but rather for the sake of convenience. You can’t beat a one syllable name.

I’ve been talking on mailing lists and on IRC more these days and am starting to wonder if I need to regularly use my anglicized name in my online collaborations. The short answer is yes, and the long answer is too boring to put down here.

So I decided I’ll just use my utterly cool domain name which is lying around stale for email. I will be using andy@ninjagod . com for my purposes. So if you can’t remember my name or email address(why would one even need to?), you’ve got somewhere new to fire it off to.

Billion Dollar Programming Language

PHP

(pause for laughter)

PHP

(pause for more laughter)

PHP is RETARDED.

(pause for applause, laughter and cheers)

Now folks, I’m usually very diplomatic and politically correct (except when it comes to java), and a jolly and cheerful guy, but I have to ask the PHP blokes one question:

Why the fuck does every variable have to have a “$” behind it, when every other sane language (I know about perl) manages to do otherwise.

I know PHP powers most of the internet and Wikipedia, heck it powers this website right now. I’ve even written well over a few thousand lines of PHP myself. But for some obscure semantic or parsing benefits you just screwed up a great concept of a easy to deploy serverside scripting language.

Here’s why I think having a dollar behind every variable is pants on head retarded:

  1. Press the “$” key right now. Note that you press the Shift button with your pinky. We do this upto four times a line of code (mostly for () and {} and the occasional badass regular expression). And if you think the emacs pinky is bad, wait till you get PHP pinky
  2. While all programmers would be as useless without a shift key as a ballet dancing sumo wrestlers… I really don’t know how to complete this sentence.
  3. It’s easy to mistype or forget typing it, and very hard to type it considering functions don’t have it and only objects do. And you go ahead and choose a fucking *backslash* as a namespace seperator (don’t believe me, see this article).
  4. Seriously? Backslash? As a namespace seperator this\is\how\it\looks, not to mention wreck unforseen damage for vi users. *backspace* would’ve been a less retarded choice as a namespace seperator.

I hope the django pony kicks your teeth in.

Disclaimer: I’m pissed and ranting. This post is stupid and will be prolly taken down. Moreover, none of my logical docile posts ever get any comments, and I feel the need for collaboration.

Anomit Ghosh, I’m counting the minutes before you put across your $two $cents on the topic.

Morons. All of them.

Just because Jerry Seinfeld, George Carlin, and Randall Munroe can be funny whenever they want to doesen’t mean you can.

April fools’ is the time of the year, when everyone thinks they’re being funny but they’re just being dicks. And when someone thinks pictures of cats with horribly disfigured grammar is funny, you know it’s going to get really pathetic. I’m talking about you - the Internet.

A lot of people know that I have a short term memory length of nearly three seconds in the morning. I spend about five minutes reading my feeds in the morning and I was pleasantly surprised to see interesting and breaking news just to get fooled, and this happened six times in the morning.

I’m pretty sure a conversation like this has happened several places in the world at this time:
Billy: Hey grampa, <enter tragic news here>
Grampa: (goes into shock)
Billy: April fools’!
Grampa: Oh god, I find it hard to breathe, there’s pain in my left arm.
Billy: Good one grampa, but you’re going to have to try harder than that to get me.
Grampa: I’m not kidding, get me to a hospital.
Billy: Get more creative than that

The worst of all seems to be that of slideshare. I’d signed up for their service, which I actually think is pretty neat.

I got an email saying: “You’re a slideshare rockstar”(IF you didn’t know already, “rockstar” is the word I loathe the most.) Now that I’m a slideshare rockstar and was impatiently looking for ways to find slideshare groupies, I smelled something fishy.


We’ve noticed that your slideshow on SlideShare has been getting a LOT of views in the last 24 hours. Great job … you must be doing something right. ;-)

Why don’t you tweet or blog this? Use the hashtag #bestofslideshare so we can track the conversation.

Congratulations,
-SlideShare Team

Every self obsessed half witted moron (a sample set, which, by some freakish coincidence, are all twitter users), decided to blog, twaat, microblog, nanoblog, fermiblog and gloat about their newfound glory. After seeing the pageviews rise and increase hundredfold, they realized that their creative inputs were clearly worth billions. They quit their jobs, brought hundreds of “I’m a slideshare rockstar” Tshirts, maxed out their credit limit knowing that a few minutes on powerpoint would reimburse their investment.

Then they found out that it was a joke with 100x fake page views and everyone got the same email.

Not surprisingly, a lot of people are pissed at slideshare, which is pretty sad because I’m a fan of Rashmi Sinha’s work, which I’ve been following for quite a while now.

There’s a lesson to be learned here, in my opinion:

  1. Humour is contextual. A normal person can be clever and insert a few puns into their text, but that’s it. The funniest jokes are internal, the ones that you crack with your buds, and have a lot of context to them.
  2. What slideshare did wasn’t “fooling”, it was outright lying. I just hope that it doesen’t get them sued or something.
  3. It’s funny to make one or two people laugh. Try it for an entire userbase and you’ll just piss them off.