As both a DBA and programmer, I enforce referential integrity at the database level. I cannot fathom why you'd implement it at a code level--if you don't trust your DBMS, why are you using it? The database is the only common chokehold in a multi-user, multi-application environment. To implement it at an application level, you'd have to try to somehow synchronize communication between all those apps, some of which you might not maintain, and this would only be complicated by each app instance having its own transaction open. The database is already handling those transactions, which makes enforcing referential integrity easiest to do at the database level.
As with every other program I've used with plugins/extensions, this feature is both the good and the bad of the entire program. It's good that it's extensible--really it is. The developers shouldn't have to include every single feature that less than 10% of their users will ever use. When you do, you get Microsoft-style bloatware (excepting Explorer, but I'm getting to that). The bad is that everyone and their mom and their mom's dog can write extensions, and really the only thing you as a user have got to go by is how popular it is. I periodically check in on FF extensions, and I download the most popular ones that sound useful to me--and on every one of my three computers with which I routinely browse the web, FF is unstable. I get consistent CPU and memory hogginging in the 50-100% range. I get crashing. I get hanging. I get staying-resident-after-I-kill-it-with-Task-Manager . I even had it kill popup menus system wide. Now that's impressive. No file menus, no context menus, no dropdowns from toolbars, with any program until I killed FF. Worst of all, I have no good way of telling which of my many extensions is causing me grief without systematically going through them, uninstalling one, and then using the browser for a few days to a week to see if that fixed it (nevermind bugs caused by multiple, conflicting extensions). I have had similar luck with the Google Desktop Sidebar, Explorer, and every other program I've ever used that supports extensions. For that reason I'd like to see more stability, whether that come from incorporating more extensions into the core application, or otherwise.
I recognize that more functionality in the core slows core development, and I personally don't mind downloading and configuring extensions--I actually prefer tweaking the application myself--though a number of people have already expressed comments otherwise.
"Actually, it is not that the metaphor is broken per sé, it is that metaphores in become realities in computers."
To some extent this is desirable. The user needn't be concerned with the number of files stored as a result of what they see as a single document, the composition of those files (the actual file formats), and most times, not even the type. It is sufficient for them to know (1) the program they created it in, (2) where they saved it, and (3) what they named it. If they don't know 2 and/or 3, they can always hunt for it and try to recognize it, and failing that, try to search for it--but nothing beats some basic understanding of the difference between programs and files.
This distinction is not intuitive for a lot of users, who often lack a basic understanding of how computers work, and wouldn't expect (or possibly understood, if explained to them) operating systems, programs, documents, temporary files, web cache, cookies... all to be stored in the same enormous tree.
Unempowered by such understanding, the users rely on crutches, like their documents usually just "being there" when they open the program, and anything outside the norm causes confusion. Lack of understanding can be fixed though, with proper training, which users rarely seek out, and computer experts rarely go out of their way to give when not absolutely required.
The ultimate problem here is the lack of willingness to learn. Why should they bother to learn, after all, when all they care about is the destination, not the ride? A computer is just a tool, and you (IT/MIS/help desk people) are just a mechanic. Most of the time they can get around fine, and that's sufficient, isn't it? I've seen the way clueless users solve problems on their own, and quite often, I wish they had come to me and asked a simple question: is this solution that I have come to a reasonable one for the problem at hand? I've also seen clueful users (who are in no way "computer people") reading documentation, experimenting, and learning how to use new software, correctly, with minimal to no hand-holding.
So is it the metaphor that's broken, or the users (who fail to see it as a metaphor at all, and take everything on their screen at face value)? Probably a combination.
As an aside, I see the "views" thing you mention as more of a failure of users. A lot of people have trouble with different representations of the same thing in a very general sense--once you start grouping and ordering differently (as in your photoalbum example), it's a different beast entirely to them. Which in a sense it is--the (underlying, raw) data is the same, but the (useful) information (from that data) is different. When they can see the raw data, they "get it"--i.e. throw it all in a listview and let them sort by whatever column they like. Once you start hiding/selectively showing data though, it becomes mysterious to them--but again, not insurmountably so if they're willing to seek and receive assistance.
Yeah, Smith seems to take control of the connection in the same way, but unlike the agents, he refuses to give it back. There seem to be levels of consciousness or something though--the mere fact that they are able to revert back means that both the original person and Smith are both "installed"--so I don't think anything is overwritten, per se....
This may be completely conjecture on my part (I haven't even seen the third movie yet), but it seems to me that there is a distinction made between consciousness and "other stuff" in the films. Neo is carrying code, yet he is still "irrevocably human". Neo overwrites some part of Smith, yet not Smith's consciousness, as he is still Smith. Smith overwrites parts of people, but he does overwrite their consciousness; they become Smith too. If we can assume that he didn't overwrite the "other stuff" -- the part of the person that carries data but doesn't seem to contribute to species, etc., then maybe Smith spreads by just overwriting consciousness, yet the rest of the people he overwrites remains human. Maybe the reason agents couldn't enter "the real world" before was because they didn't have the necessary human element to cross over via the hardline. But now Smith does.
It's a "bald-faced lie", as in here: http://wiki.answers.com/Q/Is_the_correct_term_'bold_face_lie'_or_'bald_faced_lie'_or_another_variation
From http://physics.princeton.edu/~mcdonald/examples/QM /lloyd_nature_406_1047_00.pdf [PDF]:
"The ultimate laptop performs 2mc^2/(pi)(Planck's reduced constant) = 5.4258 x 10^50 logical operations per second on ~10^31 bits."
(rather than the 1051 and 1031 quoted)
As both a DBA and programmer, I enforce referential integrity at the database level. I cannot fathom why you'd implement it at a code level--if you don't trust your DBMS, why are you using it? The database is the only common chokehold in a multi-user, multi-application environment. To implement it at an application level, you'd have to try to somehow synchronize communication between all those apps, some of which you might not maintain, and this would only be complicated by each app instance having its own transaction open. The database is already handling those transactions, which makes enforcing referential integrity easiest to do at the database level.
As with every other program I've used with plugins/extensions, this feature is both the good and the bad of the entire program. It's good that it's extensible--really it is. The developers shouldn't have to include every single feature that less than 10% of their users will ever use. When you do, you get Microsoft-style bloatware (excepting Explorer, but I'm getting to that). The bad is that everyone and their mom and their mom's dog can write extensions, and really the only thing you as a user have got to go by is how popular it is. I periodically check in on FF extensions, and I download the most popular ones that sound useful to me--and on every one of my three computers with which I routinely browse the web, FF is unstable. I get consistent CPU and memory hogginging in the 50-100% range. I get crashing. I get hanging. I get staying-resident-after-I-kill-it-with-Task-Manager . I even had it kill popup menus system wide. Now that's impressive. No file menus, no context menus, no dropdowns from toolbars, with any program until I killed FF. Worst of all, I have no good way of telling which of my many extensions is causing me grief without systematically going through them, uninstalling one, and then using the browser for a few days to a week to see if that fixed it (nevermind bugs caused by multiple, conflicting extensions). I have had similar luck with the Google Desktop Sidebar, Explorer, and every other program I've ever used that supports extensions. For that reason I'd like to see more stability, whether that come from incorporating more extensions into the core application, or otherwise.
I recognize that more functionality in the core slows core development, and I personally don't mind downloading and configuring extensions--I actually prefer tweaking the application myself--though a number of people have already expressed comments otherwise.
You can get a win32 port of wget at http://unxutils.sourceforge.net/ or http://sourceforge.net/projects/getgnuwin32
"Actually, it is not that the metaphor is broken per sé, it is that metaphores in become realities in computers."
... all to be stored in the same enormous tree.
To some extent this is desirable. The user needn't be concerned with the number of files stored as a result of what they see as a single document, the composition of those files (the actual file formats), and most times, not even the type. It is sufficient for them to know (1) the program they created it in, (2) where they saved it, and (3) what they named it. If they don't know 2 and/or 3, they can always hunt for it and try to recognize it, and failing that, try to search for it--but nothing beats some basic understanding of the difference between programs and files.
This distinction is not intuitive for a lot of users, who often lack a basic understanding of how computers work, and wouldn't expect (or possibly understood, if explained to them) operating systems, programs, documents, temporary files, web cache, cookies
Unempowered by such understanding, the users rely on crutches, like their documents usually just "being there" when they open the program, and anything outside the norm causes confusion. Lack of understanding can be fixed though, with proper training, which users rarely seek out, and computer experts rarely go out of their way to give when not absolutely required.
The ultimate problem here is the lack of willingness to learn. Why should they bother to learn, after all, when all they care about is the destination, not the ride? A computer is just a tool, and you (IT/MIS/help desk people) are just a mechanic. Most of the time they can get around fine, and that's sufficient, isn't it? I've seen the way clueless users solve problems on their own, and quite often, I wish they had come to me and asked a simple question: is this solution that I have come to a reasonable one for the problem at hand? I've also seen clueful users (who are in no way "computer people") reading documentation, experimenting, and learning how to use new software, correctly, with minimal to no hand-holding.
So is it the metaphor that's broken, or the users (who fail to see it as a metaphor at all, and take everything on their screen at face value)? Probably a combination.
As an aside, I see the "views" thing you mention as more of a failure of users. A lot of people have trouble with different representations of the same thing in a very general sense--once you start grouping and ordering differently (as in your photoalbum example), it's a different beast entirely to them. Which in a sense it is--the (underlying, raw) data is the same, but the (useful) information (from that data) is different. When they can see the raw data, they "get it"--i.e. throw it all in a listview and let them sort by whatever column they like. Once you start hiding/selectively showing data though, it becomes mysterious to them--but again, not insurmountably so if they're willing to seek and receive assistance.
Under "Basic vocabulary" you forgot:
Case/tower/chassis (and its difference from the hard drive/CPU)
Yeah, Smith seems to take control of the connection in the same way, but unlike the agents, he refuses to give it back. There seem to be levels of consciousness or something though--the mere fact that they are able to revert back means that both the original person and Smith are both "installed"--so I don't think anything is overwritten, per se....
This may be completely conjecture on my part (I haven't even seen the third movie yet), but it seems to me that there is a distinction made between consciousness and "other stuff" in the films. Neo is carrying code, yet he is still "irrevocably human". Neo overwrites some part of Smith, yet not Smith's consciousness, as he is still Smith. Smith overwrites parts of people, but he does overwrite their consciousness; they become Smith too. If we can assume that he didn't overwrite the "other stuff" -- the part of the person that carries data but doesn't seem to contribute to species, etc., then maybe Smith spreads by just overwriting consciousness, yet the rest of the people he overwrites remains human. Maybe the reason agents couldn't enter "the real world" before was because they didn't have the necessary human element to cross over via the hardline. But now Smith does.