VoiceXML – Good, Bad & the Ugly

[Disclaimer: I am CEO of TringMe, company which created the VoicePHP.  However,  views in this article are purely from  my personal experiences working with VoiceXML & treat it as the views of an independent programmer.]

Last week, I had an interesting discussion with a industry veteran in voice. The discussion slowly turned to VoicePHP, how it compares to VoiceXML,  demos and so on. At the end of the demo, his first reaction was “Is Vo*** dead?” Even though it might be a slight hyperbole, it was a genuine naked reaction of the moment. As a programmer, I couldn’t agree more but let’s stake the claim to ground and spend some time going over the reason behind such a reaction & the pain points of programming in VoiceXML.

Although, VoiceXML has been around for a while, it hasn’t really gained significant momentum around it. As a VoiceXML developer for quite long time, I can definitely see why that is the case. This is my attempt to identify some of the key deficiencies of VoiceXML as a programming language for voice. 

While XML (and in general any marking language) has been great for representing the data, using it for programming is like using a wrench to hit a nail. All you need is a hammer to nail! Although a wrench can do a manageable job of hitting a nail, it’s not elegant, creates a mess and cannot address the problem with precision.  Same is the case with XML. It is best suited for and was designed for data-representation, data-transfer and has repeatedly proven its worth for the same. Trying to use that for programming is adapting it for something that it inherently wasn’t meant to do. Let me try and explain this in detail: 

Consider a typical “hello world” application in VoiceXML (courtesy, vxml.org). 

<?xml version="1.0" encoding="UTF-8"?>
<vxml version = "2.1" >
  <form>
    <block>
    <prompt>
      Hello World. This is my first telephone application.
    </prompt>
    </block>
  </form>
</vxml>


It took 10 lines of code to write something as simple as that. On top of it, for a simple hello world application, one may be tempted to seek more information about <form> and <block> tags which seem like overkill. 

Shocked? You are not alone. As Dominique Boucher states on his blog “from a developer's perspective, it's (VoiceXML) like having to program in Cobol! And I only slightly exaggerate.

The same application in C, PHP is reduced to barely 2-3 lines of code which is more readable and intuitive. 

<?php
      
echo 'Hello World. This is my first telephone application';
?>

See the differnce? Don't take my word for it, here is what veterans and users say about VoiceXML. We will soon dwell into why do they say so.

From the Industry Veterans

In early 2007, Brian OConnor commented on annoyance in VXML standard. As he states, he was unable to use <if> within a <prompt> tag. It’s an arbitrary limitation and requires a nasty workaround. 

In an article “Is VoiceXML the Right Tool for Your Voice Application?”, Brian Brown identifies very precise weaknesses of VoiceXML.  For example,  when even a basic voice controls (pause, resume etc) are not available in VoiceXML, how it can be even considered the language to program voice?  He nailed the problem very well. Look at how VoicePHP addresses it beautifully in a sample application here 

Dannis in his interesting email and unique style shares the pain of VoiceXML, "TCL was the most ugly languge of the 90-ies. VXML has now taken over. The language appears not to have iteration (while, for) and no recursion. But it DOES have the goto primitive, which was banned by Dijkstra 30 years ago. There is no function abstraction and neither object-oriented constructs."

He further adds which I will elaborate later in this post "VXML is an interpreted language using Javascript. Why not using only Javascript with a bundle of speech specific predefined functions? Hacking java-servlet code already entails generating HTML and Javascript. I don't see why we have to follow the same painful route with VXML."

Even VoiceXML vendors are aware of the limitations and they have tried to create specific & proprietary  enhancements to get around VoiceXML limitations, for example CallXML by Voxeo. Infact, Voxeo CEO commented on VoicePHP coverage by Gigaom that  “As a developer I do not like VoiceXML. Personally I find it to be too complicated, painful, and a barrier to entry for new developers as others have said. This is why Voxeo offers many other ways to create voice applications, including: CallXML - a very powerful yet simple XML based telephony markup; “ . Do I need to say anything more?

The big question - Why do they say so? 

Unorganized jungle of XML, JavaScript, CDATA etc.

In my opinion, VoiceXML looks like a creation out of obsession. XML was the new kid on the block and perhaps impressed or obsessed by it, somehow fitting it to the Voice programming needs became the name of the game.  Basic TTS & ASR was made to work – wow! So far so good!

Then someone realized that even simple/common programming requirements cannot be done in XML. There wasn’t a simple solution to address this in XML and that’s how Javascript (ECMAScript) became a part of the VoiceXML standard. In my vocabulary, this is nothing more than a “workaround”. If Javascript was being considered then why not do everything in Javascript? When Javascript can completely replace XML (exactly like VoicePHP), is there any logical reason to keep XML around and more importantly continue it as a “standard”? To be honest, this workaround has only made the life of programmers complex. To illustrate, consider the following sample code that reads out a caller-id (courtsey):

<?xml version="1.0" encoding="UTF-8"?>
<vxml version = "2.1">
<meta name="maintainer" content="YOUREMAILADDRESS@HERE.com"/>
  <form id="HelloWorld">
    <block>
      <script>
        <![CDATA[
          function sayasDigits(number)
          {
            var digitNumber = number.charAt(0);
            for(var i = 1; i < number.length; i++)
            {
              digitNumber += ' ' + number.charAt(i);
            }
            return digitNumber;
          }
        ]]>
      </script>
    <prompt>
      Hello there. The caller id value is: <value expr="sayasDigits(session.callerid)"/>
      The called i d of this application is: <value expr="sayasDigits(session.calledid)"/>
    </prompt>
    </block>
  </form>
</vxml>

Now compare this code with VoicePHP equivalent (demo here):

<?php 
echo "Your caller ID is {$_VOICEPHP['callerid']}"
?>

What a mind-blowing difference between both the solutions. Maybe the above example demonstrates the point we all are trying to make. A workaround v/s a natural programming language.  As one can see from the above example, VoiceXML has to fall back upon Javascript since XML cannot even have the basic capabilities to manipulate the numbers or strings, how can it be even considered for programming. 

As you explore more, you will realize that VoiceXML is handicapped enough even not to be able to offer simple loops on its own. Can you imagine an application without such basic control statement & despite of that, such a basic structures were not addressed in VoiceXML. VoiceXML simply falls back to Javascript for doing such basic stuff in a messy way.  

In contrast, take a look at just about any application at http://code.voicephp.com to see how easily one can take an existing application and move over to VoicePHP with all the programming constructs usually available in most programming languages.

CDATA – Add it to the mess

Well, it keeps getting better. To bring-in Javascript, VoiceXML uses CDATA directive. What is going on? Isn’t it messy already? Why do I have to care about all the subtleties? For the curious minds, CDATA directive is used so that our script can contain characters that are normally reserved for XML syntax usage.  

It’s truly getting messy - XML, Javascript, CDATA and off-course unreadable code. Keep in mind all that we have done so far is really just “read out a phone number”. It begs to me ask this question: Why is it so damn complicated? 

Consider the code for the first tutorial on Voice Recognition from vxml.org

<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.1">
  <form id="MainMenu">
    <field name="SouthParkCharacter">
      <!-- Since we are in a field tag, we do not need <prompt> tags surrounding the text-to-speech -->
      Please say your favorite South Park character's name.
      <!-- Define our grammar -->
      <grammar type="text/gsl"> 
      <![CDATA[
        ;Match one of the enclosed terms
        [
          kenny cartman stan kyle canadians chef wendy timmy 
          hanky garrison pip ike mephisto jimbo tweak marvin
          [terrance phillip] 
          (mister hat) (big gay al) (cartmans mom) (mister mackey) 
        ]
      ]]>
      </grammar> 
      <!-- The user was silent, restart the field -->
      <noinput>
        I did not hear anything.  Please try again.
        <reprompt/>
      </noinput>
      <!-- The user said something that was not defined in our grammar -->
      <nomatch>
        I did not recognize that character.  Please try again.
        <reprompt/>
      </nomatch>
    </field>
    <!-- Set the namelist attribute to the name of the corresponding field -->
    <!-- This is filled only when one of the values in the grammar is matched -->
    <!-- That value is then sent to this section -->
    <filled namelist="SouthParkCharacter">
      <!-- Check the "SouthParkCharacter" variable against each of the valid values -->
      <!--  defined in our grammar -->
      <if cond="SouthParkCharacter == 'kenny'">
        <prompt>Kenny has more lives than a cat.</prompt>
      <elseif cond="SouthParkCharacter == 'cartman'"/>
        <prompt>Cartman is not fat.  He is big boned.</prompt>
      <elseif cond="SouthParkCharacter == 'stan'"/>
        <prompt>Stan likes Wendy.</prompt>
      <elseif cond="SouthParkCharacter == 'kyle'"/>
        <prompt>Kyle has a gay dog.</prompt>
      <elseif cond="SouthParkCharacter == 'canadians'"/>
        <prompt>Canada.  What is that aboot?</prompt>
      <elseif cond="SouthParkCharacter == 'chef'"/>
        <prompt>Chef is the coolest man in South Park.</prompt>
      <elseif cond="SouthParkCharacter == 'misterhat'"/>
        <prompt>Mister Hat is a puppet.</prompt>
      <elseif cond="SouthParkCharacter == 'biggayal'"/>
        <prompt>Big Gay Al is gay.</prompt>
      <elseif cond="SouthParkCharacter == 'wendy'"/>
        <prompt>Wendy likes Stan.</prompt>
      <elseif cond="SouthParkCharacter == 'timmy'"/>
        <prompt>Timmmy!  Timmmy tim maugh!</prompt>
      <elseif cond="SouthParkCharacter == 'hanky'"/>
        <prompt>Mister Hanky, the Christmas poo.</prompt>
      <elseif cond="SouthParkCharacter == 'garrison'"/>
        <prompt>Mister Garrison is gay.</prompt>
      <elseif cond="SouthParkCharacter == 'cartmansmom'"/>
        <prompt>Cartman's mom loves the Denver Broncos.</prompt>
      <elseif cond="SouthParkCharacter == 'pip'"/>
        <prompt>Pip is British.</prompt>
      <elseif cond="SouthParkCharacter == 'ike'"/>
        <prompt>Ike is also Canadian.</prompt>
      <elseif cond="SouthParkCharacter == 'mistermackey'"/>
        <prompt>Mister Mackey.  Mmmmmmkay.</prompt>
      <elseif cond="SouthParkCharacter == 'mephisto'"/>
        <prompt>Mephisto enjoys experimenting on animals.</prompt>
      <elseif cond="SouthParkCharacter == 'jimbo'"/>
        <prompt>Jimbo is a redneck.</prompt>
      <elseif cond="SouthParkCharacter == 'marvin'"/>
        <prompt>Marvin is really hungry.</prompt>
      <else/>
        <prompt>
          A match has occurred, but no specific if statement
          was written for it.  Probably just a minor character
          like Tweak or Jimbo's gun-toting friend.
        </prompt>
      </if> 
    </filled>
  </form>
</vxml>

I am sure you need a coffee break after reading the above code; the code looks verbose, repetitive and unmanageable. This same application when written in a commonly used ‘real’ programming language will have a lot less code and will read much better. Again refer to any code snippet at http://code.voicephp.com

Server side programming

One cannot use VoiceXML by itself to write a complete application. For even simple client-side processing you need Javascript. Moving on, if you need to integrate some back-end logic (a.k.a Server side programming), you need to take help of one of commonly used back-end technologies (e.g. PHP, ASP, .NET etc.).

This is not me saying but vxml.org - “Coding an application with just straight VoiceXML is just fine and dandy, thankyouverymuch, but the *real* potential of VoiceXML is harnessed when we add some ASP or JSP into the mix” . Look at the emphasis on “real”. I sincerely appreciate their candid confession and applaud them on succinctly putting the limitation of VoiceXML across so distinctly. So as you can see, in addition to learning VoiceXML tags and attributes, Javascript and a different programming style, one now has also to learn a server side language. Think about it - you need a chilled beer to relax but you are being given a cocktail – like it or not!

In Closing

Anyway you slice it; VoiceXML doesn’t come close to the meeting the requirements of real world applications. Voice applications would do really well if there was an easy way to bring them to life. Developers do not want to use complicated technology to achieve something simple, intuitive and obvious  - I know I won’t.

We are not against VoiceXML. Infact, VoiceXML spearheaded the way for voice programming and took away the complexity that one had to deal with in the early days (remember hardware card and proprietary drivers nightmare?). When it launched, VoiceXML was the “new” way to program voice and we were completely supportive of it too. We released the world’s first “Adobe Flash based VoiceXML Platform”.

But it’s about time that VoiceXML realizes its inadequacies and makes way for better alternatives. Alternatives like VoicePHP (or maybe even VoicePERL or VoicePYTHON) could do a better job.  The web is evolving and solutions that can tightly integrate with it will become more and more important. Dedicated solutions to tackle a specific problem are a thing of past. Some technologies (e.g. PHP for web programming, Flash for UI and widgets, Mobile applications using data network etc.) have proven themselves and it’s about time that we re-use them and not bind ourselves to technologies which began with the right attitude to solve a problem but couldn’t really establish themselves due to technical limitations.

NEN Forcibly Nominating Startup – Why?

Recently Ashish blogged about NEN using Pluggd.in’s name to nominate startups to it’s Hottest Startup contest. In what only seems to be a continuation of a poorly managed process, NEN has now moved one step ahead – forcibly nominate startups.

Here goes the story … NEN forcibly nominates TringMe.  We had clearly requested NEN to not nominate TringMe (see details below) , but they went ahead and still nominated us.

When it all began, after notifying us about it, TringMe was nominated by someone (no names here to protect the identity) to the NEN Hottest Startups . But after reviewing NEN’s process of nominating each startup, we had – as stated clearly in the the email dated Aug 29th sent to Purnima and later Kavita (by nominator) requested them NOT TO NOMINATE TringMe.

nen11.JPG

nen2.JPG
We didn’t hear back from them about it and were under the assumption that we have been heard. But it seems like our request fell on deaf ears and .. lo and behold !! ..TringMe gets nominated by NEN on Sept 11th (i.e. yesterday) at 4:01 PM.

Is this a coincidence that TringMe, after being covered by prestigious Bangalore Mirror and Economic Times earlier this week shows up on NEN hottest startups despite of clearly and respectfully requesting them not to?

Although NEN is a very good platform for startups and we whole-heartedly believe in what they are doing, we were extremely unpleased by the way NEN hottest startups is being managed. For the record, we weren’t interested in Hottest Startup event and hence had categorically requested them not to be nominate TringMe as we don’t see much value-add for our company.

Before writing this blog, we had emailed to NEN staff. After not hearing back from them and given that they didn’t care to respond back last time as well, we are forced to share this in a larger forum which some of you may find useful.

Update 1 – Sep 13, 2008: Thank you so much for responding to my email on forum. I also met few folks at BCB7  requesting more clarity on why we backed off from NEN.  Let me elaborate.

It’s really very simple.  NEN-HS is a contest and hence by definition every company that participates – having spent quality time filling up the detailed forms – needs to be given the same shot and fair treatment by the organizers.  In other words, the playing field needs to be leveled before the innings begin.  However, NEN has conveniently positioned few startups in the beginning and after few days of voting, they started introducing other startups into the race.  This is completely unacceptable way of running the contest.  It’s like giving one set of racers a benefit of starting early in a 400m race. How can this be fair and just?

As we see it, this is simply a preferential treatment to some startups that have been nominated for a while now and have been rated and ranked, while others aren’t even added. How can a contest begin without all the contestants entering at the same time? Since these startups are chosen by internet viewers and users in a democratic way by voting for their favorite startup, all startups should be given the same exposure to the audience.  NEN’s way of handling this looks completely biased and improper.

They are now adding “other startups” to increase the size of the pool to suggest that it is an open race, but IMHO it is not.   I do not see any other reason for them to nominate TringMe when they were clearly instructed not to.

Given that its NEN-HS format and we do not have any say in it, we only sent them an email and requested our withdrawal.  However, as you can see, they are not respecting the wishes of startups who do not wish to participate. We are also not removed from their website so far even after this public appeal.

Those startups who have been nominated early on should not feel happy about this.  As startups we should all discourage such preferential and unprofessional practices.

Mapping India – Mobile, GPS and more

I have been using Google maps on my E61. It works great, both with and without GPS (using Cell-id). However, there`s one missing feature – offline usage, and I especially miss it when there is no connectivity (GPRS is way slow and highly unreliable here). I tried Nokia maps but not as detailed as Google maps.

I recently came across MGMaps and instantly fall in love with it. It’s an awesome application which support maps from multiple sources like Google (not officially), Yahoo, Yahoo-India, MSN, OpenStreet maps etc. The best thing about MGMaps is ability to use offline maps. It can even show you a real-time compass with speed etc. Try it out if you haven’t. If you like to know more, here is a fantastic blog post. You can find some information about offline fetching here and here.
mgmaps.jpg
N800
For N800, I use Maemo Mapper. It works great and much better that Nokia’s default map application.

holux.jpgGPS
I use both E61 and N800 in coupled with Holux GPSSlim 240. It is a very small GPS (claimed to be smallest GPS so far) based on SiRF III low power chipset. It can track upto 20 satellite channels. It is really quick in acquiring lock in open space. There is a minor sensitivity issue in-house due to its tiny patch antenna but works great outside. Once it acquires lock, I can even put it in my pocket.

gpscable.jpg
By default, the only way to connect GPSSlim 240 unit to your laptop is using Bluetooth. To connect using USB, a special cable is required (needs to be purchased separately). However, you can make this cable really quick from other mobile cables like DCU-11 which has USB to serial converter (3.3v) such as Prolific PLC-2303. Simply, replace mobile-end connector with a mini USB type-B connector. It only took me 15 minutes to convert a DCU-11 clone cable to the one which can work with GPSSlim 240. Here are the steps:

  1. Open the connector and carefully note down the TXD (to PC) and GND cables. In case of DCU-11 (DCU-11 link), those are the cables which connects to pin 5 (TXD) and pin 10 (DGND). This website is handy to find pinout of mobile connector. 
  2. Desolder connector. 
  3. Solder TXD cable to pin 3 and DGND cable to pin 4 of mini USB connector.
  4. Optionally, solder RXD cable to pin 2 of mini USB connector for sending commands to GPS (Hot-start, cold-start, warm-start, factory reset)
  5. Optionally, solder VCC cable for charging.

That’s all, your special USB cable is ready to be used with GPSSlim 240. To test your cable, connect it with your laptop, start serial console (minicom or HyperTerminal) and turn GPS ON. GPS will start emitting the NMEA sentences which you can see on serial console. Connect it with Google Earth and start exploring!!!

Real-time tracking with Google earth
Google earth free version does not support GPS and requires $20 per year Plus subscription to use GPS. Even after subscription, GPS support is limited and only supports Garmin and Magellan devices.

However, Google kept the API to control Google earth open and there are couples of free and donation-ware apps which uses this API to interface Google earth with GPS. These apps read position from the GPS and uses API to control Google earth. I just wonder, since Google kept the API open, why can’t it include GPS support in free version too. Anyway, here are two recommended apps to use GPS with free version of Google earth:

Do comment if you know better options. Enjoy exploring!!!

Tomato is IN – GoodBye DD-WRT

I have been a DD-WRT user for more than 2 years. For those who do not know, DD-WRT is a firmware for the Linksys and other WiFi routers. There are couples of open-source firmware available for Linksys routers (based on Linux 2.4 kernel and Linksys drivers) and I chose DD-WRT due to the number of features it offered.

There are few minor technical problems with DD-WRT as reported in various forums, however not serious ones and I have been a satisfied DD-WRT user so far. The key reason for me to move from Linksys stock firmware to WRT was due to the fact that latter being an open-source software. A little bit of my background, I was a key architect for Lucent’s Next Generation WiFi Access Point (till it became Agere and later Proxim) and a Linux kernel developer – so anything related to WiFi and Linux takes my attention. I was able to download and compile the source code of DD-WRT v23 SP1 long time back. So far so good!

So what made me switch to Tomato from DD-WRT? Let me explain.

When DD-WRT SP2 was released, suddenly the source code was no longer available on DD-WRT website. I was not alone, there were number of DD-WRT users who were looking for the source code and it was missing mysteriously. Instead of few MB of tarball, now they wanted users to download few gigs of SVN repository, obviously the motive was questionable, at least IMO. Someone may argue that they are offering SVN, however if the motive was good I can’t understand the logic behind not releasing the tar bundle, especially when so many users are requesting for it. As I can see, it is a ‘clever’ way to get passes GPL. I came across a similar story here (worth reading, very detailed) and also some users comments here. I have not verified everything which is written in that article; however readers are welcome to analyze and leave comments here. For me, source code reason was sufficient enough to move away from DD-WRT.

I hoped that source will be release with V24 but that did not happen either. So, I decided to give up DD-WRT and started evaluating other WRT variants and finally chose to try Tomato, a HyperWRT based firmware – turned out to be a right decision.

Moving to Tomato was smooth. If you are moving from DD-WRT to Tomato, ensure that you note down the encrypted password for web interface. It’s not the same password which you used to login to DD-WRT web interface but an encrypted one stored in NVRAM. To obtain the encrypted web password, login to DD-WRT telnet console and issue command “nvram get http_passwd”. When you install Tomato and reboot, it will ask you for the password. Use encrypted password obtained in previous step to login into the Tomato web interface.

Although, Tomato recommends resetting the NVRAM if you are upgrading from other firmware, I was amazed to see that Tomato was able to retain most of the DD-WRT configurations. QoS is disabled by default and I strongly suggest you to enable and configure based on your internet usage pattern.

Interface is very clean and AJAX based. It offers all the features of DD-WRT though it may take a little to get accustomed to the new interface since the menu hierarchy is different from DD-WRT. There is a minor problem – ‘Save’ button is not visible unless you scroll down. More convenient location of the ‘save’ button would have been at the top rather than on the bottom.

I haven’t tried to compile Tomato yet, may be I will do it once I find some free time and post results here.

Overall, a nice upgrade! Give it a try, you may find Tomato a worth upgrade.

VoIP in India

Interesting Article in Hindustan Times about VoIP in India (also covering TringMe) :

India on the VoIP Wagon

Let me share some more views on this.

Although, operators like BSNL and MTNL are opening up to embrace VoIP, the tax and fee structure required by TRAI and operators make it difficult to provide VoIP services at a competitive rate. For e.g. DoT charges an additional 12.5% service tax on total charges which is relatively very high when compared around the world, makes it difficult for an Indian company to really provide world-class service at a competitive pricing, especially when a user have alternate option. What would DoT do if user directly buys credit from companies operating in US/Europe which will turn out to be lot cheaper compared to buying from India when 12.5% service tax is added ? There is certainly no advantage for either Indian VoIP companies or DoT as both will loose revenue.

To make VoIP really “affordable” for companies established in India, a revolution similar to the celluar revolution in India – ‘world’s best per min charges’ – is necessary. From a technical point of view, there are companies in India which can claim a stake to provide complete infrastructure which is the best amongst the world. It is interesting to know that while most companies in world like Gtalk, Skype, or TringMe provide inter-user VoIP communication for free, BSNL/MTNL charges 10 paise per user-to-user VoIP minute (PC-to-PC) which is extremely uncompetitive. As we can see from Puneet’s excellent article, market potential is immense and can really take off if done well.

India is amongst the top 5 counties in the world to use Smartphones. Hence, if done well, Mobile VoIP can become an extremely affordable, lucrative and convenient technology in India. Companies like TringMe are bringing in Mobile VoIP support for Smartphones so that one can use VoIP during travelling or on road and not just when one is in front of a PC. This has the potential to change the market dynamics in countries like India and China where mobile device penetration carries a huge momentum.

Disclaimer: I have active role and personal stake in TringMe

Barcamp Bangalore 5 & NASSCOM Product Conclave 2007

This week was full of events and action. I was attending BCB5 on Sunday and NASSCOM Product Conclave 2007 on Monday and Tuesday. It felt privileged to be part of NASSCOM sounding board panel – mobile technology panel on 19th and Web technology panel on 20th. The enthusiasm and the amount of energy flowing throughout both the events were very contagious. Meeting bright minds, discussing ideas and challenges and attending interesting presentations were some of the key highlights for me.

Two very recent Bangalore based startups from these events caught my attention:

Muziboo, It’s a platform to share your original music. I am not a die-hard music lover and I did not expect myself to spend much time there but it was a pleasant surprise.  Their website is simple, fast and easy to navigate with tons of social features (wouldn’t it be better to use existing social networks than to recreate?). I was glad to find some real quality music from hobbyists and amateurs there and I may comeback to it if quality is maintained.

While it is a good job to start with, I did not find Muziboo to be much different from other similar websites (except some nice Hindi songs). IMO, few differencing features may turn them into a killer website, for example (with my limited background in music):

  • Song request – Nothing better than to hear good recreation of my favorite songs. It will also help creating a demand and supply chain in addition to random music. 
  • Platform for musicians to meet singers and vice versa. A singer can upload songs and musicians can compose music to create best remixes based on their liking. I guess that would be a fun and will get more users who can either sing or compose music but not both.

Anyway, if you love music then I am sure you can spend great time there.

MyDuniya plans to provide a hosted platform for connecting web and mobile. Currently they have not published enough details on their website. Hence, I cannot disclose anything now from my discussions with them. However, it might turn out to be a good service for Indian web developers. Let us see.

Indian Cricket Telecast: It’s Cricket between the Commercials

Ever realized that nearly 50% of your viewing time during a cricket match is taken by commercials.  Unbelievable?  Just watch a small-unedited clip from today’s India-Pakistan match below (two overs) and see how Indian television viewers are taken for a ride by BCCI and television channels. Some rough statistics from the clip: 

Total time for two overs :  677 seconds
Full screen advertisements (between the overs): 12 advertisements – total 252 seconds – each advertisement taking  100 % of your television screen (list)
Overlay/banner  advertisements:  5 advertisements – total 31 seconds – each advertisement taking 6.5% of your television screen and up to  11% in one case (list).
Large overlay (the most irritating ones) :  52 seconds in 7 advertisement – each advertisement taking  extreme  44% of your television screen (list).
Total advertisement time:  approx 280 seconds

Out of 677 seconds, almost 280 seconds taken by advertisements excluding logos, visible hoardings and advertisements on ground itself. In Indian television, it is not the commercials between the cricket but the cricket between the commercials. In India cricket, is all about money honey.

adv2.jpgadv1.JPG

 

BSNL Blocking VoIP?

Is BSNL Blocking VoIP? All of a sudden, my SIP devices failing to connect to my SIP server starting today morning.

Initially I thought it was my firewall. Due to a power surge yesterday, flash of our linksys router (running DD-WRT) was corrupted and hence I suspected some problem there. However, it wasn’t. After some debugging, it turned out that it was BSNL which was maliciously blocking port 5060 and above.

I tried calling BSNL with no response on their ‘great’ customer service numbers.

Has anyone else experienced the same behavior? If ports are blocked deliberately then this is going to a big issue for subscribers. Not sure if there is a regulation to stop ISP from such anti-competing practices.

←Older