Archive

Author Archive

Startup Saturday July 11th, 2009

July 2nd, 2009 Pankaj Comments

Startup Saturday Delhi

Startup Saturday Delhi is gearing up for another great event on July 11th, 2009. We’ve got a great group of speakers coming in to talk about entrepreneurship in India, both online and offline.

Agenda

The agenda for the 11th of July is below. We look forward to seeing you there.

  1. “My Rules of getting Funded” – Rohit Agarwal of TechTribe fame. Rohit is an experienced entrepreneur who has co-founded many a startups. He has seen both ups and downs, one constant being – his ability to get funded. He will share some of his ways with money.
  2. “How we got here? From here to where?” – Harpreet Singh from CoCubes. He is going to give us the CoCubes story. How they started, Where they are now. Also a quick roundup of their business model, revenue streams. Why getting funded is not the end but the beginning.
  3. “Entrepreneurs and VCs to focus on Offline Businesses” – Sameer Guglani from Morpheus Venture Partners (MVP). There is a much larger and untapped market opportunity in businesses that do not operate out of the “internet”. Sameer will get talking about the space and such businesses.

Registration

To register for Startup Saturday Delhi on July 11th, please sign up here.

Broadband in India is Far from a Reality

June 4th, 2009 Pankaj Comments

Being involved in Startup Saturday Delhi, I have come across a lot of entrepreneurs building Internet applications. Most of them being India centric. The problem, which has been discussed and reported numerous times is that broadband penetration is a miniscule 3% of the whole population. There are roughly 3 million broadband subscribers in India.

Airtel 8Mbps with 4GB Cap

Airtel 8Mbps with 4GB Cap

India being a highly price conscious country, I find it amazing that telcos like Airtel are busy hiking the price of metered “broadband” while degrading service levels. The latest move by Airtel has been to increase the price of their “unlimited” 512k connection to Rs. 1,599 (USD 34) per month. The real kicker is that the speed degraded to 256k after you’ve hit downloads totaling 100GB.

Airtel 512k with 100GB Cap

Airtel 512k with 100GB Cap

At the same time, they are introducing 16Mbps connections for Rs. 2,999 (USD 64) per month that have download caps of 20GB. A single Linux distro download is 4GB. A point upgrade to OS X is generally around 500MB. Buying and downloading a few shows from iTunes or watching a few videos on YouTube and I’ll blow right thru my 20GB limit in a week. If I download roughly 40GB of data in a given month, my Internet access will cost me upwards of Rs. 12,000 (USD 255) per month.

Airtel 16Mbps with 20GB cap

Airtel 16Mbps with 20GB cap

If indian telcos like Airtel were to offer unlimited 1Mbps connections at Rs. 999 (USD 21) and unlimited 2Mbps at Rs. 1,599 (USD 34), the willingness of Indians to spend on Internet access would be much more palatable. Other than those whose careers in some way, shape, or form are connected to the Internet, very few people are willing to spend more than Rs. 999 per month on Internet access. Those that spend Rs. 999 or less per month, get an experience that basically sucks. They are frustrated and completely turned off by the fact that it takes 20 minutes to load a 3 minute video on YouTube.

India will never be a country of mass Internet adoption while the government agencies like TRAI and DoT don’t adopt a definition of broadband that is more inline with shifts in Internet usage. Indian telcos continue to provide subpar speeds at exorbitant prices when compares to the rest of the world. India, touting itself, as the technology center of the 21st Century, must adopt an infrastructure and a coherent policy around broadband deployment and usage. Only with the government mandating the need for widespread Internet adoption, at feasible price points, will there be widespread broadband adoption by non-techies.

However, relying on the government to be so forward thinking is a pipe-dream. What the Indian telcos should do is adopt a model that was instrumental in driving mobile usage in India. Drop the price points so that even the average person (living on Rs. 100 per day), would find Internet usage compelling, useful, and not frustrating. If they were to adopt a mass usage policy and not price their broadband products based on margins, I believe that in 5 years, India could have at least 100 million broadband users (via DSL, cable modem, Mobile 3G, wiMax, etc.) Is it too much to ask the Indian telcos like Airtel, MTNL, BSNL, Tata Communications, Reliance, etc. to push the envelope of adoption? Unfortunately, I think it might be.

The Top 10 Myths and Misconceptions of Long-Term Capital Management (LTCM) by Eric Rosenfeld

April 27th, 2009 Pankaj Comments

Eric Rosenfeld, one of the founders of Long-Term Capital Management (LTCM), gave this presentation at MIT back in February. If you have even a remote interest in finance (and even if you don't), this is an hour and a half very well spent. Eric is brilliant and fun to listen to.

Semblr Private Beta Is Open

April 7th, 2009 Pankaj Comments

Semblr - Start Assembling Your Team

It's been a long road, oft-delayed, but we've officially started our private beta of Semblr today. The basic premise around Semblr is simple. It's an online marketplace where you can assemble your team of experts using a reverse auction process. It's a market where people that are looking for work can connect with people that need to get work done by bidding for the work. In this kind of economic climate there are more and more experts around the world that are available to help with projects that previously they had no time for. We want to make Semblr the go-to destination for experts and those looking for those experts.

If you have an expertise in Programming, Writing, Video (online and offline) and various other topics, come on over to Semblr and sign up for our free private beta. If you're someone who is looking for an expert to help you get something done, come on over and sign up.

We're just getting started so the marketplace is a bit small and we're launching with a limited number of job categories but we expect to grow the list over time to encompass all kinds of personal outsourcing categories. We will also be inviting new users almost daily to join our marketplace.

We look forward to all your feedback and we'll do everything we can to make the Semblr marketplace a profitable place for you. BTW, if you have suggestions on categories that you'd like to see added to Semblr, please let us know thru the contact form or via Twitter (don't forget to follow us on Twitter so you can get to see the latest auctions.

Twitter Opens up OAuth, Where’s Perl?

March 23rd, 2009 Pankaj Comments

Twitter opened up their OAuth implementation last week. It's a much welcome aspect of working with Twitter's API since we're planning on implementing some functionality into Semblr that uses Twitter. Hence, understanding OAuth and prototyping it's use was important for us.

My problem with Twitter's implementation is that the documentation is sparse and there isn't a single example in Perl or Java. Maybe these two languages aren't cool enough to warrant examples but to me, they're important because they're all I know. I spent some time over the last few days trying to implement OAuth for Twitter in my Perl scripts. The example below is a bit messy but it works.

It will create a few temp files, request a token for you, ask you to go to the URL printed to authorize the application. When you've authorized the application, run the script again and it will allow you to submit a status update.

#! /usr/local/bin/perl
# $Author: pankaj $
# $Date: 2009-03-22 23:46:27 +0530 (Sun, 22 Mar 2009) $
# Author: Pankaj Jain
# Copyright: Teknatus Solutions LLC
################################################################################################################################
use Modern::Perl;
use Carp;
use Net::OAuth;
use Data::Random qw(rand_chars);
use LWP::UserAgent;
use Data::Dumper;
use JSON::Any;

main();

sub main{
    my $ua = LWP::UserAgent->new;

    my $consumer_key = 'sdBwlvTkpZr7eiCmB0Evig';
    my $consumer_secret = 'asSINZmwnxwIfLwmdNvVBW7OSVzFOWj4mjJeDDaA';
    my %tokens = getTokens();

    requestToken(consumer_key => $consumer_key,
                 consumer_secret => $consumer_secret,
                 %tokens,
                 ua => $ua);

    my $message = "This is a Perl Net::OAuth test for twitter!";
    my $foo = {status => $message};
    my $url = 'https://twitter.com/statuses/update.json';
    if (defined $message && $message ne "") {
        my $request = Net::OAuth->request("protected resource")->new(
            consumer_key => $consumer_key,
            consumer_secret => $consumer_secret,
            request_url => $url,
            request_method => 'POST',
            signature_method => 'HMAC-SHA1',
            timestamp => time,
            nonce => join('', rand_chars(size=>16, set=>'alphanumeric')),
            token => $tokens{token},
            token_secret => $tokens{secret},
            extra_params => $foo,
        );
        $request->sign;
        say Dumper($request);
        my $response = $ua->post($request->to_url);
        say Dumper($response);
        my $response_code    = $response->code;
        my $response_message = $response->message;
        my $response_error   = $response->content;
        if ($response->is_success) {
            my $retval = eval { JSON::Any->jsonToObj( $response->content ) };
            if ( !defined $retval ) {
                say "TWITTER RETURNED SUCCESS BUT PARSING OF THE RESPONSE FAILED - " . $response->content;
            }
        } else {
            say $response_code;
        }
        exit;
    }
}


sub requestToken {
    my %args = @_;
    if (defined $args{consumer_key} && defined $args{consumer_secret} && 
            !defined $args{access_token} && !defined $args{access_secret} && 
            !defined $args{token} && !defined $args{token_secret}) {
        my $token;
        my $secret;
        my $request = Net::OAuth->request("consumer")->new(
            consumer_key => $args{consumer_key},
            consumer_secret => $args{consumer_secret},
            request_url => 'https://twitter.com/oauth/request_token',
            request_method => 'GET',
            signature_method => 'HMAC-SHA1',
            timestamp => time,
            nonce => join('', rand_chars(size=>16, set=>'alphanumeric'))
        );
        $request->sign;
        my $res = $args{ua}->get($request->to_url); # Post message to the Service Provider
        if ($res->is_success) {
            my $response = Net::OAuth->response('request token')->from_post_body($res->content);
            print "Got Request Token ", $response->token, "\n";
            $token = $response->token;
            print "Got Request Token Secret ", $response->token_secret, "\n";
            $secret = $response->token_secret;
            if (defined $token) {
                my $auth_url = "https://twitter.com/oauth/authorize?oauth_token=" . $token;
                my $message = "Please visit $auth_url and authorize this application to access your twitter account.  You may revoke access at any time you wish.\n";
                say $message . "\n";
                open(TMP,">/tmp/request_token.txt");
                say TMP $token . "|" . $secret;
                close TMP;
                exit;
            }
        } else {
            die "Something went wrong";
        }
    } elsif (defined $args{access_token} && defined $args{access_secret} && 
            defined $args{consumer_key} && defined $args{consumer_secret} && 
            !defined $args{token} && !defined $args{token_secret}) {
        my $auth_req = Net::OAuth->request("access token")->new(
            consumer_key => $args{consumer_key},
            consumer_secret => $args{consumer_secret},
            token => $args{access_token},
            token_secret => $args{access_secret},
            request_url => 'http://twitter.com/oauth/access_token',
            request_method => 'POST',
            signature_method => 'HMAC-SHA1',
            timestamp => time,
            nonce => join('', rand_chars(size=>16, set=>'alphanumeric'))
        );
        $auth_req->sign();
        my $res2 = $args{ua}->post($auth_req->to_url); # Post message to the Service Provider
        if (!$res2->is_success) {
            die 'Could not get an Access Token: ' . $res2->status_line . ' ' . $res2->content;
        } else {
            open(TF, ">$ENV{HOME}/.teknatus/.twitter_token");
            my $response = Net::OAuth->response('access token')->from_post_body($res2->content);
            print STDERR "Got Access Token ", $response->token, "\n";
            my $access_tok = $response->token;
            print STDERR "Got Access Token Secret ", $response->token_secret, "\n";
            my $access_secret = $response->token_secret;
            say TF $access_tok . "|" .$access_secret;
            close TF;
            unlink("/tmp/request_token.txt") if (-e "/tmp/request_token.txt");
        }
        exit;
    }
}

sub getTokens {
    my %args = @_;
    my %tokens;
    my $tokenFile = $ENV{HOME} ."/.teknatus/.twitter_token";
    my $reqTokenFile = "/tmp/request_token.txt";
    if (-e $tokenFile ) {
        open (TF, "<$tokenFile");
        while() {
            chop($_);
            next if ( $_ =~ /^\s?$/);
            my @tmp = split(/\|/, $_);
            $tokens{token} = $tmp[0];
            $tokens{secret} = $tmp[1];
        }
        close TF;
    }
    if (-e $reqTokenFile) {
        open (TF, "<$reqTokenFile");
        while() {
            chop($_);
            next if ( $_ =~ /^\s?$/);
            my @tmp = split(/\|/, $_);
            $tokens{access_token} = $tmp[0];
            $tokens{access_secret} = $tmp[1];

        }
        close TF;
    }
    return %tokens;
}

1;

Calling all Startups!

March 9th, 2009 Pankaj Comments

Startup Saturday Delhi is just around the corner. We’re holding our next event on the 14th of March at the American Center from 2pm to 6pm. The goal of Startup Saturday is to give startups a place where they can showcase their products and their businesses. Our goal is to also allow entrepreneurs and those considering a life as entrepreneurs to share information, learn from each other, and be a part of building the entrepreneurial ecosystem in India.

If you’re a startup or know of any Indian startups that would like to publicize their products/services, please fill out the Demo Nomination form so we can get you on the Startup Saturday Delhi agenda.

Looking forward to seeing you at Startup Saturday Delhi!

2008 Reflections and 2009 Plans

January 1st, 2009 Pankaj Comments

Happy 2009 everyone!

2008 has been a very interesting year by all measures. We saw record drops in global stock market indices - 34% drop for the Dow, the worst since 1931. We saw vast amounts of wealth obliterated. We saw the US moving closer and closer to a socialist economy. We saw the election of the first African-American to the office of the President of the United States. We saw another round of incredibly well planned terrorist attacks across India, culminating in the sixty hour standoff in Mumbai. We saw Indians get up and rebuild quickly from the attacks. We saw a new sense of urgency in the fight against terror by the Indian middle class. And we have seen India and Pakistan, once again, come to the brink of war.

Obviously, we've seen a number of other things that I've missed but these are some of the events that will always remind me of 2008. 2008 is also the year we got Teknatus Solutions Private Limited up and running in India. We did a soft launch of our Bridal network, Brides' View and we're getting ready for a private beta of our next product - Semblr. It's been an interesting and tough year all around. We've seen an incredible amount of interest generating around the Indian startup scene, both with prospective employees and also with the media. Plenty of folks have done a great job in catering to this interest. We've had Proto, Head Start, Startup Saturday and also BarCamps across all major Indian cities to help get startups some visibility and to help those interested in learning/joining/startip a business. With the economic downturn, a good deal of media attention is turning to startups and venture funding. The amount of Indian startups has been increasing steadily and now, with many people getting laid off, the numbers should increase even more. As far as VC/angel funding, well, the picture in India and globally isn't as rosey as it was six months ago. However, there are still quite a bit of deals closing.

For Teknatus, 2009 is going to be an interesting and challenging year. Our major goal for the year will be to launch a few additional products and start generating revenue. It won't be easy but I feel confident that the product we're getting ready for soft launch will be generating revenue by the end of the second quarter of 2009 and by then, we are planning to launch our third product which will be a SaaS product geared toward SMEs. Our next major goal is going to be working on building the team out. We're going to have positions opening up for various roles over the coming months and, hopefully, we'll be able to fill them with some great people.

In 2009, we also plan to continue working on helping the entrepreneurial ecosystem in India, specifically New Delhi. We've found platforms like Startup Saturday to be wonderful areas to connect with like-minded individuals. Hiring and building a team in India is difficult but it's not insurmountable.

Once again, happy 2009!

Categories: Business, Business and Economics Tags:

MySQL 64bit, Perl 32bit and OS X Leopard

December 26th, 2008 Pankaj Comments

This is a little tip on how to get Perl(32bit) working with a 64bit version of MySQL on OS X Leopard.

I was working on a small project today that required MySQL 5.067 and I opted to do it in Perl 5.10. You may remember a post that I put up in August describing how to compile MySQL 64 bit for OS X Leopard. Well, since then I also compiled and installed Perl 5.10 (not replacing Apple’s system install of Perl). I wanted to take advantage of some of the Perl 6 features that have been backported to Perl 5.10 (the first Perl release in two years).

Back to today’s project, I decided to use the awesome Class::DBI Perl module to do my little project. I wrote all my code and began to run it in the perl debugger and realized that I need to install the DBD::mysql module. During the installation process for DBD::mysql, the Perl module is compiled using the mysql libraries and header files. Compilation wasn’t a problem. It’s when we got to the ‘make test’ step that all hell broke loose.

To cut a very long story short, I kept getting the error below:


# Failed test 'use DBD::mysql;'
# at t/00base.t line 21.
# Tried to use 'DBD::mysql'.
# Error: Can't find 'boot_DBD__mysql' symbol in /Users/pankaj/.cpanplus/5.10.0/build/DBD-mysql-4.010/blib/arch/auto/DBD/mysql/mysql.bundle

I dug around a bit and decided to run the installation manually. The problem here has to do with compiler flags that were used for mysql. MySQL was compiled as a 64 bit Leopard binary. However, Perl 5.10 was compiled as a 32bit binary because many Perl modules don’t support 64 bit out of the box.

To solve the problem, I had to recompile the mysql client libraries:


--($:~/src/mysql-5.0.67)-- export ARCHFLAGS="-arch i386"
--($:~/src/mysql-5.0.67)-- CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql.32 --without-server --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-shared
--($:~/src/mysql-5.0.67)-- make
--($:~/src/mysql-5.0.67)-- make test
--($:~/src/mysql-5.0.67)-- sudo make install

Once the mysql client libs were done compiling and installed into /usr/local/mysql.32, I changed my PATH to ensure that the newly compiled mysql libraries and binaries were picked up before anything else.


export PATH=/usr/local/mysql.32/bin:${PATH}

Once that was done, I went back to my DBD::mysql source directory and built it using the following commands:


--($:~/src/DBD-mysql-4.010)-- perl Makefile.PL --libs="-L/usr/local/mysql.32/lib/mysql -lmysqlclient -lz -lm" --cflags="-I/usr/local/mysql.32/include/mysql"
--($:~/src/DBD-mysql-4.010)-- make
--($:~/src/DBD-mysql-4.010)-- make test
--($:~/src/DBD-mysql-4.010)-- sudo make install

This time, make test ran beautifully with a few minor exceptions because I didn’t actually give it a mysql db to connect to.

The mysql 32bit client can easily connect to the 64 bit server. Perl, Class:DBI are now very happy and the application is running as planned.

The Financial Ninja and “Greenspan Sees market Rebound”

December 20th, 2008 Pankaj Comments

Here's a great post over at the Financial Ninja's Blog about how Greenspan sees the market rebounding in six to twelve months. I couldn't agree with the Financial Ninja more when he says, "I too believe we'll bounce significantly... but only to dive into abyss after."

Don’t Believe the Market Hype!

November 26th, 2008 Pankaj Comments

Intro
As all of you who've been keeping up-to-date on the happenings in the financial markets know, there's been a good deal of turmoil and volatility continuing. GM and Chrysler, in the US, are begging for bailouts, small, medium, large and extra large companies are laying off people in droves (Citigroup will be laying off 53,000 people). Things are pretty bad in the US right now. We all know that, we all hear about it, and the US stock market shows us daily.

What about India? Well, if you ask the Prime Minister, the Finance Minister, various financial "analysts" on TV, etc. they will tell you that India is very well insulated and the India growth story continues, with a few minor speed bumps along the way. My personal opinion is that the politicians and media are generally telling us what we want to hear. They're not accurately portraying the severity of the situation in India. The situation is about to get worse in India but, barring any further catastrophic meltdowns, India should see some incredible growth post 2011.

Relative GDP Growth
Let's look at India's economy on a relative basis. Relative to the US and other developed, highly deregulated economies, India's still got a growth story, whereas, the US, the UK, Japan, etc. are all in a recession (negative growth). The talking heads in India tell us that India is still on track for 6.5% to 7% GDP growth in 2009. Assuming that is true and exactly what will happen, it's huge number (in aggregate terms) compared to other developed and many developing countries! However, India still has roughly 450 million people at or below the poverty line. This is one and a half times the population of the whole US. In order for India to decrease the number of poor and continue to provide for the basic necessities of the economically disenfranchised and cater to the increasing consumption of the middle and upper classes, growth needs to accelerate, considerably. GDP growth in India MUST be at least 10% if India is to continue to grow, relative to other economies. In my opinion, 7% GDP growth is akin to a recession in a developed economy. How can India grow at more than 7% in 2009? It's a complicated question that the smartest economists from Harvard, Oxford, LSE, etc. are trying to answer. I won't be pretentious enough to suggest that I know the answer. However, I will say that whatever the answer is, it's very complicated and it will most likely make a vast amount of people very unhappy. Hence, it won't be politically viable, especially, in an election year.

Layoffs
On the 20th of November, there was a nice little piece on Livemint that quoted Cabinet Secretary KM Chandrashekhar, "Most of our productions are based on domestic demand. As long as domestic demand remains reasonably strong, I don't think there would be any large-scale job cuts in India," he said. Domestic demand for many goods and services is growing but is it growing enough to keep up with supply?

The article also went on to describe how Jet Airways was "asked", by the government, to take back all of the 1,900 employees that they had laid off in October 2008. As a business, Jet Airways has every right to hire and fire the people they need to in order to stay competitive, and profitable. However, the Indian government, must also do what they can to avoid mass layoffs across large, high profile, Indian companies. Mass layoffs across Indian industry will have a devastating affect on the economy. However, how many additional companies can the Indian government "ask" NOT to layoff people before companies start feeling intense pain?

Smaller companies are laying people off and some are even shutting Indian offices. Zapak, a mobile games company, recently announced that they would be shutting their Bangalore office. In the Business Section of the Hindustan Times (Saturday, November 22, 2008 Edition), HSBC is predicted to layoff approximately 200 employees across India. Dell has decided to scale back their hiring of new employees. These are just large companies.

About ten days ago, I had spoken to an executive at a premium tissue maker in India. They said sales have fallen dramatically. People have switched from using premium tissues and toilet paper to non-premium essentials. If the current sales numbers continue, not drop, they will probably have to layoff some people.

When I told a family business exporter of garments that he must be happy since the USD has climbed dramatically against the INR, he told me that he's more scared then ever. He told me that orders are being cut by his clients, some of them have begun renegotiating contracts to pay in INR rather than USD because they feel that the Rupee can only depreciate against the US Dollar. I'm not quite in agreement in that statement but it highlights a very important fact - sales are down globally, not just in the West.

Real-Estate
The real-estate sector in India has slowed. There's no questioning that statement even if developers/builders in your neighborhood are still jacking up rates. They generally see the downturn but don't want to make a loss on their investment. Just wait it out and eventually, they will cave in. How can I say that, well, it's simple. They made some profits from other deals. Those profits allowed them to get funding from a bank. They have a mortgage to pay and at some point, probably six months, they will feel the excruciating burden of carrying the property and will realize that they have no choice but to cut their losses and run.

Investments in second and third tier cities have dropped dramatically. Indian and foreign investment firms are finally stating the obvious, "The Indian Real Estate market is slowing". Many projects from large RE developers like DLF and Unitech have been put on hold indefinitely. Indiabulls sees a 15% correction in the real-estate market over the next six months. I'd put the number a bit higher, closer to a national average of 25%. Marriott recently decided to shelve building a 250 room hotel in Pune, by at least two years.

For now, gone are the days when your driver or plumber is quitting his job to become a real-estate broker or a handyman is quitting his job to become a real-estate developer/builder.

Stocks
The BSE Sensex is at a three year low. Confidence is shaky at best. Corporate earnings look ok (on a relative basis) but earnings growth appears to worrying investors. Most companies are no longer expecting 20% or 30% growth rates for 2009. Info Edge (Naukri.com) has said that they see fiscal Q209 revenues to be half of fiscal Q208. Earnings growth is slowing. The question to ask is, "Is the rate of deceleration increasing?".

The BSE has failed to rally after two very big days of gains for the Dow. People in India are still bullish on the market and the Indian growth story so why hasn't the BSE soared like the Dow did on November 21st and November24th? There's still too much uncertainty and the Indian stock market is telling us that cautious optimism is warranted.

Currency
The Rupee is at an all time low against the US Dollar (though a one week high, as of November 25th, 2008). There are a great deal of challenges that India faces in the next two years - much like the whole world. I look at the Rupee relative to the US Dollar and I think that they INR should settle somewhere around INR 49 per USD by the second half of 2009. The US also faces great challenges but the Indian scenario is quite a bit more precarious in many ways. GDP deceleration, inflation (currently at 8.56%), rising import costs, FX reserves are much too low for comfort. Morgan Stanley expects the Rupee to depreciate to 57 before it appreciates. They may be right but the USD is going to be under a great amount of strain considering how much additional debt is going to hit US tax payers in the pockets.

It's hard to say what will happen. All we know is that many many things can change, very drastically, fairly quickly. I believe the next two years are going to be very difficult, globally, and we should be prepared for it - financially and psychologically.

LinOSX TechnoMash is Digg proof thanks to caching by WP Super Cache!