My WorldMap:   [ what's this? ]


Sunday, March 08, 2009
Adding Charts...
I thought it would be interesting to play with some charting of the statistics in Worldmaps.  On each map's stat page, instead of the traditional browser stats as I showed in my last post, I figured it would be more meaningful in chart.  The result looks like:



There isn't enough data yet to make them look that great, but by next month the charts will start filling out a bit.  The chart on the left shows typical browser stats in percentage, and the chart on the right shows overall traffic per month, compared to the nearest maps.
posted 03/08/2009 18:35 | avg rating: none | comments: 0 | trackbacks: 0

Tuesday, March 03, 2009
Browser Stats Added to Worldmaps
A quick update to Worldmaps:  browser stats are now included on the report page!  Not quite in sexy piechart fashion, but the data is there and we can massage it later.

The screen to the left is from about 1 day of Channel9 traffic -- apparently, reports of Opera's death have been exaggerated.  (Are those all mobile devices??)
posted 03/03/2009 14:26 | avg rating: none | comments: 0 | trackbacks: 0

SiteSpider: New Version
Hard to believe, but it has been over 3 years since I spit out SiteSpider.  Not that it's any earth-shattering tool, but really surprises me how fast time flies.   The other day I was talking with a buddy about a couple of topics:  control invokes to update controls on a form's main thread, and creating worker threads.  The threading issue is top of mind for me right now in part because our debugging tips and tricks session at the MSDN event talks about debugging multithreaded applications.

I decided to brush the dust off of SiteSpider and do a little polishing.  So, what is SiteSpider?  First a little history:  years ago (I'm guessing 2001-2002 time frame) I was walking past the office of some developers I worked with in another division.  While chatting, I noticed they were running a tool that scanned their content (it was an online encyclopedia, actually) and generated a list of 404's, etc.  

Now, while the tool they used was pretty feature complete, I figured the basic premise would be a fun side project -- and that's SiteSpider.  You point it at a URL, and it crawls a site and generates a link tree, and allows you to look for broken links, slow pages, etc.  It's a handy tool to run against your site a couple times a year.

In this version, the biggest change is support for multiple threads.  You can specify anywhere from 1 to 100 threads -- obviously, extending beyond 10 threads or so is something you need to be cautious of, but this speeds up the work considerably.   The image below shows the new settings dialog:



The request delay applies to the individual thread -- so with multiple threads, bear that in mind.  In addition, the Max Page Size will limit the parsing of a page in case the spider hits a ridiculously large file.

If you're running with the source code, you can see the threads in the threads window while broken into the debugger:



In the above, there are 5 worker threads (all parked on the Fetch method).  The design of the app had to change pretty significantly to support the change.  This is largely because of the circular nature of links in a given site, and the coordination of work between threads.  To facilitate that, an additional thread called Work Coordinator (seen above) manages the worker threads.

The other nice (and simple) change is the history:



... so for frequent sites, it's not just an empty text box.  (They are in order from last used, and can be cleared in the settings dialog.)

Another item I included in this project is a test website.  I created this project primarily as a test bench so various conditions can be tested deterministically.  The main MVC-based site essentially creates an infinitely-deep tree that can be crawled.  Through parameters in the URL, you can specify the number of branches on each node, the current node, the current page on the current node, and the request delay.   For example, suppose you would like to create a tree where each node on the tree contains 6 branches.  If you'd like to start at the root of such a tree, with no page delay, the request would look like so:



In this case, notice we're just sending /6/1 in the URL.  A /2/1 would be a binary tree.  In the case above, I specified a crawl depth of 6.  In this case, this was a fairly deep test and queried about 56,000 pages in a little over 3 minutes (localhost helped out a lot, I admit!).

The other two tests in the projects are a "bigpage" test, that allows you to test the max page size setting.  The other is a test tree (similar in concept as the above, but not dynamic) that attempts to ferret out multithreaded issues and depth issues.  For example, page A has links to B and C, and B has links to C and D.  Page C has a 2 second "working" delay.  There are a few other circular references in the tree, and it's easily modified for testing purposes.  As it is now, a successful test should look like:



So, that's all there is to it.  The application _does_ save the response stream so it's possible to view that response, but it's just not coded yet.  Another known issue:  robots files are not honored.  Ideally, this would be a configurable option. 

To download the executable, click here: 
SiteSpider_Binary.zip

To download the source and test project, click here:
SiteSpider_Source.zip
posted 03/03/2009 07:42 | avg rating: none | comments: 0 | trackbacks: 0

Sunday, March 01, 2009
Gaming Console Round-up III
In my last few posts on the subject, I took a look at the XBOX 360 and the PS3.   This post will focus on the Nintendo Wii.

I've been playing computer games since I was a wee lad.  Since the days of Zork and Baseball on the TRS-80, game development has focused primarily on graphics, audio, and gameplay ... and often in that order.  It's mind boggling to me that you can play a game like hockey or football that looks, to the casual observer, like the real deal.

Not surprisingly, then, console evolution has focused around the technology that can bring the better graphics and sound -- better CPUs, better graphic processors, more RAM.  As for gameplay -- well, that formula really hasn't changed in a long time. 

And that's what makes the Wii interesting.  It took the idea of gameplay in a different direction, focused primarily on the motion controller and unique input devices ranging from Wii Fit to steering wheels.

The first time you play with a Wii, it's like a breath of fresh air because it is _interesting_.   When I got the console, I also picked up Tiger Woods golf, and it's unique to play a golf game by swinging your arm instead of using a controller.  Likewise, bowling is interesting because it's similar to bowling in real life -- a game without this type of motion would be too boring. 

Again, this is what makes the Wii so interesting.  If you've never played one before, you've likely heard the hype and so the experience will be a bit more expected when you pick up a controller for the first time.  And just to show I'm not talking as a shill without really owning these things, the picture here is from my "media cabinet" ... all three consoles, as they exist today in my home.

And this, my friends, is where the experience ends.  Play a round of golf with Tiger, bowl a 240, etc., and then you'll be done.   I'm going to sound harsh here, but I feel that while the Wii is innovative and _interesting_ (there's that word again), it is completely and utterly overhyped and I wouldn't even truly consider it a gaming console per-se -- perhaps an "game device" would be more accurate.

The bottom line is that the motion sensing controls, while innovative, don't carry the system.  Here's why:

First, while I agree that graphics and sound are less important when compared to gameplay, there's clearly a line somewhere otherwise we'd all still be playing Zork.  The Wii has a max output of 480p ... and it looks pretty poor most of the time.  (The best I can do, after tinkering, is run component out of the Wii into the Pioneer VSX-1018AH-K and it's upscaled via a fairly decent Faroudja scaler to a Mitsubishi 73" TV.)  While my mom/aunt/grandma may not think it looks that bad, flip over to a blu-ray concert like Dave Matthews and Tim Reynolds at 1080P, mastered for hi-def in terms of both video and audio, then flip back to the Wii.  You will begin weeping.

The video and graphics, at least on my equipment and to my eyes and ears, is a constant reminder of how far our technology has progressed in everything else.  While my gaming collection contains Tiger Woods and the included Wii Sports, I don't see it growing beyond that.  When the motion controller works well, it's a lot of fun.  But when it doesn't, it's frustrating and takes you out of the moment.  These factors make the experience just not that engrossing.   It reminds me of when I first tried a VR-based game, where you'd don the helmet and suit, and step into a cage.

The online component is about what you'd expect, but because there is no hard drive and the Wii's DVD player cannot play DVD movies, there's not a lot of compelling roles the Wii can fill.

While the game library has filled out nicely, there's pretty much no chance a cross-platform game would be better on the Wii.  When you narrow down the collection of exclusive games on the Wii and cross reference their review scores on Metacritic, I'm not really sure how anyone couldn't agree that the system isn't overhyped. 

The Wii is attractively priced so that's a plus, and it's a bit better suited for kids given the Nintendo brand.  But otherwise, color me (in glorious 480p resolution) unimpressed.
posted 03/01/2009 10:27 | avg rating: none | comments: 1 | trackbacks: 0

Sunday, February 22, 2009
Worldmaps has Moved!
This took a lot longer than I hoped, but I've finally migrated Worldmaps to a new server!  No longer is it integrated on my blog, and it's on a new host that has a lot higher headroom -- all courtesy of ORCS Web

The site is now hosted at myworldmaps.net ... head over there and check it out!



One of the focuses of the new site will be this more "community feel" to it -- the first and most obvious change is the leaderboard.  Other stats/implementations will come as time permits.  The other major change is users can now have multiple maps per account!  (Reporting is still per-map, but per-user will be coming soon.)  I'm pretty excited to have it up and running for the past few weeks, and it seems to be doing well.

The other change that will be coming, and I realize many aren't quite in favor of this, is an annual reset.  Some data will be archived and will be available as additional stats (much like how the leaderboard is presented currently.)  The reason for this is that without some type of reset, it's a little like running a never ending race:  newcomers can't compete as easily, and old timers suffer from the law of averages that make it difficult to move their averages.  A reset solves both of these problems, and perhaps most importantly, provides scalability on the back end.  However, data will be archived in some form, so don't worry!

The first question you may have is, "What do I do if I already have a Worldmaps account on your structuretoobig.com site?"  You are free to keep that account, however, development on it will cease.  Accounts can't (easily) be migrated, so you'll need a new account on the new site.  Once the number of accounts dwindle on the old service to a low number, I'll post a 30-day notice of suspension.  

The second question is, "How do I get an account?"  You can head over to myworldmaps.net and sign up.   Now, I still need to flush out the acceptable use policy, but let me say it here:  the goal of the site (and a major initial failing of my old version) is to be used by individual or team bloggers and "community" related sites, not for commercial (including commercial blogs).  Accounts outside of that, I'm afraid, are subject to deletion.  I believe in the long run this makes it more fun for everyone, and I hope you all agree.

That does mean that accounts need to be approved when created.  Some e-mail domains are auto-approved, so you can begin using the service right away.

Finally, I'm always looking for volunteers from the community who may be interested in contributing to the project.  For example, if you're a Silverlight guru and want a Silverlight map, let me know.  Or, if you have suggestions but don't know how to implement them, let me know.  My address is bhitney at microsoft.com.
posted 02/22/2009 08:20 | avg rating: none | comments: 0 | trackbacks: 0

Thursday, February 19, 2009
Internet Security Slipping?
I've noticed a disturbing trend lately and not quite sure if it's just me, or happening more in the industry.  Or, maybe it's because my credit card, for the 2nd time in less than 2 years, was compromised by someone (Visa won't tell me who -- and with today's BI, it's pretty easy to figure out I would image). 

So, I'm seeing a number of sites on the internet not using SSL when capturing PII.  Clearly, this is crucial for credit card transactions, but it's also important for PII.  Of course, SSL only encrypts the traffic between you and the domain, and ensures the domain is who it says it is -- what the host does with your data is out of your hands.  It's a little like going into the kitchen at a restaurant. :)

The other day I was lamenting with a colleague about my lame internet connection while we were playing around with the cool sharing features in Office Communicator.  (Bottom line was my connection chokes on camera and desktop sharing.)  The best I can do on my internet connection is, sadly, 512k upload:



The chart is fairly amusing on various levels but seeing that I'm out of luck in going beyond 512k, I decide to contact customer support to see if there's anything I can do.  Heck, even 768k upload would open a lot of opportunities.

But when I go to ask a question on the support page, I see this page:



No SSL?   No credit card information but surely enough PII to make me feel SSL should be required here.  Now, this scenario is a bit different since I'm a customer, so I did a traceroute to see where my data was going:



So, fortunately, as long as I'm sending the data from my house, it seems my data is reasonably secure as it's staying within Time Warner's domain and frankly, that's the best you can get from SSL. 

I didn't submit the data, but it made me realize how many sites I've run into that don't use SSL, or access points that are insecure.  I recently permanently borrowed Glen's HTC Touch Pro, and it has built in wifi.  I left it on and as I drove around, I was completely stunned at home many times the phone would ding that a new wireless network was available -- and most were insecure. 

So is this my imagination, or is security really this bad? 
posted 02/19/2009 18:55 | avg rating: none | comments: 2 | trackbacks: 0

Thursday, February 12, 2009
MSDN Event Decks
Thanks to everyone who attended the MSDN events this week in NC!  I've uploaded the Azure, Debugging, and Mobility decks for you to look at -- shortly, I'll get the test projects uploaded as well -- stay tuned for that!

Download Powerpoint Decks
posted 02/12/2009 20:43 | avg rating: none | comments: 0 | trackbacks: 0

Wednesday, February 11, 2009
Follow-up: Azure .NET Services Interop
I just wanted to post a quick follow up to yesterday's MSDN Event on Windows Azure.

I talked briefly about interop with other platforms, specifically in regards to REST/SOAP.  At the time, I wasn't aware that we have a few samples out there ... specifically:

http://www.dotnetservicesruby.com/
.NET Services for Ruby is an open source software development kit (SDK) that helps Ruby programs communicate with Microsoft .NET Services using plain HTTP. Specifically the SDK includes set of REST libraries, tools, prescriptive patterns & guidance & sample applications that will enhance productivity for Ruby developers. Developers will be able to leverage the .NET Services to extend their Ruby applications by using the Microsoft cloud services platform to build, deploy and manage reliable, Internet-scale applications.

http://www.jdotnetservices.com/
The purpose of this project is to provide an interoperable open source software development kit(SDK) - set of libraries, tools, prescriptive patterns & guidance & real world sample applications that will enhance productivity for Java developers. Developers will be able to leverage the .NET Services to extend their Java applications by using the Microsoft cloud services platform to build, deploy and manage reliable, internet-scale applications.

In addition, there's a number of nice resources on the .NET Service Bus here.  Specifically, the white papers offer much more depth on the security and access control services in Azure .NET Services.  For those in the session or reading the post that would like more info (particularly in the enterprise or B2B scenarios) be sure to check out this resource.
posted 02/11/2009 08:59 | avg rating: none | comments: 0 | trackbacks: 0

Thursday, February 05, 2009
DTV Transition
There's a general, unwritten rule that it's a VERY good idea to avoid blogging about anything political on a blog such as mine.  It's much to divisive, but I'm going to violate that rule this one time.

For the past few years, we've been seeing information about the DTV transition coming Feb. 17th, in the form of crawls across the TV screen, cheesy commercials, and marketing.  Unfortunately, it looks like this transition is going to be put on hold until June -- something I think is a big mistake. 

DTV is a fantastic step forward.  In fact, if you're looking to cut costs and save a few bucks in this economy, and you'd like to ditch your cable or satellite provider, odds are you can put up an antenna and get fantastic results, including all of the subchannels that DTV stations frequently offer. 

The beauty of DTV is that, for the most part, you either get the signal or you don't -- there's virtually no middle ground (yes, it's possible for a marginal signal to experience digital dropouts -- but the classic snow and ghosting is gone).  To test this myself, the first thing I did was get a decent antenna.  After researching the net, I picked up a Channel Master 4228HD.  I wasn't sucked into the "HD" hype on the antenna label -- although DTV signals requires ATSC tuners (and really, that's where the difficulty is with this whole transition), it's same signal folks have been getting since the beginning of TV -- except, most stations are broadcasting in UHF and only a few, percentage wise, are staying in VHF.

To know for sure what your situation looks like, the two best sites to visit are antennaweb.org and tvfool.com.  Both sites allow you to put in your address and see where the local stations are relative to you, and also anticipate what kind of antenna you will need to receive signals. 

In my case, I decided to mount the antenna in my attic.   Attic mounting isn't as desirable as mounting outdoors, of course, but much easier and less of an eyesore and will be better (generally speaking) than set-top antennas.  I disconnected my cable feed (well, in truth I left the one hooked up for the cable modem, but that's it) and plugged the antenna into my house distribution amp.  Most antennas will require some type of amp if you'd like to drive more than one TV.   There are two types of amps -- preamps, and distribution amps.  Preamps are "in line" amps that you hook up close to the antenna, and help make up for weak signals and long cable runs.   Distribution amps split the signal a certain number of times -- 2, 4, or 8 are most common -- and instead of a passive splitter that would cause significant signal loss on each leg, the distribution amp minimizes that loss as much as possible.

Part of the reason the DTV transition is delayed is because the government coupon program ran out of money.  I got in before the coupon program began waitlisting folks, but I have to say, I think they should've offered only 1 coupon per family.  While we've all been in hard times financially at one point or another (and right now is a pretty popular time), one converter per family, I feel, is fair.  If finances are so tight, TV shouldn't be a priority. 

But I digress.  So, I have two TVs -- one with an ATSC tuner, and one without.  The one with the ATSC tuner, of course, can take the signal directly from the antenna.  The one without needs a converter box, so I went to my local store and used my coupon to get an Insignia converter box.  I fired it up, it scanned, and got all my channels right away -- this is a TV in my workout corner of the garage (excuse the dark border -- the converter is to the right side of TV with a blue light):



The nice thing is that DTV signals are crisp, carry subchannels and program information.  Obviously this set above cannot do HD, but my other one can and the quality is actually better than cable or satellite, since those providers need to compress the signal more than OTA does.

One thing to realize regarding DTV is that channels are virtual.  For example, my local Fox affiliate is channel 8, but it's really broadcasting DTV on channel 35.  An ATSC tuner handles this seamlessly and you don't really need to concern yourself with this information, except in this case, channel 8 is VHF and 35 is UHF, so it may affect what antenna you get.  (My affiliate is actually switching back to channel 8 VHF post-transition for their DTV signal.)

Unfortunately, though, it looks like this transition will now be pushed back to June.  As I said above, I personally feel the delay is a mistake.  While it's certainly true that many Americans will be unprepared, I'm not quite sure a few months would make any real difference, and if anything, cause widespread confusion and chaos.  As I write this, all literature including the DTV site is saying "12 days" until the transition.  Broadcasters, in many cases, are maintaining two towers to broadcast both analog and digital until the transition, and many companies are preparing to use the new whitespace for their products.   Some other products, like wireless microphones that operate above 700MHz are in a similar transition period, since they can't (or shouldn't -- I'm not sure if it's a law or not) be used post-transition. 

To make up for the added cost, the bill was amended to essentially let carriers choose if they'd like to cease analog transition post February 17.  So, some stations might stop, others might keep going.  Perhaps others will stop somewhere in between.   Top it all off is the mixed messaging consumers are seeing regarding the transition.   What a mess.

Senator Rockefeller (D-WV) introduced this bill and posted the information on his website.  While some reasons are of course valid (and will be valid at any time, even in June), the one bullet point I found particularly humorous:



So ... no one thought, when they picked this date way back when, that it would be winter?   Are we going to hear in the summer that there's the danger of heatstroke?   Because DTV uses the exact same signals, consumers generally won't need a new antenna, and many installed them months or years ago to prepare, or do attic installs like myself.   Tower crews face many dangers at any time, and because most/all are broadcasting both signals right now, it's not like someone needs to climb the tower on midnight of February 17. 

By far, I believe the most valid reason for delaying the transition is the ability for folks to receiving emergency messaging.  However, the smartest thing to do is to have a battery or crank operated emergency radio for such things, especially the kind that can alert you when everyone is asleep.   Come to think of it, maybe we should have a coupon program for emergency radios?

While everyone will have different opinions on this issue (and that's why we tech bloggers should avoid political issues to begin with), and the end of day, is TV really all that important?
posted 02/05/2009 08:59 | avg rating: none | comments: 0 | trackbacks: 0

Tuesday, February 03, 2009
Gaming Console Round-up II
In my last post on the topic (some time ago!) I talked about what I like in the various gaming consoles on the market -- Sony PS3, Xbox 360, and Nintendo Wii.  In this post, I thought I'd share my impressions on the PS3.

One of the riskier moves Sony made with the PS3 was including a blu-ray player built into the console.  If I remember correctly, this held up the launch of the console and also contributes to the console cost quite a bit, and it's a decision that I thought was a mistake.  Although opinions on this will differ, the delay of the PS3 and the higher cost compared to the Xbox 360 hurt (and continues to hurt) the PS3's market share.

The inclusion of a blu-ray player as a necessity is debatable.  We're starting to see more games that consume a larger footprint than DVD-9 can hold.  Word on the street has it that games like MGS4 required a dual layer blu-ray disc (50gb!) due to the sheer size of the game.   Clearly, even on DVD-9, a game that size would be cumbersome -- I figure a reasonable cut-off point is 3 DVDs before overly-aggravating the end-user, but really more than 1 can  be irritating.  From a business perspective, was the inclusion of blu-ray, at the cost of so much time and expense, worth it?  I'll let you decide.

However, because blu-ray won the high-def format wars relatively quickly, Sony caught a huge break and the PS3 was, at the time, simply one of the best blu-ray players you can get.  It used to be that it was also the cheapest, but that's no longer the case as some blu-ray players are coming in a bit cheaper.  Even so, because the PS3 is sold either at a loss and near manufacturing cost, it's a compelling player for the cost.  Indeed, I've run into a few people who bought a PS3 for home theater high-def usage alone.  And, in my case, that was what led me to purchase.  Almost a year ago, Walmart ran a special that offered $100 off any blu-ray player, including the PS3, which brought the base model price to $299.

The jury is still out on whether or not a blu-ray player will find itself to the Xbox 360 as either a stand-alone player or integrated.  I personally feel it's a worthwhile add-on and certainly hope we pursue it.

What may be a pro or con is the fact that everything is integrated.  No power brick, no external HD-DVD or blu-ray drive, no external wifi module.  If you need all of those things (well, the power brick is obviously non-negotiable), it's great the PS3 has them.  However, I don't need a blu-ray player in most rooms of my house, nor wireless.   Because I can pick up a 360 Arcade for under $200, it's an easy add on for media extending, movies/Netflix watching, and basic gameplay. 

As for downloadable games, I didn't realize how good I had it on Xbox Live Arcade until I loaded up PSN.  First, PSN has a few wonderful games for sure -- PixelJunk Eden, Monsters, Flow, and a couple of others are outstanding.  But, the PSN UI is a bit utilitarian and few games, percentage-wise, offer demos; if I'm not mistaken, every game on Xbox Live Arcade offers a playable demo.   It's an exercise in frustration to browse around and find an interesting looking game, only to find out it's purchase only, or, at best, has only a trailer available. 

Achievements on the 360 has been a tremendous success, and Sony has just recently brought that concept to the PS3 as "trophies."  The problem is that, currently, very few games support trophies, but we'll see where this ends up in another year or so.   This is a concept that Xbox Live got right out of the gate by ensuring demos and achievements are available across the board.  While better than nothing, it's a bit "too little, too late" in this area.

Also, as a developer and one with some business experience, I think not having mandatory demos for downloadable games is a mistake.  Some have tried to argue that it's too much work for the developers -- if that's the case, then the SDK (which I haven't seen for the PS3) is incomplete.   Ideally, it should be very minimal effort to include demo functionality.

One of the biggest pros to the online experience, however, is that it's completely free, as opposed to a silver (free) or gold (paid) membership on the Xbox.  This is a good value add to the system and one that proponents for the system often point out.  However, feature-wise, it's not as expansive as Xbox Live.   So which is better?  From a consumer point of view, it depends.  For me, personally, I'd rather pony up the $3/mo for a better service.   If you're the type who never plays online, you're not going to want to pay for a service you don't use.

From a business perspective, the decision to make online play completely free is one Sony either regrets, will regret, or will change down the road.  Building a large, scalable, online ecosystem cannot be sustained by console sales alone (or without subscriber contribution).  It will either continue to fall further behind (one recent feature, called "Home," has been notoriously delayed month after month), or need to be supplemented by extensive advertising.   Because I wasn't interested in hearing how many subscribers each system claims to have, I looked at the number of online players at any given moment in Call of Duty 4, and Xbox Live typically had double or so the numbers.  Hardly scientific but a good enough for me, if I'm choosing which console to buy a game for.

Media experiences is going to be equally divisive.  Both have similar features that are implemented quite differently, and I won't claim one is better than the other.  You simply have to look at them, try them, and decide for yourself.   For example, the PS3 does offer video rentals/purchases, however, I found it to be fairly expensive, and I'd never buy a movie in this fashion.  In contrast, the Xbox offers Netflix -- which won't typically have new releases, requires a monthly subscription to Netflix, and requires a Gold subscription. 

Music-wise, if you have a Windows PC or event better a Windows Media Center PC, I think the 360 takes the prize for extending music.   The Media Center extender on the Xbox offers the same UI you'd get on the PC, so it's a bit richer than a folder structure.  If you have music that Windows PC can play (including DRM'd music) the extender can generally play it, which is nice especially for subscription-based services like Zune pass.

As a blu-ray player, the PS3 is great.  Because the firmware is easily updatable, it's easy to handle the current formats without much problem, including DTS-MA and Dolby TrueHD over HDMI, and of course Dolby Digtial and stereo over optical.   One point of confusion I initially had was that my receiver was not reporting a TrueHD signal, despite selecting that on the disc's setup menu.  It turns out that the PS3 cannot technically send TrueHD or DTS-MA over HDMI via bitstream, however, it is capable of decoding these formats directly, and then sending the channels via PCM to the receiver.  It's the same information, so there's no loss of signal.

By far, my favorite thing about the PS3 is that it is quiet.  While a standalone blu-ray player would be quieter, there's no denying that it's much quieter than the Xbox.  I like quiet.  Both the cooling fan and the drive ... it's refreshing.  At the very least, the Xbox added a new feature to do local installs for games to at least silence the disc spin noise.

Now, let me get into what annoys me about the PS3.  First thing: charging controllers.   No swappable batteries, not as easy to do play and charge.   The default cables are about 3 feet.  The plug is a mini-USB: a standard, yes, but not as friendly as plugging in controllers and batteries. 

The second thing that annoys me are the touch-sensitive buttons on the front of the console: a decision to favor cool technology over function.  With the unit on the side, hitting eject or even power is just a guess of sliding your finger on the panel.

Moving up the ladder to extreme frustration is the lack of an IR port for remotes.  Defenders of this correctly point out the limitations of IR, "bluetooth is the future," blah, blah, blah.  Fine -- in theory, bluetooth is great -- no line of sight, etc.  But, say goodbye to support for universal remotes and the like.  Sony should have included both.  This would be like putting in Wireless N support with no backward compatibility for G and B, and justify it by saying it's the future.   So, you're stuck using either the controller as a remote, or Sony's blu-ray controller.  Neither of which is all that elegant particularly if you use a Harmony or other universal remote.  (There are some very expensive solutions our there to do IR to bluetooth conversions.)

Last, and this one simply adds to the previous, the PS3 power options are frustrating.  The BD remote has no power on or off switch, but rather any button press on the remote turns on the PS3.  This sounds flexible until any magazine sitting on your coffee table happens to brush the remote... "beep!"  And of course, it doesn't need line of sight, so truly any slight button press turns it on.  This might be somewhat tolerable if there was a button on the remote to turn it off.  But there isn't.  If you want to turn off via the remote or pad, you have to navigate the on-screen menu and select it, and then confirm the action.  Or, you can hold the PS button for 3 seconds, then select X, X to power off and again to confirm.  It won't be long until people simply memorize the button sequences.  Epic fail on Sony's part.

If it sounds like I'm pretty hard on the PS3, it's because I am.  While many of these hardware issues are minor, they are frustrating oversights.  However, I'd love to get my 360 this quiet.  If you're an online gamer, there's no question in my subjective viewpoint that the 360 is the better console.  If you want a blu-ray player with the occasional game play, the PS3 may be the better choice.  From a media point of view, this will be largely dependent on your home network -- if you have the capability to run a Media Center on Vista/XP, it's hard to not feel the extender capabilities of the 360 are a huge value add; and whether or not a Netflix or video rental from PSN is a better (or useful) feature will be up for each person to decide based on their preferences.

Next time, I'll look at the Wii.
posted 02/03/2009 10:03 | avg rating: none | comments: 1 | trackbacks: 0

Thursday, January 29, 2009
MSDN Event: Raleigh and Charlotte
In about a week and half, I'll be doing two MSDN Events here in the Carolinas (2/10 in Raleigh, and 2/12 in Charlotte).   This lineup is pretty good if I do say so:

First, you may remember that Glen Gordon and I did a Windows Mobility show some time ago.  It was really well received and in fact, we've heard from many people who wanted more content around Windows Mobile.  So, this MSDN event has a developing for Windows Mobile session!  Now, an hour session isn't quite the same as our all day event on mobility, but it should still be valuable.

And, if you find yourself in the group of people who've heard about Windows Azure a hundred times but still don't know what the heck it is, the session "Demystifying Windows Azure" is a great way to get a real explanation of what it's about.

The next session is (and I think you will agree) very unique.  It's a deeper talk on debugging tips.  Most of us fumble through debugging by setting breakpoints -- but this session will show you how you can really put the IDE and debugger to use, making your sessions much more effective. 

Hope to see you there!
posted 01/29/2009 15:25 | avg rating: none | comments: 0 | trackbacks: 0

Tuesday, January 27, 2009
Prototyping a Cache/Disk Serializer
In the 4.0 release of the .NET framework, one of the enhancements I'm most looking forward to is the extensibility of the ASP.NET cache.  Up until 4.0, the caching system was built directly into ASP.NET, and although it was possible to use outside of ASP.NET, it certainly wasn't easy.  And while .NET 2.0 (and up) has a ProviderBase class to use as a point of extensibility, it's a bit of a task if you want to build a robust caching provider.  With 4.0, this will be much easier and more robust.

But I'm not on 4.0 ... yet.

I don't want to over-design a full fledged system, but what I needed to do was prototype a simple disk-based caching class.  Essentially, a simple way to serialize objects to disk.   While I do make extensive use of the ASP.NET cache in my project, I needed to supplement it because it's just not durable enough.  Reboots, app recylces, memory pressure ... all of these are minor considerations if building these cached resources are not time intensive.    But what if you want to cache a "large" item for a week?  (I say large not just in memory footprint, but also in resources used to construct such an object.)

So here were some of my considerations:
- Cache object will be the main source of the cache.  If cache miss, check "durable" cache.  It cache miss, reconstruct.
- K.I.S.S.  4.0 will solve a lot of my problems.  Not looking to spend a lot of time on this.  (Writing this blog post will take more time than writing the code.)
- Need to implement async capabilities. 
- Need to implement proper locking. 

The first step was to prototype (below) a simple serialization mechanism that handles the serialization/deserialization to disk.   .NET generics help make this a bit smoother, and I chose to use binary serialization primarily for speed over XML, but also flexibility.  Error handling needs to be flushed out, and there's an assumption that there's a single folder (Globals.DiskCachePath) for all objects.  Also, the class uses the HostingEnvironment instead of the HttpContext to MapPath since their won't be a context in an async thread.  This behavior would be abstracted in a more robust solution ... but for simplicity, this works fine.

public class DiskCacher<T>
    {
        public DiskCacher() { }

        public static void SerializeToFile(string name, T container)
        {
            string filepath = HostingEnvironment.MapPath(
                Globals.DiskCachePath + name);

            Stream stream = null;

            try
            {
                stream = File.Open(
                   filepath, FileMode.Create,
                   FileAccess.ReadWrite, FileShare.None);
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream, container);
            }
            catch (Exception ex)
            {
#if DEBUG
                throw;
#endif
            }
            finally
            {
                if (stream != null)
                {
                    stream.Close();
                }
            }
        }

        public static DateTime Deserialize(string name, out T item)
        {
            item = default(T);

            Stream stream = null;

            string filepath = HostingEnvironment.MapPath(
                 Globals.DiskCachePath + name);

            if (!System.IO.File.Exists(filepath))
            {
                return DateTime.MinValue;
            }

            try
            {
                System.IO.FileInfo fi = new System.IO.FileInfo(filepath);
                DateTime lastUpdated = fi.LastWriteTime;

                stream = File.Open(filepath, FileMode.Open,
                    FileAccess.Read, FileShare.Read);
                BinaryFormatter bFormatter = new BinaryFormatter();
                item = (T)bFormatter.Deserialize(stream);

                return lastUpdated;
            }
            catch (Exception ex)
            {
#if DEBUG
                throw;
#endif
                return DateTime.MinValue;
            }
            finally
            {
                if (stream != null) stream.Close();
            }
        }
    }

The two methods are static for simplicity.  I debated using an indexer to store/retrieve, but felt ultimately that functionality would belong to the provider, not the utility methods.  Not worth investing in until 4.0. 

Using this is pretty simple.  The type of the object becomes somewhat irrelevant (as long as it can be serialized via the binary formatter).  The simplest example would be:

string myName = "Brian";
DiskCacher<string>.SerializeToFile("cachename", myName);

... and then to rehydrate:

string myName;
DateTime lastUpdated = DiskCacher<string>.Deserialize("cachename", out myName);

Returning the lastUpdated time allows the provider to make a decision as to whether or not expire the item.   A bit more of a realistic example would be:

List<Customers> customers = GetMyCustomers();
DiskCacher<List<Customers>>.SerializeToFile("mycustomers", customers);

and...

List<Customers> customers;
DateTime lastUpdated = DiskCacher<List<Customers>>.Deserialize("mycustomers", out customers);

Generics are certainly not required for this type of solution but do make things easier.  The provider itself would offer a cleaner interface for end users, but from a prototype perspective, this was pretty successful. 

Conclusion:  I think .NET 4.0 will offer some great extensibility for disk-based caching and memcaching.  Can't wait to play with it!
posted 01/27/2009 21:52 | avg rating: none | comments: 0 | trackbacks: 0

Copyright © 2004-2009 Brian Hitney www.structuretoobig.com > home