Mercurial > p > roundup > code
annotate doc/overview.txt @ 2492:fa871d7a3a0f
*** empty log message ***
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Tue, 22 Jun 2004 23:39:08 +0000 |
| parents | 284c26c1ef19 |
| children | 91008ec8f9a0 |
| rev | line source |
|---|---|
|
1654
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 ======================================================= |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 Roundup: an Issue-Tracking System for Knowledge Workers |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 ======================================================= |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
5 :Authors: Ka-Ping Yee (original_), Richard Jones (implementation) |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 .. _original: original_overview.html |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
8 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 .. contents:: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
10 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 Introduction |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 ============ |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
15 Roundup is an issue-tracking system called which will manage a |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 number of issues (with properties such as "description", "priority", |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
17 and so on) and provides the ability to: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
18 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
19 (a) submit new issues, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
20 (b) find and edit existing issues, and |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
21 (c) discuss issues with other participants. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
22 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
23 Roundup facilitates communication among the participants by managing |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
24 discussions and notifying interested parties when issues are edited. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
25 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 Background |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
28 ---------- |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
29 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
30 A typical software project requires the management of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 many tasks, usually distributed among several collaborators. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 In fact, any project team |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 could use a tool for sorting out and discussing all the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 relevant issues. A common approach is to set up some kind |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 of "to-do" list that people can share. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 However, to address the overall problem we need much more |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 than just a shared to-do list; we need to |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 manage a growing body of knowledge and experience to help a |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 team collaborate effectively on a project. The issue-tracking |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 tool becomes a nexus for communication: the Grand Central |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 Station of the group intelligence. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 The primary focus of this design is to help |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 developers work together well, not to provide a customer |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 service interface to the developers. This is not to say that |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 the design is to be made unsuitable for customers to use. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 Rather, it is assumed that many of the same qualities |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 that are good for supporting development (see below) |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 are also good for non-developers using the system. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 Additional niceties |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 for providing a safe or simplified interface to clients are |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 intentionally deferred for later consideration. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 A good issue-tracking system should have at least the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 following properties: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 **Low barrier to participation** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 The usefulness of the tool depends entirely on the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 information people contribute to it. It must be made |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 as easy as possible to submit new issues and contribute |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 information about existing issues. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 **Straightforward navigation** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 It should be easy for users to extract information they need |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 from the system to direct their decisions and tasks. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 They should be able to get a decent overview of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 things as well as finding specific information when |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
69 they know what they're after. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 **Controlled information flow** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 The users must have control over how much information and |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 what information they get. A common flaw of some issue-tracking |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 systems is that they inundate users with so much useless |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 e-mail that people avoid the system altogether. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 With a nod to the time-honoured computer science tradition |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 of "filling in the fourth quadrant", we note that |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 there are really four kinds of information flow |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 going on here. The three mentioned qualities |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 really address the first three quadrants of this 2-by-2 matrix, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 respectively: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 1. User push: a user submits information to the system. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 2. User pull: a user queries for information from the system. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 3. System push: the system sends information out to users. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 4. System pull: the system solicits information from users. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 An example of the fourth kind of flow is voting. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 Voting isn't described in this design, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 but it should be noted as a potential enhancement. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 Guiding Principles |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 ------------------ |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 **Simplicity** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 It is a strong requirement |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
99 that the tool be accessible and understandable. It should |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
100 be fairly obvious what different parts of the interface do, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
101 and the inner mechanisms should operate in ways that most |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
102 users can easily predict. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 **Efficiency** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 We aim to optimize for minimum effort to do the most common |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 operations, and best use of resources like screen real estate |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
107 to maximize the amount of information that we summarize and present. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 **Generality** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 We try to avoid making |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
111 unnecessary assumptions that would restrict the applicability |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 of the tool. For example, there is no reason why one might |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 not also want to use this tool to manage a design process, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 non-software projects, or organizational decisions. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 **Persistence** We |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 prefer hiding or reclassifying information to deleting it. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 This helps support the collection of statistics later. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 If records are never destroyed, there is little danger |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 in providing access to a larger community, and logging yields |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
121 accountability, which may encourage better behaviour. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
124 Data Model |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
125 ========== |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 Roundup stores a number of *items*, each of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 which can have several properties and an associated discussion. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 The properties can be used to classify or search for items. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
130 The discussion is a sequence of e-mail messages. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 Each item is identified by a unique number, and has |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
132 an activity log which |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
133 records the time and content of edits made on its properties. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
134 The log stays fairly small since the design intentionally |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
135 provides only small data types as item properties, and |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
136 encourages anything large to be attached to |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
137 e-mail where it becomes part of the discussion. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
138 The next section explains how items are organized. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
139 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
140 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
141 The Hyperdatabase |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
142 ----------------- |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
143 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
144 Often when classifying information we are |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
145 asked to select exactly one of a number of categories |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
146 or to fit it into a rigid hierarchy. Yet things |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
147 only sometimes fall into one category; often, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
148 a piece of information may be related to several concepts. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
149 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
150 For example, forcing each item into a single topic |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
151 category is not just suboptimal but counterproductive: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
152 seekers of that |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
153 item may expect to find it in a different category |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
154 and conclude that the item is not present in the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
155 database -- which has them *worse* off |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
156 than if the items were not categorized at all. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
157 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
158 Some systems try to alleviate this problem by |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
159 allowing items to appear at multiple locations |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
160 in a tree, as with "aliases" or "symbolic links" in |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
161 a filesystem, for example. This does help somewhat, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
162 but we want to be even more flexible |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
163 by allowing the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
164 organization of items into sets that may freely |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
165 intersect. Rather than putting each item at exactly |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
166 one place in an overall "grand scheme", a item can |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
167 belong to as many sets as are appropriate. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
168 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
169 If we choose to represent the sets themselves as items |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
170 and set membership as a link between items, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
171 we're now ready to present the definition of a |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
172 hyperdatabase. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
173 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
174 A *hyperdatabase* is a collection of *items* |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
175 that may be hyperlinked to |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
176 each other (hence the name "hyperdatabase"). |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
177 Each item carries a collection of key-value pairs, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
178 where some of the values may be links to other items. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
179 Any item may have an arbitrary number of outgoing and |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
180 incoming links. Hyperdatabases are able to efficiently |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
181 answer queries such as "what items link to this item?" |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
182 and "what items does this item link to?" |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
183 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
184 Rationale |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
185 --------- |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
186 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
187 There are several reasons for building our |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
188 own kind of database for Roundup rather than using an existing one. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
189 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
190 Requiring the installation of a full-blown third-party |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
191 SQL database system would probably deter many potential |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
192 users from attempting to set up Roundup; |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
193 yet a real relational database would be too |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
194 complicated to implement on our own. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
195 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
196 On the other hand, a hyperdatabase can be implemented fairly easily |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
197 using one of the Python DBM modules, so we can |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
198 take the "batteries-included" approach and provide it |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
199 as part of the system. It's easier to build and understand |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
200 than a true relational database (in accordance with our guiding |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
201 principle of *simplicity*), but provides |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
202 most of the query functionality we want. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
203 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
204 A hyperdatabase is well suited for finding the intersection |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
205 of a number of sets in which items belong. We expect that |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
206 most of the queries people want to do will be of this |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
207 form, rather than complicated SQL queries. For example, a |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
208 typical request might be |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
209 "show me all critical items related to security". |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
210 The ability to store arbitrary key-value pairs and links |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
211 on items gives it more flexibility than an RDBMS. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
212 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
213 Users are not going to be making thousands of queries |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
214 per second, so it makes sense to optimize for simplicity |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
215 and flexibility rather than performance. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
216 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
217 .. img: images/hyperdb.png |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
218 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
219 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
220 Roundup's Hyperdatabase |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
221 ----------------------- |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
222 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
223 For our application, we store each item as a item in a |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
224 hyperdatabase. The item's properties are stored |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
225 as key-value pairs on its item. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
226 Several types of properties are allowed: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
227 *string*, *number*, *boolean*, *date*, *interval, *link*, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
228 and *multlink*. Another type, *password*, is a special type |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
229 of string and it's only used internally to Roundup. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
230 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
231 The *string* type is for short, free-form strings. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
232 String properties are not intended to contain large |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
233 amounts of text, and it is recommended that they be presented |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
234 as one-line fields to encourage brevity. A *number* is a special |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
235 type of string that represents a numeric value. A *boolean* is |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
236 further constrained to be a *true* or *false* value. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
237 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
238 The *date* type is for calendar dates and times. An *interval* |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
239 is the time between two dates. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
240 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
241 The *link* type denotes a single selection from a number of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
242 options. A *link* property entails a link from the item |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
243 possessing the property to the item representing the chosen option. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
244 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
245 The *multilink* type is for a list of links to any |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
246 number of other items in the in the database. A *multilink* |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
247 property, for example, can be used to refer to related items |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
248 or topic categories relevant to an item. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
249 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
250 For Roundup, all items have four properties that are not customizable: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
251 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
252 1. a *date* property named **creation** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
253 2. a *link* property named **creator** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
254 3. a *date* property named **activity** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
255 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
256 These properties represent the date of the creation of the item, who |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
257 created it, and when the last change was made. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
258 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
259 Further, all *issue* items have an additional four properties: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
260 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
261 1. a *string* property named **title** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
262 2. a *multilink* property named **nosy** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
263 3. a *multilink* property named **messages** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
264 4. a *multilink* property named **files** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
265 5. a *multilink* property named **superseder** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
266 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
267 The **title** property is a short one-line description of the item. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
268 The detailed description can go in the first e-mail message of the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
269 item's messages spool. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
270 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
271 The **nosy** property contains a list of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
272 the people who are interested in an item. This |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
273 mechanism is explained in the section on `Submission and Discussion`_. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
274 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
275 Each message added to the item goes in the **messages** spool - any |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
276 attached files go in the **files** spool. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
277 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
278 The **superseder** property is used to |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
279 support the splitting, joining, or replacing of items. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
280 When several items need to be |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
281 joined into a single item, all the old items |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
282 link to the new item in their **superseder** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
283 property. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
284 When an item needs to be split apart, the item |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
285 references all the new items in its **superseder** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
286 propety. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
287 We can easily list all active items just by checking |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
288 for an empty **superseder** property, and trace |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
289 the path of an item's origins by querying the hyperdatabase |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
290 for links. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
291 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
292 Users of the system are also represented by items in the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
293 hyperdatabase, containing properties |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
294 like the user's e-mail address, login name, and password. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
295 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
296 The Default Schema |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
297 ------------------ |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
298 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
299 It is hoped that the hyperdatabase together with the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
300 specializations mentioned above for Roundup will be |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
301 applicable in a variety of situations |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
302 (in accordance with our guiding principle of *generality*). |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
303 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
304 To address the problem at hand, we need |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
305 a specific schema for items applied particularly to software development. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
306 Again, we are trying to keep the schema simple: too many |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
307 options make it tougher for someone to make a good choice:: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
308 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
309 # IssueClass automatically gets these properties: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
310 # title = String() |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
311 # messages = Multilink("msg") |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
312 # files = Multilink("file") |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
313 # nosy = Multilink("user") |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
314 # superseder = Multilink("issue") |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
315 # (it also gets the Class properties creation, activity and creator) |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
316 issue = IssueClass(db, "issue", |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
317 assignedto=Link("user"), topic=Multilink("keyword"), |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
318 priority=Link("priority"), status=Link("status")) |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
319 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
320 The **assignedto** property assigns |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
321 responsibility for an item to a person or a list of people. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
322 The **topic** property places the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
323 item in an arbitrary number of relevant topic sets (see |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
324 the section on `Browsing and Searching`_). |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
325 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
326 The **prority** and **status** values are initially: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
327 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
328 =========== ===================================== |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
329 Priority Description |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
330 =========== ===================================== |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
331 "critical" panic: work is stopped! |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
332 "urgent" important, but not deadly |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
333 "bug" lost work or incorrect results |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
334 "feature" want missing functionality |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
335 "wish" avoidable bugs, missing conveniences |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
336 =========== ===================================== |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
337 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
338 ============= ===================================== |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
339 Status Description |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
340 ============= ===================================== |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
341 "unread" submitted but no action yet |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
342 "deferred" intentionally set aside |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
343 "chatting" under review or seeking clarification |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
344 "need-eg" need a reproducible example of a bug |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
345 "in-progress" understood; development in progress |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
346 "testing" we think it's done; others, please test |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
347 "done-cbb" okay for now, but could be better |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
348 "resolved" fix has been released |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
349 ============= ===================================== |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
350 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
351 As previously mentioned, each item gets an activity log. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
352 Whenever a property on an item is changed, the log |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
353 records the time of the change, the user making the change, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
354 and the old and new values of the property. This permits |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
355 the later gathering of statistics (for example, the average time |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
356 from submission to resolution). |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
357 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
358 We do not specify or enforce a state transition graph, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
359 since making the system rigid in that fashion is probably more |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
360 trouble than it's worth. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
361 Experience has shown that there are probably |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
362 two convenient automatic state transitions: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
363 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
364 1. from **unread** to **chatting** when e-mail is written about an item |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
365 2. from **testing** to **resolved** when a new release of the software is made |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
366 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
367 Beyond these, in accordance with our principle of *generality*, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
368 we allow access to the hyperdatabase |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
369 API so that scripts can automate transitions themselves or |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
370 be triggered by changes in the database. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
371 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
372 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
373 User Interface |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
374 ============== |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
375 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
376 Roundup provides its services through two main interfaces: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
377 e-mail and the Web. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
378 This division is chosen to optimize the most common tasks. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
379 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
380 E-mail is best suited for |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
381 the submission of new items since most people are most comfortable |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
382 with composing long messages in their own favourite e-mail client. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
383 E-mail also permits them to mention URLs or attach files relevant |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
384 to their submission. Indeed, in many cases people are already |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
385 used to making requests by sending e-mail to a mailing list |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
386 of people; they can do exactly the same thing to use Roundup |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
387 without even thinking about it. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
388 Similarly, people are already |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
389 familiar with holding discussions in e-mail, and plenty of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
390 valuable usage conventions and software tools already exist for that medium. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
391 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
392 The Web, on the other hand, is best suited for summarizing |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
393 and seeking information, because it can present an interactive |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
394 overview of items. Since the Web has forms, it's also |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
395 the best place to edit items. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
396 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
397 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
398 Submission and Discussion |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
399 ------------------------- |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
400 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
401 The system needs an address for receiving mail |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
402 and an address that forwards mail to all participants. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
403 Each item has its own list |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
404 of interested parties, known as its *nosy list*. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
405 Here's how nosy lists work: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
406 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
407 1. New items are always submitted by sending an e-mail message |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
408 to Roundup. The "Subject:" field becomes the description |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
409 of the new item. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
410 The message is saved in the mail spool of the new item, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
411 and copied to the list of all participants |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
412 so everyone knows that a new item has been added. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
413 The new item's nosy list initially contains the submitter. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
414 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
415 2. All e-mail messages sent by Roundup have their "Reply-To:" |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
416 field set to Roundup's address, and have the item's |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
417 number in the "Subject:" field. Thus, any replies to the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
418 initial announcement and subsequent threads are all received |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
419 by Roundup. Roundup notes the item number in the "Subject:" |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
420 field of each incoming message and appends the message |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
421 to the appropriate spool. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
422 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
423 3. Any incoming e-mail tagged with an item number is copied |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
424 to all the people on the item's nosy list, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
425 and any users found in the "From:", "To:", or "Cc:" fields |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
426 are automatically added to the nosy list. Whenever a user |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
427 edits an item's properties in the Web interface, they are |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
428 also added to the nosy list. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
429 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
430 The effect is like each item having its own little mailing list, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
431 except that no one ever has to worry about subscribing to |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
432 anything. Indicating interest in an issue is sufficient, and if you |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
433 want to bring someone new into the conversation, all you need to do |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
434 is "Cc:" a message to them. It turns out that no one ever has to worry |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
435 about unsubscribing, either: the nosy lists are so specific in scope |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
436 that the conversation tends to die down by itself when the issue is |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
437 resolved or people no longer find it sufficiently important. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
438 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
439 Each nosy list is like an asynchronous chat room, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
440 lasting only a short time (typically five or ten messages) |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
441 and involving a small group of people. However, that |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
442 group is the *right* group of people: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
443 only those who express interest in an item in some way |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
444 ever end up on the list, so no one gets spammed with mail they |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
445 don't care about, and no one who *wants* |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
446 to see mail about a particular item needs to be left |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
447 out, for they can easily join in, and just as easily |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
448 look at the mail spool on an item to catch up on any |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
449 messages they might have missed. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
450 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
451 We can take this a step further and |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
452 permit users to monitor particular topics or classifications of items |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
453 by allowing other kinds of items to also have their own nosy lists. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
454 For example, a manager could be on the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
455 nosy list of the priority value item for "critical", or a |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
456 developer could be on the nosy list of the topic value item for "security". |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
457 The recipients are then determined by the union of the nosy lists on the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
458 item and all the items it links to. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
459 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
460 Using many small, specific mailing lists results |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
461 in much more effective communication than one big list. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
462 Taking away the effort of subscribing and unsubscribing |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
463 gives these lists the "feel" of being cheap and |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
464 disposable. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
465 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
466 The transparent capture of the mail spool attached to each |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
467 issue also yields a nice knowledge repository over time. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
468 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
469 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
470 Editing |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
471 ------- |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
472 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
473 Since Roundup is intended to support arbitrary user-defined |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
474 schema for item properties, the editing interface must be |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
475 automatically generated from the schema. The configuration for |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
476 Roundup will include a template describing how to lay out the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
477 properties to present a UI for inspecting and editing items. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
478 For example:: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
479 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
480 <tr> |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
481 <th class="required">Priority</th> |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
482 <td tal:content="structure context/priority/menu">priority</td> |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
483 <th>Status</th> |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
484 <td tal:content="structure context/status/menu">status</td> |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
485 </tr> |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
486 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
487 To display the editing form for an item, Roundup inserts |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
488 an HTML form widget where it encounters an expression like |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
489 ``tal:content="structure context/priority/menu"``. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
490 Each type has its own appropriate editing widget: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
491 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
492 - *string* and *number* properties appear as text fields |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
493 - *boolean* properties appear as a yes/no selection |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
494 - *date* and *interval* properties appear as text fields |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
495 - *link* properties appear as selection lists |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
496 - *multilink* properties appear as multiple-selection lists |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
497 or text fields with pop-up widgets for larger selections. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
498 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
499 We foresee the use of custom date fields for things like deadlines, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
500 so input fields for *date* properties support a |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
501 simple way of specifying relative dates (such as "3w" for |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
502 "three weeks from now"). |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
503 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
504 The **superseder** property is a special case: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
505 although it is more efficient to store a **superseder** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
506 property in the superseded item, it makes more sense to provide |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
507 a "supersedes" edit field on the superseding item. We use |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
508 a special widget on items for this purpose (a text field containing |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
509 a comma-separated list of items). Links in the **superseder** property |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
510 appear on both the superseding and superseded items to |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
511 facilitate navigating an item's pedigree. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
512 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
513 After the editing widgets, the item inspection page shows |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
514 a "note" text box and then a display of the messages in the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
515 discussion spool. This field |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
516 lets you enter a note explaining your change when you edit the |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
517 item, and the note is included in the notification message that |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
518 goes out to tell the interested parties on the nosy list of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
519 your edits. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
520 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
521 Browsing and Searching |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
522 ---------------------- |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
523 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
524 The ideal we would like to achieve is to make searching as |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
525 much like browsing as possible: the user simply clicks about |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
526 on things that seem interesting, and the information narrows |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
527 down comfortably until the goal is in sight. This is preferable |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
528 to trying to digest a screen filled with widgets and buttons |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
529 or entering a search expression in some arcane algebraic syntax. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
530 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
531 While a one-shot search may be appropriate when you're |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
532 looking for a single item and you know exactly what you want, it's |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
533 not very helpful when you want an overview of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
534 things ("Gee, there are a lot more high-priority items than |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
535 there were last week!") or trying to do comparisons ("I have |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
536 some time today, so who is busiest and could most use some help?") |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
537 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
538 The browsing interface presents filtering |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
539 functionality for each of the properties in the schema. As with |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
540 editing, the interface is generated from a template |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
541 describing how to lay out the properties. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
542 Each type of property has its own appropriate filtering widget: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
543 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
544 - *string* properties appear as text fields supporting |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
545 case-insensitive substring match |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
546 - *date* properties appear as a text field which accepts a date |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
547 range with start, end or both |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
548 - *link* properties appear as a group of selectable options |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
549 (the filter selects the *union* of the sets of items |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
550 associated with the active options) |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
551 - *multilink* properties appear as a group of selectable options |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
552 (the filter selects the *intersection* of the sets of items |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
553 associated with the active options) |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
554 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
555 For a *multilink* property like **topic**, |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
556 one possibility is to show, as hyperlinks, the keywords whose |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
557 sets have non-empty intersections with the currently displayed set of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
558 items. Sorting the keywords by popularity seems |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
559 reasonable. Clicking on a keyword then narrows both the list of items |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
560 and the list of keywords. This gives some of the feel of walking |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
561 around a directory tree -- but without the restriction of having |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
562 to select keywords in a particular hierarchical order, and without |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
563 the need to travel all the way to the leaves of the tree before |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
564 any items are visible. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
565 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
566 Below the filtering form is a listing of items, with their |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
567 properties displayed in a table. Rows in the table are |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
568 generated from a template, as with the editing interface. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
569 This listing is the central overview of the system, and it |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
570 should aim to maximize the density of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
571 useful information in accordance with our guiding principle of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
572 *efficiency*. Colour may be used to indicate |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
573 the status of each item to help the eye sift through the index quickly. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
574 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
575 Roundup sorts items |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
576 in groups by priority, and then within groups by the date |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
577 of last activity. This reveals at a glance where discussion is |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
578 most active, and provides an easy way for anyone to move an issue |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
579 up in the list. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
580 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
581 The page produced by a given set of browsing options constitutes |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
582 an *index*. The options should all be part of the query |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
583 parameters in the URL so that views may be bookmarked. An index |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
584 specifies: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
585 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
586 - search strings for string properties |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
587 - date ranges for date properties |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
588 - acceptable values for choice properties |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
589 - required values for reference properties |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
590 - a sorting key |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
591 - a grouping key |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
592 - a list of properties for which to display filtering widgets |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
593 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
594 Our default index is: |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
595 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
596 - all **status** values except "resolved" |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
597 - show **priority** and **fixer** |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
598 - grouping by **priority** in sections |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
599 - sorting by decreasing **activity** date |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
600 |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
601 The starting URL for Roundup immediately presents the listing of |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
602 items generated by this default index, with no preceding query screen. |
|
284c26c1ef19
aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
603 |
