Beta

×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

The Windows 8 Power Struggle: Metro Vs Desktop

Soulskill posted more than 2 years ago | from the features-fighting-features dept.

Windows 590

MojoKid writes "Metro, Microsoft's new UI, is bold; a dramatic departure from anything the company has previously done in the desktop/laptop space, and absolutely great. It's tangible proof that Redmond really can design and build its own unique products and experiences. However, the transition to Metro's Start menu is jarring for some desktop users, and worse yet, Desktop mode and Metro don't mesh well at all. The best strategy Microsoft could take would be to introduce users to Metro via its included apps and through tablets, while prominently offering the option to maintain the Desktop environment. Power users who choose to use the classic UI for desktops and laptops can still be exposed to Metro via tablets and applications without being forced to wade through it on their way to do something important."

cancel ×

590 comments

Sorry! There are no comments related to the filter you selected.

Please read this (4, Insightful)

recoiledsnake (879048) | more than 2 years ago | (#39307307)

http://www.winsupersite.com/article/windows8/windows-8-consumer-preview-call-common-sense-142476 [winsupersite.com]

Also, try to spend a few minutes learning shortcuts etc. before dissing the experience. It's not a SP for Windows 7, it's a new OS.

http://arstechnica.com/microsoft/news/2012/02/getting-starte [arstechnica.com] ...

http://www.kotaku.com.au/2012/03/windows-8-tricks-tips-and-s [kotaku.com.au] ...

And it will enable many devices like these that don't exist now:

Idea Pad Yoga: http://www.youtube.com/watch?v=Yz2R9y9ZvkA&hd=1 [youtube.com]

Samsung x86 Tablet: http://www.youtube.com/watch?v=w8-K1ELv6DE&hd=1 [youtube.com]

Try doing that with an iPad.(There are iPad-like ARM Windows 8 tablets too that won't run x86 apps but which will have Office).

83inch displays: http://www.theverge.com/2012/2/29/2833173/windows-8-82-inch- [theverge.com] ...

All these form factors tied in the with the vast Win32 ecosystem(except ARM tablets) and a single Touch-first Metro ecosystem.

It's interesting how the comments on Apple/iPad/Post-PC articles, financials of Apple/Dell/HP etc. state that "MS is dying in the Post-PC" era, but now when they come out with a solution to make a OS run on different form factors and to have tablets that are not just consumption devices, the comments on here are skewed towards "Why change something that works?". If PCs are really dying, why not attempt to fix that instead of standing by with their head in the sand(like RIMM)?

There will always be people unhappy with anything you build or change. They should just go with their vision of what they think is right and that's what they did. They envision that with Windows 8, most new monitors will be touch enabled because of the demand so that for some functions(like clicking on links), people can use touch.

You may disagree with the vision, but you can't disagree that there is a method behind the madness.

How ergonomic! (5, Insightful)

Anonymous Coward | more than 2 years ago | (#39307363)

Let's see; I work on two 22 inch monitors. I can move from the far left edge to the far right edge with a three inch movement of my mouse. Now you want me to have to lean toward the monitors and move my arm over three feet to accomplish the same thing. How ergonomic! How NEW! How efficient!

Re:How ergonomic! (-1, Troll)

recoiledsnake (879048) | more than 2 years ago | (#39307483)

Let's see; I work on two 22 inch monitors. I can move from the far left edge to the far right edge with a three inch movement of my mouse. Now you want me to have to lean toward the monitors and move my arm over three feet to accomplish the same thing. How ergonomic! How NEW! How efficient!

Then don't use touch? Remove all the Metro apps from the Start screen and pin only your desktop apps and you'll end up with something like Windows 7 with a glorified start menu. You're acting as if Ballmer stole your mouse or something.

Re:How ergonomic! (4, Funny)

Anonymous Coward | more than 2 years ago | (#39307529)

No, it was just the closest item to him so he picked it up and threw it.

Re:How ergonomic! (5, Insightful)

Anthony Mouse (1927662) | more than 2 years ago | (#39307677)

Then don't use touch? Remove all the Metro apps from the Start screen and pin only your desktop apps and you'll end up with something like Windows 7 with a glorified start menu.

That's the problem though. Sure, you can reconfigure it to be like Windows 7...but WTF? If that's better then why are they wasting everybody's time developing something that serves only to make everybody turn it back off?

Which is the same problem with the dichotomy between tablets and desktops. There is a reason that iOS is not MacOS and Android is not Ubuntu or Mint or ChromeOS. What Microsoft is obviously trying to do is get everyone on the desktop used to their tablet UI so that they can sell tablets and have people be familiar with them. But that's total fail, because having a tablet UI on a desktop is crap. And if everybody changes it back right away then they both never become familiar with it and associate it with fail (on top of the fail of not running legacy apps on ARM) so that the tablets get associated with fail and nobody buys them. Or, as is far more likely, just nobody buys Windows 8 to begin with -- every business I'm aware of is planning to stick with Windows 7 indefinitely.

Re:How ergonomic! (5, Informative)

Grishnakh (216268) | more than 2 years ago | (#39307763)

You obviously haven't used Ubuntu since they changed to the crappy new Unity UI, which is basically a touchscreen UI converted to be used on a desktop. Their eventual goal is to have Unity on both desktops and tablets and phones. Of course, most Linux desktop users are rebelling and switching to Mint or other distros because of this.

Re:How ergonomic! (5, Insightful)

PCM2 (4486) | more than 2 years ago | (#39307897)

You obviously haven't used Ubuntu since they changed to the crappy new Unity UI, which is basically a touchscreen UI converted to be used on a desktop. Their eventual goal is to have Unity on both desktops and tablets and phones. Of course, most Linux desktop users are rebelling and switching to Mint or other distros because of this.

It took me maybe six months to install a version of Ubuntu with Unity, and all that time I heard nothing but bitching about it on /. Now that I have it installed, I don't really mind it. It is a little "Fisher-Priceified," but it is nowhere near as bad as Metro.

In fact, though I may be a square for saying so, I really have no problem with Unity. The desktop is still visually pleasing and the Unity UI doesn't get in my way. It still feels a little bit awkward for me, because I don't really use a Linux desktop for my day-to-day work, so I haven't had much time to get used to it. But the important thing is that I feel like that awkwardness is my issue. I don't feel that way with Metro.

Re:How ergonomic! (5, Interesting)

Anonymous Coward | more than 2 years ago | (#39307863)

WTF? If that's better then why are they wasting everybody's time developing something that serves only to make everybody turn it back off?

Money. Microsoft probably doesn't give a crap what people actually want. Imagine you take all Windows users today, and push them into an environment where the primary access to everything is through an app store model you control. Now think about how Apple makes money on everything that happens within their iPad/iPhone devices, etc.

I don't think Microsoft wants you to use the desktop anymore. It probably doesn't matter how much you bitch about it, there is probably too much money on the table.

Re:How ergonomic! (4, Funny)

cvtan (752695) | more than 2 years ago | (#39307803)

Wow! You have a cell phone with two 22-inch monitors? I guess it's the only way to play Angry Elephants.

Re:How ergonomic! (1)

atlasdropperofworlds (888683) | more than 2 years ago | (#39307847)

I guess you could still just connect and use the mouse, right?

Re:Please read this (1)

Anonymous Coward | more than 2 years ago | (#39307441)

Yeah this is all very interesting but the point is that Microsoft should stop fucking trying to play catch-up and realise that 1) the PC is *not* dead; 2) no-one wants the PC to die except Apple and Google; 3) therefore MS will continue to do well only if it continues building the best PC platform rather than throwing everything into Apple's iPad territory.

In particular, the Start screen is completely inappropriate on the desktop. As an option for tablets, fine. Do MS not understand that no-one just buying a Windows 8 PC will even be able to find it?!

Re:Please read this (2)

mystikkman (1487801) | more than 2 years ago | (#39307447)

Agreed, there is too much of hot air from people who expect it to be similar to the transition from Windows 95 to Windows 98. It's not, it's a complete rethinking like from Windows 3.11(for Workgroups!) to Windows 95.

Summary says:

The best strategy Microsoft could take would be to introduce users to Metro via its included apps and through tablets, while prominently offering the option to maintain the Desktop environment. Power users who choose to use the classic UI for desktops and laptops can still be exposed to Metro via tablets and applications without being forced to wade through it on their way to do something important."

That is exactly the strategy behind making iPad a consumption only device, and will exclude many nice form factors like the Transformer, Samsung Slate or the where you just take a tablet with you, and get a full powered device when you attach a keyboard/mouse to it. Or when you take a tablet but want to use touch instead of pecking at the keyboard/trackpad all the time (Idea Pad Yoga). I believe this allow for much more choice and innovation in the hardware choices that people will get once this launches. All-in-ones and two large touch monitors on desktops for power users will allow them to use Touch apps IF they want to.

Disabling Metro on the desktop will lower the demand for touch monitors as well. Making people use Metro also will give the touch ecosystem a big boost by expanding the audience for developer apps to all Windows PCs instead of being limited to just tablets, which will result in more Metro apps for users. Just look at Android tablets and poor selection of apps even after a year of release of major tablets like Xoom, Samsung Tab, Transformer etc The sales are just not there and one big reason is apps. Also remember what happened to the HP Touchpad?. Going against the iPad 200K app juggernaut is not going to be easy without this kickstart.

Re:Please read this (5, Insightful)

Vanders (110092) | more than 2 years ago | (#39307491)

Disabling Metro on the desktop will lower the demand for touch monitors as well.

You've missed the point. Why do Microsoft believe that people want or need touch monitors? Why do Microsoft believe large-dimension touch interfaces are better interface than a mouse?

Re:Please read this (3, Insightful)

mystikkman (1487801) | more than 2 years ago | (#39307667)

Disabling Metro on the desktop will lower the demand for touch monitors as well.

You've missed the point. Why do Microsoft believe that people want or need touch monitors? Why do Microsoft believe large-dimension touch interfaces are better interface than a mouse?

They're just giving people the choice. Remember, a billion people use Windows. A significant percentage of them might want to use touch monitors. The rest can ignore that and move on. Did they remove the mouse support in Windows and I didn't get the memo?

Re:Please read this (1)

geekoid (135745) | more than 2 years ago | (#39307729)

Because phones, tables and kiosks are common. There are more screens being used in smart phones and tablet then there are with 'traditional PC'.

Maybe I should ask "Why should MS make the minority of ways to view the OS a high priority?"

Plus that great desk in Tron was touch screen.

Re:Please read this (4, Insightful)

beelsebob (529313) | more than 2 years ago | (#39307661)

You're missing the point. The iPad's UI is significantly different to desktop Mac OS, exactly because apple managed to realise one simple thing. The traditional desktop metaphor UI doesn't work when you hold it in your hand and touch it.

The reason past tablets weren't successful was because they tried to cram a destop UI onto a tablet.

Microsoft are making the exact same mistake again, only this time in reverse. They're trying to cram a perfectly acceptable tablet UI onto a desktop platform. Worse, they're doing it in a way that only half deprecates the old way of doing things. The result is that they have a tablet UI that doesn't work well because you're not using a tablet; and that when you actually try to do anything, you immediately get shifted into a different UI paradigm, because the apps haven't all been recoded.

It's a complete UI disaster, and perfectly sums up microsoft –copy the trend, do something that they claim is new, and don't update anything at all to integrate well into it. The result –a cludge.

Re:Please read this (4, Insightful)

DJRumpy (1345787) | more than 2 years ago | (#39307693)

Can't agree more. This new UI has to be the most unintuitive GUI i've used on a desktop. Although I'm sure it's fine on a touch screen, it was painful to use with a mouse, took me 20 minutes just to find common items, a few mins to find the login options, etc.

This from a geek. I can't imagine what my folks would do with this, other than to turn ape like, beat not he screen and make lots of jarring screeches in frustration.

Re:Please read this (2, Insightful)

geekoid (135745) | more than 2 years ago | (#39307761)

So If I had the option to change the interface on the OSX would be a bad OS?

You just don't like change, and assume MS is going to be bad.

I've used it. I like it. I also use OSX and iOS. I like them as well.

Now, what I don't like is what they did you it on the xBox. Used it to shove ads at you in the squares.

Re:Please read this (1)

Anonymous Coward | more than 2 years ago | (#39307861)

My main issue with Metro is the same problem I have with gnome 3. I have a large dual monitor setup. Why would I want a start menu that covers 3840 x 1080 of screen realestate. I find the whole popup cover the screen thing very jarring.

A good UI should be like a good child, there but so well behaved you don't notice them!

Nobody actually uses tablets. (5, Informative)

Anonymous Coward | more than 2 years ago | (#39307489)

I travel a lot, all over Europe, North America and Asia, and I've come to realize that tablets are basically a myth. While there is a lot of hype around them, and many have been sold, almost nobody actually uses them!

During my travels, I see people using cell phones. I see people using smart phones. I see people using laptops. I see people using netbooks. I see people using desktops. But it's extremely rare to see anyone using tablets. I see literally thousands of other people using smart phones for every tablet user I see.

I visit all sorts of environments, from huge corporate offices, to parks, to restaurants, to planes, to universities and colleges, to airports, to train stations, to city squares, to government offices, to subways, to cafes, to so many other places. Given the amount of traveling I do and the huge number of people I see in any given day, and given how much we hear about tablets, I should be constantly seeing people use tablets. But I just don't.

I think that they're the kind of device that somebody buys because of the marketing hype or because they sound like they might be useful, but then in practice they turn out to be feeble and impractical. Then they sit there on a bookshelf or table top, completely unused, until they're all but forgotten about.

I'm sure a bunch of people are going to reply to this saying how they find tablets useful in some very niche situation, but these are indeed very niche cases. The widespread usage of tablets just isn't there, like it is with smart phones or even netbooks. The popularity of tablets is a marketing myth, I suspect, rather than a reality.

Re:Nobody actually uses tablets. (2, Insightful)

TheRaven64 (641858) | more than 2 years ago | (#39307569)

About the only places I've seen tablets are on trains. Even then, they're massively outnumbered by laptops and phones, but I do see a few. I actually own a tablet, and the only thing I use it for is watching films when I'm on a long trip - it can manage about 7 hours of video playback, which is more than enough for most journeys. With power sockets being common in trains now, there's less of a need, and my laptop has the nice advantage that I don't need to prop it up - the screen comes with a convenient stand...

Re:Nobody actually uses tablets. (4, Interesting)

sangreal66 (740295) | more than 2 years ago | (#39307609)

Proving the value of anecdotal evidence, I have had the exact opposite experience. I take flights weekly, and I have not been on a flight without a few tablet users in a long time.

As a tablet owner myself, I find I rarely take the effort to drag it out of my bag when I can just reach for my phone.

Re:Nobody actually uses tablets. (3, Insightful)

Grishnakh (216268) | more than 2 years ago | (#39307805)

I pretty much only see people with e-book readers on planes, not "tablets" per se. There's a big difference between the two, even though it's quite possible to make an e-book reader work like a tablet; the use cases are quite different. Ebook readers are great for reading (esp. with the e-ink screens), but that's about it.

Re:Nobody actually uses tablets. (3, Interesting)

beelsebob (529313) | more than 2 years ago | (#39307681)

Actually, not a single niche –many many many niches. The same is true of computers –they suck if you go "hey, what's the killer app", but are great if you realise that they're useful for hundreds of useful little things.

Several of my friends are now considering them, simply because each time they're round the phrase "could you pass the iPad over" gets uttered a couple of times. Be it to check wikipedia, look up some random cat video someone mentioned, display the rules of the game we're playing, ...

All of these individually are trivialities... but they add up to a really fucking useful device.

Re:Nobody actually uses tablets. (4, Interesting)

PopeRatzo (965947) | more than 2 years ago | (#39307755)

I travel a lot, all over Europe, North America and Asia, and I've come to realize that tablets are basically a myth. While there is a lot of hype around them, and many have been sold, almost nobody actually uses them!

Maybe that's because most tablets suck for getting any work done, and thanks to the corporate hostile takeover of all of our lives, people have to work a lot more than they used to. Thus, the tablet stays at home and the phone or the laptop comes out on the train, at lunch, etc etc.

If there were reasonably-priced tablets that could be used to do actual work, you'd see a lot more of them. On a plane, on a train, bus, etc standard laptops can be very clumsy. You end up needing quite a bit of space to use them.

I watched the video of the Lenovo Yoga, and while there are things about it that don't look so great, it's a start toward a tablet-style form factor that can actually be used to accomplish something besides consumption. It's a step in the right direction to create functional tablets that provide keyboards for the few billion people who would rather key input than anything else.

I'm sorry, but Siri-style voice commands are not going to be anything but a novelty until they can be used with sub-vocal sounds. I really don't want to be anywhere near a plane or train where everybody is talking to their computer. I can type faster than I can talk to Siri, anyway.

Now, I won't buy Windows 8 because I won't give Microsoft money (for reasons that don't have anything to do with the quality or lack thereof regarding their products. It's political. But I'm glad to see that somebody is thinking about computer interfaces that can be used to make something, not just buy something. Apple doesn't seem to be doing it, but they're apparently too busy being the richest company in the world by making products that are for consumption-only. That's not a knock on them. I just need tools more than I need home shopping network on steroids.

Re:Please read this (5, Insightful)

93 Escort Wagon (326346) | more than 2 years ago | (#39307497)

It's interesting how the comments on Apple/iPad/Post-PC articles, financials of Apple/Dell/HP etc. state that "MS is dying in the Post-PC" era, but now when they come out with a solution to make a OS run on different form factors and to have tablets that are not just consumption devices, ...

Tablets don't have to be just for consumption - people are already using iPads and the like for creative purposes. But, when you think about it, most of what the typical person uses even a full-blown computer for tends to be mainly consumption and communication - Netflix, YouTube, Facebook, email, chat, etc. Even for work, the most content creation they do involves making a Word document or an Excel spreadsheet.

As far as that "vast Win32 ecosystem" goes... remember that Windows tablets aren't exactly a new idea. Microsoft has tried - and failed - to leverage that vast ecosystem to make Windows-based phones and tablets a success before. Time will tell regarding Metro, of course; but while you seem to think their success is a foregone conclusion, recent history shows otherwise. It comes down to whether or not Microsoft learned from their previous failures, which is something I, for one, am not convinced of.

Re:Please read this (5, Insightful)

PCM2 (4486) | more than 2 years ago | (#39307501)

I don't agree with Thurrot's analysis that "the desktop is just an app." Oh really? The desktop is still there, with Explorer, the taskbar, the system tray, and every other feature the desktop has ever had, and Thurrot wants us to believe this is somehow just some little "app" that's running inside of Metro? Hardly. The desktop is still the desktop. It is Windows.

What Windows 8 has done is given us this new launcher application, called Metro, which accepts plug-ins, called apps, and which will now launch automatically when you login to the system and again every time you push the Start button. Metro feels like the ultimate terminate-and-stay-resident program from the 80s, where every time you push the hotkey it takes over your entire screen.

Also, try to spend a few minutes learning shortcuts etc. before dissing the experience. It's not a SP for Windows 7, it's a new OS.

No, it isn't. It really isn't. Keyboard shortcuts do not make an "OS." The fact that the device drivers for every weird hardware device on my laptops carried over from Windows 7 to Windows 8 without a hitch demonstrates that the two are essentially the same OS.

What Microsoft has done with Windows 8 is it has taken a UI that works and put a big curtain in front of it (Metro) so that every time you want to use the OS the way you're accustomed to doing, you have to push the curtain aside. And as soon as you push the wrong button (the Windows key) or you want to launch a new application, the curtain drops down again.

They envision that with Windows 8, most new monitors will be touch enabled because of the demand so that for some functions(like clicking on links), people can use touch.

Just because I can use touch doesn't mean I will want to. I am not going to be reaching across my desk to click on links when there's a mouse sitting in my right hand. I don't need a new repeat strain injury [infoworld.com] and I don't want to smear my monitor with fingerprints. Poking around in midair with your fingers looks cool in movies, but in practice what we do now is more efficient, which makes it preferable. It's not logical to get rid of the more efficient way of doing things for the sake of something that looks cool.

You may disagree with the vision, but you can't disagree that there is a method behind the madness.

I don't disagree that there's a method. But that doesn't mean it's not madness. When your friend guns his engine and says, "Don't worry, I know what I'm doing -- we can make it across the canyon," it's time to get out of the car.

Re:Please read this (0)

Anonymous Coward | more than 2 years ago | (#39307641)

What Microsoft has done with Windows 8 is it has taken a UI that works and put a big curtain in front of it (Metro) so that every time you want to use the OS the way you're accustomed to doing, you have to push the curtain aside. And as soon as you push the wrong button (the Windows key) or you want to launch a new application, the curtain drops down again.

Thank you for this. It's the perfect metaphor for the annoying "jumping" back-and-forth behavior exhibited by Win 8.

Re:Please read this (0, Troll)

recoiledsnake (879048) | more than 2 years ago | (#39307823)

>What Microsoft has done with Windows 8 is it has taken a UI that works and put a big curtain in front of it (Metro) so that every time you want to use the OS the way you're accustomed to doing, you have to push the curtain aside. And as soon as you push the wrong button (the Windows key) or you want to launch a new application, the curtain drops down again.

Unpin all the Metro tiles and keep only desktop apps pinned, and the tiles become nothing more than a revamped Start screen and you can use shortcuts for other tasks.
>Keyboard shortcuts do not make an "OS."

What? Did you fail reading comprehension? Whoever said that? I only meant that before you discount it, learn it, try it and then do that. Do not expect it to work like Windows 7 on day 1 and do not expect everything to run like the old OSes starting from day one.

> It's not logical to get rid of the more efficient way of doing things for the sake of something that looks cool.

My point was that they did NOT get rid of the more efficient way, it's a just a different way now and all your desktop apps work exactly the same and some even better.

  As I said, it's funny how on all the Post PC articles, the PC and MS are dying anyway, but now the PC is alive and well and MS should just release service packs for Windows 7 till the demand dries up. So which is it, is the PC industry dying or is it going to grow and thrive?

http://news.cnet.com/8301-13579_3-57393848-37/apple-reaches-for-singularity-in-the-post-pc-world/ [cnet.com]

big touch screens (4, Funny)

roc97007 (608802) | more than 2 years ago | (#39307831)

Parenthetically, why don't you ever see in Star Trek someone cleaning the fingerprints and accumulated grunge off all those touch screen displays? There must be a janitorial service just to do that.

Oh, because it's fiction, that's why.

Now that I think of it, that might make the basis of a story. A janitor forgets to lock out the navigation console, juices up his rag, and sends the ship Where No One Wants To Go.

Re:Please read this (2)

ObsessiveMathsFreak (773371) | more than 2 years ago | (#39307615)

Where's the menu bar? Why would you want me to work without a menu bar?!

Re:Please read this (1)

geekoid (135745) | more than 2 years ago | (#39307813)

Why do you need it? Meaning, what function does it provide? Because the MB may be gone, but what it does is still there.

Think about it.

MODERATION ABUSE (-1, Offtopic)

mystikkman (1487801) | more than 2 years ago | (#39307625)

Troll for the fp? WTF Slashdot, someone actually makes a comment that is different from the 100 +5 insightful comments saying the UI sucks and you want to cover that up so no one sees it?

Remember this post from back then?

http://tech.slashdot.org/story/09/02/16/2259257/draconian-drm-revealed-in-windows-7 [slashdot.org]

A choice comment.

A DRM ban clause should be added as a constitut (Score:4, Insightful)
by hairyfeet (841228) Friend on Tuesday February 17 2009, @12:54AM (#26882807) Journal

I been saying it and saying it that the DRM in Win7 hadn't been turned on and that is why they are getting good performance out of it now. Vista Beta 1 ran great for me too, but that was the pre DRM version. All of this DRM crap has to monitor you to keep "criminals" like the owner of the PC from doing as they like 24/7/365. All of that monitoring takes up CPU and RAM that could have been used for your stuff.

Mark my words, what we are seeing here is the tiniest tip of the turd iceberg that is Win7, AKA Vista the second edition. It will go down in flames as folks find out it is a big pile of stink just like Vista. That is why just yesterday I had a customer literally throw money at me saying "make this %^&^&$ POS Vista go away! I don't want to see this thing again until XP is on it!". So mark my words, Linux guys. Be getting your A games ready. Be doing everything you can to fix the little irritants like Winprinters because when Vista7 goes down in flames you are going to have a LOT of POed folks looking for a new direction. And Apple is just too damned expensive for John Q. Average. So this is your shot, make it count. I doubt seriously after Win7 goes down in flames that Ballmer will have a job and the next guy they bring in will probably be one of the MS Office guys and he will go back to dull and boring business OSes(Oh,Lord,please let it be so!) so you guys probably won't get a third at bat.

      I for one would like some healthy competition to make the marketplace more fair so don't miss your shot,make it count. Because a moron as stupid as Ballmer only comes around once in a lifetime and you don't want to miss it.

Now those are troll articles and comments. Even Ars noticed http://arstechnica.com/microsoft/news/2009/02/oh-the-humanity-windows-7s-draconian-drm.ars [arstechnica.com]

Slashdot has turned into a circlejerk and nothing more

Re:Please read this (4, Insightful)

bmo (77928) | more than 2 years ago | (#39307635)

Also, try to spend a few minutes learning shortcuts etc.

And Windows users accuse the *nix crowd of being arrogant because we say "rtfm" too often for their tastes.

A lot of people are flippin' lost without visual cues. 8 has taken visual cues and turned them invisible and put them in hot corners and stupid shit like that.

Metro on the desktop is a goddamned failure. Microsoft is doing this simply because they can, and there is almost a cult-like movement within Microsoft about metro that if you don't like it, then there is something wrong with you. This is exemplified by your statement here.

--
BMO

Re:Please read this (1)

geekoid (135745) | more than 2 years ago | (#39307875)

"Metro on the desktop is a goddamned failure."
That's not true by any metric..

You are the one stuck into cult thinking.

Which version did YOU beta? and on what platform?

Re:Please read this (2)

geekoid (135745) | more than 2 years ago | (#39307695)

"Try doing that with an iPad."
there was nothing in the video you can't do with an iPad.

Re:Please read this (0)

atlasdropperofworlds (888683) | more than 2 years ago | (#39307827)

Don't bring your reason and logic into a slashdot MS bash! You'll get modded troll...

Oh, too late.

Learn from Ubuntu (1)

Anonymous Coward | more than 2 years ago | (#39307319)

Obviously... lost a lot of market share to Mint.
 
  Which is too bad because Canonical has an amazing reputation!

Trek rule (5, Funny)

girlintraining (1395911) | more than 2 years ago | (#39307331)

I think Microsoft Operating Systems follow the trek movie rule: Every other release sucks.

Re:Trek rule (1)

Zaldarr (2469168) | more than 2 years ago | (#39307431)

To be precise, every odd numbered Trek movie sucked, and the even numbers were good with the exception of #10. That was a stinker.

But that rule doesn't work (2)

NotSoHeavyD3 (1400425) | more than 2 years ago | (#39307535)

I mean Star Trek 3 was good. I mean Reverend Jim the Klingon for FSM sakes.

Re:Trek rule (2)

FrootLoops (1817694) | more than 2 years ago | (#39307883)

Since 10 was bad and 11 was good, obviously the rule is

if digitalroot(n) % 2 == 0:
  return Good
else:
  return Bad

where the digital root of a number is computed by iteratively summing the digits until you're left with just one digit. Example: 1235 -> 1+2+3+5 = 11 -> 1+1 = 2, so digitalroot(1235) = 2.

Re:Trek rule (0)

Anonymous Coward | more than 2 years ago | (#39307493)

Doubtful.

MS-DOS 1.x - good
MS-DOS 2.x - good
MS-DOS 3.x - good
MS-DOS 4.x - bad
MS-DOS 5.x - good
MS-DOS 6.x - good
Windows NT 3.x - bad
Windows 95 - bad
Windows NT 4.x - good
Windows 98 - bad
Windows Me - bad
Windows 2000 - good
Windows XP - good
Windows Vista - bad/good
Windows 7 - good

You are wrong about the Star Trek films too.

Star Trek: The Motion Picture - bad
Star Trek: The Wrath of Khan - good
Star Trek: The Search for Spock - good
Star Trek: The Voyage Home - bad
Star Trek: The Final Frontier - bad
Star Trek: The Undiscovered Country - good
Star Trek: Generations - good
Star Trek: First Contact - good
Star Trek: Insurrection - bad
Star Trek: Nemesis - bad

Re:Trek rule (1)

Anonymous Coward | more than 2 years ago | (#39307591)

because subjective opinions from random people on the internet are authoritative...

Re:Trek rule (-1)

Anonymous Coward | more than 2 years ago | (#39307747)

because subjective opinions from random people on the internet are authoritative...

You mean like the opinion you just expressed, dipshit?

Re:Trek rule (1)

rbpOne (2184720) | more than 2 years ago | (#39307595)

It's not true regarding MS Windows and it's not true regarding Star Trek movies.

The "Every other MS OS..." meme is getting lame.

Re:Trek rule (1)

cpu6502 (1960974) | more than 2 years ago | (#39307709)

Windows 4, 5, and 5.1 (XP) were not bad releases. It is only recently when MS tried to reinvent the wheel that things went bad.

It sounds like I need to buy another Windows 7 machine while they are still available, so I can skip over the Win8 debacle (same way I skipped over vista).

Re:Trek rule (1)

roc97007 (608802) | more than 2 years ago | (#39307865)

Windows 4, 5, and 5.1 (XP) were not bad releases. It is only recently when MS tried to reinvent the wheel that things went bad.

It sounds like I need to buy another Windows 7 machine while they are still available, so I can skip over the Win8 debacle (same way I skipped over vista).

Buy a copy of the OS now, build the machine later as needed, when they're faster and cheaper.

Two Options (5, Interesting)

medcalf (68293) | more than 2 years ago | (#39307347)

MS had, basically, two options: create a new brand for an OS tailored for post-PC devices, or continue with what they had. They chose to create a new (and pretty good, actually) interface in Metro, but then apply it to both post-PC devices and PCs and brand it as Windows in both places. I think that I would have gone the other way, creating a Metro brand to go with the interface, and tailoring it even more closely to post-PC systems, while keeping the Win7 interface on the desktop, and sharing the underlying kernel and as many APIs as possible between the two variants. Time will tell if that was a good decision or not; it was certainly a bold decision, given the success that Apple and Google have had with specific post-PC brands and interfaces.

Re:Two Options (1)

lennier1 (264730) | more than 2 years ago | (#39307503)

To sum it up: There's a reason why Apple is maintaining two product-specific branches of its operating system.

Re:Two Options (1)

ganjadude (952775) | more than 2 years ago | (#39307597)

for now, There were talks a while ago of integrating IOS with OSX or something along those lines, you can see it start with the mac store, , perhaps, M$ actually beat apple to the punch on something? (something no one is really asking for anyway)

Re:Two Options (0)

lennier1 (264730) | more than 2 years ago | (#39307665)

MS Bob 2.0

Re:Two Options (2)

Em Adespoton (792954) | more than 2 years ago | (#39307819)

Ever used Launchpad on OS X? Notice that almost all Apple apps can be run in a "no menu bar" mode? With the last release, most of the useful bits from iOS have been reintigrated into OS X, such that you can now operate most of OS X with a touch screen (including onscreen keyboard). Of course, Apple did a better job of integrating this interface with that of the traditional UI, such that you can still use a mouse in the traditional manner if you so desire.

Not meaning to sound fanboyish; just meaning that MS and Apple just took different paths to the same thing, with slightly different results.

IMO, neither one will feel right until my PC gets a fully functional kinect-like replacement for the mouse.

Re:Two Options (1)

Serious Callers Only (1022605) | more than 2 years ago | (#39307659)

The reason apple are maintaining two branches is they haven't had time to properly merge the two. If they had the time and resources, I'm sure they'd love to merge them and keep some ui differences, but proceed with one base operating system. At present they're maintaining two separate branches of everything from the view layer up including lots of nearly identical code (e.g. uiwebview), which is neither sustainable nor particularly useful. The desktop has definitely moved toward ios with lion, and I think well see more of that, and at some point they may just decide its not worth maintaining the desktop branch (less than 30% of their revenue now) and move over to the newer iOS branch.

the apple post-facto apologists are going to have some somersaults to do when that happens to explain to themselves why now was indeed the right time to merge them and move beyond the pc, just as ms is hack-handedly trying to do here.

That said, ms have executed incredibly poorly here and ruined the reception of what is quite a good interface by foisting it on people all at once and being too up-front about their intentions - the route suggested by the parent would be a good one to gradually acclimatise people to the change.

Re:Two Options (0)

Anonymous Coward | more than 2 years ago | (#39307703)

... hack-handedly ...

Hmm, this is a new one. It's actually "cack-handed" as in awkward or clumsy.

Re:Two Options (2)

cpu6502 (1960974) | more than 2 years ago | (#39307587)

I hope Win8's Metro is better than the sucky "ribbon" interface in office. I just started using it last week, and today I couldn't even figure out how to "undo" a mistake I made in Excel. I'm looking at it right now, and all I see in front of me is a confusing mess of heiroglyphics. Grrr. If I wanted my computer menu to look like the wall of an Egyptian pyramid, I would have imported it from there.

I never thought I'd ever say this... but the Commodore GEOS was actually easier to use. I've hated Microsoft a long, long time and they finally produced a usable OS with Windows 95 (copied the mac), but now they've gone back to my "hate" column with this Office/Ribbon frakup.

Time will tell if my next PC is a Windows 8 or a Mac. (Or maybe even an Amiga or Linux machine.) Whatever I choose it definitely won't have Microsoft Ãffice on it.

Re:Two Options (0)

Anonymous Coward | more than 2 years ago | (#39307723)

The concept of the ribbon is actually pretty good (also not that innovative, but that's a different matter), but the implementation within Office is pretty bad, all of the predefined stuff is just pure crap and the relevant functions are often hidden in menus on the ribbon, which pretty much defeats the purpose of the ribbon in the first place.

Re:Two Options (1)

zoom-ping (905112) | more than 2 years ago | (#39307725)

I just started using it last week, and today I couldn't even figure out how to "undo" a mistake I made in Excel. I'm looking at it right now, and all I see in front of me is a confusing mess of heiroglyphics.

Try ctrl+z.

Re:Two Options (1)

alexhs (877055) | more than 2 years ago | (#39307815)

I just started using it last week, and today I couldn't even figure out how to "undo" a mistake I made in Excel.

IIRC, undo is not in the ribbon. Look up, it should be in the title bar (stupid place, I know). Or you could use the old Ctrl-Z shortcut, which should still work...

I think it is a fine idea (4, Insightful)

Sycraft-fu (314770) | more than 2 years ago | (#39307639)

Problem is they fucked up the setup on the desktop. On an embedded device, Metro is everything. Makes sense, it is the embedded GUI, and they can't run PC apps. So you fire up the device, Metro is what you get.

However on a PC, the desktop should be what you get, Metro should be something you open in it. That way you can run Metro apps if you want, which is cool, but on the terms of a desktop. You can let them run full screen, or not, put them in a window. It'll seem "full screen" to them, they'll just be told that window is their screen.

The reason is the multi-window paradigm is what works for desktop computing. It is an efficient way to work with multiple programs, which is what almost everyone does. Even non tech types. It is efficient to be able to open up multiple things, arrange them as you like, switch between them easily, and so on.

The smart phone idea is not an efficient way to work, it is just a necessary one given the limitations of the platform. Trying to force it on the desktop is rather stupid.

I can see the benefits of sharing a codebase, but the fundamental interface is going to need to remain different.

Another option - fail and fall back (3, Insightful)

Zontar_Thing_From_Ve (949321) | more than 2 years ago | (#39307767)

My gut feeling is that Win 8 is going to be a spectacular failure like Vista. People who buy PCs with Win 8 loaded are going to throw a fit and demand a downgrade to Win 7. Microsoft will survive because no matter how much they screw up, the competition can't really take their place. So it's not necessarily a bad gamble for Microsoft. It might work. I doubt it, but I could be wrong. If I'm right then after it fails and they get burned by the "not gonna buy it" and "I demand a downgrade from this crap" crowd, they'll quickly re-design WIn 9 to look like Win 7 with some added features and put that out.

Didn't we just go over this? (0)

Cabriel (803429) | more than 2 years ago | (#39307355)

Major change prompts resistance! News at 11!

New UIs always get resisted because no one actually *likes* changes to their personal process of doing things unless the benefits are immediately apparent. Give it a year and no one will even remember what Win7 looked like, and those that do will be telling epic tales about the slaying of the monsters that inhabited it's Start Menu.

Re:Didn't we just go over this? (1)

Shifty0x88 (1732980) | more than 2 years ago | (#39307553)

LOL, if Windows 8 Preview is anything to show for what they have in mind, then it will be Win 7 with a stupid Start screen which is not needed in a Desktop experience. I feel like the only devices they actually wanted Windows 8 to run on is tablets, and touch-screen netbooks.

Granted, they may not have released everything yet, but the article is right, they don't mesh well (yet?).

The desktop experience is Windows 7 sans the start Button, and then the home screen is the Start Button, sans the All Programs(well they have it it's just different and in my opinion not as easy to navigate with a mouse and keyboard).

I do like the new Task Manager though, it offers all the fields I wish XP and Windows 7 had.

Re:Didn't we just go over this? (-1)

Anonymous Coward | more than 2 years ago | (#39307575)

To morons on /.: How many people know that "it's" stand for stands for "it fucking IS", not "its". Got it?

Re:Didn't we just go over this? (1)

aaaaaaargh! (1150173) | more than 2 years ago | (#39307719)

It would help if the new UIs were based on actual studies in user interface ergonomy because I could swear this is no longer the case. Apple, Microsoft, Google, rather seem to "invent" GUIs and interface elements based on patent portfolios and wishful corporate thinking... heck, even Ubuntu is going into that direction.

The monster with two heads (1)

ackthpt (218170) | more than 2 years ago | (#39307357)

So Metro and Desktop will be different. Well, gee. How did I see that coming? Already fighting with designing interfaces which work well for a tablet or mobile touch screen, also working with Desktop, so the application interface doesn't have to be written twice and confuse users with moving between unfamiliar means of viewing and manipulating data within the same application. Not very easy. I wish them a lot of luck, but that luck begins with the divisions within Microsoft working together, not fighting each other. Drop the ball here and Microsoft may never get back into the game.

"Designers" are ruining UIs all over the place. (3, Insightful)

Anonymous Coward | more than 2 years ago | (#39307359)

Failed web "designers" are ruining GUI applications left and right. It doesn't matter if they're open-source apps or if they're closed-source commercial apps. These self-labeled "UI designers" and "usability experts" get involved with a popular project that had a usable UI, and they completely trash it.

This has happened to GNOME. This has happened to Firefox. This is now apparently even happening to Windows!

Somehow, these "designers" have managed to create UIs that are far worse than even non-artistic programmers came up with. Firefox is a perfect example of this. The earlier releases had very usable UIs. Then came Firefox 4, and the entire UI was shit upon. Each subsequent release has fucked up the UI more and more. Now we don't have menus by default, we don't have a status bar by default, and Firefox is damn near unusable without heavy tweaking to re-enable such basic UI elements!

The only appropriate thing to do is to shun these people. It doesn't matter which project it is, or what sort of application is being developed. Refuse their contributions. Refuse their ideas. Shoot down their suggestions in mailing list discussions. Don't allow them direct commit access to any source code. Ensure that bugs are logged regarding their horrible designs, especially when usability is impacted.

We need to go back to software developers creating UIs. Maybe they're not artists, and maybe the UIs they built weren't "pretty" (a.k.a full of curved corners and gradients), but at least they were intuitive and we could use them to get real work done efficiently. We can't do that any longer, now that "designers" are trashing every UI they come into contact with.

Re:"Designers" are ruining UIs all over the place. (4, Interesting)

IANAAC (692242) | more than 2 years ago | (#39307607)

Failed web "designers" are ruining GUI applications left and right. It doesn't matter if they're open-source apps or if they're closed-source commercial apps. These self-labeled "UI designers" and "usability experts" get involved with a popular project that had a usable UI, and they completely trash it.

This has happened to GNOME. This has happened to Firefox. This is now apparently even happening to Windows!

I used to think that about Gnome, until I installed it and started using it.

True, I installed a couple extensions to help me out, but after spending some time with Gnome Shell, it does a really good job of just staying out of the way.

I'm very much a keyboard kinda guy though. To me, too much mouse use gets in the way.

Re:"Designers" are ruining UIs all over the place. (1)

ackthpt (218170) | more than 2 years ago | (#39307617)

Wait until they bring it all out in 3D!

B-)

B-O

B-(

>B-(

Re:"Designers" are ruining UIs all over the place. (1)

cpu6502 (1960974) | more than 2 years ago | (#39307671)

I just installed Firefox 4 on my laptop. I don't see anything wrong with its UI versus the one used in my previous 3.5 version? Why do you hate it so much?

Re:"Designers" are ruining UIs all over the place. (0)

Anonymous Coward | more than 2 years ago | (#39307733)

Ditto, and Mozilla is already working on Firefox for Metro [brianbondy.com]

Re:"Designers" are ruining UIs all over the place. (3, Insightful)

tooyoung (853621) | more than 2 years ago | (#39307769)

I certainly won't argue against the examples that you've provided, as those truly are UI's that underwent destructive "UI improvements". With that being said, I do think that your rant against all designers and usability experts is misplaced. A lot of the time, developers are so intimately familiar with the product and code that it is difficult to discern when something isn't intuitive to a novice user.

Depending on the product, the developer may not even be too familiar with the actual user's job. Take for instance utility power management. There is a whole ecosystem of tools that are used by people who work at big utility companies. A developer on one of these applications is probably intimately familiar with the specific application, but the likelihood is that they've never worked for a power management company. Do they know what the user does during their normal day at work? Do they know what other applications the user uses? How does their application fit into the user's day?

In such cases, you actually have a situation where the developer may make bad decisions in UI design. The developer may not realize that the user doesn't sit in front of their application all day. Rather, the user may use the application for a sub-set of their work, and use information from one application in conjunction with other applications. The developer of the application may think "well, duh, why wouldn't the user know to look under menuX->optionY->wizardZ to do that?" The reality is, the user probably isn't interested in knowing the ins and outs of the application they are using. If the information they are looking for isn't apparently available, then it might as well not exist.

Is this the way things should be? Perhaps not. Perhaps the user should spend their time reading manuals and becoming intimately familiar with the product. However, this isn't the reality. This is where a good design team can come in. A product can deliver everything functionally, but still be considered a failure if the user isn't able to easily accomplish their goals.

I realize I've digressed from the topic at hand, which is the Metro UI (which I really don't like from what I've seen). However, I think it is worth challenging the assumption that developers are the best people responsible for developing UI's.

Agreed, 110%... apk (-1)

Anonymous Coward | more than 2 years ago | (#39307779)

See subject-line...

APK

P.S.=> Windows 8 has SO MUCH POTENTIAL & technically? It's probably the BEST Windows ever released (beneath this new surface).

For example:

I've read that it NOW does what 'tweakers' have been doing for decades "beneath the covers/surface" (e.g. -> In tuning out unnecessary services for example - Windows 8, now/FINALLY, makes this "automagic" & there's a LOT more like that to it also) - so, I guess what I am trying to say is, I hope MS hasn't "blundered" using these 'designers' (goof wannabes imo)...

... apk

Endusers (1)

nurb432 (527695) | more than 2 years ago | (#39307801)

End users should be designing the interfaces, as what is 'apparent' to a developer isn't to the rest of the world. They 'think' computers, but the average Joe on the street just wants a working appliance

Desktop OS? (0)

Anonymous Coward | more than 2 years ago | (#39307413)

Microsoft wants to make your desktop computer into a tablet. I support this, because anyone who wants a real desktop computer will need to switch operating systems.

It's finally going to be the Year of Linux on the Desktop, and we have Microsoft to thank!

Re:Desktop OS? (0)

Anonymous Coward | more than 2 years ago | (#39307789)

Too bad linux is wrecked too.

but (1)

zlives (2009072) | more than 2 years ago | (#39307427)

yes but that would make sense.

My start button! (2)

Zaldarr (2469168) | more than 2 years ago | (#39307451)

Someone will find a way to get it back to me. YOU'LL NEVER TAKE IT FROM ME!

Re:My start button! (0)

Anonymous Coward | more than 2 years ago | (#39307669)

Those two statements are mutually exclusive.

Citation needed (0, Interesting)

Anonymous Coward | more than 2 years ago | (#39307473)

>and absolutely great. It's tangible proof that Redmond really can design and build its own unique products and experiences.
Submitter is a blunt, biased idiot.

Ooh, need to watch that MSFT stock (0)

Anonymous Coward | more than 2 years ago | (#39307477)

It's tangible proof that Redmond really can design and build its own unique products and experiences.

  Decades-old multi-billion dollar corporation that can make its own unique products...if it tries REEEL HARD!

Microsoft is the CocaCola of the software world, only without the fizz.

Are you freakin kidding me? (0)

Anonymous Coward | more than 2 years ago | (#39307487)

"Redmond really can design and build its own unique products and experiences"

It's a blatant ripoff of the Ipad interface. Windows 95 was a blatant ripoff of the Mac. DOS was a braindead clone of the unix command line that Gates didn't even write, he bought it from another company and then resold to IBM.

I tried it. It fails. (3, Interesting)

ubergeek65536 (862868) | more than 2 years ago | (#39307505)

If there are no on screen visuals I'm lost. I rarely use keyboard shortcuts and I can see that increasing when there isn't a keyboard.

The problem I have with Metro is that it's so hard to organize things. I have over 1000 shortcuts currently on my Windows 7 machine, where are they supposed to fit in Metro. I'd need to scroll for a week to find what I'm looking for. "Oh, but you can just type the name of what you are looking for. " but I don't remember the name just what the icon looks like. Keep your Metro, give me a start menu and we can both be happy.

my main problem with it... (4, Interesting)

s0litaire (1205168) | more than 2 years ago | (#39307507)

... Apart from Metro only being useful if you have a laptop/tablet/smartphone (touch screen Desktop/TV never worked!)

Was that both GUI's weren't linked, they were in essence 2 separate desktops.
So if i opened IE (or any other program) on Metro and had to switch to the "other" desktop, If I opened IE there it was a totally new session. (I'd think it would be better, or nice, to ask the user if he wanted to pull the session from metro.)

i gave it a week of use, then wiped it.

Metro blows (0)

Anonymous Coward | more than 2 years ago | (#39307525)

So this guy says that Metro is bold and great. OK, so he says. I can say too. Metro is terrible. It is ugly, clunky, and has no place on a desktop machine. Wow, you can have one big app and one little app running at once with no "Windows". Imagine that - Windows (tm) without Windows. I know that sounds stupid, and it is. What is also is, is right for a pure touch interface. It works there (although it is still bold and ugly not bold and great). It seems fine for touch. But it has no place on a real computer that has a mouse and keyboard. No place at all. It is a toy UI designed for devices that are adjunct devices, content consumption devices, companion devices, etc. - whatever you want to call them. It is not a UI for a "real" computer. Now, can more people than ever make use of this type of device without a "primary" machine? Yes, they are getting better and some folks can indeed use them as their only machine. Can everyone? Hell no. This is one place where Apple made a good decision in separating out what runs on OS X and what runs on iOS.

different != improved (2)

WombleGoneBad (2591287) | more than 2 years ago | (#39307539)

I just watched a tv program on a guy who was in charge of an annual exhibition (a home design/decor thing). He said "We had to make the displays better every year, so people will keep coming. This just wasn't possible, so we just make it *different* every year, and hope that people would think its better." I think the same applies to microsoft windows. They just move stuff around and hope people will confuse 'different' with 'improvement'. Really it just means people waste time and effort hunting for the new hiding place of the stuff they need to use.

What's old is new again (0)

Anonymous Coward | more than 2 years ago | (#39307541)

Metro is just win3.1 all over again ...

Windows where? (0)

Anonymous Coward | more than 2 years ago | (#39307579)

If it's all running full-screen, then why call it Windows anymore? Why not call it Screen-Saver Explorer?

The one thing I was hoping that Windows could do for a tablet is make multi-tasking not suck!

Re:Windows where? (0)

WillAffleckUW (858324) | more than 2 years ago | (#39307793)

If it's all running full-screen, then why call it Windows anymore? Why not call it Screen-Saver Explorer?

Or Microsoft Bob ...

corporate users? (1)

demonbug (309515) | more than 2 years ago | (#39307643)

The more I see about Win 8, the more I'm convinced that Microsoft has no plans of marketing it to corporate users (outside of tablets). I guess they've decided that Win 7 is good enough for people to do actual work on, and don't plan on discontinuing it. At least, I hope that's the plan. They've had enough trouble getting people to move off of XP, this is going to be a thousand times worse. I'd be totally fine with that decision, assuming they patch Win 7 with some of the back-end improvements (which by most accounts are generally pretty minor). Even the strongest proponents I've read for Win 8 say that once you get used to it (and learn the new shortcuts) the new UI isn't any worse than the existing one on the desktop. Not exactly a strong recommendation to go out and upgrade.

Re:corporate users? (1)

geekoid (135745) | more than 2 years ago | (#39307889)

It's an advantage to corporate customers. On platform on ALL devices and computers.

As a desktop operating system Win 8 is a no go (0)

Anonymous Coward | more than 2 years ago | (#39307655)

Speaking to desktop use only:

When Windows XP came out functionality was improved. I didn't like the Fisher-Price interface, but all the functionality was there, and then some. It was very much like Windows 2000, finished.

Looking at Windows 8, it simply seems like Windows 7, crippled. I don't even know what to make of the Metro interface, as it isn't efficient, and it sure isn't attractive.

Apps (5, Insightful)

cosm (1072588) | more than 2 years ago | (#39307679)

I hate to say this--but this concept of 'Apps' that everybody is latching on to--it is a huge pile of steaming buzzword. Yes their are applications, but the concept that all of computing can be neatly tucked and packed into an easily marketable single purpose flashy shiny big round button GUI software as a service plug in API model full of synergism and one-click-wonder wow--perhaps, but not for the power users, not for enterprise. There may be a day, but it isn't this decade IMO. I understand how consumers want this and blah blah rah grandma simplicity blah new age computing blah ease of use apple blah, but I'm here to comment about Apps and how I hear that word used in the wrong places (IMO).

Where's my 'app' for DBA activity? Where's my simple one click 'app' that monitors hundreds of servers, routers, switches? Where's my 'app' that automates my build processes? Where's my app that gives my complex analysis of all my interconnected nodes? You wont find them--not soon and not on 'markets'. Because these are complex intertwined multi-APPLICATION, to use the full word, work-flows that require desktops or complex usage of scripting and consoles. Sorry but for power use, it's just the way it is, in this decade and probably a few to come. These things can be done well and simply, but not without serious power-tools and planning.

Let's me honest, computing has been around for decades now, and even though on the consumer level 'apps' reign supreme it seems, there will always always always be power users who will need more complex environments for the vast array of software suites, tools, languages, and utilities needed to maintain and administer complex networks for build processes or whatever. Perhaps there will be a day when it is all unified. But that would require vast cooperation across industries, standards bodies, companies, open-sources houses, etc. Until some defacto design standard from layer 1 to 7 and from user space to kernals to whatever is implemented across the industry, nothing will ever be 'simple apps' while separate unique tools and such exist--thus guaranteeing the lifetime of the terminal and the desktop. It seems we are now defining apps as "guis that are flashy, sleek, use large rounded buttons, and have limited functionality', well, there's many of those out there. End rant. (the word app just sets me off)

metro (1)

MickyTheIdiot (1032226) | more than 2 years ago | (#39307701)

I liked it when it was a Macintosh app called "At Ease."

Stick to what works (0)

paleo2002 (1079697) | more than 2 years ago | (#39307751)

Ewww . . . maybe MS should just stick to copying Apple's UI and features. Its served them well these past 15+ years.

Excuses! Excuses! Excuses! (4, Insightful)

WillAffleckUW (858324) | more than 2 years ago | (#39307781)

Face it, nobody likes it.

Any time you find yourself explaining Why People Should Like Your Stuff if they Only Used It Right, it means you have failed Marketing 101 and need to turn in your diploma, because you obviously weren't paying attention in class.

(my first degree was in Marketing, fwiw)

Create your first Metro style app using C++ (2)

hey (83763) | more than 2 years ago | (#39307821)

An article that everyone (including plenty Slashdotters) see when they open Microsoft Visual Studio today:

Create your first Metro style app using C++
[This documentation is preliminary and is subject to change.]

A WindowsMetro style app is tailored for the user experience that's introduced in Windows 8 Consumer Preview. Every great Metro style app follows certain design principles that make it look more beautiful, feel more responsive, and behave more intuitively than a traditional desktop app. Before you start creating a Metro style app, we recommend that you read about the design philosophy of the new model. You can find more info at Designing Metro style apps.

Here, we introduce essential code and concepts to help you use C++ to develop a Metro style app that has a UI that's defined in Extensible Application Markup Language (XAML).

If you'd rather use another programming language, see:

Create your first Metro style app using JavaScript

Create your first Metro style app using C# or Visual Basic

Objectives
Before we start coding, let's look at some of the features and design principles that you can use to build a Metro style app with C++. It will also be helpful to look at how Microsoft Visual Studio 11 Express Beta for Windows 8 supports the design and development work. And it's important to understand how and when to use the Visual C++ component extensions (C++/CX) to simplify the work of coding against the Windows Runtime. Our example app is a blog reader that downloads and displays data from an RSS 2.0 or Atom 1.0 feed.

This article is designed so that you can follow the steps to create the app yourself. By the time you complete this tutorial, you'll be prepared to build your own Metro style app by using XAML and C++.

Comparing C++ desktop apps to Metro style apps
If you're coming from a background in Windows desktop programming with C++, you'll probably find some aspects of Metro style app programming to be very familiar, and other aspects that require some learning.

What's the same?
You're still coding in C++, and you can access the STL, the CRT, and any other C++ libraries, except that you can't invoke certain functions directly, such as those related to file I/O.

If you're used to visual designers, you can still use them. If you're used to coding UI by hand, you can hand-code your XAML.

You're still creating apps that use Windows operating system types and your own custom types.

You're still using the Visual Studio debugger, profiler, and other development tools.

You're still creating apps that are compiled to native machine code by the Visual C++ compiler. Metro style apps in C++ don't execute in a managed runtime environment.

What's new?
The design principles for Metro style apps are very different from those for desktop apps. Window borders, labels, dialog boxes, and so on, are de-emphasized. Content is foremost. Great Metro style apps incorporate these principles from the very beginning of the planning stage. For more info, see Planning Your App.

You're using XAML to define the entire UI. The separation between UI and core program logic is much clearer in a Metro style app than in an MFC or Win32 app. Other people can work on the appearance of the UI in the XAML file while you're working on the behavior in the code file.

You're primarily programming against a new, easy-to-navigate, object-oriented API, the Windows Runtime, although Win32 is still available for some functionality.

When you use Windows Runtime objects, you're (typically) using C++/CX, which provides special syntax to create and access Windows Runtime objects in a way that enables C++ exception handling, delegates, events, and automatic reference counting of dynamically created objects. When you use C++/CX, the details of the underlying COM and Windows architecture are almost completely hidden from your app code. But if you prefer, you can program directly against the COM interfaces by using the Windows Runtime C++ Template Library.

Your app can support new concepts such as suspension, charms, and an app bar to create a more cohesive experience for your users.

Your app is compiled into a package that also contains metadata about the types that your app contains, the resources that it uses, and the capabilities that it requires (file access, internet access, camera access, and so forth).

In the Windows Store, your app is verified as safe by a certification process and made discoverable to millions of potential customers.

Simple blog reader, part 1
Our sample app is a basic blog reader that downloads and displays data from an RSS 2.0 or Atom 1.0 feed.

We'll approach this walkthrough in two parts. First, we'll create a basic, one-page version of the blog reader so that we can focus on some fundamentals of Metro style app programming in C++. In part 2, we'll create a more full-featured version of the app by using some of the pre-defined XAML templates in Visual Studio 11 Express Beta for Windows 8.

We'll start with the basics:

How to create a Metro style app project in Visual Studio 11 Express Beta for Windows 8.

How to understand the various project files that are created.

How to understand the Visual C++ component extensions, and when to use them.

Visual Studio provides source file management; integrated build, deployment and launching support; editing for XAML, Visual Basic, C#, C++, graphics, and manifests; debugging; and more. Visual Studio is available in several editions, but here we use Visual Studio 11 Express Beta for Windows 8. You can download it for free along with the Microsoft Windows Software Development Kit (SDK) so that you have what you need to build, package, and deploy your Metro style apps.

To start creating an app, first create a Metro style app project that uses C++. Here we use the most basic project template, Blank Application.

To create a Metro style app project

Install Visual Studio 11 Express Beta for Windows 8.

On the menu bar, choose File > New > Project. The New Project dialog box opens. It should look something like this:

In the Installed pane, expand Visual C++.

Select the Windows Metro style template type.

In the center pane, select Blank Application.

Enter a name for the project. We'll call it SimpleBlogReader.

Choose the OK button. Your project files are created.

Before we go on, let’s look at the project files. At the top of the Solution Explorer pane, choose the Show All Files icon to show all of the project files that the Blank Application template created. You should see something like this depending on what you named your project:

Files you edit
Let's look first at the project files that you can edit. Basically, this includes any file that's located directly in the project folder.

File name Description
App.xaml, BlankPage.xaml
  The XAMLmarkup files that represent the app object and the default page for the UI. You can modify these files by using the Visual Studio designer, Microsoft Expression Blend, or another XAML designer tool. Most of the modifications will be in BlankPage.xaml.

App.xaml.h, App.xaml.cpp

BlankPage.xaml.h, BlankPage.xaml.cpp
  The user-editable header and implementation code-behind file for the Application and BlankPage classes. These classes correspond to the XAML trees in app.xaml and BlankPage.xaml, respectively. The BlankPage.xaml.h and BlankPage.xaml.cpp files are where you add event handlers and other custom program logic that's related to this page. Member variables in the app class are in scope throughout your app. Variables in the page class are in scope only in that page. App.xaml has no visual design surface, but you can still use the document outline and property inspector in the designer.

Package.appxmanifest
  Contains metadata that describes your app, for example, display name, description, logos, and capabilities. When you click on this item, it opens in the manifest designer.

*.png
  The default logo and splash-screen images that you can replace with your own.

pch.h, pch.cpp
  Typical C++ precompiled header files. You can add #include directives to the pch.h file as necessary.

Files you don’t touch
These files are generated by the XAML designer or editor whenever you navigate from the *.xaml page in Visual Studio. They enable the code-behind that you write to refer to XAML elements. They also keep IntelliSense in the code-behind up to date. Some of these files are in the Common subfolder (not expanded in the illustration). You can look at these files to get some idea about how the partial classes work, where your variables are being declared, and so on. They can also be useful in debugging. But don't modify these files because any changes you make will be overwritten the next time that you build your app or navigate away from the XAML page.

File name Description
App.xaml.g.h, App.xaml.g.cpp
  App.xaml.g.cpp contains the app's main method and some associated boilerplate code. App.xaml.g.h contains code that enables the operating system to load the .xaml files into memory at run time and create the object graph. Don't modify these files.

StandardStyles.xaml
  Contains predefined item templates, styles, and other elements that define the look and feel of a Metro style app. Don't modify the styles and templates in-place. However, you can base custom styles on these (by using the BasedOn attribute), or copy and paste them into other pages, give the copy a different name, and then modify the copy.

LayoutAwarePage.cpp, LayoutAwarePage.h, RichTextColumns.cpp, RichTextColumns.h, and so on
  Infrastructure code to handle navigation and layout.

BlankPage.xaml.g.h, BlankPage.xaml.g.cpp
  Contain the automatically-generated partial class definition for the BlankPage and App classes, and the member variables that are generated for each XAML element that has an x:Name attribute. Don't modify these files.

XamlTypeInfo.g.h
  The C++ file that the XAML editor generates to enable the Windows Runtime to recognize and load any custom types that are defined in your app and are referenced in any XAML files. Don't modify this file.

A first look at the code
In Solution Explorer, open BlankPage.xaml and look at the markup in the XAML editor pane. Notice a element that contains a element. Now open BlankPage.xaml.g.h. Notice a class that's named BlankPage that derives from System.UI.Xaml.Page and contains a System.IO.Xaml.Controls.Grid member variable.

Each element type in the markup has an associated Windows Runtime type. As you add elements to the XAML, Visual Studio generates the C++ source code so that you can write code-behind that references those elements as Windows Runtime types. Not all the elements are represented in your C++ project code; only those elements that you refer to explicitly.

Let’s go back to BlankPage.xaml.g.h. Notice that BlankPage is declared as a partial ref class.

C++
Copy

partial ref class BlankPage : public Windows::UI::Xaml::Controls::Page {}

The partial and ref keywords are obviously not ISO standard C++. They are component extensions that you use specifically for creating instances of Windows Runtime types. The ref keyword indicates that the class is a Windows Runtime reference type; using ref saves you from having to write a lot of next-generation COM code. In the class member declarations, notice an Object^ variable and a Grid^ variable. The "^" symbol is known as a "hat" and it means "a handle to an object." Use it instead of "*" when you create Windows Runtime types in dynamic memory. You can also use the C++ auto keyword; the compiler will infer the type.

C++
Copy

Grid^ grid = ref new Grid(); // or: auto grid = ref new Grid();
grid->Width = 600;

In the most basic sense, a ref class is a COM object that implements the IInspectable interface and whose lifetime is managed by a smart pointer. The Windows Runtime defines a language-agnostic abstract binary interface (ABI) that runs natively in machine code, not through a virtual machine. C++/CX makes it possible to program against this ABI in an idiom that is much more like modern C++ than like old-school COM programming. Use C++/CX specifically when you create and access Windows Runtime types. Libs, modules, and functions in a ref class that don't interface with the Windows Runtime can be written entirely in ISO standard C++. It's common to mix standard C++ and C++/CX in the same function. It's all compiled to native C++.

The partial keyword tells the compiler that the declaration of this class is continued in another code file. That file is BlankPage.xaml.h. If you, the programmer, have to add variables or functions to the BlankPage class, do so in BlankPage.xaml.h and BlankPage.xaml.cpp. If the XAML editor has to add variables or other boilerplate code, it does so in the *.g.h and *.g.cpp files. Although the class definition has two parts, it behaves as one class, both while you are coding and at compile time. In general, you can safely ignore the *.g.* files. That's why Solution Explorer hides them by default. Now that we have looked behind the scenes, if Show all files is still enabled, then choose the icon to disable it so that you can more easily find the files you are going to modify.

Note If you can't use C++/CX, either because of personal preference or some constraint on your development environment, then you can use standard C++ and the Windows Runtime C++ Template Library to program directly against the COM interface. For more info, see Windows Runtime C++ Template Library.
Specifying app capabilities
A Metro style app runs in a security container that has limited access to the file system, network resources, and hardware. When a user installs an app from the Windows Store, Windows looks at the metadata in the Package.appxmanifest file to determine what capabilities the app requires. For example, an app might have to access data from the Internet, documents from the user's Document Library, or the user's webcam and microphone. When the app is installed, it displays to the user the capabilities it needs, and the user must grant permission before it can access those resources. If the app doesn't request and receive permission for a resource it needs, it won't be allowed access to that resource at run time.

To add basic Internet capability to the app

In Solution Explorer, open Package.appxmanifest. The file opens in the Application Manifest Designer.

Select the Capabilities tab.

Select the Internet (Client) check box (if it isn't already selected).

Close the manifest designer.

When you specify a capability, it's listed in the Package.appxmanifest.xml file under the Capabilities element. You'd typically use the Application Manifest Designer to set capabilities, but if you open Package.appxmanifest.xml in the XML Text Editor, you can see the Capabilities element in the XML.

XAML
Copy

Getting data into an app
In this section, we show:

How to create a custom data class.

How to retrieve an RSS or Atom data feed asynchronously.

Now that our app is correctly requesting Internet client access, we can write the code to get the blog feed into the app. The "Developing for Windows" blog exposes the full text of its posts in both RSS and Atom form. We want to display the title, author, date, and content from each of the latest blog posts. We can use the classes in the Windows.Web.Syndication namespace to download the feeds. We could also use those classes to display the data in the UI, but instead, we'll create our own data classes. This gives us additional flexibility and lets us treat RSS and Atom feeds in the same way. We create two classes:

FeedData holds info about the RSS or Atom feed.

FeedItem holds info about individual blog posts in the feed.

We define these classes as public ref classes to enable data-binding with the XAML elements that display the Title, Author, and so on. We use the Bindable attribute to indicate to the XAML compiler that we are binding dynamically to instances of these types. In a ref class, public data members are exposed as properties. Properties that have no special logic don't require a user-specified getter and setter; the compiler will supply them. In the FeedData class, notice how we use IVector to expose a public collection type to other Windows Runtime classes and components. We also use the Vector class internally as the concrete type that implements IVector. Later we'll learn how to consume that type.

To create custom data classes

In Solution Explorer, on the shortcut menu for the SimpleBlogReader project node, choose Add > New Item.

Select Header File (.h) from the list of options and name it FeedData.h. (For convenience, we won't use a separate .cpp file in this example.)

Copy and paste the following code into the file. Take a moment to look at the code and familiarize yourself with the C++/CX constructs. Note the #include directive for collection.h, which is required for the concrete Platform::Collections::Vector type.

C++
Copy

#pragma once
#include "pch.h"
#include

namespace SimpleBlogReader
{ // To be bindable, a class must be defined within a namespace // and a bindable attribute needs to be applied.
      [Windows::UI::Xaml::Data::Bindable]
      public ref class FeedItem sealed
      {
      public:
            FeedItem(void){}
            ~FeedItem(void){}

            property Platform::String^ Title;
            property Platform::String^ Author;
            property Platform::String^ Content; // Temporary workaround (use Object^ not DateTime): // property Windows::Foundation::DateTime PubDate;
            property Platform::Object^ PubDate;
      };

      [Windows::UI::Xaml::Data::Bindable]
      public ref class FeedData sealed
      {
      public:
            FeedData(void)
            {
                  m_items = ref new Platform::Collections::Vector();
            }
            ~FeedData(void){}

            property Platform::String^ Title;
            property Windows::Foundation::Collections::IVector^ Items
            {
                  Windows::Foundation::Collections::IVector^ get() {return m_items; }
            }
      private:
              Platform::Collections::Vector^ m_items;
      };
}

Asynchronous operations in C++: retrieving the feed data
With data classes in place, we can implement the GetFeedData function to download the blog feed. The Windows.Web.Syndication.SyndicationClient class retrieves and parses RSS and Atom feeds. Because this operation involves network I/O, the method executes asynchronously. The asynchronous programming model is found throughout the Windows Runtime class libraries. An asynchronous method call returns control immediately to the UI thread so that the UI remains responsive while the operation is being performed on a background thread.

The Windows Runtime provides a way to invoke asynchronous operations and get their results when they complete; you can program directly against that API. However, the preferred approach is to use the task class class that is defined in ppltasks.h. The task class uses these same asynchronous Windows Runtime APIs, but you can use it to write more concise code, and it's easier to chain asynchronous operations and handle in one spot any exceptions that arise. When you use the task class, the basic steps are always the same:

Create an asynchronous operation by calling a Windows Runtime*Async method, such as Windows::Web::Syndication::ISyndicationClient::RetrieveFeedAsync.

Create a task object by using the operation as input parameter.

Call task::then and specify a lambda that takes the return value of the operation as input.

Optionally, call then again one or more times. These clauses can accept the return value from the previous clause.

Optionally, provide a final then clause that handles any exceptions that were thrown anywhere in the chain of operations.

To add the asynchronous download functionality

Add these lines to BlankPage.xaml.h: C++
Copy

#include "FeedData.h" ... // In the BlankPage class...
private:
  void GetFeedData(Platform::String^ feedUriString);
  FeedData^ feedData;

Add these lines to BlankPage.xaml.cpp: C++
Copy // BlankPage.xaml.cpp
#include ...
using namespace Windows::Web::Syndication;
using namespace Concurrency;

Add this line to the BlankPage constructor after the call to InitializeComponent: C++
Copy

feedData = ref new FeedData();

Add the method implementation to BlankPage.xaml.cpp. For more information about this code, see Asynchronous programming in C++. C++
Copy

  void BlankPage::GetFeedData(Platform::String^ feedUriString)
{ // Create the SyndicationClient and the target uri
      SyndicationClient^ client = ref new SyndicationClient();
      Uri^ feedUri = ref new Uri(feedUriString); // Create the async operation. feedOp is an // IAsyncOperationWithProgress^
      auto feedOp = client->RetrieveFeedAsync(feedUri);
      feedOp = client->RetrieveFeedAsync(feedUri); // Create the task object and pass it the async operation. // SyndicationFeed^ is the type of the return value // that the feedOp operation will eventually produce.
      task createFeedTask(feedOp); // Create a "continuation" that will run when the first task completes. // The continuation takes the return value of the first operation, // and then defines its own asynchronous operation by using a lambda.
      createFeedTask.then([this] (SyndicationFeed^ feed) -> SyndicationFeed^
            { // Get the title of the feed (not the individual posts).
                  feedData->Title = feed ->Title->ToString(); // Retrieve the individual posts from the feed.
                  auto feedItems = feed->Items; // Iterate over the posts. You could also use // std::for_each( begin(feedItems), end(feedItems), // [this, feed] (SyndicationItem^ item)
                  for(int i = 0; i Size; i++)
                  {
                        auto item = feedItems->GetAt(i);
                        FeedItem^ feedItem = ref new FeedItem();
                        feedItem->Title = item->Title->Text; // Temporary workaround: // feedItem->PubDate = item->PublishedDate;
                        feedItem->PubDate = ref new Platform::Box(item->PublishedDate);

                        feedItem->Author = item->Authors->GetAt(0)->Name;

                        if (feed->SourceFormat == SyndicationFormat::Atom10)
                        {
                              feedItem->Content = item->Content->Text;
                        }
                        else if (feed->SourceFormat == SyndicationFormat::Rss20)
                        {
                              feedItem->Content = item->Summary->Text;
                        }
                        feedData->Items->Append((Object^)feedItem);
                  }

                  this->DataContext = feedData;
                  return feed;
      }).then ([] (task t)
      { // Handle any exceptions that were raised // in the chain of operations.
            try
            {
                  auto f = t.get();
            }
            catch (std::exception e)
            { //Handle exception
            }
      });
}

Notice that we called this->DataContext = feedData after we finished populating the feedData object. We have to make our feedData instance the DataContext of the page so that we can bind our UI to it. With FeedData as the data context, we can write {Binding Path="Title"} in the XAML markup and when the XAML page is loaded at start time and the object graph is constructed, the loader will know that "Title" is the Title property on our FeedData instance.

In part 2 of this walkthrough, we'll show a more sophisticated chain of asynchronous operations that will create multiple FeedData objects.

When our app starts, we want it to load the "Developing for Windows" blog automatically. The best place to do this is in response to the Loaded event that signals that page loading is complete. In the method call, we pass in the URL for the Atom feed because that feed includes author data and the RSS feed doesn't.

To handle the Loaded event

In BlankPage.xaml, add to the opening Page tag the statement Loaded="PageLoadedHandler", directly after mc:Ignorable="d" but before the closing angle bracket, so that the entire tag looks like this:

XAML
Copy

Add the C++ method signature to BlankPage.xaml.h:

C++
Copy //In the BlankPage class declaration...
private:
void PageLoadedHandler(Platform::Object^ sender,
                    Windows::UI::Xaml::RoutedEventArgs^ e);

Add the stub implementation for the event handler method in your and BlankPage.xaml.cpp files:

C++
Copy

void BlankPage::PageLoadedHandler(Platform::Object^ sender,
                    Windows::UI::Xaml::RoutedEventArgs^ e)
{
      GetFeedData("http://windowsteamblog.com/windows/b/developers/atom.aspx");
}

Defining the UI in XAML
Now let's look at how to:

Define a layout directly in XAML, without using a designer tool.

Define rows and columns in a Grid.

Create member variables for XAML elements.

The easiest and most powerful way to create a XAMLUI is to start with one of the templates that are provided by Visual Studio, and then use a tool such as Expression Blend or the Visual Studio XAML designer to customize it. However, because we are focusing on the structure of XAML itself, we’ll work directly in the XAML code editor.

A typical Metro style app has multiple pages, and each has a distinct layout. For example, a blog reader might have a page for browsing through multiple blog posts and selecting one, and another page for reading the selected post. Each page is a separate XAML tree in its own code file. The typical root element for a page, logically enough, is . Its corresponding Windows Runtime type is Windows::UI::Xaml::Controls::Page. The Page element/class supports basic navigation between pages in an app. A Page has one layout control (or panel) as a direct child. Inside that layout control you can put content controls such as TextBlock and ListView to hold the individual items of graphics, text, and so on.

The XAML layout system supports both absolute layout and dynamic layout. In an absolute layout, you use explicit x-y coordinates to position controls; in a dynamic layout, you enable the layout container and the controls to be automatically sized and positioned as the app resizes. Use the Canvas layout control for absolute positioning, and use Grid, StackPanel, and other controls for dynamic positioning. In practice, you'd typically define the layout of your app by combining absolute and dynamic methods, and by embedding panels in other panels.

A typical layout for a blog reader app has the title at the top, a list of posts on the left, and the content of the selected post on the right. The following illustration shows what our layout will look like:

When we created our project, a file named BlankPage.xaml was created for us. This file has a Page element that has one Grid element as a child. The XAML should look something like this:

XAML
Copy

The x:Class attribute associates this Page element with the BlankPage class that is declared in BlankPage.xaml.g.h, and BlankPage.xaml.h. Remember that we added the feedData member variable. In the XAML tree, the xmlns attributes are XML namespaces; the only interesting one here is the xmlns:local namespace, which brings our FeedData and FeedItem classes into scope on the XAML page so that we can bind data to them later.

To begin our layout, let's add a "Name" attribute to the top level grid for convenience: Name="Grid1". Next, let’s define two rows for Grid1. The top row holds the feed title. In the second row, let's embed another Grid, call it Grid2, and divide it into two columns. The left column contains a ListView control that displays the title, author, and date of all the available posts. The user can scroll through that list and then select one. The right column contains a third Grid, Grid3, which contains a TextBlock in its top row and a WebView control in the bottom row. The text block will show the title of the blog post, and the WebView will show the content.

Here is a simplified view that shows the basic structure of the layout in the earlier picture. (Don't paste this code because it's not complete.)

XAML
Copy ... ...

Now let's create the actual XAML by pasting in the parts one at a time. This exercise helps us understand how XAML user interfaces are constructed.

To create the basic layout for our blog reader

In BlankPage.xmal, add a Name attribute for the default Grid element so that the entire element looks like this: XAML
Copy

In BlankPage.xaml, define two rows for the Grid1 element by making the following XAML snippet the first child node of the Grid, directly after the opening tag. The Height="140" property setting on the first row definition (row 0) sets the top row to an absolute height of 140 pixels. This height doesn't change regardless of the size of the row contents or the app. The Height="*" setting on the second row definition (row 1) tells the bottom row to take up whatever space is left after row 0 has sized itself. This is known as star sizing.

Note Whether you type the code or paste it in, Visual Studio automatically provides the correct indentation.

XAML
Copy

Directly after the row definitions, but still inside Grid1, add the following TextBlock content control to the first row. This holds the main title of the feed, so we give it a large font. We give it an x:Name attribute so that we can refer to it in our C++ code, and also a temporary string to display until we data-bind to it later.

XAML
Copy

Directly after the TextBlock, add a second Grid element, and give it a Name attribute Grid2. Add a child Grid.ColumnDefinitions element that defines two columns. The Grid.Row attribute here refers to the Grid1 row, so Grid.Row="1" means "put this element in the second row of Grid1." In other words, we are embedding a Grid within a Grid. The column width settings of Width="2*" and Width="3*" tell Grid2 to divide itself into five equal parts. Two parts are used for the first column, and three parts are used for the second column.

XAML
Copy

Directly after the column definitions of Grid2, but before its closing tag, add the following ListView control. Because no Grid.Column attribute is specified, the control is placed into column 0 of Grid2. We'll leave its contents empty for now. Later we'll hook up some content and an event handler for it

XAML
Copy

Directly after the closing ListView tag, still inside the Grid2 element, add a third Grid that has two rows. Give it a Name attribute Grid3 and put it in the right column of Grid2. The setting Height="Auto" tells the top row to make itself as tall as its content. The bottom row uses whatever space is left.

XAML
Copy

Immediately after the previous RowDefinitions, but inside the Grid3 closing tag, add a TextBlock and give it some temporary text. Later we will make this TextBlock display the title of the blog post that's shown in the WebView. No x:Name attribute is required for this control because we don’t have to refer to it in the XAML or in the code-behind. But don’t worry; even though no variable is created for this control in our BlankPage class, it will be instantiated and fully functional at run time.

XAML
Copy

Immediately after the previous TextBlock, add a WebView and put it in the bottom row of the Grid. This control displays the content of the post, including graphics. We use a WebView and not a TextBlock or RichTextBlock because the feed content is formatted as HTML.

XAML
Copy

The XAML tree should now look like this: XAML
Copy

At this point you should be able to see the user interface reflected in the designer surface. You can also press F5 now to see what it looks like so far. You won't see any data yet, just the basic outlines of the user interface. Press F12 and then Shift-F5 to return to the code editor.
Formatting the FeedItem data
Now that the basic layout is defined, let’s add the formatting for the ListView items, which as you may recall are FeedItem objects that we defined in FeedData.h, initialized in the GetFeedData method, and inserted into the FeedData::Items collection. We want the control to show the title, author, and publication date of each blog post in the feed. The idea is that a user can scroll through these items, and select one that looks interesting. When an item is selected, the TextBlock to the right displays the title of the post in a larger font, and the WebView displays the content. We want to format the display of the ListView items so that it looks like this:

To combine the three FeedItem property values into one unit for display purposes, we can use a data template. A data template defines the "look" of one or more pieces of data and is implemented as—what else?—a XAML node. You can use data templates to create powerful and original representations of information that combine text, graphics, animations, and other XAML features. Ours, however, is quite basic. As with the titles that we added earlier, we can put each property value in a TextBlock. We can use each TextBlock to specify a font size and other formatting properties, and also a temporary Text value that we will replace later. To line up the TextBlock elements, we use a StackPanel. StackPanel is a lightweight layout panel that's used extensively in XAML for small layout scenarios such as this.

To create the layout for the feed items

Inside the ListView node, add an ItemTemplate that has a DataTemplate node as the immediate child. In controls like ListView, a DataTemplate always nests inside an ItemTemplate. This tells the control to apply the template to each item in its Items collection.

XAML
Copy

Inside the DataTemplate, add a StackPanel that contains three TextBlock elements, one for each of the three FeedItem properties that we want to display. Because no orientation is specified for the StackPanel, the TextBlock elements will line up vertically. For now, we just specify some temporary strings for the Text property, just to remind ourselves what they represent. They won’t be displayed if you press F5 because this is not an actual item, it's just a template for how items should be displayed.

XAML
Copy

The XAML for the ListView should now look like this: XAML
Copy

So far, we have written a method that downloads actual data from a feed, and we have designed a UI that displays some temporary values. The next step is to add the XAML attributes that connect the actual feed data to the UI. This is known as data-binding.

Displaying data
Now we'll see how to bind data to a UI and use a value converter to convert a DateTime value to a String.

Adding content to controls programmatically
You can insert content into a control programmatically in your code-behind. For example, to populate the feed title TextBox, we could write this code in an event handler—TitleText->Text = feedData->Title; and it would cause the text to be immediately updated in the control. In case you are wondering how this works, remember that we specified the x:Name attribute on the XAML element like this: . Adding that XAML element caused a variable to be declared in BlankPage.xaml.g.h:

C++
Copy // BlankPage.xaml.g.h -- Do Not Paste
partial ref class BlankPage : public Windows::UI::Xaml::Controls::Page,
                                                            public Windows::UI::Xaml::Markup::IComponentConnector
{ ...
          Windows::UI::Xaml::Controls::TextBlock^ TitleText;
) ...and initialized in BlankPage.xaml.g.cpp:

C++
Copy // Get the TextBlock named 'TitleText'
TitleText = safe_cast
        (static_cast(this)->FindName("TitleText"));

With that code in place, we can refer to the initialized variable in our part of the BlankPage partial class in BlankPage.xaml.h and BlankPage.xaml.cpp.

Adding content to controls by using data-binding
Sometimes setting a Text property dynamically in code works well. But to display data, you typically use data binding to connect a data source to the UI. When you establish a binding and the data source changes, the UI elements that are bound to the data source can reflect the changes automatically. With data-binding, all or almost all of the code is written in the XAML file rather than in the code-behind. Data-binding enables a cleaner separation between the View (or ViewModel) and the other modules (such as a Model or Controller) and is usually the recommended way to populate XAML controls with content.

Binding expressions
To bind a content control to a data source, we assign a {Binding } expression to the content property on the control. For a TextBlock, the content property is Text. We use binding expressions that have a Path value to indicate what the control is binding to. Here’s the binding expression that we use for the TitleTextTextBlock: Text="{Binding Path=Title}". The meaning of the Path value (Title in this case) depends on the data context.

We set the default data context for the entire XAML tree dynamically in our code-behind in the BlankPage constructor: this->DataContext = feedData;. Because of that statement, the TextBlock knows that "Title" means the Title property on the feedData instance. In that line of code, "this" is the BlankPage instance that was constructed at run time from the XAML tree. Setting the data context to the feedData object makes it the default data context for the entire object tree for this page. We can override the context for individual elements if necessary.

To bind the feed title to the TitleTextTextBlock

Modify the Text attribute to bind to the feed title.

XAML
Copy

To bind the ListView items to the Items property of dataFeed

To connect the list view to our data source, add this binding expression to ItemListView: ItemsSource="{Binding Path=Items}" so that the opening tag now looks like this:

XAML
Copy

Now that we have bound the ListView control to the FeedData Items collection, we can bind to the individual items, which are FeedItem objects, although we had to cast them to Platform::Object^ types to store them in the collection.

To bind the DataTemplate items to the FeedItem properties

In the first TextBlock, use "{Binding Path=Title}" to replace the temporary text so that the element now looks like this:

XAML
Copy

In the second TextBlock, use "{Binding Path=Author}" to replace the temporary text so that the element now looks like this:

XAML
Copy

We will skip the third text box for now because we have to provide a custom converter to display the DateTime value.

Remember that when we added new FeedItem^ objects to the FeedData::Items collection, we had to cast them to Platform::Object^? How does the data-binding know that these objects are FeedItem objects that have properties named "Title," "Author," and "PubDate"? The answer is that it doesn’t know and it doesn’t care. It just uses the metadata to look for a property that has the specified name on the object in its collection. If you specify a property name that doesn’t exist, or make a typo, then the result will likely be a blank TextBox at run time. Weak-typing at run time requires careful typing at coding time!

The one remaining TextBlock to data-bind is the one above the WebView control. We want this TextBlock to display the title of the currently selected item in the ListView. If we just use the same binding as on the TitleText control, we'll display the same string, because both the data context and the property name are identical. To make things right, we can override the default DataContext property on the page by setting a new data context in the Grid element that is the immediate parent of the TextBlock. Notice that here we are binding to a property name on a XAML element, and therefore, we use the ElementName attribute to specify which element we are binding to.

To data-bind the title of a post to the currently selected item

Set the DataContext attribute in Grid3 so that the opening tag now looks like this:

XAML
Copy

Use this binding expression "{Binding Path=Title}" to replace the temporary text in the TextBlock above the WebView so that the element now looks like this:

XAML
Copy

Because we set a new data context on the enclosing grid element, at run time, the data binding mechanism looks for the Title property on the currently selected FeedItem, not on the DataFeed object.

Formatting data with a value converter
In the ItemListViewDataTemplate, we bind the PubDate property, which is a DateTime, to a TextBlock.Text property. By default, the binding engine converts PubDate from a DateTime to a string for us. But the automatic conversion just produces the name of the type Windows::Foundation::DateTime, which is not very informative. To produce an actual date, we have two choices: we can change the type of FeedItem::PubDate to Platform::String^ and do a conversion when we initialize the variable, or we can create a custom value converter and data-bind to that to convert the value at run time. Let's choose the latter approach.

To create a value converter, we create a class that implements the IValueConverter interface and then implement the Convert and (optionally) the ConvertBack methods. Converters can change data from one type to another, translate data based on cultural info, or modify other aspects of the presentation. Here, we create a very basic date converter that converts the date value passed in and formats it so that it shows the day, the month, and the year. (In part 2 of this walkthrough, we'll create a more versatile date converter.)

To create a value converter class that implements IValueConverter

On the menu bar, choose Project > Add New Item and select Header File. Name the file DateConverter.h and add this class definition to the file:

C++
Copy

namespace SimpleBlogReader
{
public ref class DateConverter sealed : public Windows::UI::Xaml::Data::IValueConverter
{
public:
        virtual Platform::Object^ Convert(Platform::Object^ value,
                Windows::UI::Xaml::Interop::TypeName targetType,
                Platform::Object^ parameter,
                Platform::String^ culture)
                {
                        Windows::Foundation::DateTime dt = (Windows::Foundation::DateTime) value;
                        Windows::Globalization::DateTimeFormatting::DateTimeFormatter^ dtf =
                                Windows::Globalization::DateTimeFormatting::DateTimeFormatter::LongDate::get();
                        return dtf->Format(dt);
                }

        virtual Platform::Object^ ConvertBack(Platform::Object^ value,
                Windows::UI::Xaml::Interop::TypeName targetType,
                Platform::Object^ parameter,
                Platform::String^ culture)
                { //Not used. Left as exercise for the reader!
                        throw ref new Platform::NotImplementedException();
                }
        };
}

Add this #include directive to BlankPage.xaml.h: C++
Copy

#include "DateConverter.h"

We have to include the file even though it isn't referenced in our own code-behind because the Visual Studio build process requires it to generate the data binding code.

In BlankPage.xaml, declare an instance of the class as a resource. Paste the following Page.Resources node between the opening Page tag and the Grid1 element.

XAML
Copy

The Page tag already has an XML namespace mapping that gives us access to classes in our project that are declared in the SimpleBlogReader namespace: xmlns:local="using:SimpleBlogReader". Without this mapping, our DateConverter class would not be shown here.

Now we can bind the PubDateTextBlock to our DateConverter: XAML
Copy

With this XAML, the binding engine uses our custom DateConverter to change the DateTime to a string. The string that it returns is formatted the way we want, with only the day, month, and year.

Displaying HTML in a WebView
To show a blog post in our app, we have to get the post content to show in the WebView control. The WebView control gives us a way to host HTML data in our app.

We add a WebView to the right column of the nested Grid, and give it an x:Name of ContentView because we need a variable to refer to in our BlankPage class.

When we look at the Source property of the WebView, we notice that it requires a URI before the web page can be displayed. Our HTML data is just a string of HTML. It doesn't have a URI that we can bind to the Source property. Luckily, there is a NavigateToString method to which we can pass our FeedItem::Content property. To make this work, we handle the SelectionChanged event of the ListView.

To connect the WebView to the FeedItem::Content property of the selected item

Specify a SelectedChanged event handler for the ListView in the XAML file. Set the SelectionChanged attribute and give it the name to call the event handler method, so that the opening tag now looks like this:

XAML
Copy

As with the previous event handler we created, we now have to create the event handler in the code-behind. First, add this line of code in BlankPage.xaml.h:

C++
Copy // Declaration in BlankPage.xaml.h
void ItemListView_SelectionChanged(Platform::Object^ sender,
                                                                      Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e);

In BlankPage.xaml.cpp, add the method implementation:

C++
Copy // Implementation in BlankPage.xaml.cpp
void BlankPage::ItemListView_SelectionChanged (Platform::Object^ sender,
                                                                                              Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
{
      FeedItem^ feedItem = safe_cast(ItemListView->SelectedItem);
      if (feedItem != nullptr)
      { // Navigate the WebView to the blog post content HTML string.
            ContentView->NavigateToString(feedItem->Content);
      }
}

Now we have a basic one-page app. If you press F5, something like the following illustration should be displayed. To break out of your app and go back to the Visual Studio IDE, press F12.

Tip For a better debugging experience, download the debugging symbols from the public Microsoft symbol servers. On the main menu, choose Tools and then select Options. In the Options window, expand Debugging and check the box next to Microsoft Symbol Servers. It might take some time to download them the first time. For faster performance the next time you press F5, specify a local directory in which to cache the symbols.

Here's the complete XAML tree for BlankPage.xaml:

XAML
Copy

This is the end of part 1. You have now created a basic app that works well for most situations, and learned the basics of XAML and its related code-behind in the process.

Simple blog reader, part 2
Now that we understand the basics of XAML and C++/CX, let's look more closely at some of the features that go into a Metro style app. First of all, a Metro style app has to work well in all situations. It must adapt to different resolutions, orientations, and views on different devices.

You can see that our basic page doesn't work quite as well when it's viewed like this. We want our app to look good and also to better reflect the personality of the Windows Team Blogs. To meet these goals, we need more sophisticated pages and a way to navigate between them. Fortunately, Visual Studio gives us several page templates that implement a lot of the required functionality for us. To upgrade our app, we're going to abandon the blank page that we've worked so hard to create, but we'll reuse a lot of the code. More importantly, the knowledge we gained in making that page the hard way will help us better understand how to create Metro style apps the easy way, by using the page templates that are provided in Visual Studio.

Adding pages and navigation
If we're going to support multiple blogs, we have to add some pages to the app, and handle the navigation between these pages. First, we want a page that lists all of the Windows Team Blogs; for this we can use an Items Page template. When a reader picks a blog from this page, we load the list of posts for that blog into another page. The BlankPage.xaml page that we've already created still works for this, but we want to make it a little nicer, so we'll use the SplitPage template that's provided by Visual Studio. We'll also add a detail page so that the user can choose to read individual blog posts without the list view taking up space. Each of these templates has extensive navigation support built in. All we have to do is add a few lines of code to the Navigate and OnNavigatedTo methods that are stubbed out in each code-behind class, and add a navigation button to enable forward navigation from the split page to the details page. When all this is done, we can exclude the original BlankPage.xaml and its related code-behind files from the project.

Page templates
Visual Studio 11 Express Beta for Windows 8 includes a collection of page templates that are useful for a variety of situations. Here are the available page templates.

Page Type Description
Group Detail Page
  Displays details for one group and a preview of each item in the group.

Grouped Items Page
  Displays grouped collections.

Item Detail Page
  Displays one item in detail, and enables navigation to adjacent items.

Items Page
  Displays a collection of items.

Split Page
  Displays a list of items and details for the selected item.

Basic Page
  An empty page that has layout awareness, a title, and a back button.

Blank Page
  A blank page for a Metro style app.

To add new pages to the app

On the menu bar, choose Project > Add New Item. The Add New Item dialog box opens.

In the Installed pane, expand Visual C++.

Select the Windows Metro style template type.

In the center pane, select ItemsPage and accept the default name.

Choose the Add button. The XAML and code-behind files for your page are added to the project.

Repeat steps 4 and 5, but select Split Page.

Repeat steps 4 and 5, but select Basic Page. Give this page the name "DetailPage".

Here's the Add New Item dialog box.

The Items Page will show the list of Windows Team Blogs. The Split page will show the posts for each blog on the left side and the content of the selected post on the right side, like the BlankPage we created previously. The Basic Page will show nothing but the content of a selected post, a back button, and the page title. On this page, instead of loading the post content into the WebView from a string of HTML as we do in the SplitView page, we navigate to the URL of the post and show the actual web page. After this work, the pages of the app will look something like this:

When we add the page templates to our project and look at the XAML and code-behind, it's apparent that these page templates do a lot of work for us. In fact, it's easy to get lost at first, but it helps to understand that each page template has three main sections:

Resources
  Styles and data templates for the page are defined in the Resources section. We talk more about this in the Creating a consistent look with styles section.

Visual State Manager
  Animations and transitions that adapt the app to different layouts and orientations are defined in the Visual State Manager (VSM). We talk more about this in the Adapting to different layouts section.

App Content
  The controls and content that make up the app UI are defined in the root layout panel.

When an app navigates from one page to another, it passes a pointer to the data that the new page will use to populate its UI. Therefore, before we add the navigation code, we have to add the code for the new data model. We'll use a Platform::Collections::Vector instance to store the FeedData objects, and we'll also add a performance optimization to the asynchronous code that creates our data model. We'll add this code to app.xaml.h and app.xaml.cpp because we have to pass the Vector to the ItemsPage instance when the app launches.

To modify the data classes

Add these two properties to the FeedData class in FeedData.h (note that the declaration of PubDate as a Platform::Object^ is a temporary workaround that will not be necessary in future releases.):

C++
Copy

property Platform::String^ Description; // Temporary workaround: // property Windows::Foundation::DateTime PubDate;
Platform::Object^ PubDate;

Some feeds have a description field that we have room to display, and we can use the date of the last blog post as the PubDate in certain layouts. (Notice that PubDate has no ^ ("hat") because DateTime is a value type.)

Add this property to the FeedItem class:

C++
Copy

property Windows::Foundation::Uri^ Link;

We'll use this link in the detail page to navigate directly to the blog post rather than to the content string.

To modify the asynchronous code that initializes the data model

Add this #include directive to app.xaml.h:

C++
Copy

#include "FeedData.h"

Add these private method signatures to the App class in app.xaml.h:

C++
Copy

void InitDataSource(Platform::Collections::Vector^ fds);
FeedData^ GetFeedData(Windows::Web::Syndication::SyndicationFeed^ feed);

Add these #include directives to app.xaml.cpp:

C++
Copy

#include
#include "ItemsPage.xaml.h"

Add these namespace declarations to app.xaml.cpp:

C++
Copy

using namespace Platform::Collections;
using namespace Windows::Web::Syndication;
using namespace Concurrency;
using namespace std;

Add the following method implementations to app.xaml.cpp:

C++
Copy

void App::InitDataSource(Vector^ fds)
{

        std::vector urls;
        urls.push_back(L"http://windowsteamblog.com/windows/b/developers/atom.aspx");
        urls.push_back(L"http://windowsteamblog.com/windows/b/windowsexperience/atom.aspx");
        urls.push_back(L"http://windowsteamblog.com/windows/b/extremewindows/atom.aspx");

        urls.push_back(L"http://windowsteamblog.com/windows/b/business/atom.aspx");
        urls.push_back(L"http://windowsteamblog.com/windows/b/bloggingwindows/atom.aspx");
        urls.push_back(L"http://windowsteamblog.com/windows/b/windowssecurity/atom.aspx");
        urls.push_back(L"http://windowsteamblog.com/windows/b/springboard/atom.aspx");
        urls.push_back(L"http://windowsteamblog.com/windows/b/windowshomeserver/atom.aspx"); // There is no Atom feed for this blog, so we use the RSS feed.
        urls.push_back(L"http://windowsteamblog.com/windows_live/b/windowslive/rss.aspx");
        urls.push_back(L"http://windowsteamblog.com/windows_live/b/developer/atom.aspx");
        urls.push_back(L"http://windowsteamblog.com/ie/b/ie/atom.aspx");
        urls.push_back(L"http://windowsteamblog.com/windows_phone/b/wpdev/atom.aspx");
        urls.push_back(L"http://windowsteamblog.com/windows_phone/b/wmdev/atom.aspx");

        SyndicationClient^ client = ref new SyndicationClient();

        std::for_each(std::begin(urls), std::end(urls), [=,this] (std::wstring url)
        { // Create the async operation. // feedOp is an IAsyncOperationWithProgress^
                auto feedUri = ref new Uri(ref new String(url.c_str()));
                auto feedOp = client->RetrieveFeedAsync(feedUri); // Create the task object and pass it the async operation. // SyndicationFeed^ is the type of the return value // that the feedOp operation will eventually produce
                auto pOp = task(feedOp) // Initialize a FeedData object with the feed info. Each // operation is independent and does not have to happen on the // UI thread. Therefore, we specify use_arbitrary. .then([this] (SyndicationFeed^ feed) -> FeedData^
                        {
                                return GetFeedData(feed);
                        }, concurrency::task_continuation_context::use_arbitrary()) // Append the initialized FeedData object to the list // that is the data source for the items collection. // This has to happen on the UI thread. By default, a .then // continuation runs in the same apartment thread that it was called on. // Because the actions will be synchronized for us, we can append // safely to the Vector without taking an explicit lock. .then([fds] (FeedData^ fd)
                        {
                                fds->Append(fd);
                                OutputDebugString(fd->Title->Data());
                        }) ...

Control Panel (0)

Anonymous Coward | more than 2 years ago | (#39307877)

To me the most unusable part of windows was the control panel, because it's just a "big f*cking wall of icons". Even sorted rows first then columns, cannot find anything that way. And metro looks like the same.

Load More Comments
Slashdot Login

Need an Account?

Forgot your password?
or Connect with...

Don't worry, we never post anything without your permission.

Submission Text Formatting Tips

We support a small subset of HTML, namely these tags:

  • b
  • i
  • p
  • br
  • a
  • ol
  • ul
  • li
  • dl
  • dt
  • dd
  • em
  • strong
  • tt
  • blockquote
  • div
  • quote
  • ecode

"ecode" can be used for code snippets, for example:

<ecode>    while(1) { do_something(); } </ecode>