Pete and others in the comments bring up some good questions over on the Why Our Look & Feel Isn't Available To Applications post. My response warrants a broader distribution than a comment in reply.
At Windows Vista launch (actually, probably at CES 07) you will see at least one example of 'what people want' which could not be accomplished solely with our look and feel. Again, those partners would not have wanted to adopt our brand, and I would have personally HATED to see them do so. I'll try to remember to post 'why' when those are made public. It's fairly easy to envision the kinds and types of apps which could be built with our look and feel in mind, and then build the platform to just accomplish those. But thats very limiting and, frankly, not very much of a challenge. It also doesn't 'push the envelope' which, in some respects, a platform needs to allow people to do. Also, one of the guiding principles for our platform is to not lock the entire world into our assumptions about what types of apps are wanted. We want to enable people to build things we can't envision. Just FWIW.
And, as many of you have noted, you can reference Microsoft DLLs and use resources straight out of them. Luckily most of you also note this is not supported, might violate some EULA along the way and (most importantly) may very well not work in later versions, etc.
Feel free to use those. Seriously. Party on. Go crazy. Knock yourself out.
But do understand we never tested, planned, scoped or have any plans to test app compatibility for this approach. It simply will not happen. Also note these resources are intended for internal Microsoft consumption only and we are free to change them at any time, without letting you know. Development work using this approach isn't valuable to us, so we will tend to ignore your feedback as it doesn't help further the platform. Also, I feel compelled to tell you there are things on the horizon for vNext which would make me personally shy away from using them. Yeah, I know, it sounds like I'm trying to use scare tactics. I'm not trying to do so -- I'm merely hoping to avoid having to come back later and say 'I told you so...' because someone is screaming 'Microsoft broke my app!' when they should have known better. Of course, now that I've posted this, I've told you so.
Long story short: If you don't see it documented (editorial or code sample) in the SDK but you think it's still a valid, long term approach: Post a question to http://discuss.mediacentersandbox.com or (IF you have already posted to the discussion group) drop me an email.
I've been meaning to do a 'brain dump' of why we don't make the Windows Media Center look and feel available to third party developers. Here goes...
Application Compatability Risk
We know exactly who uses our buttons, galleries, templates, etc. -- us. If we change these we break exactly one application -- Windows Media Center. Making them available to third parties imparts a certain amount of risk in that we can break applications without knowing we have done so. For example, we have tweaked media galleries in every version of Windows Media Center to date. Compare the music gallery in Emerald to the one in Diamond, for example of one of the more dramatic changes. What happens if your app is based on our gallery because it assumes certain things about that gallery which are incompatible with our new gallery. Trouble for us -- and you.
Variety Is The Spice Of Life
It would be a very boring world if every application looked like Windows Media Center. We do not have the market cornered in great experiences designed for use with remote control. Now that we have a platform (Windows Media Center Presentation Layer) which allows you to do the same class of animations (including full fidelity remoting to XBox 360 Media Center Extender) as Windows Media Center itself we no longer have this 'thunking down' into a low fidelity HTML experience. I'm excited to see what folks are able to do with this power at their fingertips, and certainly expect developer enthusiasts to start shipping features which surpass our own (have you seen this http://mobilewares.spaces.live.com/blog/cns!78533A1A2E078194!177.entry -- my wife was asking how she could keep track of Law & Order episodes the other night, and this app holds the promise of just that feature --pretty darn cool).
Public vs. Private Platform
Because we are both a product and a platform we only have so much time to create the public platform, and the public platform will always be a subset of the private platform (stuff we use to create our product) due to this time constraint. The Windows Media Center user experience relies in some cases on private platform features not present in the public platform. Let me give you an example: The lens effect seen on the Windows Media Center Start Menu when you navigate items in the horizontal strips. Our design team wanted a very specific (and quite subtle) look and feel in this lens effect which could not be created to their satisfaction without a *huge* investment in MCML authoring (and even then, we still really couldn't give them exactly what they desired). So we wrote new rendering code (which is in itself non-trivial) to accomplish the effect -- but it came in too late to be considered part of what we could expose publicly. At some point in any software you have to make a decision about what you will vs. won't ship (even if you use an Agile method or 'ship daily' as can be done with web apps). All of that to say this: It's not possible to give you the controls unless they can be accomplished with the public platform. Classic chicken or egg first problem.
Focus On The Fundamentals
We are still focused on making sure the platform fundamentals are in place -- for example, expanding on what you can do with web application approach (see http://blog.mediacentersandbox.com/PermaLink,guid,cb622812-d80f-45d2-82d6-a54099e62e21.aspx). For example, you can't use session cookies in web apps today -- it's way more important to get this in than trying to recreate Windows Media Center look and feel for the public platform (see previous point).
I'm sure some folks will zero in on this particular point and say 'I knew it -- it's all about the money!' So, up front I'll admit this could also be titled 'who pays our bills' -- which is why I put it at the bottom of this list -- so you would read the prior items first and hopefully see it's a wholistic decision process. We are, after all, out to make a profit for ourselves and shareholders. With but a few exceptions, everyone who has a day job does it to make a living. This puts food on our table and a roof over our heads. But I digress... We make the platform for multiple audiences -- big, brand name partners and individual developer enthusiasts, and many, many medium and small entities in between (think in terms of Large, Medium, Small and Individual audiences). Unfortunately, the needs of these groups will inevitably conflict in some ways -- and this is one of those areas. The big companies who have well established brands will never use a Microsoft brand for their experiences -- it diminishes their brand if they do (and they spend GOBS of money and resources into maintaining their brand -- sometimes too much, and at the expense of great experiences, but that's a topic for another day). We could do a bunch of work to expose our look and feel, but the large and medium shops will never use them. Never. And increasingly, neither do the small shops. Honestly, it's never come up in the list of feature requests from large or medium shops and only very rarely from the small shops. That means we can realize a zero return on investment in this area in terms of dollars. At the end of the day, those partners are what makes or breaks our platform from a 'budget' perspective. It would be great if we could make a platform solely for the individual (aka developer enthusiast) audience, but at this point in the Windows Media Center platform life we can't build a business on this alone. As we grow, and developer enthusiasts grow, we hope to do more things specifically for this audience. The Z sample application is a great example of where I specifically added 'features' to our SDK which would target and assist the individual developer enthusiast -- and hopefully it's a great start.
Our platform provides for maximum design flexibility at the cost of reuse. We propose 'one size fits all' is not a true statement -- therefore the platform is one which can be tailored at the extreme for any purpose. We understand this precludes many development folks who are used to other types of platforms which provide controls. We've been pretty honest and straightforward the platform may be difficult to grasp for the mass market developer or weekend coder.
As with any software product or platform there is a finite amount of resources to put into the project. We've evaluated the idea of including the Windows Media Center controls in our platform resources with each release. And with each release it's been deemed as less valuable than improving the features of the existing platform of visual primitives. Of course, we are still very early in the lifetime of this platform -- at the time of this writing, just over a year since it's been commercially available to consumers. Stick with the platform for 10-15 more years and let's see what happens to this request over time.
[3/26/2008 Edited To Add the Maximum Flexibility and Resource Constraints sections.]
A year ago I became so busy with 'other stuff' here at work I stopped my regular practice of blocking off time on Friday afternoons to do nothing but generate sample code, solve problems with our SDK docs, ponder deeper technical issues which can't be tackled with the typical interruptions of a busy team or respond to community requests or issues.
Coding Friday is back from 1:00 - 6:00 PM PST.
It started last week. And I'm going to do something unprecedented (well, at least for me). Taking a page out of Robert Scoble's book, here is my contact information...
phone: (425) 707-7818
Give me a ring during Coding Friday hours -- let's chat about Windows Media Center development.
Well, Matt finally spills the beans in the loss of two Windows Media Center features in Windows Vista: Messenger and Caller ID.
Frankly, I never thought we did each of those features particularly well. Apologies to Matt and the other PMs which made 'em happen originally. I don't really think it was our fault per se they didn't live up to expectations. They were built on top of APIs which were limited (Windows Messenger) or rarely used (modem anyone?).
But our loss is certainly your gain.
Now that caller ID is gone it's a perfect opportunity to do a new thing -- XBox Live gamer online notifications (I just got mine tonight, btw: 'retrosight'. Skype contact notifications. Blog post notifications. I really think we never explored where we could actually take something like Caller ID because, well, we were stuck in the 90s with needing to connect a telephone cable.
And now that our Messenger implementation is gone it's an opportunity for someone to do a *real* messenger client for Windows Media Center. I'm thinking full screen interface overlaying Live TV capabilities here. Also, after using the iMate KJam for a while I'm thoroughly convinced a thumb keyboard remote control should be built which is compatible with Windows Media Center. I believe its size would make a much more attractive option to a full size keyboard (such as the Windows Media Center keyboard or the new Bluetooth keyboard we announced a few weeks (months?) ago.
So, what company will be first to take advantage and deliver experiences which put our originals to shame (using the new Windows media Center Presentation Layer Application model, of course).
Have you checked out http://discuss.mediacentersandbox.com yet? If not, head on over. Mark, Aaron and myself have been answering questions over there for some time and now Scott (Dev) and Krishna (Dev) are participating. Aaron, we've got to find another PM or two -- the devs are beginning to outnumber us!
I'm going to present to 60+ Windows Media Center developer type folks near the Microsoft offices in Shinjuku. It's the Mix06 presentation on steroids done in 10 sessions over 2 days. I don't speak any Japanese, plus I'll have a mix of jet lag + time difference (Tokyo is 8 hours behind Redmond, but a day ahead due to the international date line -- yeah, it's confusing to me as well). Luckily, the Japanese folks are very gracious.
My first trip to Japan involved fugu. My second trip involved basashi (raw horse) along with a lot of other sushi, including whale and many, many items which I didn't recognize by name or sight. I had some of the best Kobe beef ever last time as well (I'm a huge fan, and it balanced out the basashi quite nicely). This is my third trip, and I'm willing to bet my hosts will want to take me towards even more exotic foodstuffs. I'm willing to try anything -- once.
So, what am I taking to keep me company on the 10+ hour flight...?
Toshiba Portege M200 Tablet PC with movies from a legit download provider. I'm a first time user of this particular service so I'm anxious to see how well it works and the quality of the content. I've temporarily restored it to Windows XP so I can test out the solution (which doesn't yet work on Windows Vista). It's also the backup PowerPoint machine in case the next item starts to balk at all the beta software. As soon as I get back, it gets yet another recent build of Windows Vista.
HP Pavilion zd8000 running Windows Vista Beta 2 (5384). This puppy is the 17" widescreen model so it sucks a ton of juice -- not sure if the airplane system can handle the pull -- if not, its battery will be short lived. Still, should be able to crank out a few more MCML samples -- I just got one to work tonight where a 720p WMVHD was twirling and spinning all around -- with nary a glitch, no matter how fast the keyframes! This is the main demo machine, the same one which worked so well at Mix06.
Creative Zen Micro -- I've tried a couple of times to get it to sync with Urge to no avail, and that's got me just a tad bummed. There were a couple of new albums I wanted to check out. Still, it's got plenty of content on there to not listen to anything twice over or back. I can play with Urge a bit more when I return.
Sony Playstation Portable -- David Fleischman (Dude. Blog. Now.) now has me hooked on Syphon Filter. Plus, I've copied some recorded TV (the PSP has a GORGEOUS 16:9 screen -- just perfect for downsampled high definition DVR-MS). Oh, the Portable Media Center is staying here with the fam while I travel -- they won't let me take all of the toys these days.
Seagate 100 GB USB 2.0 Portable Hard Drive -- Primarily for backup, this really small, USB powered drive has (almost) become my favorite peripheral -- Once the HP battery gives up the ghost I can keep coding on the Tablet without missing much of a beat.
Well, it's now around 6:00 PM today (weird) in Tokyo. I've spent the last couple of days attempting to acclimate to the local time so I'm not sucking wind so much during the presentations. This blog post was my last attempt to keep sleep staved off -- but now I'm pretty finished, so off to bed before the afternoon flight tomorrow.
Francis Hogle (Development Manager for the Windows Media Center team) is back with the second of his four part series which explains how the Windows Media Center Presentation Layer works in greater detail. Check it out...
A Quick Peek Under the Hood - Part Two of Four
Mark Finocchio, Aaron Stebner and myself sat down with Robert Scoble inside the Building 50 listening room for a chat about developing for Windows Media Center in Windows Vista back before the Super Bowl. I'll actually have to watch this myself to remember what I said. I'm pretty sure Robert asked about the Apple Front Row remote control at some point. I'm also sure I stated flatly we would ship Windows Vista before the holidays this year -- little naive me -- I hope you will forgive my misguided passion -- I won't soon make that mistake again.
Channel9: Your First Media Center / Vista Application (and a Look at Their Secret Room)
(I don't think the room is really all that secret, but if the intrique makes people watch the video, yay! Robert tries to pretend he isn't in marketing, but he really is, don't you think?)
Francis Hogle (Development Manager for the Windows Media Center team) has the first of his four part series posted which explains how the Windows Media Center Presentation Layer works in greater detail. Check it out...
A Quick Peek under the Hood - Part One of Four
Sorry I've been absent for just about two weeks. I've been 'heads down' with preparations for Mix06. We had the keynote run through today and things seem to be on a good trajectory.
I locked myself in the home office tonight and finally cleaned up the cruft from and posted the specification for Q. Keep in mind this thing is nowhere near final -- I'm sure we will have bunches of revisions in the months to come, mostly in response you give us via feedback and comments.
[An hour or two later...]
OK, I got so jazzed playing around with our alpha drop and the opening sequence from Schematic I just had go all Channel9 / Robert Scoble-ly and make a short video to give you a sneak preview.
My hat's off to Robert, Kevin, Peng (Schematic folks) and Mark and Stephen (Microsoft folks) for doing such a fantastic job on this stuff on a super tight deadline. You guys ROCK!!!!!!
As always, comments are welcome.
P.S. Oh, and you'll notice I'm no longer referring to this puppy as our Mix06 project. That's because we are going to ship this application source code with the Windows Media Center SDK as a sample.
I happened to find this little tidbit in my referrals for yesterday (hardly ever look at them, but did just now). It's old -- from Jan 2004 - July 2004. I wonder what happened to his / her project...?
"I'm involved with a kind of experimental class at my school in interactive television. We're supposed to make a windows media center application to work with live tv, etc. I'm curious if anyone has any experience with windows media center and C#, specifically the remote control functionality."
Hey, Chrix, if you are still around, give me a shout and an update.
I sat down with a piece of graph paper at McDonalds today for lunch (Value Meal #2 which is a Quarter Pounder w/ Cheese sans onions, fries, Coca-Cola, plus three chocolate chip cookies) to sketch out the Mix06 project.
I named the app 'Q' until we can come up with something better. It can stand for a couple of things which seem to be appropriate: cue and queue.
Here is a sneak preview of the feature set / goals along with priority.
• Browse potential and subscribed content. (p1)
• Subscribe to content. (p1)
• Download content to local machine. (p1)
• Play content from local machine. (p1)
• Support RSS 2.0 required Channel elements. (p1)
Title, Link, Description
• Support RSS 2.0 required Item element. (p1)
Title (or Description)
• Support RSS 2.0 Item optional elements required for app to function. (p1)
Enclosure (+ 3 required attributes of location, size and mime type).
GUID (unique string for feed)
• Support optional elements of RSS 2.0 Channel. (p2)
Language, copyright, image (+ 3 required elements of url, title and link), category
• Support optional elements of RSS 2.0 Item. (p2)
Description, author, category, pubDate
• Manage subscriptions. (p3)
• Support Media Center native formats for playback: WMA, MP3, WMV, MPEG1, MPEG2 (p3)
We get this for free, but I'm spelling it out anyway so we know specifically what formats will be supported.
p1 = Must Have
p2 = Nice To Have
p3 = Cool if we get, but won't go above and beyond to implement.
There will be some expansion of these features once we start getting into the UI design -- for example, browse will probably include some notion of grouping / categorization. I hope to publish the full spec before the end of the week.
Keep the comments / feature requests coming -- we haven't locked anything down yet so there is still time to add or change features.
Well, it's time to get started on the project we want to demo at Mix06. We are going to put together a podcast / videoblog client for Media Center written as a Media Center Add In with the user interface coded in Media Center Markup Language (MCML). Chances are this puppy will be released 'out into the wild' at some point.
What favorite features do you want us to include?
Jason Baumeister over at SnapStream Blog announced the other day they have opened up a Wiki for the Beyond Media platform. Check it out over at http://code.snapstream.com.
Which begs the question why don't we have one for Media Center?
Our team has been using a wiki internally as a collaboration tool for work on the Windows Media Center Presentation Layer and Media Center Markup Language. I've been pondering whether or not to create one externally, weighing the pros and cons. For example...
Reason Not To: We already have some great enthusiast sites like TheGreenButton.com where developers hang out.
Reply: It's wonderful for discussion, not as efficient for fact finding. You must search, and sometimes dig through lots of posts to find an answer.
Reason Not To: We have a newsgroup for free technical support.
Reply: To be honest, I'm not thrilled with the web interface nor Outlook Express for interacting with our newsgroups. And again, they aren't great for fact finding.
Reason Not To: We try to get everything you need into the Software Development Kit itself.
Reply: Yes, but we can't update that puppy in real time, and folks external to Microsoft have a hard time contributing except during beta or direct partnership with us.
Reason Not To: Do you really want to add another item to your plate?
Reply: What item? This should be a 'set it and forget it' activity where the community, not you, drives the content. Trust them.
...and so on. Typical, big, slow company thinking. Has blogging taught me nothing?!?!?
So, it's time to stop debating inside my head and create a wiki for the Media Center platform.
There will invariably be folks saying we are being copycats. They would be right. I (eventually) know a good thing when I see it.
Seriously, kudos to you, SnapStream, for creating a wiki for your platform. I hope you will see our imitation as the sincerest form of flattery.
I wish I had seen this sooner (my apologies -- if you see this kind of cool stuff, drop me an email directly). Kudos to Colin for putting together GMAPMCE whereby you can browse Google Maps from the comfort of your couch. This is more addictive than I thought. This post explains how to get it available from More Programs in Media Center.
Anyone created one of these for http://local.live.com yet...?
Update: Yes, someone did and I feel just horrible I didn't pick up on it from Ian Dixon (to whom I susbcribe). Sean Mcleod put together an app which can be correlated with your geo-tagged pictures from the My Pictures feature in Media Center. Sweet. The app and details (including some source 'how to' snippets) can be found at Virtual Earth Media Center Add-in (The Code Project). Sean hasn't posted since November 10 -- hope everything is all right.
Please join me in welcoming Aaron Stebner and David Fleischman to the Media Center Platform team.
Those of you familiar with Aaron know he is incredibly passionate about our customer experiences which you can plainly see in his blog -- he is a posting machine! To quote a Group Program Manager, he 'absorbs technical information like a sponge.' In the brief time I have spent working with Aaron so far, it's not just any sponge, but a freakishly large sponge about the size of a compact car. Aaron will be focusing on our Media Center Add In platform.
David Fleischman brings a wealth of knowlege on Project Management to our team. David played a prominent role in helping us get Emerald (long name: Windows XP Media Center Edition 2005 Update Rollup 2) out the door. He ran our daily status meeting for months on that project. Here is the best way to describe what he did for us during Emerald: Chief Cat Herder (CCH). Keeping all the strong personalities focused on shipping a great product is no small feat. David will be focusing on the WinFX platform integration into Media Center for Windows Vista as well as driving production of the SDK (yet another cat herding exercise).
You can expect some great blog posts about our platform over on Media Center Sandbox from these guys in the coming weeks and months.
Welcome guys -- we are gonna have a ton of fun this year!
And that makes 4 of the 6 bloggers who are on the Media Center team (Aaron, David, Michael and Me) a part of the platform team. I hope Peter and Matt don't feel left out.
Yes, I know what you are thinking: Yet another geek who is enamored with all things Star Trek -- what else is new?
Yeah, it's true. I'm still pretty much flat on my (injured) back for hours each day which has allowed me to watch several (many) episodes of Star Trek: The Next Generation which is now available on both G4 Videogame TV (2 Episodes Per Day) and Spike TV (3 Episodes Per Day).
Stunning plot lines aside (this comment could go either way depending on your perspective) the Star Trek franchise continues to hold a very tight industrial and user experience design aesthetic in my opinion. Gene Roddenberry and his collaborators were absolute visionaries whose inspirations are seen even today with Tablet PCs, Pocket PCs and smart phones (among many other devices).
Star Trek: The Next Generation continues to be my favorite series. The Library Computer Access and Retrieval System (LCARS) user interface introduced with ST:TNG designed by Michael Okuda continues to capture my attention whenever it appears. His designs for Star Trek (commonly referred to as 'okudagrams') have quite a following. The LCARS user interface has continued to be used in subsequent Star Trek franchises and movies since it's inception.
There is even a volunteer LCARS Standards Development Board which...
"...was formed with the specific purpose of developing a standard LCARS system. On the internet, there are literally hundreds of websites using LCARS as the navigational system, however no one has ever taken the time to develop a method of using LCARS as it was meant to be used."
I think it would be an interesting project to create a Media Center application in the Windows Vista timeframe with our new Windows Media Center Presentation Layer which uses the LCARS look and feel.
What would be fun to implement in LCARS...?
This happened a couple of weeks ago so I'm a bit tardy about telling you. Check out the new landing page at http://msdn.microsoft.com/mce. We refactored the page a good bit to help you drill down on all the great resources at MSDN and elsewhere on developing applications for Media Center.
Let me know what you think...
Well, Troy beat me to the punch, but I might as well post anyway. You can get a copy of the PowerPoint deck I used at PDC05 for PRS322 Windows Vista Media Center: Developing for the 10-Foot Interface, a high level introduction to some of the features we are adding to the Media Center platform for Windows Vista.
I also recommend a couple of the other presentations from http://commnet.microsoftpdc.com/content/downloads.aspx for you to get a more complete picture of the development platform for Media Center in Windows Vista...
The Hosted HTML model isn't going away for Media Center developers in Windows Vista, and Michael Wallent's talk helps you decide which is the best approach in PRS200 Choosing the Right Presentation Technology: Windows Presentation Foundation ("Avalon"), Windows Forms, ASP.NET, IE, and More. Furthermore, the ASP.NET 2.0 team tells you how to get the most out of targeting HTML in PRS312 ASP.NET: Future Directions for Developing Rich Web Applications with Atlas (Part 1) and PRS420 ASP.NET: Future Directions for Developing Rich Web Applications with Atlas (Part 2).
Robert Ingebretson has a must read PRS317 Windows Presentation Foundation ("Avalon"): Beautiful Code, Beautiful Design - Applications Your Designers Can Work With. Memorize this deck and you will be well prepared for creating wonderful experiences in 2' and 10'. And don't forget his demo deck for the presentation.
PRS324 Windows Presentation Foundation ("Avalon"): Using Data in Your Windows Presentation Foundation ("Avalon") Applications: XML, Windows Communications Foundation ("Indigo"), ADO.NET and More will help you wire up the great graphics and UX to the underlying data.
For those of you who want the nitty gritty, check out PRS435 Windows Presentation Foundation ("Avalon"): Going Under the Hood to Understand the Architecture and PRSL05 Case Study: What We Learned Building Project Max on WinFX are invaluable.
These presentations will give you a great introduction and begin to build your foundation for Media Center design and development in Windows Vista.
And there is still more to come...but I can't talk about it just yet...you're gonna love it...
Donate To American Red Cross Hurricane Relief To Enter Raffle for a Copy of Visual Studio 2005
I really love what Ian Dixon is doing -- his show is an invaluable resource for me. I listen to every one he puts out there and if you are a Media Center developer you should as well. The show notes are quite detailed allowing me to instantly review portions of the show after I have listened to it's entirety.
Ian and I spent about 40 minutes together last week chatting about the SDK, programmatic access to the EPG, the Click To Record API and a host of other things. This show goes pretty deep into some of the technical details compared to The .NET Show or Channel9 Part I and Part II videos.
So without further adieu...
The Media Center Show #23
Charlie: Shut up, the camera adds 10 pounds
John: Oh, so how many cameras are actually on you?
Lights, camera, action...
Join myself, John Canning and Michael Creasy in the Microsoft Studios with Robert Hess for The .NET Show featuring Windows XP Media Center Edition. We have some great demos of the Media Center user interface, third party extensibility applications and code walkthroughs by Michael. This show is a great primer if you've been wondering about your developer opporuntities on the Media Center platform
Be sure to check out the hilarious 'Diversionary Tactics' clip in between the show segments. You'll never look at the Channel9 Guy the same way again.
Make your voice heard to our product team -- leave a comment on this post with your feature requests.
[Don't know what our platform is today...? Check out the Windows XP Media Center Edition Software Development Kit (SDK) for more information.]
P.S. Make sure you read the question carefully, noticing the use of the word 'platform.' I am more than happy to pass along consumer oriented feature requests, but my biggest influence is in the development of third party applications which extend Media Center.
P.S.S. Another way to ask the question: If you were to sit down and write an application for use with remote control and viewed on your TV, what developer features would you want or need?
I've been running Windows Vista for two months now as my main desktop at work and it's by far the most astounding OS from Microsoft to date. When I shift back to my Tablet running Windows XP suddenly food has no taste and the world is a dreary shade of gray.
I have Media Center running on Windows Vista.
I have Visual Studio 2005 running on Windows Vista.
I'm compiling apps for Media Center on Windows Vista in Visual Studio 2005.
In a nutshell: If you are a developer for Media Center, you ain't seen nothing yet. You're gonna love it...
Do you want to test your extensibility application for widescreen compatibility without a widescreen monitor?
If yes, then...
- Click Start --> Run.
- Type 'C:\windows\eHome\ehshell.exe /widescreen'.
- Click the OK button.
- Using the mouse, click the 'Restore Down' button to run Media Center in a window rather than full screen.
Voila, a 16:9 implementation of Media Center.
Just one of the many reasons: Our product is fundamentally changing how people interact with their televisions. Case in point: John Canning (my peer) and Andrew Adamyk (our boss) were in Europe this past week meeting up with Media Center partners. As Andrew related...
We were doing internal training in Stockholm for subsidiary program management and in the morning John was demonstrating Media Center. On his machine he had installed a Media Center Add In which allows user to see news alerts within Media Center. In the middle of the demo an alert popped up saying "multiple explosions reported in London." We all looked at each other and said - wow, what strange test data to use for an application. But then, after scrabbling around on different web sites, we realized we were seeing a real news alert…
It didn't matter where John was in Media Center (Music, Pictures, DVD, TV, Online Spotlight, etc.) -- he got an alert with important news -- doubly important for Andrew who is from the UK and has family / friends in London.
And here is the *really* exciting part: I was pondering John and Andrews experience today and realized it is totally possible to create a Media Center Add In which embraces and extends an Emergency Alert System. The EAS today in the United States relies on the user listening to a live radio broadcast or watching live TV. In many DVR equipped homes it can be rare for people to watch live TV (I even hear of some folks who ONLY watch recorded TV and forego all live events). With Media Center it is possible to extend this important public safety system so those listening to personal music, watching a slideshow, playing a DVD, watching home movies or recorded (time shifted) TV -- in any room of the house with a TV. Put another way, we have a platform which can be leveraged to alert people of important (and potentially life threatening events) in an ever increasing 'on demand' world where real time content is no longer the norm.
I'll go into work from now on thinking *way* differently about our platform. It's no longer just about great digital media experiences alone. It's about doing our part to help keep friends and family safe.
A very common question developers and designers have is when to use the Shared Viewport or Custom Viewport in a Media Center application. The sample code associated with this post illustrates how to create a Custom Viewport (and comment one line of code to get a Shared Viewport).
Download the Sample Code
To answer, we can list out the differences between the two, view screenshots of the implementations and understand their intended usage and limitations.
- Non-customizable media window.
- Always located at the lower left.
- Contains two types of content...
- Video (Figure 1)
- Audio Song Title, Cover Art (Figure 2)
- The Shared Viewport is the default playback experience for the PlayMedia or PlayMediaEx method calls.
- Can take and lose focus.
- Can be hidden while media playback continues.
- The dimensions or aspect ratio of the Shared Viewport CANNOT be changed.
- The user can select the Shared Viewport to go full screen with the experience.
- The Shared Viewport is always shown when the user leaves an extensibility application and returns to Media Center with a media experience playing.
- Use a Shared Viewport when the current media experience is secondary in nature to the other content on the page.
Figure 1 - Shared Viewport with video source (click to see larger version).
Figure 2 - Shared Viewport with audio source (click for larger version).
- Fully customizable media window
- Contains video content only (Figure 3)
- Can show for audio content, but the only thing you get is a black square or rectangle.
- Can take or lose focus.
- Can be hidden while media playback continues.
- The dimensions or aspect ratio of the Custom Viewport CAN be changed.
- Aspect Ratio
- You can position the Custom viewport anywhere on screen.
- You must use the HideCustomViewPort event to persist the Custom Viewport between pages.
- Use a Custom Viewport when the content is highly relevant to other metadata or action items on the page.
Figure 3 - Custom Viewport with video source (click for larger version).
Generally speaking, we want to select colors from the web palette which are TV safe for our Media Center Hosted HTML applications. For additional information see TV-Safe Colors in the Media Center Software Development Kit (SDK). A couple of my favorite design tools are Adobe Illustrator and Photoshop, which make it pretty easy to select these TV safe web colors using the Color Picker.
1) Double-click the fill or stroke color selection box in the toolbox or Color palette.
2) Make sure the Only Web Colors checkbox is checked and then select your colors in the range where no single color in the RGB gamut is less than 51 or greater than 204.
3) Although it's usually not necessary, just to be super safe about the colors chosen you can run the Filter --> Video --> NTSC Colors filter and watch for color shifts in your chosen pallette.
One of the common areas of confusion I see when working with designers and developers is user interface scaling for third party applications in Media Center. This is a bit of a mind shift for designers and developers familiar with the rest of the Windows XP world where higher resolutions give you more screen real estate. The Media Center UI always scales and a basic objective for third party applications is to scale as well.
Here are some guidelines designers and developers can follow...
1) Copy-and-paste the sample code in the Windows XP Media Center Edition Software Development Kit (SDK) topic Handling the Lower Resolution of a Media Center Extender Session which makes use of the Media Center OnScaleEvent API (this code can also be found in the sample HTML resource as part of the offline version if the SDK).
Note: The sample code in the SDK uses the following...
...which might be slightly confusing to the novice developer. We are referencing an object in HTML by referring to its 'id' attribute (see the zoom Attribute | zoom Property page at MSDN). If you do use the sample code, you will need to be sure to sync the JScript with the body element id. The sample code for this post uses the following to be specific and avoid confusion...
2) Do not try to reinvent the wheel by coming up with your own paradigm for scaling. It's hard to get more fault tolerant (or more elegant) than using DHTML to place objects and elements with absolute positioning on a page and then scaling the whole. If you are super geeky and want to try and create your own scaling, be forewarned: you will inevitably run into issues trying to account for Media Center objects which scale independently of the onScaleEvent as well as the nuances of accounting for the myriad resolutions other than true 4:3 or 16:9.
3) Do design the hosted HTML experience for 1024 x 768 (4:3) and 1366 x 768 (16:9) with extra image information for the background to the right and bottom to account for the usually slight variations in aspect ratio. All of the scaling in Media Center is based on 4:3 or 16:9 aspect ratios. It's not worth the time or effort to account for other resolutions (like 1280 x 1024 which is close to, but not exactly 4:3).
4) Account for the mouse navigation / transport controls (which don't scale) and Shared Viewport / volume indicator (which do scale) in your designs by making sure all actionable elements are not obscured by these Media Center features. I put together a design template showing the location of these items for Media Center 2005 in the smallest possible windowed mode to assist the designer and developer.
Media Center Design Template (JPEG)
Media Center Design Template (Adobe Illustrator)
The design template is based on 360 x 270 so when focusable / actionable elements in your page are scaled down to this size the mouse nav / transport controls won't interfere with the navigation of the service / application. I'm not suggesting a certain percentage of users run Media Center in a window at this resolution but designing the experience for this resolution is the only way to account for 100% of the Media Center usage paradigms.
Here are some screen shots to illustrate use of the design template...
Screenshot 360 x 270 window for Media Center showing the sample code with mouse nav / transport bars.
Screenshot 360 x 270 window showing Online Spotlight as an example of elegant and functional design with a bunch of actionable elements on a page.
Screenshot Design template superimposed on a screen shot of the sample code, showing how the two correlate.
To show the constant (non-scaling) size of the mouse navigation and transport control feature within Media Center:
Screenshot 500 x 375
Screenshot 640 x 480
Screenshot 800 x 600
Here are a couple of Photoshop files allowing you to quickly evaluate potential designs against the mouse nav / transport constraints. Take screenshots of the comps or experience and resize to 360 x 270 (4:3) or 480 x 270 (16:9) and paste the result into a layer underneath the design template (making sure to center).
360 x 270 (PhotoShop PSD)
480 x 270 (PhotoShop PSD)
5) Specifically design for widescreen aspect ratios. The world is slowly, but surely, changing to widescreen aspect ratios. For example, the Reuters application does this *really* nicely by giving you an extra column of videos when viewed in a widescreen aspect ratio
Reuters in 4:3 Mode
Reuters in 16:9 Mode
6) You don’t need to design for action safe / title safe in your application. Media Center works in conjunction with the video drivers to make sure most over scan issues are properly handled. Interactive TV shops will find this different compared to other platforms, but rest assured this statement is true.
For those of you really interested in how the scaling works 'behind the scenes' here are the nitty-gritty details. The sample code for this post illustrates the scaling mechanisms in Media Center outlined below.
The vScale argument passed when Media Center calls the onScaleEvent function in the JScript is always the smaller of the following calculations:
document.body.clientWidth / 1024
document.body.clientHeight / 768
When the document.all.[body id].style.zoom is applied via the onScaleEvent function the following will always be returned when Media Center is running in a windowed mode or native full screen resolutions of exactly 4:3 and 16:9 aspect ratios:
For standard aspect ratio of 4:3 (C:\WINDOWS\eHome\ehshell.exe)
document.body.clientWidth = 1024
document.body.clientHeight = 768
For widescreen aspect ratio of 16:9 (C:\WINDOWS\eHome\ehshell.exe /widescreen)
document.body.clientWidth = 1366
document.body.clientHeight = 768
When in full screen mode the following will be returned if not running in Media Center native full screen resolutions of 4:3 or 16:9 aspect ratios:
For standard aspect ratios (those similar to 4:3, 1280 x 1024 for example):
document.body.clientWidth = 1024
[Calculated Value] document.body.clientHeight = [Actual document.body.clientHeight] * 1024 / [Actual document.body.clientWidth]
For widescreen aspect ratios (those similar to 16:9, 1280 x 800 for example):
[Calculated Value] document.body.clientWidth = [Actual document.body.clientWidth] * 768 / [Actual document.body.clientHeight]
document.body.clientHeight = 768