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:


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