Wednesday, March 5, 2008

People on the Desktop

Conjure supports People now, something I've wanted for a long time. But now that it's in there, I have to decide how it should work going forward. Right now, a person is a link to an entry in your Address Book. And, it's a 'thing that does something'. If you double-click it, it will launch your email client and create a new email addressed to that person. It's not much, but it's a start, and that's farther along than any of the major OS vendors. But I plan to add Skype and iChat / Adium support soon. So if your contact has an iChat name, and you double-click their head in Conjure, what should that do? What if they have a website? What if they have *two* websites? What if they're listed in iChat, ICQ, Gmail, Twitter, FaceBook, MySpace, Dot Mac, Skype, AND they have six email addresses? Well... now that smarmy bastard does a heck of a lot. So what should Conjure do? 

Here's a brief overview of the issues I face on this. Your input is obviously welcome.

Bruce Tognazzini, founder of the Human Interface Group at Apple, has this to say on his site...

"People should also be first-class objects in a modern interface. I should be able to drag a document onto an icon-sized photo of a colleague and have it automatically sent to the default address. (Of course, I could option drag a document to it to reveal all addresses, or I could just double click it to do the same.)"

Obviously, I agree. But this is about all I've seen with regard to this concept, so a lot of the design of this metaphor in Conjure is happening as a result of emails from helpful users, and my own mad thinking. On a modern computer, there are at least four basic metaphors. I know these are obvious to you, but bear with me for a minute...

1) Application (aka Program) - When you double-click this, it always behaves in a similar manner. Its contents can change, but its overall structure and design remains consistent. Also, it's not 'yours' in that they never really change too much, as a result of using them. Applications are what you use to create and alter your stuff. 

2) Documents (aka Files) - When you double-click this, it behaves exactly the same way it did when you did that last time. If you drag it to a different program, its behavior is largely unpredictable. For example, if I drag a JPEG to a web browser icon, it will likely show that picture. If I drag it to a file compression app, its on-screen behavior will be very different. It's a 'thing' you use by dragging around. Also, it's YOUR thing, and you can change it, very radically, via programs. 

3) Containers (aka folders, volumes, drives, etc.) - When you double-click this, it shows its contents. That's all. It's very unlikely you're expecting any other behavior. You can drag both applications and documents onto a container, but ultimately that doesn't change the contents. Most of the time, you don't drag containers onto programs, though you can obviously drag containers onto other containers.

4) Links (aka Aliases) - When you double-click this, it launches the original thing, whatever that is. If you drag a file onto it, it will pass the file along to the original. A link itself does not contain its own contents.

Should People be Applications, Documents, Containers, or Links? Or something more?

I can say with some certainty that a Person is a thing that you should be able to double-click on. And I think it should be on the same level as an Application, in that it could be a drag destination for a document. But it won't alter a document dragged onto it, nor really do anything to the document other than reroute it. Furthermore, it should not represent any form of storage by itself, but should be able to act as a conduit through which documents could travel. So a Person is kinda like a 'smart alias' in that regard. It should also contain its own contents. A Person could contain birthdays, names of friends, addresses, phone numbers, and lots of other kinds of information. So it's like a document in that regard. And to be honest, if you double-click it, it should either have a default behavior, or provide you with a list of potential behaviors. And that's kinda like an application. 

Drag Behavior

If you drag a file onto a person, you probably want to give it to them somehow. There are a lot of ways to give someone a document. Do you want to email it, ftp, Skype, iChat peer-to-peer, or something else? We'll probably look at the services that person has listed as accessible, and decide on that person's capabilities there. And since you might not be interested in all of those capabilities all of the time, we'll give you some method for turning on or off different features. A 'Person' might then have multiple views, or a single larger view that contains multiple drop destinations, for the different capabilities. But if we did this, a single person could get cumbersome, from a visual standpoint. 

So if you drag a file onto a person, it will then give you a popup menu of the possible actions you can take with it, along with an icon for each. For example, it might show Email, Adium, and Skype options if that user has those capabilities. 

Double-Click and Default behaviors

As stated before, a person should probably have a default behavior, which should be settable via its Get Info window. Double-clicking them would invoke that behavior. And when you drag things onto them, that behavior would be listed as the pre-chosen, first option. In fact, I might go so far as to allow you to turn off all behaviors except one, if you want. Visually, I imagine Conjure should also brand the icon with a much smaller icon indicating what action you wish to take, or a question mark if there is no capabilities associated with the user. This way, you could have three links to the same person, each with different behaviors. For example, if your assistant artist has an FTP site, an email account, and an iChat account, and you want to send him something, you could have three different links to him on one page, each behaving differently to dragged files. 

And if they're online, and iChat is the default behavior for them, we might even brand the icon with their iChat status.

But what if you drag one contact onto another contact? And what if you drag a person onto a program? 

I am curious, as always, what you think. And please feel free elaborate ;-)


Frank said...

Chilton -- You're probably familiar with Robb Beal's Spring, which was another program that modernized the desktop to better handle the objects we interact with today.

Another bit of prior art that's worth looking into is Apple's PowerTalk/Open Collaboration Environment. Here's a TidBits article on it, from 1993. Essentially, PowerTalk provided a way for developers to define network-aware catalogs of information. As shipped, there was a network browser, which allowed you to see other users on your LAN and to send them documents, which showed up in a PowerTalk "mailbox". Apple promised support for a number of mail servers and directory protocols, but I don't remember how many shipped.

In PowerTalk, People were 1st-class objects, represented by a Rolodex-style card. If they could be reached via multiple services, the card had multiple entries, much as Address Book has a line for e-mail, chat, phone number, etc. Dragging a file to that entry caused the OS to try to transfer that file to that entity via that service.

Dragging a person could be used to make them an e-mail recipient, add them to a calendar entry, or add them to a new group of people.

People would then be grouped into either informal groups (Accounting), or service-based groups (CompanyServer's users, Mailboxes on your LAN). The informal groups would appear to map onto Conjure's clusters.

At the company where I worked, our Mac dev team mocked up a version of our inhouse office suite using PowerTalk that integrated calendaring, phone, and e-mail services. If implemented, it would have taken 4-5 closed applications and reduced them to server catalogs, accessible from any PowerTalk-capable application.

I haven't used Conjure, but it appears that a similar setup would work, with some way of setting default contact methods or even by letting Conjure access and extend Apple's AddressBook, for which there's an API.

Chilton Webb said...

Hi Frank,

I did use PowerTalk very briefly. I liked the general idea, but found the implementation too complex a the time, and it didn't work with any of the mail servers I was using.

That said, I played with the idea of using an address-book vCard style background behind the People icon, and multiple drop locations for various services.

But I think I have a better solution, which I will be implementing soon.