We mimicked the display rather than the actual data

by Michael S. Kaplan, published on 2006/05/13 21:41 -04:00, original URI: http://blogs.msdn.com/b/michkap/archive/2006/05/13/597205.aspx


I swear that I almost ruined a keyboard yesterday by taking a sip of Limonata just before I read Raymond Chen's post When people mimic the display rather than the actual data.

Mainly because we own one of these in NLS!

Just check it out under HKLM\SYSTEM\CurrentControlSet\Control\Nls\Locale and you will see it -- we have our own (Default) value right under the one that Regedit adds for the actual default value.

This is arguably more confusing than what we do for HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language, which has a Default value at the bottom of the list to go along with the actal default value at the top.

Funny how we forget about this stuff until somebody reminds us of how silly we were being....

Though it makes me wonder how to describe the issue from a linguistic standpoint. It is not an attempt to obfuscate or confuse, but the usability features of Regedit are most likely what led to it. Kind of a meta-obfuscation of some sort, especially when one has to describe the two of them.

What would you call each of them?

Would your answer change if you...

  1. worked for the company that did it?
  2. worked for the group within the company that did it?
  3. were the developer who implemented it?
  4. were the program manager who wrote the spec for it?

 

This post brought to you by "(" (U+0028, a.k.a. LEFT PARENTHESIS)


# Jaroslaw Kowalski - MSFT on 14 May 2006 3:49 AM:

Why don't you just mark the default "(Default)" and value-not-set "(value not set)" with italic or bold attributes for display in regedit.exe?

That reminds me the classic "Airplane" movie:

   Roger Murdock: We have clearance Clarence.
   Captain Oveur: Roger, Roger. What's our vector Victor?
   Tower voice: Tower's radio clearance, over.
   Captain Oveur: That's Clarence Oveur. Over.
   Tower voice: Roger.
   Roger Murdock: Huh?
   Tower voice: Roger, over.
   Roger Murdock: Huh?
   Captain Oveur: Huh?

Jarek

# Michael S. Kaplan on 14 May 2006 12:22 PM:

Well of course that might help solve the problem in the future... but the ones that are broken now (like these NLS ones that have had the problem for over decade!), there is not so much to do.

Plus, I am not sure that italic or bold would actually help here --people are just as likely to quote the string "as is", in many cases!

# Gabe on 14 May 2006 3:48 PM:

The problem with using bold or italic to indicate default values is that this was not an easy feature to implement in Win95 when regedit was first released. Why rewrite a ListView just to make it harder to confuse "Default" with the default? It might be a nice, simple feature to add now, though (using CustomDraw).

Besides, you will always have somebody looking for the "any" key, or putting in "blank" for a password when told to leave it blank.

# Tsuyoshi Ito on 14 May 2006 5:11 PM:

Using the name "(Default)" is unfortunate, because it is confusing when one browses the registry by RegEdit.  But I do not think that using the NULL name is better than the name "(Default)".  If it is a default value for something, then it should have been named "Default" without the parenthesis.  However, I understand that it is too late to change it.

I do not know why the registry allows the value name to be NULL in the first place.  The meaning of setting the name to NULL is not clear and programmers should use meaningful names.  However, I understand it's too late, too.  The best we can do is to avoid using the NULL name in newly written programs.

By the way, I always wonder why RegEdit shows the value name set to NULL as "(Default)" while it is rarely used to mean a default value.  To me, "(NULL)" or a blank looks more appropriate.

# Gabe on 16 May 2006 8:37 PM:

Tsuyoshi Ito, the registry is a hierarchy of "keys". Each key has a name, and may have multiple "values". Each value has both a name and data associated with it.

Prior to Win32, keys did not have named "values". Each key only had a single piece of data associated with it. This is reflected in regedit by a value named "(Default)" (at least in English) because it is the default value for a key.

Since the registry was originally just for holding OLE registration data, only keys in HKEY_CLASSES_ROOT  or those inherited from INI files tend to have default values. I don't know of anything else that uses them.

If you ever used regedt32 (the registry editor that originally shipped with NT), you'd see that it doesn't show default values unless they contain data. When it does display them, they're called "<No Name>".

The reason that regedit has to act like it does is because it uses the file naming metaphor for values. This means that you cannot create a value with a null name, so the only way to add a default value is if it's already there. I suppose they could have used some name that's impossible to duplicate like "\blank" that's beside the point. Anybody who creates a value called "(Default)" will see that there's now two of them, so the one they just created isn't the default anyway.

I just can't imagine what people were thinking when they did that. I can see maybe somebody doing that in NLS because it's maybe copied from somewhere over 10 years ago and can't be fixed because things look for it.  But the Internet Connection Wizard? PC-Doctor?

# Tsuyoshi Ito on 23 May 2006 6:46 PM:

Gabe, thank you for the explanation! I did not know anything about the registry in pre-Win32 age. The issue of backward compatibility vs clean design is always intersting (as long as I am not directly involved with that issue).

I have used regedt32 on Windows NT4/2000, but not many times. Yes, I vaguely remember that regedt32 displayed "<No Name>" after I read your comment!

By the way, personally I do not experience any problem with a registry entry with name "(Default)", since the true "(Default)" is localized in RegEdit in Japanese edition of Windows. An advantage of using non-English version of Windows.... :)

go to newer or older post, or back to index or month or day