 |
Home | Changes | Index | Search | Go
Metadata System
A system to add 'tags' to wonderland objects, probably cells. The specifics of this system and even its basic design should reflect the general needs of suggested use cases. One initial, straightforward plan however is to have key-value pairs for each tag. There are several key parts of the system.
Creating Tags
A cell type should be able to have default tags, but (all?) cells should allow additional tags key-value pairs to be added on a per-instance or class-wide basis. Tags can be created or have their values edited either automatically or manually, at the dev level or in-world. A few example tags that should probably be automatically populated and present in most cells are "CreatedAt", "CreatedBy", "EditedAt", etc. Users could add their own tags for almost anything - a page number, a review, a note to others, an author's name, an image..
Manual Management of Tags
Users should be able to effectively manage and edit large numbers of objects/tags, quickly changing tags or adding new ones, and performing bulk edits. There should also be an intuitive, direct and fast way to throw tags onto objects. Perhaps these two tools can be the same thing?
Searching Tags
Tags are available to any application, service or client that wishes to view them. Searching or filtering tags is a common functionality to many use cases and should be included in the system in a sensible way. The bulk tag manager/editor would need access to search functionality.
Scoping of searches based on non-tag criteria should be considered. One example of this is security/access control, which should also be incorporated into tagging. For example, a user could tag their favorite project boards but keep those tags private to only themselves or their project group. A user could also want to scope their search based on a particular room, or even search across worlds/servers. These uses could potentially be supported via tags as well. We need to decide whether using tags or integrating with another system is most usable.
Use Cases
-
Brainstorming - Thinking of what to eat at the family reunion, users drag pictures of their favorite recipes into the world and tag them 'vegetarian', 'spicy', 'no garlic' etc. The users sort the recipes into different parts of the room based on their tags. The entire family then asynchronously votes on their favorite recipes. At the end of the day, Mom and Dad log back in and re-sort the room based on votes.
-
RSS Wall - A wall that displays only items with a certain tag. This could be used to create something like a bug-tracking system or a "new addition to the world" board.
A question asking system could also be created for presentations. Suppose a teacher is lecturing his class. When a student has a question, uses a simple entry system to enter it and add any tags. The system then creates a cell that is tagged to be picked up by a board at the front of the room for all to see. The teacher tags questions 'answered', 'ch. 5', 'important', and 'this student was sleeping'. When studying for their quiz, students log back into the world and review questions tagged with ch. 5.
-
Ambient Room - Similar to the RSS Wall, an Ambient room instead of displaying tagged objects would visualize its results. The room could change color or display different patterns based on how many 'bug descriptions' had been tagged for a user, for example. The room could change its size by watching an RSS board inside it, expanding as the board gathered more items.
-
Accessibility - For anyone, not just the disabled. Users could navigate via tags ("how many items tagged 'project 5'? Take me to the one also tagged 'important'). A completely non-graphical system could be used over phone or IM. You could combine this with the RSS Wall/Ambient room to create a 'quick-look' client. This would allow a user that couldn't or didn't want to use a full client rapid access to content in the world.
At the airport, a developer uses his phone to log in to the world. The developer checks the project's 'urgent bugs' RSS wall (or perhaps runs a search scoped within the bug room), and finds a new, urgent issue assigned. Realizing the solution was discussed yesterday, he adds tags to the issue referencing a whiteboard in-world and a forum post.
-
Social Tagging and Annotations - Tags could also be used almost as a messaging system or note taking system, which could be similar to 'annotations' in a word processing program. It would also be interesting to apply tags to avatars/users.
Grover attends a conference that features an extensive wonderland world for remote and local attendees to use. Grover and the other attendees apply tags to posters, and leave notes for each other. Tags are often used to connect related posters, like a citation. Conference organizers have also scattered RSS boards around the world. Some posters have their own RSS board, set to pick up short tags on their poster board, which functions much like a tag cloud. Another RSS board displays the posters that are receiving the most 'interesting' tags. The entire conference is contained in an ambient room which visibly 'heats up' as the rate of tagging increases.
Grover adds short, private tags to other attendees to remember them the next time he sees them. While watching a presentation, Grover tags the presenter as someone he wants to talk to, and adds a note about what question he wants to ask. Later, when Grover and Elmo meet, Grover makes his question tag visible to Elmo and Oscar, who has joined them. Before leaving the conference, Grover searches for posters and questions tagged with his favorite subject, to make sure he hasn't missed any.
Design
A MetadataComponent Cell Component may be added to any cell, which allows tags to be added. Also provides some default tags, like 'created at', 'created by', etc. As a cell component, this will also have a server-side MO which stores all that cell's tags. Tags will be sent out to client-side MetadataComponents only when the client-side MComp requests tags be sent. The MComp could request all tags matching a certain type, name or value, or just request all tags. Each MCompMO stores only its own tags.
The MetadataService is a Darkstar Service that also exists on the server. This Service indexes all cells with a MetadataComponent, and their tags, and provides a search interface to them. Any cell that wants to search through other cells' tags can do so server-side through the Metadata Service. (Still in flux) These indexes will be stored in an LDAP database, and accessed through JNDI. The Metadata Service could potentially reach out to other wonderland Darkstar servers to search across worlds.
The client can have a Metadata Connection added to it to provide general searching and editing of tags. A Metadata Connection Handler on the server queries the MetadataService to provide this functionality.
TBD - if using JNDI/LDAP, translation to-from strings/LDAP form and full tag form. Ex - an annotation tag that includes 'by', 'position' and 'text' fields.
|