Dear DDJ,
In reading Greg Guerin's letter concerning patents and executable content (DDJ "Letters", January 1996), I was surprised to see no mention of an old system that indeed provided the capability of including executable code as part of a "page" on a BBS, which would be sent to the client and executed to provide animation during the online session.
Grafterm for the 8-bit Atari was never upgraded beyond 300bps (there were problems with updating the graphic screens at high speeds, though text screens in other telecommunications programs can run at up through at least 4800bps) and did provide, in the later version I saw, the capability of sending executable code with samples of animation (as I recall). The only copy I saw was in the mid to late'80s (long after all Grafterm BBSs had gone the way of the dodo), which did have sample pages of code and which seemed quite impressive. As the system was machine specific, there was no need to worry about drivers--the code was in machine language making use of the client's hardware, the CPU, sound system, graphics, and so on--all were standardized.
While the idea of sending executable code in telecommunications (interactively run on the client while connected) may be new to some, it is old hat to others. Unlike the current generation of executable content, the pages containing the code were proprietary to the BBS system. Nor was an interpreter used to run the code.
Unfortunately, all I saw was the aforementioned letter about prior art (which did not target contemporaneous execution of code sent in real time from a telecommunications server to improve the interface). Still, I wonder if there were similar systems available on machines such as the venerable Apple II and Commodore 64.
John McGowan
Brooklyn, New York
jmcgowan@inch.com
Dear DDJ,
In his January 1996 "C Programming" column, Al Stevens talked about his recent experiences with the ANSI C++ Standards Committee. I've been programming in C for nearly a decade, and recently started using C++. I've spent some time experimenting with the language and looking through C++ programming books to see what works and what doesn't (using Watcom C++ 10.0 running under MS-DOS). Here are some of my thoughts on the subject.
The for statement should be left the way it is. New notation should be created to implement the new, desired behavior, possibly using square brackets immediately after the for keyword to declare variables. So a loop that declared its own counter variable would look like Example 1(a). This would have several advantages over the proposed change.
I wrote an array class that would allow the arrays to increase their size as new elements were added. This would occasionally require me to allocate more storage for the array. I've always viewed enums as just convenient ways to name a related series of constants (which would treat them all as ints). If the stronger typing is desired (as Al implied was the case with the Microsoft implementation), then this should be made explicit by either a new keyword (there seem to be plenty of those) or perhaps by using class enum or enum class notation.
One other moderately useful change would be the ability to break out of an outer-enclosing loop from an inner one. This could be done by specifying a number after a break (or continue), as in break 2;. This would remove some of the need for gotos or flag variables; see Example 1(c).
Glenn Dill
Latrobe, Pennsylvania
gdill@westol.com
Dear DDJ,
In his review of Alan Cooper's book, About Face: The Essentials of User Interface Design (DDJ, January 1996), Michael Swaine perpetuates glaring inaccuracies about the Magic Cap user interface. While Cooper indeed "rips apart the MagiCap [sic] interface" (to quote Swaine), much of his criticism is factually incorrect. It's shocking that such a well-known and acclaimed individual is so cavalier with the truth. For example:
Cooper: "I'll bet [Magic Cap] is a real pain to use. Once you have learned that the substantial-looking building with the big 'AT&T' on its facade is the phone company, you must forever live with going in and out of that building to call people."
In fact, the AT&T building is not where one makes phone calls in Magic Cap. The Magic Cap interface lets users place a call by simply touching the phone on the desk, or they can call a person by touching that person's name in the Address Card file and then touching the phone number to automatically dial (for example, home, work, cellular, pager).
The tight integration of all parts of the Magic Cap UI enables users to contact someone, anywhere within Magic Cap. Users can tap the Contact button to call, fax, or e-mail someone from every scene.
What's more, if a user wishes to frequently visit a particular place such as the AT&T building, Magic Cap provides obvious and simple shortcuts to jump directly there. Over 1000 user tests indicate that the Magic Cap interface is not "a pain to use," and, on the contrary, many people are convinced it is superior to other user interfaces.
Cooper: "You enter a building to begin a service, which is represented by a walk down a hallway that is lined with doors representing functions. This heavy reliance on the metaphor means that you can intuit the basic functioning of the software, but its downside is that the metaphor restricts all navigation to a very rudimentary, linear path. You must go out on the street to go to another service."
Magic Cap enables users to intuit the basic functioning of the software, and as the user becomes more familiar with the user interface, one is able to take advantage of the short cuts just mentioned.
Ease of learning and ease of use are not exclusive as Cooper implies; Magic Cap provides an easy-to-learn, real-world framework, but this same framework provides the navigational accelerators power users appreciate, much as keyboard shortcuts are used by some computer users once they have mastered the easy-to-learn menu interface.
Cooper: "Wouldn't it be better to go beyond those confining technologies [address books that look just like a paper version, phones that look like phones] and deliver some of the real power of the computer? Why can't our communications software allow multiple connections or make connections by organization or affiliation, or just hide the use of phone numbers all together?"
Magic Cap does exactly what Cooper desires. Such a design does not require giving up what people already understand. Magic Cap provides a unified mailbox that collects mail from multiple mail services automatically. Magic Cap provides dialing by name and location.
Magic Cap tightly integrates the Address Cards, Phone, Fax, Datebook, and Electronic Mail connectivity through multiple services such as the Internet and AOL. Address Cards can be grouped by organization or affiliation. Make an appointment and Magic Cap can automatically send an invitation to that person, complete with the correct contact information. Magic Cap is not only a tightly integrated, easy-to-use communications product but also a powerful platform for developers and third parties to add their own applications and services.
More examples are available, and I encourage DDJ readers to verify my statements by reading (or rereading) the book review and then trying either Sony's Magic Link PIC-2000, Motorola's Envoy communicator, or requesting a version of Magic Cap for Windows from Magic (you can download the software from our web site at http://www.genmagic.com). Suffice to say Cooper's irresponsible and inaccurate comments about the Magic Cap user interface should lead any reasonable reader to seriously question his credibility as an author and wonder whether he even bothered to use Magic Cap before writing about it.
In his review of Cooper's book, Swaine writes, "I think that everyone would be better off if they would just commit the entirety of About Face to memory." As it relates to Magic Cap, this would leave DDJ readers with an entirely inaccurate impression of the Magic Cap interface--an interface which has been refined based on thousands of hours of user testing and consistently described by responsible reviewers as easy to learn, use, and customize.
Steve Schramm
VP & General Manager,
Magic Cap Division
General Magic Inc.
(a)
for [int i = 0;] (; i < 10; i++) {
// ...
}
(b)
while [int i = 0;] (i < 10) { /* ... */ i++; }
(c)
extern int a[], b[];
int i, j;
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
if (a[i] == b[j]) break 2;
}
}