Localization | Item Model

How are items stored and displayed back to the user? Your typical human tends to look at notes in two different ways:

I need a particular, specific item, so I have to find it.

For instance, you’ve written down your mother’s phone number in an item, and now you need to find that item to call her.

The problem is that our system contains very little useful information that the user could use to find it: some short piece of text that the user does not remember correctly, an author and a creation date. You could hope that the user will somehow remember to bookmark important information, so that you can filter the results a little bit.

This means that the information-gathering has to get a lot smarter. The problem is that you can’t present the user with a long twenty-field form just so you can find it later—it would make things easier to find, mostly because the user would not spend the effort just to write down their mother’s phone number.

One possibility is to extract as much information as possible from the item. For instance, it’s fairly easy to detect e-mail addresses, web links, IP addresses, dates and times, phone numbers, source code in typical language and physical addresses, and to give the user filtering options for selecting them.

This logic could be pushed even further: by using a semantic search engine such as Sinequa, one could actually extract named entities from your notes, and broaden the terms one could use to look for data (so you could write “mom” and “mother” and the system would get it, whereas a keyword search would consider these to be different words). While the Sinequa license costs are quite prohibitive for individuals and small teams, it would not hurt to provide a clean feed format that corporate search engines can work with, and perhaps an integration framework for including the engine search pages in the site.

Another possibility is to gather additional data based on context. We already know how to gather context information like who the author is or when the message was posted. Filtering by several authors (if you don’t know who the author is), or having smart date-time contexts like weekdays or day/night is also a good idea. Another element is the IP address, which would let the person know where they were when they posted the element, as long as it is handled appropriately: provide human-readable IP information through reverse DNS, provide examples of posts sent from each address, and perform IP address clustering based on network, weekday/weekend or day/night changes.

I need to know all items that are relevant to my interests.

For instance, you wrote down that you need to do the laundry and buy some sugar. Or perhaps your project manager told you to call a service provider and get a certain service. Or maybe one of your users reported a bug on one of the projects you are maintaining. Either way, you will usually be looking for things you have to do on a personal or professional basis, in order to actually do them: this is what todo-lists are for.

This means that ideally there will be a list for every task group that the user participates in (what has to be done on project X?) plus an additional task group for urgent tasks that have been assigned directly to the user either by himself or by a task manager. So, conversely, the user should be able to assign a task to an user (please send me this file), to a group (could someone correct this bug?), or to a user within a group (you should correct this bug).

Groups and Users

I plan the layout of the system as such:

  • http://domain/me : the user’s page, contains all tasks assigned to the user, both standalone and in groups. Tasks entered on this page are assigned to the user himself without being associated to a group.
  • http://domain/user/a4:james-bond : the page of user James Bond. The initial a4 is a base64 encoding of the user identifier, so that links work even if there are several users named James Bond, or if the user decides that he should be named Bond James instead. Base64 encoding mean we can encode 250,000 people with three characters (and the database will probably fail before we get that many active users anyway). Note that the shorter http://domain/u/a4 redirects there and can therefore be used as a tiny link.This page contains all tasks assigned to the user, both standalone and in groups, but you can only see those tasks that were assigned by you, were assigned within a group where you have read-access, or were bookmarked by you before they were assigned to that user, or were marked as public by their creator or that user.Items entered on this page are assigned to the user without being associated to a group. They will only be visible to you and that user.
  • http://domain/group/Bq:world-domination-project : the page of the group “World Domination Project”. It follows the same naming convention as users, for the same reasons, and the shorter http://domain/g/Bq redirects there.This page contains all items assigned to the group or to an user within the group (with filtering options to list only those items that are not assigned to users). Entering an item here are assigned to the group as a whole.Only members of the group may see this page—other users merely get a contact form to require information or inclusion.
  • http://domain/group/Bq:world-domination-project/a4:james-bond : the page of user James Bond within the “World Domination Project” group. The shorter http://domain/g/Bq/a4 redirects there.This page contains all items assigned to both the user and the group, and entering an item here assigns it to both the user and the group. Only the members of the group may see this page.
  • http://domain/item/1290 : the page of item 1290. Unlike groups and users, which have a definite name that can be used to identify them in the URL, there is no sure-fire way to associate a name to an item (mostly because an item is most of the time just a bit of human-entered text). So, instead, we associate a numeric identifier. It is imperative that this identifier can be easily pronounced, so it can be used to communicate when discussing bugs orally over the phone or in a room. So, I use a plain unencoded number.This page shows the item text, plus anything that happened to the item since it was created: who it was assigned to and when, whether it is solved, archived, a duplicate of another item, whether it has attached files, what people commented about it, and so on.

Rights are an important matter. They should be extremely easy to understand so that people don’t accidentally reveal important information or forget to grant access to critical information. In addition, there are so many things that an user can do with an item that per-activity segmentation (these people can frobnicate, these other people can frozzle), while possible, is unwieldy to both administrators and users, so the use of “packages” would be welcome. Besides, since JITBrain is intended to be a collaborative platform, it is essential to trust the users—if you must wait for approval to use the system, you probably won’t use the system a lot.

There are three access packages: No Access, Contributor and Moderator. A few elementary rules about the packages:

  1. These packages are applied for every user-item pair and every user-group pair, so that a user may be a contributor in a group and a moderator in another, and an user may be a moderator of an item assigned to a group where he is a mere contributor.
  2. They are strictly increasing, so that a higher package has all the rights of a lower package and then some.
  3. If a user has a certain access to a group, it has at least the same level of access to every item assigned to that group. So, the moderator of a group is a moderator of every item assigned to that group.
  4. Actions performed by users remain even if their access level changes.

Obviously, the No Access package provides absolutely no access. When trying to access an item or group with a No Access package, an error message indicates that you should request an improved package. If you’re visiting a group, you should be able to send a request to the group administrators. If you’re visiting an item, you were probably told to visit that item by someone, and that someone can show it to you.

Having a Contributor package grants several rights:

  • You can see things, such as the list of users in a group or the list of items assigned to that group. You can also see the item details, of course, including every status change that happened and all the comments and attached files.
  • You can show items to other people. This basically grants them Contributor rights on that item. You cannot invite people as contributors on groups, though. Showing an item appears in the history for the item as “UserName showed item to UserName”. Showing an item to yourself is possible, and there is a shortcut for that (“UserName is tracking item”) which lets you keep Contributor access even if you leave a group that granted you access to that item.
  • You can post a comment or attach a file.
  • You can change the status and priority of the item, and apply praise or blame to the current assignee.
  • You can create a copy of the original item, or of any comment within the item. This creates a new item, assigned to you, that contains the text of the item or comment. This copy is fully independent, so that if you lose access to the original item you still have your copy.
  • If you are a contributor to two items, you can reference one from the other (as a “see also”, as a reference, or as a duplicate). This is an internal reference that can only be followed by those people who can see both items—it might not be obvious to the user making the reference that this will grant access rights, whereas this is obvious in the case of a “show” operation.

Having a Moderator package grants another set of rights:

  • You can edit the properties of a group, such as its name, the list of its contributors and moderators, and so on.
  • You can moderate items: this marks the item and all its contents invisible to non-moderators (optionally, you may let them see a “Content Moderated” message).
  • You can block user actions: this undoes the user action if possible (for instance, a “show” or “reference” operation), and prevents that user from performing similar operations on that item from then on. Blocked actions appear in the item history (“UserName showed item to UserName, blocked by UserName”), as well as the blocking itself (“UserName forbids UserName to show item”).

Some users have site-wide Moderator access. This lets them set site-wide properties (like whether users are allowed to register themselves or must be invited), ban users and create groups. While it would be possible to have site-wide Contributor access, it is not very useful and might even end up being confusing.

Localization | Item Model

0 Responses to “16. Groups and Users”


  1. No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



706 feed subscribers
(readers who polled a feed this week)