Monday, October 10, 2011

This, That and More - The story of our Farewell :-)

Its the time of life that almost everyone has to experience. There is always a time when extreme fun ends. The farewell to college life is the event where one really realizes what he/she has done over the past 5 years, how lame he/she has been over the past 5 years, where he/she realizes the actuality that this part of life is going to end soon.

It was one such day in our lives. October 8, 2011 - The day that made many people who hadn't knew what a tear was previously in their lives cry their ass off.

The day was full of surprises. It wasn't just the day. The whole tale of farewell, right from the informal invitation to the formal invitation to the awesome ride to the farewell venue (which we never knew till we got there) was full of surprises.

Suspension Memo

Let me rewind back a few days to start telling this story. It was a usual day in college and I was with my friend in a nearby pani poori shop. My phone started ringing and at first I was kind of amused to see that it was my dad calling me (usually he never calls me unless its some emergency). I picked up the call and he said, "hey whats happening in college? we have received a letter from college that looks very threatening. it says you are suspended!". At first thought, though i was shocked, I definitely knew it was some prank. Then i asked him to read it out fully and confirmed it was indeed a prank. It was the informal farewell invitation that i was talking about! Many people fell for the letter. Few girls even started crying right away when their parents called!

(Click to Enlarge)
Handmade Invitation

Two days before farewell, the juniors asked us all to assemble in a classroom during lunch. It was quite a small classroom and there were 130 people in it. Needless to say the amount of noise we were producing would definitely turn all the heads to look at us. Then, each one of the juniors came and gave us an invitation. My first thought on seeing the invitation was that it was really awesome. For one, it was totally handmade. 70 handmade invitations? Thats a loooooootttttt of work to do!! It also had a nice picture of both our batches together. As one of my friends rightly pointed out, "anyone can spend a lot of money, but putting in effort for preparing 70 invitations really shows love!".



Note that, its just two days to farewell, and we don't know the venue yet.

Trailer

To add to all the expectations, the juniors released a trailer video for the farewell. Still, no clue of the venue! They kept us guessing!



The D Day - Assembly at IM Amphitheater

Even on the day of farewell, we didn't know the venue. We all gathered at IM amphitheater, 5 or 6 juniors were along with us to direct the proceedings. When everyone was there, the first instruction was to "Proceed to Peelamedu Bus Stop". People started fussing! What? Bus stop? Really?



The Journey to the Venue!

The first surprise of the day was parked at Peelamedu Bus Stop, we weren't going to take a city bus. There was a specially arranged bus which was waiting to take us to the venue! Even the bus driver was properly trained to play along with the lines of juniors to keep up the suspense of the venue!



The bus first started westward (towards lakshmi mills), so the first thing we did was to strike off of the major hotels on the east (jennys club, park plaza and le meridian). The bus journey was on and so was the music and dancing within no time. The bus slowed down and stopped in front of Tristar Deja Vu! Everyone shouted saying, "Yaay! We've reached! Our guess was right!". One of the junior guys got down and talked to the hotel security. He came back into the bus and said, "This hotel is very bad, olunga paint kooda adikala, we'll go somewhere else!". That was the heights of surprise!

Then the bus took a "U" turn. Everyone was able to guess the venue after the U turn! It was definitely one of the three hotels which we struck off earlier. The journey went on, along with the music and dance. We crossed jennys club and park plaza. Now everyone knew the venue! It was Le Meridian!



Le Meridian - Kovai Ballroom 1

Amidst of really personal warm welcome, we entered the room. My first thought on entering the room was "WOW"! I was totally speechless, it was amazingly decorated and well lit.




First item of the day was to celebrate the birthday of an unlucky junior soul. Unlucky because there were around 70 people waiting in the queue to wish him with birthday bums! There was a nice bigg cake with which we celebrated his as well as few others' birthday who fell in the proximity of few days.



Next was a video depicting how we have evolved over the past 5 years. The video rekindled many nice memories from our past. It indeed amazed me to know how much everyone has changed in personality over 5 years. Then came a tea break.



Next was a funny game. It was named "Balloon Bamblimaas!" :-) We were divided into 6 teams. Each team had to choose a person, who will sit on a chair. Rest of the team members have to place a balloon in the first person's lap and burst it by sitting on it! Team who bursts the maximum balloons will win! It was a fun game and as one of my friends very aptly pointed it out, "S.J.Surya kooda indha maari oru game a yosichirukka mattan da!" :-)



Then there was dancing for quite a while with various pairs formed by the juniors! Also, there were special performance by two awesome dancers of my batch, Santhosh and Michael along with the awesome dancer of the juniors batch, Shyam!





Then was the game named "Queen of Sheeba" (never mind the spelling). The queen will ask for an item, which we will have to fetch from some junior and hand it over to the queen. It was ultimate fun. The first thing that queen asked was for a t shirt. One guy was literally stripped in the process of obtaining the t shirt! ;-) Then was many other fun things like cigarette packet, hair clip and gold chain.

Amidst of all things we had lunch. Usually when we get free lunch, that will be the talking point. But in case of yesterday, no one even bothered to say "yaay free lunch". So much was the effect it had on all of us!



Then, there was a challenge wherein guys were asked to wear saree on stage with girls' help orally from their seats, followed by a cat walk and dance! Few of them did it quite successfully!!



Next was, they gave us all a token of rememberance. They had a song for every one of us and kept us guessing who the next person was. The gift was really awesome! It was a wooden piece with each of our photo carved in it along with a statement from their batch! So personalized and so amazing! It was really wonderful! They also gave us a booklet which had feedbacks about our batch from faculty, seniors and juniors.





Then came the feelings part of the day. The part which many thought can get over easily but went in the totally opposite manner. A video was screened. The video again showed various pictures of us over the 5 years. In the last scene of the video, few juniors were talking about things we'll miss and things they'll miss after we go away from college. The scene was well shot with only candle lights. The lights in the auditorium was switched off during the video screening and we were all totally into the video. The last sentence in the video was, "idhellam en panrom edhuku panrom nu engaluku therila. aana neenga therinjukanum nu nenachingana konjam pinnadi thirumbi paarunga! (இதெல்லாம் ஏன் பண்றோம் எதுக்கு பண்றோம்னு தெரியல. ஆனா நீங்க தெரிஞ்சுக்கணும்னு நெனசீங்கன்னா கொஞ்சம் பின்னாடி திரும்பி பாருங்க). Next moment was the one which made many cry. We all turned around, all the lights in the auditorium came on, 70 juniors were standing with each of them holding up a heart shaped balloon in their hands! That was totally the moment of the day! Unforgettable for life!

What happened after that was quite undescribable with words. Overall, it was indeed an amazing day. I was so happy to see the effort that the juniors have put in, in even the tiniest of things. Their attention to detail and level of personalization was highly amazing. In the end, the day concluded with a simple formula, Xanthronz + Embergs = Xanbergs! As one of the facebook statuses aptly described it: 9 A.M - Xanthronz! 11 A.M - Embergs! 5 P.M - Xanbergs!!

Kudos to every single junior who has worked hard and showered your love to make this day make a mark in our hearts permanently!

-Vignesh

Thursday, September 15, 2011

Google DevFest 2011 - Bangalore!


Atlast, I attended a professional developer meet! And it couldn't be better. It was the Google Developer Fest organized by Google at Lalit Ashok Hotels, Bangalore. Most of the speakers were from Google headquarters, working on key Google products like Android, Chrome, Maps and App Engine.



The registration process went on very easily as they had a QR code in the confirmation mail, and used an android phone to take a picture of the same and verify the registration. Also, they had queues based on alphabets range. The T-Z queue was empty while the other queues were having atleast 20 to 30 people in it. For the first time in my life, i experienced an advantage of my name starting with V!

In this post, I am sharing the raw notes which i took during the keynote and various other talks. Hope this will be of some use.




Keynote - Android
* 550k+ activations per day
* Complex Screen density vs Size matrix - unifying everything => android
* Always use DPI (density per square inch) for specifying assets
* Honeycomb features
* Fragments
* Loaders - wrapper on top of asynctask
* Action bar
* Tabs
* Animation framework
* Compatibility library
* Multiple APK Support

Keynote - Bleeding edge HTML5 - http://india-devfest-keynote.appspot.com
* Interestingly, this keynote isn't called as "Chrome", though most of the topics were Chrome specific
* 160M active users
* Page Visibility API
* Prerendering
* Offline capabilities
* Web animation - CSS3, WebGL
* Native Client
* Future
* Web intents
* Fullscreen content - Fullscreen API
* Web Audio API - Real time processing and analysis of audio
* WebRTC - Real time communication
* Be updated
* chromestatus.com
* updates.html5rocks.com



Android Market - Tony Chan
* 250k + apps, 6B+ downloads
* In app billing, carrier billing
* Licensing
* All licenses allowed
* Code Obfuscation
* Don't reuse sample code
* In app billing
* Sell only digital content
* Reports for developers
* Device Filter
* Ability to exclude handpicked devices
* Multiple APK
* Filter by specific segments (platform version, screen size, etc.)
* App available as one product listing
* Apps upto 4GB coming soon (50mb app + 2gb archive)
* Pay attention to graphics - Featuring in android market depends mainly on that

Android Fragments & Open Accessory ADK - Tony Chan
* Fragments
* Fragments need not always have UI
* Fragments are an investment for the future!
* Fragments vs <include/>
* Fragments (optional UI, has lifecycle, not standalone, no direct interaction with intents) vs Activity
* Open accesory & ADK
* USB Device basics (Descriptor, etc)
* Open Accessory -> A USB host device that can communicate with an android device (e.g. Arudino)
* Use Android Accessory Protocol for communication

Building Integrated Apps on Google Cloud Technologies - Alfred Fuller
* App Engine intro
* Google Storage
* Store data in google's cloud
* Access via RESTful API
* Objects of any type (100GB / object)
* OAuth / Web browser
* Prediction API
* Machine learning API
* Upload training data -> Build model -> Predict new data
* Many machine learning techniques, Asynchronous training, Many platforms access
* BigQuery
* Analyze massive amounts of data in seconds
* SQL like query language, REST, RPC, etc.
* Batch jobs (Mapreduce)
* App Engine Identity API (For secure authentication)

Google Apps Marketplace - Claudio Cherubino
* Google Apps as a pure platform
* Google Apps APIs
* Success Stories
* OpenID SSO & OAuth
* Provisioning API
* Gmail contextual gadgets
* Sidebar gadgets in Gmail/Calendar
Twitter: @ryguyrg @scottmcmullan @stevenbazyl

Chrome Developer Tools - Boris Smus
* Basics - Cheat Sheet
* Revision history for all changes made inline in dev tools
* Aim to transform this into an IDE
* Commandline API - console.log takes n parameters, copy(), inspect() and $0
* Javascript debugging - See call stack, Pretty print
* Breakpoints - Line, Conditional, Exception, DOM, Event, XHR
* Future
* Extensions can extend developer tools too!
* Use chromiumer
* Remote debugging (--remote-debugging-port=31337 , Blackberry PlayBook only)



Google Places API - Chris Broadfoot
* What is a Place -> Abstract & Concrete
* Available as a web service and as a part of javascript maps library

Designing UIs for Phones and Tables
* UI Patterns for Honeycomb
* Action Bar
* App Icon - Where am i?
* View details - What can i see?
* Action buttons - What can i do here?
* Multi Pane Layouts
* Take advantage of screen real estate
* Consolidate multiple related screens into a compound view (similar to iframe in web)
* Screen rotation handling - Stretch (Settings), Stack (Calendar), Expand/Collapse (Gtalk), Show/Hide (Gmail)
* App Navigation
* Beyond the List
* Think and use innovative UIs to replace traditional lists (carousel, slidestack, etc.)
* Do's
* Aim for single APK
* Use compatibility library
* Customize visual design completely, if straying from Holo theme
* Support both landscape and portrait
* Extract dimensions for phones and tablets
* Use theme/style/etc. to reduce redundancy
* Marry OS visual style with your brand
* Don'ts
* Assume API level >= 11 (tablet)
* Assume xlarge == tablet (7" inch tablet is large)
* Use small font sizes
* Overuse fill_parent; Avoid excessively long lines of text
* Think tablets are big phones

Btw, the lunch was awesome too! :-P Overall, a great experience! :-)

-Vignesh

Tuesday, August 9, 2011

How I hacked an android game with Python and OCR!

Math Workout is a famous android game. In fact, it features in the top 5 of google listings for many math game + android related queries. The objective of the game is very very simple. It will fire simple math questions one after the other and you'll have to tap in the correct answer. Its a race against time among other users of the app in the world.

Here's how the app looks like and a few screenshots of questions:















As you can see, the game is fairly straigtforward. So its the time that you have to beat. A naive approach to that would be having a calculator or a computer near by and feeding in the questions to determine the answer and feeding it back to the phone. Totally manual!

Thats when the programming neurons of my brains started itching me that this could be automated and cheated by some mean. Come on think, think! So i sat on to solve this problem during my weekend and started thinking about ways i could attack this problem.

These are the steps that came into my mind in the first thought:

  1. Grab a screenshot of every question
  2. Crop the screenshot so that only the question is visible
  3. Run the cropped image through an OCR engine
  4. Parse the result and evaluate it
  5. Identify the co-ordinates of the resulting number and appropriately simulate touch events in the phone

Bummer! Every step looked a bit complex in itself at first sight. Then came along a bit of googling, and voila, i found the perfect tool that i needed to perform steps 1, 2 and 5. It is the monkeyrunner tool that comes along with the Android SDK. It opens up a Python API through which i can grab and crop screenshots, simulate touch events given an (x,y) co-ordinate. Exactly what i wanted.



Now, I have the cropped image that has the question in hand. Next step is to run it through an OCR engine. Again googling told me that ocrad is an useful OCR command line tool that was available as a part of the GNU project. I installed it and found that it cannot process png images. So i had to run the image through a converter before passing it to ocrad. This small piece of shell script helped me accomplish that:


To keep things simple, the shell script is invoked from python using os.popen(). Now, I have the actual expression as a python string. As you can see from the sample screenshots, few questions can be solved by a direct "eval" whereas others require some processing. Basic operations like addition, subtraction, multiplication and division can be solved using "eval". Whereas questions like "10% of 20", "square root of 9" needs some processing. Thats what this following if else block does:



Now that the expression is evaluated and we have the result in hand, all that's left is to go through the result character by character and simulate touch events in corresponding positions in the screen. I managed to identify the co-ordinates of each number in the screen by trial and error and hard coded those values within two functions named getx() and gety() which will take a character and return its corresponding x and y co-ordinates respectively, and the simulation happens. Here is the code snippet:



To orchestrate this whole process and play the game fully automatically other cosmetic additions like coping up with the frame rate of the phone and taking care of screenshot/ocr lags are to be considered. These are handled by minor if conditions and sleeps for very small amounts of time.

The end result is as you see in the below screenshot :-P



Here is a video of how the game looks like when it is being played by my script:

video

Though these steps seem like computationally a bit expensive, in practice i found them to be really fast. The script was able to answer approximately 2 questions per second (with an explicit sleep of 0.2 seconds between two questions - which leads to 2 questions every 0.8 seconds). A C/C++ program might run faster than this, but i stopped here as i have accomplished what i wanted. Overall it was a fun filled Sunday! :-)

Here is a link to the full source code of the automated script: auto_math_workout.py (you can find ocr.sh from the gist above in this page - rest of the source code is in the link)

Any comments/feedbacks are welcome! :-)

-Vignesh

Tuesday, June 14, 2011

Replacing Lightweight Web Services with Twitter Bots!

Foresight
Here is a vague idea. I'm not sure if i can even call it an idea. I always had the tendency to create lightweight information portals as usable web-based services with a very simple user interface. It just used to get things done and nothing more.

Practical Use Case
For example, let us consider a simple problem of "PNR Status Enquiry" in Indian Trains (for the uninitiated: PNR status is nothing but the current status of a waitlisted ticket in Indian Trains). First of all, such a system is really useful because the official Indian Railways websites are a bit clogged and they don't provide any alert services. Also, their websites are not so catchy and mobile compatible, and we definitely don't want to switch on the computer just to check the PNR status.

Before today, if i was asked to build such a system, i would go for an elegant google-like web page, where there is just a text box and a button for the user to enter the PNR number and click go. The resultant page will be again a simple HTML table with the ticket details (of course all of them scrapped from one of the railway websites - pretty sure that this isn't legal, although i am not aware of any laws against site scraping).

Do we really need web for this?
But this thought stuck me today. Web is a wonderful platform, at times too good to host silly and redundant stuff like this. Tomorrow i may have to build a similar system for Buses or Aeroplanes requiring me to add more and more pages with almost same functionality but different information sources. We don't need the web for such silly things. My idea is that, why not use "Twitter" as a platform for such web services. I've heard of facebook as a platform before for many applications and games (Farmville), so why not twitter as a platform too?

Twitter as a Platform
So what exactly do i mean by twitter as a platform? Let us redesign the same PNR status enquiry system using what i mean by twitter as a platform. Instead of having a web page for inputs, lets host a twitter bot, say @pnrbot. Now, whenever you need to enquire the status of a PNR number, all you have to do is post a tweet mentioning that bot, for example "@pnrbot 1234567890" (where 1234567890 is the PNR number you wish to enquire).

Now, as long as your tweets are public, the bot can read your tweet almost instantaneously thanks to the vast amount of real time APIs provided by twitter. Now the bot does the usual site scraping from the railways website for your PNR status and it posts it as a reply to your tweet. Simple isn't it? To take it a level further, the bot can also autotweet your PNR status every day until your journey date, which is not very easy in the case of a web based app. Also, since you will not be following the bot and the bot will not be following you, you will not clutter any of your friends' timeline with this tweet as it won't appear in their timeline.

If any of the input data is sensitive and not to be exposed, then the same design can be adopted by just switching the term "tweet" with "Direct Message" (although in that case, both you and the bot need to be following each other, which can be easily accomplished).

Pros of the Platform
Twitter is a part of our day to day life since the inception of mobile internet. So, you get many useful information from such bots interactively rather than opening your webpage and waiting for the page to load. Moreover, twitter is known for its notifications. If you have activated SMS alerts for @ mentions, then you don't even need to have internet to make use of such a bot. You can just send the tweet through an SMS and read the reply from the bot as SMS. Also, twitter has email notifications which may also be of good use. As mentioned in the example, you can have one input with multiple periodical outputs (like time based notifications, etc.) which is not so easy to implement in web based systems.

Developer Standpoint
So from a developer standpoint, what do we ultimately gain by choosing Twitter as a platform over Web for lightweight services? The answer is quite simple and really advantageous. For one, you need not host a web server for lightweight web services. All you need to do is run a script that will act as the bot. The script will also be really lightweight since twitter APIs does all the pushing for you (no polling). You offload majority of the user interface and load to twitter and do only the actual processing in your server.

From the implementation perspective, it'd be really great to have a good library/framework in a nice scripting language (like php or python) for building such a bot so that the possible features (like twitter API access, etc.) could be abstracted out thereby the developers actually have to write just the logic of their actual bot and nothing extra.

Closing Thoughts
I am pretty sure such bots already exists. By building more and more of interactive bots Twitter can really stand tall as a good platform not just for communication but also for instantaneous information retrieval.

P.S.: I am in the process of developing a simple such bot as a proof-of-concept. I am also highly determined to come up with a generic twitter bot library as i mentioned in the post. So as always, interested developers are welcome to carry on if you like the idea!

-Vignesh

Wednesday, June 1, 2011

Je L'ai Dit turns one!

Yesterday, may 31, 2011, my blog turned one. I have written around 60 posts altogether and I really feel good about it.

My heartfelt thanks to all who are following and managing to read all the rubbish I write. Thank you! :-)

-Vignesh

Saturday, May 7, 2011

Orkut Deja Vu - The Technical Side!


Its been almost two months now since I first launched "Orkut Deja Vu" - A series of web applications and a chrome extension that helps you move your memories from orkut to facebook. Personally, I think the application was a good hit. In this article i will try and explain the technical side of it and the various hurdles faced on the due course of development.


Note: This article is for the technically inclined and if you don't want the technical details and just want to use the application, visit http://orkutdejavu.foamsnet.com!


Java and My server!


To begin with it, my server is a VPS running linux with a humble 700MB RAM and a shared processor. My search for an Orkut API ended with orkut os client - An official API provided by Google. This is more of a library than an API and only the java implementation of the library was very sophisticated (though there were php implementations, they weren't that good). Ever since i started learning computer science, if there was one thing i hated, it was java (now don't even get me started about perl).


So there lied the first problem in front of my eyes: Running java in my server. I didn't want to take up the pain of setting up JSP for this sake and decided to just call the java program that does the orkut calls from PHP using shell_exec. I know it isn't a safe option, but since there is no user passed data and the calls are hard-coded, i was sure that there was no injection vulnerabilities. Yet this approach isn't very efficient as it spawns a separate java vm for every exec call, but it was a compromise that i had to make for not setting up a java based server.


OAuth - The headache!


The orkut library's OAuth implementation was really messy. Fortunately, it had a method to explicitly set an OAuth access token obtained from elsewhere. That said, I used Zend OAuth library in PHP to perform the 3 legged OAuth and use that access token in the java programs. There were totally four java programs: one each to fetch the user's orkut name, albums list, photos and scraps. The java programs printed the output as JSON if it was successful or nothing if there was an exception. PHP then parses that JSON. I used JSON so that all the escaping will be taken care by the JSON libraries and thereby ensuring safety of data transmission.


Photo Album Migrator


The photo album migration was quite straight forward without much hurdles. All i had to do was integrate the following: Image gallery, Facebook API, Orkut API and write some simple javascript that made AJAX calls to transfer the photos. This was quite a cakewalk as i was already very familiar with the Facebook graph API.



Scrapbook Downloader


Again, the programming side of this was quite straight forward. But there was one major challenge involved in designing this. The java program generates a html file containing the scraps which is then converted to PDF. HTML to PDF conversion is CPU intensive and hence needs to be done with care. I could have used a resource manager like Sun Grid Engine, but i did not want to make things complex for a simple job to be done. Also, the conversion is not done programatically by a library as all the PHP PDF libraries were memory-wise very expensive (a file with ~100 scraps always exceeded PHP's memory limit of 64MB). So, I used a external command line utility (wkhtmltopdf) to accomplish this conversion. Again it was a simple shell_exec with hard-coded arguments.




Testimonials Migrator


This was the really challenging part. There was no Orkut API that gave access to users' testimonials. But i didn't want to give up. I really wanted to pull off a tool that can migrate testimonials to facebook. So I thought of attacking this problem from the heart of orkut - the orkut website. Obviously, the first thing that came to my mind was a Google Chrome extension. The extension will inject a javascript into orkut.com website and add a "Post to Facebook" button beneath eacch of your testimonials.


The first hurdle in accomplishing this was that there were two versions of orkut (old and new) with different page structures. I didn't want to write two different scripts to handle the versions. Instead i wrote another script that detects the version and if it is new, it prompted the user to redirect to the older version in order to use the extension. The next job was to understand orkut's DOM so that I can place the buttons. This ended up being quite an easy job too.


Another glitch in chrome extensions is that we cannot specify images directly in CSS for content scripts(for e.g.: background: url(a.jpg); is not possible), as the CSS will run in the scope of the website. So, it has to be either done programatically using javascript or encode the image in base64 and hard code it in the CSS. I chose the first option. From this point, it was fairly straight forward. When the user clicks on the post button, store the corresponding testimonial using HTML5's local storage and create a new tab where the user can choose the posting options. Again, the facebook authentication and API usage here were simple as i had enough exposure already.


Epilogue


Though it seems like a simple app, huge amount of thoughts are put into every single aspect in design of the application and the entire development process was a fun journey with a great learning curve. This application has made me feel my web presence. Web is really a great platform for amateur developers like me. I have got around 20 new followers in twitter and a person from brazil appreciating me for this application. I have really been motivated a lot by this and hope to continue the same stride in creating usable applications as this one!


This post will not be complete without a heartfelt thanks to all those who supported me on due course of development and all those who used and shared this with your friends!


-Vignesh

Tuesday, May 3, 2011

Introducing Way2Droid - Way2SMS for Android !

This is one of the very few android apps that I have managed to get into a publishable state. This is a simple app that allows you to quickly send SMS messages using your data plan/wifi for free with a valid Way2SMS.com account. It uses way2sms-php library (read below for description of the library)!


Features include:
  • Add any way2sms account
  • Easy to use editor
  • Pick your contacts
  • Set upto 9 speed dials
  • Send messages of any length ( no 140 character limit )
  • Log sent messages in stock SMS
  • Send in background
Download APK: Link here!

Screenshots






Open Source Way2SMS API

I have developed and a free API for sending SMS using Way2SMS as the gateway. The API has been developed using PHP.

To use the API and send SMS, simply send a HTTP request to the following URL:
http://www.foamsnet.com/smsapi?username={username}&password={password}&to={destination}&msg={message}
The fields enclosed in curly braces are the parameters and they are fairly self explanatory!


A sample usage in Python is as follows:
>>> import urllib2
>>> f = urllib2.urlopen('http://www.foamsnet.com/smsapi?username=username&password=password&to=12345&msg=hello+from+api')
>>> print f.read()
Sent successfully to 12345

Yes. Its that simple! Source code for the library can be found at: http://code.google.com/p/way2sms-php

-Vignesh

Saturday, April 30, 2011

Orkut to Facebook Testimonials Migration! - Google Chrome Extension

Following the quite a good success of the Orkut to Facebook Photo Album migrator, I now introduce Orkut to Facebook Testimonials Migration as a Google Chrome Extension. Due to the technical limitations in the Orkut API, This is not available as a web application. Download this simple Google Chrome extension and migrate your Orkut testimonials to Facebook!

Many of our beautiful memories are left out as testimonials in Orkut! Its time to move them to facebook too! Download this Google Chrome Extension and start migrating your testimonials now! :-) 

Visit: Click here to download the Extension!

Please post your bug reports/suggestions to: vign...@gmail.com (click to expand)

-Vignesh

Tuesday, April 19, 2011

The Social Network - Build it Google, We will Come!

I recently read an article about Larry Page taking over as the CEO of Google and sending an internal memo to googlers about 25% cut in their bonuses if Google didn’t do well in social arena this year. I was disturbed a lot ever since I read that and wanted to pour out my thoughts about a dream social network from Google. Yes, I frankly think Google can still do much better than Facebook.

A headnote, this article is totally how i view a Google social network shall be made possible. I have tried to think of it as practically as possible. Some of it may sound silly/stupid for expert readers, so kindly bear with me.

Orkut was the trend setter! - What went wrong?

Orkut was the first and most famous "social network" of all time. It came during the period where the term "social network" was not really defined. Orkut gave that term a definition. And it was doing really well especially in places like India and Brazil. Ever since Facebook came in, Orkut started to lose.

I, personally, would say that the reason why Orkut never caught on was because Google tried to remain professional. They probably wanted to stick to the Google style of doing things and in the process forgot that people just wanted to have fun and party on in the social network unlike other Google services where professionalism kept people happy. The best example i would like to quote is, Orkut did not have scrap threading for a long time and that was available even for SMS by the time Orkut added that. Naturally, we don’t want to roam around in a blazer/suit 365x24x7. Facebook realized it and they just let people do whatever they wanted to do, literally no restrictions whatsoever.

Sign of Innovation - Google Wave

Google then launched wave and claimed that "it is simply going to change the way people communicate". Well, we know how true it is from the fact that wave has been axed by Google few months back and is now residing in its open source home of Apache.


Build it Google - We will come!

Again, the problem with Google Wave has been that it was difficult for a layman to understand and use it on a day-to-day basis. Even when wave was axed, not a single layman cared about it, only computer professionals cared since the underlying technology and protocols were really well built. Yet again, Google had failed to capitalize the wonderful technology they built by coping it up to what everyone actually wanted. In short, Google tried to remain professional with wave too.

Sign of Desperation - Google Buzz

Then came Google Buzz, supposedly the "Twitter killer". One major factor that i feel Google doesn’t realize when building social products is that, You cannot force people down their throats to go Social. Yes, I love Twitter and can’t live without it but at the same time I don’t want to read my tweets in my Gmail inbox.


Build it Google - We will come!

Similarly, Google Reader is one of the most wonderful software ever built. But with literally no connection whatsoever, Google decided to tie Buzz with Reader. This tie up lead to nothing but junk in both Reader and Buzz. And when people wanted to opt out of Buzz, it resulted in loss all their Reader follow list too. Making it opt-in is a really good vision by Google and at the same time they should also make sure that the opt-out is cleanly done.

What next? Social + Google = ??

So can Google ever surpass the mountain, that is Facebook, and succeed in social like they did in search? My answer is, yes they surely can. Sure Facebook has some 600 million users but Google is no poor lad when it comes to userbase too. Infact, Google is still a more prominent part of our life than Facebook is. Conduct a poll asking "Which of the following can’t we live without - Facebook or Google?" and i bet the winner will be Google.

Imagine a social network that revolves around all of Google’s services. Imagine a service that aggregates all of gmail, youtube, reader, maps, picasa, talk, news, voice and even orkut. Google, if you can build a rock solid service that does this and add your typical magical touch to it, then definitely you can climb the mount everest that is Facebook. Add to this the crazy, yet possible, thought of Google acquiring Twitter and integrating Buzz with it seamlessly. By recitifying all the mistakes that it did in the social arena in the past and building such a clean and fun service, it can surely overpower Facebook.

Google’s userbase is much more loyal when compared to that of Facebook. Google, as a company, with its policies is much closer to our hearts than Facebook is. Identify Facebook’s problems and fix it. Facebook’s main concerns today are spam and privacy. I can’t think of a product other than Gmail that can handle spam so near to perfection. Also, Google Talk has been an integral part of Gmail and Orkut for so many years now and not once we have seen any spam in it that can even be compared with the Facebook chat spam we have these days. Though Google have had their own share of controversies regarding privacy, they have somehow held on and been in the good books of their users when it came to privacy.


Build it Google - We will come!


Of course all this is not going to be an overnight affair, it is going to take lots of effort and time. Given that Google is investing so keenly on getting that top spot in the social arena, proper focus, being unprofessional and learning from the past are the key factors that will decide the fate of Google in the social arena. They can’t afford to flop anymore. This may be Google’s last chance to make an impact. By heart, i sincerely hope that Google can just snatch that number one spot in the social arena!

So, my message is short and simple: "Build it Google - We will come!".

-Vignesh

Wednesday, March 23, 2011

Scripting vs Programming - Mastering the art of arts!

Why this post?

The line of difference between a script and a program has become very blurry these days to the extent that these terms are used interchangeably. Though there is no hard and tight way to theoretically define what a script is and say how it is different from a program, if you have done a lot of programming and if you are a person who loves to automate things, then you can definitely realize the clear line of difference between scripting and programming. In this article, I try to give my views on what scripting is, how it differs from programming, etc. (Whole of this article just represents my view and there is a good chance that some of it may be wrong).

What is a script?

A script is just a small piece of code, usually written in a non-traditional programming language (like bash or perl) that is used to get a job done. Well, sure you can’t see much of how it differs from the definition of a "program". That is what i try to explain on the due course of this article.

How does it differ from a program?
As i said earlier, there is no concrete set of rules to distinguish a script and a program. The main deciding factors are:
  • the purpose with which its developed
  • the design mechanism underwent on due course of development, and
  • the person who uses it

Scripts are generally very specific to their task. They just do what is to be done, nothing more or nothing less. Whereas programs generally have a broad scope. They are more sophisticated and usually do much more than what they are supposed to do. This is the difference with respect to the first point.

Scripts generally don’t follow any design. Scripts are usually just written, with no design in mind whatsoever. Even if they are complex, they aren’t designed with care and concern. Whereas programs on the other hand are designed to work with a proper flow and fault tolerance. Scripts are usually used by programmers themselves internally, whereas programs are full fledged tools that are used by everyone from geeks to laymen. To state an example, Facebook is a "program" and if you build something that will scrape data off facebook in the format you want, then that could be a "script".

Scripting is usually considered as programming as a part of developing an actual program. For example, the recent android patent issue says Google used a "script" to clean up all the comments and other stuff from the kernel header files. So, scripts can be generally categorized as utility functions that helps you making your "program" development easier.

What’s a scripting language?

Again, a scripting language is a programming language that is generally non-traditional. Scripting language usually provides constructs for doing things in the quickest way possible rather than in the most efficient way possible (For e.g. most of the scripting languages usually have a sort() function to sort the data. Though they may not be the most efficient implementation of sorting data, it gets the job done without fuss). Another aspect is that scripting languages are usually interpreted and not compiled. This gives the assurance that the script dies if anything goes wrong, the script starts over all again, taking advantage of the fact that scripts need not provide any atomicity over what they do.

Uses of scripting

I love automating things i do and hence scripting is a very essential part of my online life. Scripts can help your online life get much easier and better. For example, i have various little chrome content scripts (google chrome’s equivalent of greasemonkey scripts) that helps me make my day-to-day browsing easier and more productive. Also, i extensively use sed and awk scripts to browse through log files generated by the programs i develop. I even have scripts that help me check if there are new episodes of my favorite TV Serials (BBT, HIMYM) available for download and alert me.

When it comes to automating day to day online tasks, scripting is your swiss army knife. You can accomplish things quickly and in the way you want them to be.

Scripting as an art

We all know that programming is more of an art than a science. Developing a perfect program is close to impossible. But scripting too is an art that can aid you in making your programming life much better. Learning a scripting language at the beginning may seem weird, but once you get used to the constructs, it will really be a cake walk and you will find it a lot useful to have it as one of your assets.

To sum up..

Scripting and programming always go together. Scripting aids in automating things that will make a program better than what it is now. Though only a beginner, my humble piece of advice to every programmer out there is "Never hesitate to automate things. You learn a lot while automating silly things! So next time when you come across a silly problem in your work or in your project, try to tackle it with a quick utility script rather trying to fix it manually!"

-Vignesh

Wednesday, March 16, 2011

Introducing Orkut Déjà Vu! - Orkut to Facebook Photo Album Migrator!

As we all know, Orkut was the trend setter of the modern "Social Networks". Few years back, Facebook took over that top spot in social networks from Orkut. Yet we all have lots of sweet memories stuck with Orkut in the form of Scraps, Photo Albums, Testimonials, etc. This website helps you pull out your old memories from Orkut and make them brand new by moving them over to Facebook!



This is just a night time project that i have been working on for almost a month now!

I don't want to bore you with stories. Try out the app straight away here: http://orkut.foamsnet.com or http://orkutdejavu.foamsnet.com

I am sure there are plenty of bugs. Please email me at vig..@gmail.com(click to expand) for any comments/feedbacks!

-Vignesh

Tuesday, March 8, 2011

Celebrating women’s day!

No crackers explode, No fireworks lighten up the sky, but year after year we celebrate womanhood with simplicity and i would like to take this time off to wish all the women i know in my life a very happy women’s day.

Happy women’s day


A woman is always special for a man. Though the fights and arguments about male chauvinism may exist on the lower layer of the society, i have always felt that the population belonging to our generation always treated women as equally as men. Not to stir any discussions about it, i just want to say thanks to every single woman (or girl probably) who has helped me over various points of my life.

Adage goes that, “Behind every man’s success lies a silent woman” and i couldn’t find a better quote to describe this wonderful day where we celebrate womanhood. Be it your better half, your sister, your mom, or any other friend, they always make you feel special and always show you rays of happiness.

Happy woman’s day everyone!

-Vignesh

Saturday, February 26, 2011

Why Plagiarism Hurts?

I recently attended a so called "online programming contest" of one of the premier institutions in the state (not mentioning the name to not stir any arguments over it - I tweeted it here and here though). I have been attending this contest since the past 3 years and was highly disappointed about this year's event.

The reason is, as the title suggests, it was nothing but a blatant ramp of plagiarism. There were totally 8 questions to be solved out of which 4 questions were mere "copy-paste" jobs from spoj. Such events need not be perfect, but when you conduct an event of such stature you are atleast expected to make sure that google doesn’t give an exact match for the questions you give. As i mentioned in the tweet, the other 4 questions were very poorly worded and more or less dumb. Anyways, i am not going to ramble about the contest in this post. But it got me thinking, plagiarism can really hurt. It can hurt both the ends of users badly.

First things first, what is plagiarism? Sounding like a fancy GRE word, it has a simple meaning: Copying someone else’s content without their consent. I know spoj doesn’t mind if their questions are being copied, but it should either be altered so that it doesn’t look like the original question or (even and) spoj should have been properly cited.

When someone writes something on the internet these days, it has become like they have lost complete ownership over it. Plagiarism is a very big problem these days. It exists on all levels. Starting from a simple online programming contest to industry definers like Microsoft. Google even launched an algorithm change to their core search engine algorithm this week that ranks plagiarised pages lower than pages with original content.

My point is, when you plagiarise something without consent and citations, its not just a matter of two keystrokes in your computer. You hurt people’s feelings. And you will never understand those feelings unless you start writing something on your own and someone else copies and pastes it without your consent. It takes very little effort to cite the original source of any content you use, but that gesture will make your users respect you more than they did before.

There are even licensing policies that helps you prevent plagiarism and at the same time lets you use others content (one such license is Creative Commons License).Always place appropriate citations. If an author is writing content on the internet, then he’d sure respond to you via email/twitter if you want to use pieces from his article. Be gentle and place the credit to the work where the credit actually belongs to rather than stealing it. You will definitely be insulted when the plagiarism is spotted. So why not place credit and not screw up your reputation? You may have loads of original content. But even a small piece of plagiarised content is capable of bringing you under the spotlight (the recent Ankit Fadia scam for example - Fadia may have saved a war or billions of rupees for the indian government, but now he’s been registered in my mind as the guy who copied a book in the name of authoring it).

To sum up things, The world has evolved, Internet has become commonplace but what will always remain is the human values that we possess. If you copy content without consent, you are violating the human values that morally governs the internet.

Take a stand, Say no to plagiarism, Innovate the planet together!

-Vignesh

Friday, February 4, 2011

IPv4 is dead!

IPv4 is dead.

What this means is that, no more IPv4 addresses are remaining to be alotted to systems that will be connected to the internet. This marks the end of the protocol that has been running the internet since 1981. This is similar to how IRCTC recently moved to a 5 digit train number, as there have been too many trains to be numbered with 4 digits and the existing conventions (2 prefix for superfast and such). So IRCTC moved to a 5 digit train numbers (mostly adding 1 prefix in front of all major trains).

The same story holds on when they say "IPv4 has been exhausted". All the computers in the internet are uniquely identified by so-called IP Addresses (Internet Protocol addresses). When you want to communicate with other systems on the internet, you make use of IP Addresses to accomplish that. Now that the internet has had too many systems, the IPv4 scheme of numbering is no more sufficient. IPv4 used 32-bit addresses (yeah computers talk in bits). So, a typical IPv4 address would look something like 208.43.209.220 (with each number between the dots represented as an 8 bit integer).

Ok, now what? How do new systems get added to the internet if there are no more addresses left? In comes one of the major changes that is going to be incorporated into the internet in the near future, IPv6. It might sound as simple as adding a 1 prefix like IRCTC did. But it runs the entire internet, so its a bit more complicated than that. Of course IPv6 addresses are longer than the v4 counterparts in that they consist of 128-bits (an example of an IPv6 address is fe03:ff34:ab34:1235:2932:6bdf:22af:23aa). As you can see, these are hexadecimal represented numbers. Each part consists of 4 hexadecimal digits amounting to 16 bits and there are 8 such parts, totalling to 128 bits.

IPv6 is not just IPv4 where you have longer addresses. Since this is going to be a major change that requires modifications in working of almost all the devices connected to the internet, the developers of IPv6 decided to do try and clean up all the drawbacks that were incurred by IPv4 (mandation of IpSec, elimination of need for NAT to name a few). Things would be much simpler if IPv6 had just been interoperable with IPv4. Unfortunately, it is not so and hence the transition phase is not going to be very easy.

However, there have been software level solutions to make it look as if IPv6 is interoperable with IPv4. Yeah, you guessed it right, Tunneling! Imagine you have a shipping company that allows only red colored boxes to be shipped. What will you do if you need to ship a blue color box? Simple isn't it? Just wrap the blue colored box into another red colored box and ship it and make sure that the recipient throws away the red box when he receives it. This is called tunneling. Our shipping company is nothing but the backbone network of the internet (majority of which consists of IPv4 only devices), red box is analogous to IPv4 and the blue box is analogous to IPv6. So the internet is going to rely on tunnelling for majority of its functioning until IPv6 gets well established among the devices in the internet.

So, lets all take a second to thank IPv4 that has been making our lives easier for almost the past three decades. Also, major software giants are joining hands to celebrate World IPv6 Day on June 8, 2011.

P.S.: I conclude with the hope that the IPv4 to IPv6 transition among Indian ISP's will not be as un-smooth and scandal-driven as the 2G to 3G transition.

P.P.S.: This post was drafted during my college lab hour and posted using lynx. :-)

-Vignesh

You'll never walk alone!

Whenever i was in a distress or my mind was away from being normal, there's been one song that would always revive me whilst running on a continuous loop. I always loved each and every word of the lyric and it amazes me how a bunch of words can change your whole mindset to a very great extent.

I just felt like sharing the lyrics of the song. Try listening to it and it may help you too like it did to me.

When you walk through a storm,
Hold your head up high..
And don't be afraid of the dark..

At the end of the storm,
Is a golden sky..
And the sweet silver song of the lark..

Walk on through the wind,
Walk on through the rain,
Though your dreams be tossed and blown..

Walk on walk on with hope in your heart,
And you'll never walk alone..
You'll never walk alone..

You'll never walk alone..
You'll never walk alone..



-Vignesh

Monday, January 10, 2011

InstaShare - Facebook Extension for Google Chrome! :-)

InstaShare - Share everything you find interesting on the web as and when you browse to your Facebook profile! The web you surf daily is now just a single click away from your facebook profile!

This is a mature version of yet another script that i have been using personally so far.

Features include:

  • Post status updates through an always-present browser icon

  • Share any image in the pages you visit in a single click

  • Share any link in the pages you visit in a single click

  • Share any piece of text in the pages you visit in a single click



Download You can download the extension from here: http://www.foamsnet.com/instashare

Screenshots
Sharing Images





Sharing Links





Sharing Selected Text





Posting Status Update




You are sure to find a lot of bugs. Feel free to contact me at vig...@gmail.com (Please click to view the full address) for any bug reports or suggestions!

-Vignesh

Sunday, January 9, 2011

Why you should tweet?

I am one among the many millions out there who belong to the social era. The world is socializing much more than it ever did before. If facebook were a country, it’d be third largest in terms of population. Facebook (and even the damned orkut) is really famous in India. Twitter is a similar service with even a simpler goal, share all you can in 140 words.

I have found many teenagers (especially college goers) not use Twitter. It is not really surprising considering twitter doesn’t have many entertaining’y things like photo tagging, liking every damn comment, etc. Twitter is the best example for “simplicity”. The inception of twitter has rendered many bloggers lazy to even blog regularly, as they start tweeting more about things rather than writing lengthy blogs.

In this post, i want to publish my opinions on why teenagers should tweet or atleast use twitter.

Source of Information
Twitter is really a great source of information. Let it be technical information or some interesting news from/about your favorite celebrity, the first place where you can find it is twitter. If some hot news is being flashed in the tv channels worldwide, then you bet its definitely trending on twitter. You really get an instant, unbiased view of many people all around the world on any topic. This kind of rapid fire spread of a news is more common in twitter than in facebook because of twitter’s short and sharp nature.

Social Media is a fancy term used these days to indicate the facebook, twitter and co. Not only social media provides entertainment and helps you kill your time in the form of facebook, it also gives your brain some real value additions in the form of 140 characters.

Enterntainment
Many teenagers (atleast my friends) have the opinion that twitter is for geeks. Whenever i hear someone say this, i go WTH. Twitter is definitely much more than a source of useful information. You have entertaining discussion going on between not just your friends, but also with many other people with whom you might have just dreamt of before. (For example, i have got one or two replies from my favorite singer Chimayi).

Short lifetime of tweets
You post a status update in facebook, and it definitely lies around in your homepage (in the form of notifications, etc.) for a minimum of one day (mostly more than that). Whereas lifetime of a tweet is much shorter than that. Your tweet will remain in your followers’ home page for hardly a few minutes. So all the communication and sharing remains up to date and instant. This point could be argued either ways as both advantageous and disadvantageous. But in facebook, after some 50 odd notifications over a period of week, i’d regret why i liked a status in the first place.

I am not coming to say that facebook is bad. Facebook has its own use case. The status messages in facebook are meant to be lingering around one’s homepage for a longer period of time. Hence twitter should be the real tool that shall be used to post real time updates, where people can comment on it instantly too. Also, tweets come up in what is called Google Realtime Search results.

Internet is huge and a few years back Google revolutionized it by organizing the information available in the internet. That was purely an algorithmic approach, whereas today, twitter is trying to generate and organize information based on one’s personal context, supplemented by algorithms. So, join twitter today and i promise i’ll follow you :-P

You can follow me in twitter here.

-Vignesh