October 10th, 2003

pinkie pie

Interesting blog on Windows design decisions

Raymond Chen's blog, The Old New Thing, spends an awful lot of time examining the quirks of the Windows API and some of the design decisions that went into some of the odd and obvious things Windows does. I'm not a Windows person at all -- I have it installed for Counter-Strike and that's about it -- and I've found myself reading back further and further, finding out why the taskbar is at the bottom of the screen, and the origin of the Windows startup sound, and an eleven-part series on scrollbar math (!). Recommended reading for design geeks, whether Windows people or otherwise.

It's syndicated here as raymondc_feed.

  • Current Music
    SomaFM Secret Agent -- www.somafm.com

Stupid software tricks

   :) boreale$ cvs update -q
   cvs [update aborted]: -q or -Q must be specified before "update"

Translated: "I know what you're trying to do, but it's not the way I want it, so I'm going to make you retype the command." Not only that, it doesn't even give you something to cut and paste. Not only that, but it apparently can't tell if I typed -q or "-Q"! Stupid, stupid, stupid.

Not only that, but having gone through the entire cvs(1) manual page, I discover that there is no cvs subcommand (update is the subcommand there) that takes a -q, so the command is completely unambiguous with the -q following update, and it doesn't accept it anyhow. That goes beyond stupid to hostile.

It's worse: I want quiet mode when I update, but not when I commit. CVS has a .cvsrc file that you can set defaults in; the syntax consists of one line per subcommand, where the first word is the subcommand and everything following are the default arguments. Default global arguments use cvs as the subcommand. This makes it impossible to do this:

    update -q
Instead you can only do
    cvs -q
so that it affects all the subcommands. Otherwise you have to type it in every time you want it (and in the right place!). Of course, the fact that you can put cvs -q in that file at all is not documented in the section of the manual ("CVS STARTUP FILE") that explains the .cvsrc syntax. It's also not documented in the FILES section, which helpfully explains again how to use that file, identically to the previous explanation, right down to omitting how to set global options.

Also: If you have the cvs(1) manual page handy, look and see how many places you have to look to read everything there is to know about what one subcommand -- say, update -- does. In mine, I counted four, each separated by pages of text, none of which tell you to read more below: in "ESSENTIAL COMMANDS", in "CVS COMMAND SUMMARY", in "COMMON COMMAND OPTIONS" (which is sorted by option, not by subcommand, so you have to do a text search through the whole section to find out what applies to update), and in "CVS COMMANDS". Some of you might think that "ESSENTIAL COMMANDS", "CVS COMMAND SUMMARY", and "CVS COMMANDS" do not seem to be particularly different. Some of you might be right.

Also, the section on cvs add tells you how to combine update properly with that subcommand, as does the section on commit, and part of the "FILES" and "ENVIRONMENT VARIABLES" sections talk about how to modify the behavior of update. In short, the only way you can find out exactly how update behaves is to at least skim the entire 23-page manual.

Stupid, hostile, and poorly documented. It must be open-source!

Additionally there is a special circle in hell for those of you who use this as an opportunity to advocate your favorite source code control system in comments.

  • Current Mood
    annoyed annoyed