Monday, October 4, 2010

Revisiting the Console Cost

Ever since OnLive went live, streaming real games to real people, many (including myself) compared the announced monthly fee for the service to the cost of a console, which is an apt comparison to make. OnLive functions like a console - providing a platform for playing games that will, I expect, one day rival Nintendo, Sony, and Microsoft.

The original announcement suggested a $14.95 fee, which was quickly reduced to a one-year "founders program", sponsored by AT&T so users pay nothing for the service during the year, with an expected $4.95 per month charge in the second year. At $14.95/month, the service for an assumed 3-year timespan compared better to PC's than consoles; at $4.95/month, the service competes better in the console price-range.

I've argued that the key to success for a company that streams video games to customers will not just be in overcoming technical issues, but rather in providing a positive value-proposition for consumers. I questioned whether OnLive could provide enough value to consumers who would be charged both full-price for individual games, and a monthly subscription to boot.

All the while, I was hoping that OnLive would make an announcement like this.

Things just got very, very interesting in the emerging world of streaming video games. By dropping monthly fees entirely for the use of its service, OnLive just eliminated a huge reason to avoid its platform, and suddenly makes a compelling value-proposition case for its current and would-be customers. Even were one to make no game purchases, there is value in watching players in the Arena - like watching a live demo - for games one is considering, let alone play a half-hour demo, which the service also allows for, for free.

Without a doubt, OnLive is banking on the idea that once they have you on their service, you will eventually spend money there. And I'm guessing that is exactly what will happen. By dropping its monthly subscription fee, OnLive has engineered a welcoming community. By encouraging the casual browser, OnLive will gain the customer.

Sunday, May 2, 2010

Domestic Computing

I think I've finally figured out why I might want an iPad.

When the device was first announced by Apple, like many others I found myself questioning whether I could see any use for Apple's concept of tablet computing. It doesn't have USB ports, it doesn't support Flash, it doesn't even run OS X let alone dual-boot into Windows. It runs the iPhone OS without making phone calls. It doesn't have a keyboard or handwriting recognition. It is more expensive than a netbook, and not much less expensive than a fully-featured laptop.

It's easy to focus on these items as limitations, coming from a PC - Personal Computing - paradigm. The paradigm that grew out of document creation, desktop publishing, and office applications. The paradigm that evolved from the hard-drive/folder/file metaphor for managing data. The prevailing computing paradigm before online newspapers or streaming media existed.

PC's aren't going anywhere any time soon. We still need computers for document creation, but there is an overhead when using a PC with a modern operating system. The modern PC requires consumers to be system administrators in the home, dealing with operating system patches, malware protection, and data backups. It has become increasingly annoying when time in my home life (for example, a ten-minute block in the morning routine devoted to quickly browsing articles in an RSS feed) is delayed or lost because an operating system patch was delivered in the middle of the night and is installing, or the virus checker found some malware on the machine and couldn't deal with it cleanly.

I don't mind dealing with these types of issues in the course of my work. I get paid to program computers, and some degree of desktop administration is just a cost of doing business. But at home? At home, there is something very appealing about an instant-on device requiring little (if any) system administration, with an all-day battery-life, simple user interface, and portable for use throughout the house, but without the limitations of a mobile device (read: tiny screen size).

Such a device may be ideally suited for domestic computing.

Here's my daily use case for a domestic tablet computer. The device is docked on my nightstand. Its alarm clock application wakes me up in the morning with some music and a display of the day's weather forecast. I take it off the dock to read the morning paper and my rss feeds - it is instant-on, so I don't have to wait for bootup time. I might put it back on the nightstand during the workday, or put it on the living room table as a digital photo frame. Long battery life ensures I don't need to dock it again until nighttime.

If I'm working around the house, a how-to application (with video demonstrations) is running, helping me fix a plumbing problem, or cook a meal. If I'm lounging in bed or on the couch, I might play a game or stream a TV show. If I want to watch with the family, we use the same TV/movie service streaming directly to our living room television set - the same media library being available to each.

For reading books during the day, I think I'll probably still be using my Kindle (the e-Ink screen really is easier on my eyes.) But, for a rich-color magazine experience, or for some light reading at night before bed, I'll use the domestic computer, just before docking it back on the nightstand. Amazon will help me by keeping my place sync'd between both devices.

Personal Computing is work, and to some extent should be. Domestic Computing isn't, and shouldn't.

I think I want an iPad.

Wednesday, April 14, 2010

Game-changers

With the iPad officially released, the question being asked of it by a good portion of the media, tech and otherwise: "Is the iPad a game-changer?"


To change the paradigm in a given industry, a company must demonstrate right from the start a strong value-proposition for the consumer. A would-be game-changing product requires a critical mass of consumer adoption to remain viable enough to become ubiquitous. To illustrate this point, we can look to rising companies involved in streaming media and gaming experiences.

NetFlix has been and will continue to be a game-changing company. Their initial business model, mailing physical DVD's for rental to subscribers for a set monthly fee, was game-changing enough to send Blockbuster stock significantly down. But the business decision made by NetFlix that I find most compelling is in their moves to support as many consumer devices as possible for streaming DVD content. They started with browser-based streaming so any modern PC can serve as a client. Most recently, NetFlix completed the gaming console hat-trick, adding the Wii to the XBox and PlayStation 3 so subscribers can stream content to any of the three. NetFlix support is built-in to a number of devices, including television sets, the TiVo DVR, home theater systems, and Blu-Ray players. Most importantly, from the consumer's point of view, no additional fees are required for this ability to stream anywhere.

NetFlix started with a strong value-proposition for consumers: an inexpensive monthly subscription fee (which pays for itself by the second or third DVD rented during the month), with no late fees and a convenient mechanism for returning discs (the mailbox). They added streaming-to-PC's and to numerous other devices for no additional cost. This is clear added-value for customers. NetFlix was and is a game-changer for video rentals.

Streaming video game experiences has the potential to be just as game-changing for its industry. Companies like OTOY, GaiKai, and OnLive are proving that the technology hurdles can be overcome. The question remains the value-proposition for the consumer, and on this front, the evidence is unclear. OnLive has the most information about their intended consumer model out there, which includes a $14.95 monthly subscription fee. But unlike NetFlix, the OnLive subscription fee does not open the full media library to its members. Subscribers must still purchase games, and from what has been stated thus far, publishers intend to charge prices that are comparable with versions of the games on PCs or gaming consoles. From a consumer perspective, this is not enough of a value-proposition to be game-changing. If OnLive (or others) ultimately do not succeed, it will not be because of a lack of technical innovation, but rather because they could not prove enough of a value-proposition to reach that critical mass of consumer adoption. Put another way: the streaming gaming company that does provide a strong value-proposition for consumers will succeed.

Based on prices, one might argue that Apple's value-proposition has been weak with just about all of their products. Apple computers are consistently more expensive than their PC counterparts. Apple's iPod is a more expensive MP3 player than their competitors'. The iPhone is a more expensive cell phone. To be an Apple consumer implies a willingness to pay a premium.

Where Apple historically has succeeded in offering a strong value-proposition to consumers is in how well their products work, how easy they are to use, and how comfortable they feel. It is generally a pleasure to use Apple consumer products, and while that may sound a little too touchy-feely, having enjoyable experiences using technology counts for a lot when it is a part of daily life. Apple's success here is not an accident - it has paid close attention to the user experience throughout its history and this manifests itself consistently in its products' designs and interfaces.

So with the iPad, does Apple have a game-changer?

Aside from communication, the rise of handheld computing (cell phones and such) over the past decade or so has been all about consumption over creation. You read your email, browse the web, get maps and directions, consume media, and play games from your handheld devices. You don't use a cell phone to write books or compose complex spreadsheets. Sure, you might take a picture with your cell phone camera (that is an act of creation) but you're likely going to transfer that image to a "real" computer to edit or digitally enhance the photo.

Apple's proposition with the iPad - and it is really very simple - is that size matters. Consumption computers have traditionally been pocket-sized rather than laptop-sized, which is great when you are on-the-go, but not so much for when you collapse at home on the sofa and want to read the newspaper, or a book, or browse some blogs, or watch a streamed video. A well-designed personal consumption device may very well have a place here.

As the iPod and iPhone were before it, the iPad is a recognition by Apple that consumption computers will be continue to evolve as a ubiquitous part of daily life. As a device for creation, the iPad poses no threat to laptops or desktops. But as a device for consumption - particularly at home - the iPad has the potential to be a game-changer.



Monday, March 22, 2010

The Closed Loop System

In a recent press release, CEO Christopher Boothroyd of Aftercad Software described the current efforts under development for streaming video games by the likes of OnLive and Otoy this way: "I sincerely think these guys are going to replace the console, but it is one closed loop system replacing another closed loop system."

He has a point. Though games from these companies are intended to stream through web browsers, they do so without observing open web standards. Boothroyd uses the term "PC-over-IP", reminding us that there is a difference between IP-based and web-based delivery.

Aftercad is working on Project Immersion, a different approach for bringing 3D-gaming and interactive experiences to a web browser. With Immersion, the client shares some responsibility for game processing with the server, communicating through the use of AJAX client scripting. This builds on the same standards used by current web applications and supported by legions of developers proficient in JavaScript. With the client back to performing the 3D rendering, games can be still be delivered instantly with little opportunity for lag.

Under such a paradigm, games could be developed and delivered directly by publishers without the need for a console or closed platform. Companies like OnLive become obsolete before they ever get started. The approach of streaming based on open web standards also removes the need for a company like Gaikai, who's paradigm resembles this, but with a dependency on Gaikai's closed technology.

Aftercad's Immersion represents another useful approach toward streaming video games, and I hope they enjoy success. But is it fair to say that theirs ultimately isn't a "closed loop system"? The Immersion project is currently using the Unity 3D game engine. Unity already makes a small browser plug-in for deployment of games developed for its engine to web browsers. So while Aftercad is promoting open web standards, the acceptance of one company's game engine as the foundation of their approach is just another closed loop system.

Isn't it?

Friday, March 12, 2010

OnLive's Console Cost

With OnLive's recent announcement of a $14.95/month service cost, we can finally begin comparing it's cost as a platform for consumers to consoles and PC's. Assuming a dedicated gamer purchases a console or PC for three years of use before replacing it or upgrading it with newer hardware, the $14.95 per month equates to a three-year console cost of about $540. This compares favorably to a hardcore gaming PC which can cost significantly more. Consider Dell's offerings in the XPS 730x at about $1400, or its mega-powerful Alienware Area-51 ALX Desktop at a whopping $4000.

As for home consoles, the over-$500 range is on the high side. The 120GB PlayStation 3 is currently retailing for under $300, and the 250GB model under $400. Sure, the PS3 cost more when it debuted, but then again, Sony wasn't attempting to create a new paradigm for game publishing either.

Changing the paradigm for game publishing is exactly what OnLive is striving to do. Streaming a lag-free experience is the technical challenge, which OnLive's creators claim they've solved. I believe them. It was only a matter of time before some company figured out how to do this, even with the current state of Internet broadband penetration.

I'm willing to accept that the streamed game experience will match a home-console playing experience in terms of lag well enough. But truly changing the paradigm will require providing a clear financial benefit to the consumer. This is because consumers have to give things up to buy into the OnLive concept:
  • Consumers no longer own the physical media for games they've purchased. For the consumer, buying streamed game experiences isn't the same as buying and having the games. If their game library stays with the platform company, what happens if the company goes out of business? If Nintendo or Sony were to go out of business right now, at least Wii and Playstation owners could continue playing the games they've bought on their home consoles.

  • Consumers no longer control the game delivery. There's going to be that one day you want to play, and your access to the network is out for whatever reason. With a home console, the only thing that stops you is a power outage.

  • Consumers no longer can purchase games second-hand. I appreciate that for game publishers the existence of GameStop peels profits away, and that problem only gets bigger with ever-increasing costs of game development. However, we're talking about the consumer here, and buying an older (or newer!) game second-hand for cheap is a clear consumer benefit and something given up in an OnLive world.

    For that matter, what about giving a game to your friend once you're done playing it? This goes back to there being power for the consumer in owning the physical media - power that they must willingly give up to buy into the new paradigm.
Consumers typically aren't asked to give things up when newer technology comes to replace the old. DVR's are replacing VHS machines? No big deal - it just means I can record my shows easier. I'm not being asked to give anything up when buying into the new technology. Still, with streaming game experiences I believe that large numbers of consumers, enough to make the paradigm shift viable, are willing to give those things up - but only if there is a notable financial benefit to do so.

So OnLive sells the platform/service for $540 over the course of three years. That seems high, but if the games were then sold for say $30 instead of $60, then suddently there is a significant incentive for the consumer to adopt the platform. Or, say that $540 platform came with a number of free games? Or better yet, for that flat monthly rate, you can play any game in the library?

OnLive is testing these waters too. It didn't take long after the original service cost announcement for OnLive to announce a secondary "Game Portal" option - for consumers who would be "looking for direct access to OnLive games without being required to subscribe to the features of the full OnLive Game Service". It seems this is their answer - to provide the platform for free, but without a number of features. I suppose it just depends what features are no longer available.

I think enough consumers are willing to move to a new streaming paradigm to make it viable. Given the control and consumer power they are being asked to give up in the shift, the consumer cost needs to be better-than-competitive.



Friday, December 11, 2009

Screen-scraping an ASP.NET application in PHP

I recently was asked to assist a friend in developing a PHP script to automate authenticating to an ASP.NET web application and scraping a small piece of data from a secured page that changes periodically. The cURL library in PHP works well for this task, but there are a few important aspects of an ASP.NET application to recognize:

  • ASP.NET applications that use forms-based authentication typically process login input and return an encrypted authentication token in the form of a cookie to the browser. Capturing this cookie properly is necessary to automate the process.

  • ASP.NET also employees a mechanism known as ViewState that must be respected. The mechanism is provided for developers that need to maintain the illusion of a stateful environment across multiple postbacks to a page. This allows, for example, a user to enter a value in a textbox, click a submit button, and have that value remembered in the textbox as the page is refreshed. This kind of functionality in other platforms is typically very complicated to build, but ASP.NET is engineered to support it natively.

    It does so by passing a value to the browser with each participating page as a special hidden <input> tag with the name "__VIEWSTATE". The encrypted value is automatically included then as a POST parameter when the page is submitted back to the server. The ASP.NET application server then processes the encrypted value to restore user interface control values and properties as it reconstructs the "new" page it sends back to the browser (with an updated __VIEWSTATE tag).

    So a PHP script that automates posting to any ASP.NET form must respect this process and properly capture - and resubmit - the appropriate __VIEWSTATE value.

  • ASP.NET has additional mechanisms to validate page posts, supplying additional encrypted information in a hidden <input> named "__EVENTVALIDATION". If this value is present, the PHP script must capture it as well.

To ensure __VIEWSTATE and __EVENTVALIDATION are respected when submitting a form typically requires two calls to an ASP.NET page. The first is a simple GET, the results of which may be parsed with regular expressions to pull the appropriate hidden <input> values. The second is the POST which submits desired <input> values as well as the previously retrieved __VIEWSTATE and __EVENTVALIDATION. Performing these two calls on a login form, and submitting appropriate account information successfully returns the authentication cookie which is then submitted for each subsequent request for a secured page.

The following script uses the cURL library to perform such a login and accesses a secured page. The variables at the top of the script may be modified to match the desired site and account information.

<?php
/************************************************
* ASP.NET web site scraping script;
* Developed by MishaInTheCloud.com
* Copyright 2009 MishaInTheCloud.com. All rights reserved.
* The use of this script is governed by the CodeProject Open License
* See the following link for full details on use and restrictions.
* http://www.codeproject.com/info/cpol10.aspx
*
* The above copyright notice must be included in any reproductions of this script.
************************************************/

/************************************************
* values used throughout the script
************************************************/
// urls to call - the login page and the secured page
$urlLogin = "http://www.server.com/blahblah/login.aspx";
$urlSecuredPage = "http://www.server.com/blahblah/securedPage.aspx";

// POST names and values to support login
$nameUsername='txtusername'; // the name of the username textbox on the login form
$namePassword='txtpassword'; // the name of the password textbox on the login form
$nameLoginBtn='btnlogin'; // the name of the login button (submit) on the login form
$valUsername ='myUsername'; // the value to submit for the username
$valPassword ='myPassword'; // the value to submit for the password
$valLoginBtn ='Login'; // the text value of the login button itself

// the path to a file we can read/write; this will
// store cookies we need for accessing secured pages
$cookies = 'someReadableWritableFileLocation\cookie.txt';

// regular expressions to parse out the special ASP.NET
// values for __VIEWSTATE and __EVENTVALIDATION
$regexViewstate = '/__VIEWSTATE\" value=\"(.*)\"/i';
$regexEventVal = '/__EVENTVALIDATION\" value=\"(.*)\"/i';


/************************************************
* utility function: regexExtract
* use the given regular expression to extract
* a value from the given text; $regs will
* be set to an array of all group values
* (assuming a match) and the nthValue item
* from the array is returned as a string
************************************************/
function regexExtract($text, $regex, $regs, $nthValue)
{
if (preg_match($regex, $text, $regs)) {
$result = $regs[$nthValue];
}
else {
$result = "";
}
return $result;
}



/************************************************
* initialize a curl handle; we'll use this
* handle throughout the script
************************************************/
$ch = curl_init();


/************************************************
* first, issue a GET call to the ASP.NET login
* page. This is necessary to retrieve the
* __VIEWSTATE and __EVENTVALIDATION values
* that the server issues
************************************************/
curl_setopt($ch, CURLOPT_URL, $urlLogin);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$data=curl_exec($ch);

// from the returned html, parse out the __VIEWSTATE and
// __EVENTVALIDATION values
$viewstate = regexExtract($data,$regexViewstate,$regs,1);
$eventval = regexExtract($data, $regexEventVal,$regs,1);


/************************************************
* now issue a second call to the Login page;
* this time, it will be a POST; we'll send back
* as post data the __VIEWSTATE and __EVENTVALIDATION
* values the server previously sent us, as well as the
* username/password. We'll also set up a cookie
* jar to retrieve the authentication cookie that
* the server will generate and send us upon login.
************************************************/
$postData = '__VIEWSTATE='.rawurlencode($viewstate)
.'&__EVENTVALIDATION='.rawurlencode($eventval)
.'&'.$nameUsername.'='.$valUsername
.'&'.$namePassword.'='.$valPassword
.'&'.$nameLoginBtn.'='.$valLoginBtn
;

curl_setOpt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_URL, $urlLogin);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);

$data = curl_exec($ch);


/************************************************
* with the authentication cookie in the jar,
* we'll now issue a GET to the secured page;
* we set curl's COOKIEFILE option to the same
* file we used for the jar before to ensure the
* authentication cookie is sent back to the
* server
************************************************/
curl_setOpt($ch, CURLOPT_POST, FALSE);
curl_setopt($ch, CURLOPT_URL, $urlSecuredPage);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);

$data = curl_exec($ch);

// at this point the secured page may be parsed for
// values, or additional POSTS made to submit parameters
// and retrieve data. For this sample, we'll just
// echo the results.
echo $data;



/************************************************
* that's it! Close the curl handle
************************************************/
curl_close($ch);


?>

Friday, November 20, 2009

Bring it on, Intel

I continue to find written communication to be challenging (evidenced by the fact that I've started about a dozen blog posts in the past three months, without finishing any!) I have good thoughts, but writing them well is its own skill. Struggling with this, I respect those for whom good writing comes naturally that much more.

So when I read that there are some Intel researchers predicting that by 2020 we will have brain implant chips capable of controlling computers through thoughts, I thought: Bring it on, Intel! Maybe we're controlling computers in 2020, maybe by 2050 we have ubiquitous mind-reading machines. I'm not worried that someone someday could read my thoughts - I welcome it. Then I wouldn't have to struggle to put them into words.