Date: | November 25, 2004 / year-entry #403 |
Tags: | other |
Orig Link: | https://blogs.msdn.microsoft.com/oldnewthing/20041125-00/?p=37203 |
Comments: | 66 |
Summary: | It seems everybody and his brother has an obvious solution to the desktop background problem. Of course, none of these people actually tested their solution to see if it actually was usable. Because geniuses don't need to test their grand pronouncements. That's why they're called geniuses. Let's see how well these geniuses fared. I sat... |
It seems everybody and his brother has an obvious solution to the desktop background problem. Of course, none of these people actually tested their solution to see if it actually was usable. Because geniuses don't need to test their grand pronouncements. That's why they're called geniuses. Let's see how well these geniuses fared. I sat down and implemented their brilliant suggestions since I am myself not a genius. From left to right, the effects are as follows:
To my untrained eye, the only readable ones are the first one and the "two-pixel wide outline" (which nobody suggested but which I just made up). The enormously popular Xor is completely useless. Of course, all but the first three are expensive operations, requiring multiple drawing passes, so they are unsuitable for the "high performance" drawing scenario that I described in the original article. Therefore, the only drawing method that looks good and is also fast is the first one. And it so happens that's what Windows uses when it needs to be fast. |
Comments (66)
Comments are closed. |
[sarcasm]Because to many people have backgrounds that look like steroscopic pics[/sarcasm]
Ah yes Raymomd, but Windows’ solution can’t foil people browsing for porn now can it: http://blogs.msdn.com/oldnewthing/archive/2004/03/16/90449.aspx
I think you need glasses – I can read all of the last three just fine. :)
If you had that as your desktop background then you’re some sort of weirdo, and not being able to read text should in some small part be considered your own stupid fault, but I guess it proves the point well enough; I wonder how many of the original geniuses will now see sense?
At any rate, all of the last three require multiple passes and therefore don’t qualify as fast.
I doubt anybody would set their background to a bitmap this crazy, but
1. Even a "normal" picture may have crazy parts here and there, and
2. you have to be prepared for the crazy case.
How about a drop list in the desktop properties: "Display icon label with: Drop Shadow, Solid Background, Transparent Background, Translucent Background"
Or at least make it a registry setting so TweakUI can provide the option (it’s not like we’re too worried about adding things to the registry anymore).
Personally I don’t care either way as I use a solid colored background (red for admin, blue for normal user)
How about sensing my mood and adjusting the background according to that? :p
I think your analysis is wrong Raymond. MS has made life better for the tiny tiny minority that like pig ugly backgrounds at the expense of the majority of users for whom the desktop looks poor.
Repeat the experiment using a picture like most normal people use and you will find the results are different.
"Repeat the experiment using a picture like most normal people use"
I doubt Raymond is willing to post porn on his website
I’m with Brian. Just let the user decide. On install use the first one but either use a wizard or a field in display properties to let the user decide. I hate when programs make assumptions for the user.
Anyhow who needs text on their desktop. That’s what pretty icons are for. ;PPP
This wouldn’t be necessary if the desktop would not become disabled if all icons are removed from it…
And while we’re at desktop icon captions, why MS can’t implement HTML (ok, just subset) for simple bold/italic/color/marquee effects? :D
It would be nice if Windows made life prettier for the common case and could fail to the simple but reliable case in pathological situations.
I vote to remove wallpaper as an option.
Dispute solved, productivity raised.
Ok. Test #2 for the peanut gallery. How do you quickly determine if the background is normal or "pathological"?
Personally, I think this is the most minor of problems and would like to see MS fix more important ones. Even letting the user decide is too much effort to fix something that’s not really broken. Lets instead get the next version of .net out this decade and avoid introducing too many more security falts.
Oh and Happy Thanksgiving.
I guess I’m one of those geniuses who hasn’t tried this very much, so downscore what I say.
But it seems to me that a reasonable first guess about whether a desktop background is "pathological" or not would be to see just how high frequency it is. You wouldn’t need to detect this often; just when the background changes, no? It’d be a global per-desktop setting in this fantasy of mine, not an ideal "check if the area under each icon is ‘pathological’" decision.
On second thought, the "detection" process would need to determine if a certain number of icon-sized blocks of the desktop background were pathological or not, possibly a ratio determined by the number of icons already on the desktop. Cause clearly it’d be lame to rule the entire desktop pathological if one small corner of it was pure noise.
On the other hand, if you decide that the desktop was "mostly plain" and someone puts an icon in the pathological corner, what then?
Basing it on the number of icons means that you get "I saved a file to my desktop and suddenly my icon texts lost their shadows!" And then people would be complaining how Microsoft screwed up again.
Why not simply make it configurable by the user Raymond? Default to black on white or whatever, but give the user an option to change to transparent text if desired.
There already is a setting. System, Advanced, Performance, Visual Effects, "Use drop shadows…" I’m talking about what the shell does if you decide you value performance over aesthetics.
Yeah, I’m not sure what people are complaining about – you /do/ get a choice: solid background, or drop-shadows. So maybe you don’t get exactly what you’re after, well boo-frickety-hoo! Two options exist, and there are more important things to worry about. If you want something else, write your own shell replacement.
People like to complain that Microsoft write "bloated" applications, then they complain when they’re not offered enough choice on how they want their desktop icons to appear. Sorry, but you can’t have it both ways!!
What about an option to only display the icon text on mouse hover / selection? Something akin to the IE toolbar options.
Anyways, I’m not fussed personally. To me, wallpapers are a waste of CPU cycles. With the possible exclusion of Jennifer Love-Hewitt spreads . . .
i can’t help thinking that there was a provocative motive behind this blog entry, raymond.
and it worked ;) i can barely here myself think with all the gauntlet throwing.
Kent:
Don’t know if your assertion that experienced users don’t dump files on the desktop(I dump my files somewhere else :)), but it really doesn’t matter.
Because most Windows users are not advanced Microsoft should develop for the ‘common user’. Also Microsoft should not develop for the novices, because they will soon learn a bit so they’re no longer novices. And from what I’ve seen then ‘common users’ will happily have documents etc. on the desktop. If you think about the metaphor you understand, because that’s what people do with their documents anyways(like put them on the desktop). Wonder what results usability testing has done here, but because WXP tries to keep it clean it indicates that a lot of users use it to store programs+documents.
Actually I almost never see my desktop, because I prefer to let the applications I’m running use the space instead. I used a huge wallpaper last year, from ESA’s Mars Express mission, which was like 6MB big. I could easily see when Windows needed to spend some cycles to display it then :)
Jor, what does *that* have to do with anything?
This assumes that it’s even possible to detect *quickly* whether you’re in the common case or the pathological case. Remember, this is about how to draw the text when *speed* is the primary goal.
I think this proves two things. My apologies if this is off-topic.
1. There is no such thing as GUI perfection. There will always be some people who want one more effect, one more option, one more feature.
You have to draw the line somewhere: you cannot satisfy all of the users. If you try you will never finish your product, instead you will be forever adding stupid options which potentially introduce instability and annoy other users.
2. Anyone who thinks they are a genius probably is not.
I prefer to just disable the desktop completely.
Open the following registry key:
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer
…and set NoDesktop to 1.
No ugly rectangles around the icon text. No icon text. No icons!
(…but remember to pop into the Desktop directory once in a while to clean up all of the unwanted shortcuts that applications add. I’ll save the rant about application arrogance for another day.)
"Do your installations of Windows XP really default to the behavior you’re describing?"
No they do not. This entire discussion is in the context of what happens if you disable text shadows (which are on by default in XP).
I should probably mention the *point* of my post . . .
Firstly, not drawing the text is faster than drawing the text using *any* algorithm.
Secondly, most people don’t really need the text, unless they have multiple files of the same type on their desktop. That is, they use their desktop as a dumping ground for files. I think most experienced users would use their desktop as a starting point for applications rather than a folder for data files.
Thirdly, if the text *was* important the user could simple hover over the icon *or* select it (which accomodates those without a mouse). For this you could just use a tooltip or the usual selection colour combination.
Fourthly, Jennifer Love-Hewitt is breath-takingly hot . . .
Andreas: Yes, but for the people who *do not* abuse their desktop (like me), there could be an option to disable the text. The default would be to display the text, hence satisfying the common user.
Whether the option is exposed or just hidden away in the registry for tools like TweakUI to administer doesn’t matter.
Anyways, the point is that it could be done. I’m not saying it should be. Customisation has to stop somewhere and there are more important things Windows devs could be working on that this.
A sensible solution would just be to flash an eror message at the user every time they viewed the desktop :-p
Sorta like this:
http://dominicself.co.uk/images/error.gif
Re: Kent’s desktop abuse
Huh? The desktop is the perfect place for files you’re working on, because it’s right there, no Explorers needed. Much like a real desk.
Also, by having my most-used apps in the Start menu, I don’t need to Show Desktop everytime I want to run something…
If anything, you’re using the desktop incorrectly ;)
Kent wrote:
> Secondly, most people don’t really need the
> text, unless they have multiple files of the
> same type on their desktop. That is, they
> use their desktop as a dumping ground for
> files. I think most experienced users would
> use their desktop as a starting point for
> applications rather than a folder for data
> files.
Not sure about that myself. It seems to be more of a personality style than whether you’re an advanced or novice user.
My boss is a novice user – he has a clean desktop.
I’m as advanced as they come. I have at least 50 files on mine.
I’m a piler and scatterer – he’s a clean-desk-at-the-end-of-the-day person.
How about not using a font size where all the strokes are one pixel wide?
http://weatherley.net/text.png
The desktop is my Work In Progress folder. My Docs is for archiving.
The desktop is my Work In Progress folder. My Docs is for archiving.
"Also, by having my most-used apps in the Start menu, I don’t need to Show Desktop everytime I want to run something."
Which would suggest that you run all your apps maximised and only have a single monitor set at a low resolution, so I’d make the counter-claim that you’re using your entire PC incorrectly…
I can run a large number (5-10, depending on what they are) of apps comfortably with no windows overlapping and still have large expanses of desktop visible — I keep the bottom left part of my primary monitor empty of apps, and have my most common shortcuts down there. Also most shortcuts on my dekstop have a keyboard shortcut assigned to them, so if I want to start Photoshop I just press Ctrl+Alt+P. The Start menu is for n00bs and l4m3r5!!11!!1 :)
On a serious note, one problem with storing files on the desktop is that in some environments your user folders are stored on a server and saved/restored every time you log off and on, so if you have anything other than shortcuts on your desktop the process can be slow.
(Your own point about needing to Show Desktop to get at app shortcuts equally applies to getting to files on the desktop anyway, so it’s a bit of a duff argument.)
Let’s do the same test on normal desktops!
a long time ago the default Mac desktop pattern was a simple 1px checkerboard, black and white. (it’s now a shinetastic blue thing)
There’s a wallpaper image that comes with win2k that’s got lots of trees and a castle on it, and it gets rather noisy in some areas. Try that one.
I can’t imagine the former being much more friendly to nonstandard text display options than the noise thing that Raymond used.
Vorn
Mat,
For people who have huge or numerous enough monitors, you’re right that it is silly to run applications maximised. However, most people still have 17" monitors or smaller and run at a "normal" resolution for that size (probably set by the computer manufacturer) and so running applications maximised is often the only option.
My Windows machine here only has a 15" monitor, but that’s really just because it’s getting all of the hand-me-downs.
Hey, now, I take offense. I suggested outlines, and:
1. I did not specify the outline thickness. :)
2. I actually did test it (and I came to the same conclusion: a 2px outline is much more readable than a 1px outline).
3. Your original article wasn’t focused on performance, so that wasn’t one of my criteria. Clearly the solid background method wins hands down if that’s the primary goal. (The speed of the outline method can be improved significantly by pre-rendering the character set and caching it, although it has an obvious space cost).
In my original article, I wrote "If shadows are not enabled, then…" It was implied (and apparently not picked-up-on by most people) that if shadows are not enabled, then the system is running in "high performance, low visual appeal" mode. Notice that the shadow option is on the Performance control panel.
Peter,
I decided to test this, and Windows XP actually doesn’t let you set the text color to be the same as the background color. Rather, it uses black or white for the text based on what background color you choose.
Not to mention things like most people are more comfortable with a larger font size than whatever you use. (Including me, which is why I settled for the low-res version of this LCD.) And I’ve always preferred to have one or at most two things on the screen at once anyway, rather than a jumble distracting me. *shrug* That’s the great thing about windows and most other modern OSes, it lets you do things your way without too much hassle.
"Which would suggest that you run all your apps maximised and only have a single monitor set at a low resolution, so I’d make the counter-claim that you’re using your entire PC incorrectly… "
I’ve got two machines at home, on a 20" LCD monitor, and I run maximized windows on each of them (at 1200×1600 resolution). Similarly, at work, I’ve got 2 20" CRTs on my machine (at 1280×1024 resolution), and again, I maximize my windows (and I set the taskbar to autohide).
Screen real estate is too precious for me to let my windows be tiled.
"Screen real estate is too precious for me to let my windows be tiled."
All getting a bit OT now, I’m afraid…
Surely maximising them is a larger waste of real-estate? Admittedly I run at 1920×1440 on 2 21" monitors, but I can fit 2 VBA editors (pity me — I write Word and Excel code all day), a couple of instances of Notepad and an Explorer window on one screen; Outlook, IE, Photoshop, DeskTop Sidebar and FrontPage on the other. None of those apps (with the exception of Photoshop) really gain anything from being larger than about 1280 pixels wide, and the benefits of being able to see everything going on simultaneously are enormous. If I ran everything maximised then each one of them would probably "waste" three-quarters of the screen.
I use an app called WindowSnap so that windows, er, snap to the edges of others, which makes arranging them neatly much easier; my VBA windows are about 3/4 of the width of the desktop and half the height, and the other windows are arranged in the remaining 1/4 of the space. I don’t have to Alt-Tab through my apps and work out which particular instance of "foo" I’m looking for, and it saves me having to force "Always on top" for some windows so I can refer to them while working on something else.
Obviously it’s personal preference, but it strikes me that on a 21" monitor at a high resolution apps just LOOK bad when maximsed… (And don’t get me started on my colleague who has a 21" monitor, but runs at 1024×768 — no matter how many times I explain that she might as well have a 15" monitor (she has no eyesight problems) and give the 21" to someone who could do with the extra space she insists that I’m wrong… :)
I use a 17" at 1280×1024, and maximize my windows.
Of course, I use a Mac, so I get the beauty that is Exposé.
Vorn
I always maximize Visual Studio stuff, almost always maximize Windows Explorer, frequently maximize Vim, have been known to maximize Notepad on occasion, usually maximize Word or Excel or Acrobat Reader, and even maximize Internet Explorer if it’s open to a Google search or the blogs of Mr. Chen or two of his colleagues. I’ve even sometimes maximized a Cmd prompt window, retaining its width of 80 half-width character cells[*] but maximizing its height. About the only things I don’t usually maximize are most IE windows, e-mail, Task Manager, and Virtual PCs. But even when a Virtual PC’s screen size is set to match an intended target system, I maximize the virtual system’s Windows Explorer and other stuff.
[* Plain 80 character cells if the code page is ASCII or other encoding based on Italian characters.]
Good luck get every thirdparty wallpaper-changer to do this.
And this is still way too much work for the "Don’t look pretty" case. If the user said "Don’t look pretty", why are you wasting time trying to make it look pretty?
"Good luck get every thirdparty wallpaper-changer to do this."
I don’t know how they work – I don’t normally do that kind of stuff – but I assume it is part of Windows’s API. When then, why now write it into the implementation of that API? Third-party apps have to tell windows which wallpaper to use and the image’s data, by definition.
"And this is still way too much work for the "Don’t look pretty" case."
When you stack the deck, there is no way to win. What is your definition of "too much work"? I doubt it would take much performance hit to index a relatively small array and make one decision. I would think that the bottleneck is in the font-drawing algorithm.
"If the user said "Don’t look pretty", why are you wasting time trying to make it look pretty?"
There should be a range of "pretty" options instead of a binary choice. If the user wants a block, then give it to him. If he does, but there isn’t time to give it to him, then a different algorithm could be used. The default for "not really pretty" could involve that algorithm that I described. Then "ugly" could use just the block method, and "really ugly" use the "don’t render fonts" method.
Besides, the requirements in the parent article were for a quick algorithm that looked as good as possible. I’m suggesting that the inflection point between these conflicting goals occurs with a different algorithm that combines different approaches.
Cheers.
"Too much work" = having to add this feature to listview, test it under the 2^120 possible "yes/no" bitmap configurations, across multiple resolutions and multiple monitors, then explain to people asking "How come my icon sometimes has a solid background, and sometimes it doesn’t? My friend has a dual-monitor machine and it happens for him differently." Seems an awful lot of work for what is already a fringe case.
(Nevermind that XOR is almost never a good choice for drawing on colored backgrounds. The "array" would likely say "use solid background" in every slot.)
"Third-party apps have to tell windows which wallpaper to use and the image’s data" and they too often do it by whacking the registry keys directly rather than calling any API.
I get the impression you people like it when a car has five hundred knobs on the dashboard…
I’m sorry: I didn’t mean to make you so excited. The issue isn’t that important, and I wasn’t critising you or Microsoft – it was only a suggestion.
""Too much work" = having to add this feature to listview, test it under the 2^120 possible "yes/no" bitmap configurations…"
That seems like a gross exaggeration. If that was the typical case for adding features, then no feature or software extension could ever be written for Windows! Can’t have an xml parser: after all we haven’t tested all 234803 code points required by unicode for all possible file lengths up to 2 GB, right? This isn’t the 70s.
" Seems an awful lot of work for what is already a fringe case.
(Nevermind that XOR is almost never a good choice for drawing on colored backgrounds. The "array" would likely say "use solid background" in every slot.)"
I’m not debating whether it was ever a good idea – just a possible way to fufill the requirements set forth in the parent journal entry based on comments above.
""Third-party apps have to tell windows which wallpaper to use and the image’s data" and they too often do it by whacking the registry keys directly rather than calling any API."
This seems like an excuse, as users generally don’t blame Microsoft if their third-party app stops working – they blame the third party. Some geeks often blame MS – but they are usually wrong.
Legally, I don’t think you can’t be sued for making a third-party app break if it uses undocumented APIs (and you don’t use them as a competetive advantage in the same software catagory). However, I’m not a lawyer, so I may be wrong (please correct me).
"I get the impression you people like it when a car has five hundred knobs on the dashboard…"
Hey, I was just trying to fufill your requirements based on your initial assumptions.
"This assumes that it’s even possible to detect *quickly* whether you’re in the common case or the pathological case. Remember, this is about how to draw the text when *speed* is the primary goal."
The game developers motto: do the most expensive things before you get in trouble. (I’m not generally a game developer.) Why not, when the background image is choosen, add some metadata about it: Specifically:
1) divide the image (as layed out on the screen) into regions (say 120) and calculate its complexity.
2) Determine which algorithm to use based on its complexity. Assign each algorithm an integer.
3) Create an array (and store in memory) mapping each region index to an algorithm constant. It will be small and fast compared with the background image or font used.
4) Save this array and load at startup. Use a switch block (for performance) to determin which algorithm to use.
Now, wouldn’t that solve everyone’s problems? Use XOR when appropiate, use blocks in fringe cases. The slow calculations are done before quickness is needed. Accuracy and precision is not needed – just a general idea where to do each algorithm – so the array doesn’t have to be big at all!
Hope that helps.
— Jimmy C.
"you’re using your entire PC incorrectly"
uh, guys… the ‘P’ stands for ‘Personal’ which means that each individual can use it the way that works for them. there is no ‘incorrect’ method.
…I’m trying to figure out what you think the initial assumptions were, Jimmy.
I’ve got:
1. capable of being done in one pass, without any additional information about the wallpaper.
2. consistent across the entire desktop.
3. readable.
Vorn
Vorn, I got these assumptions:
1. The method Windows uses is often complained about as being ugly.
2. Priority:
* Readability
* Speed
* Beauty
3. These effects are not expensive operations:
* "Solid background + text. (This is what Windows uses.)"
* "Black text, no effects. (As a baseline.)"
* "Xor."
So those are the effects I was targeting.
4. Xor was "enormously popular."
Later on, Raymond Chen added some more assumptions:
5. "I doubt anybody would set their background to a bitmap this crazy…" That is, most backgrounds aren’t crazy.
6. Even a "normal" picture may have crazy parts here and there, and
7. you have to be prepared for the crazy case.
The article proved that:
8. The only effect which works well in the crazy cases AND is fast is the "Solid background + text" method.
Windows uses this method, it is often complained about as being ugly. This led to the conclusion:
9. The "Solid background + text" method is not the most pretty choice among the other two fast options.
Furthermore, Xor was an enormously popular suggestion as a replacement. I though that meant that:
10. Xor is most beautiful among the options, and it is also fast enough as well as readable in many cases but not in the crazy ones.
Therefore I concluded:
11. Use Xor in the "normal" areas of an image, and "Solid background + text" in the crazy areas.
I assumed that:
12. The algorithm to determine which method to use was expensive.
This led to my first post in the thread.
A true genius would never male a "grand pronouncement" without testing it. I tested this by giving IQ test to several grand pronouncers and finding none of them to be actual geniuses.
there are other ways to make it somewhat more attractive – for instance, you can choose the color to make the box based on the background in the area that the box will be. In many cases this will make the box nearly invisible. Getting the color is reasonably simple – you can, for instance, get the color of a single pixel, say in the middle of the box. Or you can average the color over the whole box… but this may be a bit much.
Vorn
Or the box could be made a bit smaller. You don’t need more than three pixels on each side.
Vorn
Note that this algorithm doesn’t meet the "high performance" criterion. You have to read from video memory (not fast – video memory is fast to write to but slow to read from), do some math, then render the final result. Switching between reading and writing stalls the pipeline.
Dang.
You could still make the box smaller, though. :)
Vorn
Gah. all this just to say – give us the option to have transparent text backgrounds, and let us worry over what colour to make the text!
Incidentally, why doesn’t windows do the same for folders? I have a folder that I’ve put the Prairie Wind bitmap into, and all’s well if the text is white (its always transparent background in a folder remember). However, if I make the folder compressed, and show text as alternate colour… I get blue text on blue background. Not readable. My fault. No complaints – I uncheck the ‘show text as blue’ option.
If folders work this way, why cant the backdrop be the same?
Okay. Pick a color that would make sense on that noisy background up there.
Vorn