VOIP services

In case Vonage bites the bullet because Verizon can’t compete outside the courts, I started looking for another possible VOIP provider. I really don’t want to go back to my old telco.

Here’s a list of VOIP providers I’ve found:

For more information look through whichvoip.com

I surely hope that Vonage will survive this injunction, as I’ve been a happy customer for over 2 years.

Vonage doomed?

This totally sucks, as a Vonage user, I’m wondering what will happen to Vonage. I’ve saved a lot of money on my telephone usage: average $21 compared to $55+ with Sprint (now Embarq).

U.S. District Judge Claude Hilton approved Verizon’s request curtailing the service today, sending Vonage shares to a record low. Hilton, in Alexandria, Virginia, said he won’t sign the order before a hearing in two weeks on Vonage’s request for a stay. A jury found March 8 that Vonage infringed three patents and said it should pay Verizon $58 million.


If Vonage has to shutdown, I might have to go with
TimeWarner cable’s digital phone or try sunrocket assuming they don’t have the same patent issue.

I hope Vonage can figure this out even if it means a rate increase, as I’m still under $55 per month.

tonights hackfest

My work on getting sm-photo-tool to use smugmug’s REST API continues. It’s been slow going as I’m also learning python as I go.

Tonight I can get image and album info using the REST API which returns me an XML document. I parse the document using DOM, and dynamically create a class with an internal map (or dict in python) of attributes.

Here’s a sample response from the getImageInfo REST API call:

<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
   <Image id="134646762">
    <Album id="2559293" />
    <Caption />
    <Keywords />
    <Date>2007-03-08 17:48:25</Date>
    <LastUpdated>2007-03-08 17:48:34</LastUpdated>

This is the class I want to create:

class Image:
    def __init__(self):
        self.data = {}
    def __setitem__(self, key, value):
        #print "__setitem__(%s:%s)" % (key,value)
        self.data[key.lower()] = value
    def __getitem__(self, key):
        #print "__getitem__(%s)" % (key)
        return self.data[key.lower()]
    def __str__(self):
        return str(self.data)

This makes it easy to use the resulting object.

    print "getimageinfo ---------------------------------------"
    imgInfo = sm1.getImageInfo(sessionid, images[0])
    print "imageinfo: " + str(imgInfo)
    print "TinyURL = " + imgInfo['TinyURL']
    print "imageid = " + imgInfo['imageid']
    print "albumId = " + imgInfo['albumId']

All of the code can be found here..

A more OO way is to have getter and setter methods, but I really like the ability to treat an object as a map and send it “messages”. I despise getters and setters now.

Off to bed now.

Taxes done :(

Taxes are done, and I’ve realized that stock options are a mixed blessing. I wonder if a CPA can do some sort of magic for me.  Oh well, c’est la vie.