Mercurial > hg > Applications > mh
comparison papers/realwork/text.tex @ 0:bce86c4163a3
Initial revision
author | kono |
---|---|
date | Mon, 18 Apr 2005 23:46:02 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:bce86c4163a3 |
---|---|
1 % begin text | |
2 | |
3 \banner | |
4 | |
5 \section{Introduction} % mtr | |
6 The UCI version of the Rand Message Handling System, \MH/, | |
7 is a software system that performs two functions: | |
8 \underbar{first}, | |
9 it interfaces a user to a message transport system, | |
10 so the user may receive and send mail; | |
11 \underbar{second}, | |
12 it permits the user to maintain an organized mail environment to facilitate | |
13 the composition of new messages and the reading of old messages. | |
14 In short, | |
15 while not responsible for the delivery of messages, | |
16 \MH/ aids the user in handling mail. | |
17 | |
18 \MH/ was originally developed by the Rand Corporation, | |
19 and initially was proprietary software. | |
20 The Department of Information and Computer Science at | |
21 University of California, Irvine, | |
22 shortly after joining the Computer Science Network (CSnet), | |
23 acquired a copy of \MH/, | |
24 and began additional development of the software. | |
25 Since that time, | |
26 the Rand Corporation has declared \MH/ to be in the public domain, | |
27 and the UCI version of \MH/ has passed through four major releases. | |
28 The current version, \mh5, | |
29 is available from U.C.~Irvine for a nominal distribution fee, | |
30 or may be retrieved from the University of Delaware via anonymous FTP. | |
31 | |
32 Much credit must be given to the initial designers and implementors of \MH/: | |
33 Bruce Borden, Stockton Gaines, and Norman Shapiro. | |
34 Although \MH/ has suffered significant development at UCI | |
35 since Rand's initial release, | |
36 the fundamental concepts of \MH/'s environs have remained nearly unchanged. | |
37 In addition, | |
38 the authors of the current release gratefully acknowledge the comments of the | |
39 many sites which have run various releases of \MH/ in the past. | |
40 In particular, | |
41 the dozen or so beta test sites for \mh5 | |
42 provided tremendous help in stabilizing the current release. | |
43 | |
44 \MH/ runs on different versions of the \unix/ operating system | |
45 (such as Berkeley~4.2\bsd/ and various flavors of v7). | |
46 In addition, | |
47 \MH/ supports four different message transport interfaces: | |
48 \SendMail/\cite{EAllm83}, | |
49 the standard mailer for 4.2\bsd/ systems; | |
50 \MMDF/\cite{DCroc79} and \MMDFII/\cite{DKing84}, | |
51 the Multi-Channel Memo Distribution Facility developed by the University of | |
52 Delaware | |
53 which forms the software-backbone for CSnet\cite{DCome83} mail relay service; | |
54 SMTP, | |
55 the ARPA Internet Simple Mail Transfer Protocol\cite{SMTP}; | |
56 and, | |
57 a stand-alone delivery system. | |
58 | |
59 This paper is organized in a straight-forward fashion: | |
60 Initially, | |
61 the \MH/ philosophy of mail handling is presented, | |
62 along with a description of the environment which the \MH/ user is given to | |
63 process mail. | |
64 Following this, | |
65 certain advanced features of \MH/ are discussed in more detail, | |
66 such as facilities for selecting messages, | |
67 and ``advanced'' concepts in {\it draft} handling. | |
68 In addition, | |
69 user interface issues in mail handling are addressed, | |
70 and the merits of \MH/'s approach is critically examined. | |
71 Next, | |
72 the \mh5 distribution package is described. | |
73 Finally, | |
74 we conclude by discussing the authors' experience with \MH/ development | |
75 and introducing areas where \MH/ may be further developed. | |
76 | |
77 Although familiarity with \MH/ is not assumed on the part of the reader, | |
78 some knowledge of the \unix/ operating system is useful. | |
79 Appendix~A gives a short synopsis of the \MH/ commands. | |
80 | |
81 \section{The \MH/ Philosophy} % mtr | |
82 Although \MH/ has many traits which tend to distinguish it from other systems | |
83 which handle mail, | |
84 there is a single fundamental design decision which influences the interface | |
85 between \MH/ and the user: | |
86 \MH/ differs from most other systems in that it is composed of many small | |
87 programs instead of one very large one. | |
88 This architecture gives \MH/ much of its strength, | |
89 since intermediate and advanced users are able to take advantage of this | |
90 flexibility. | |
91 | |
92 The key to this flexibility is that the \unix/ shell | |
93 (usually the {\it C} shell or the {\it Bourne} shell), | |
94 is the user's interface to \MH/. | |
95 This means that when handling mail, | |
96 the entire power of the shell is at the user's disposal, | |
97 in addition to the | |
98 facilities which \MH/ provides. | |
99 Hence, | |
100 the user may intersperse mail handling commands with other commands in an | |
101 arbitrary fashion, | |
102 making use of command handling capabilities which | |
103 the user's shell provides. | |
104 | |
105 Furthermore, | |
106 rather than storing messages in a complicated data structure | |
107 within a monolithic file, | |
108 each message in \MH/ is a \unix/ file, | |
109 and each folder (an object which holds groups of messages) | |
110 in \MH/ is a \unix/ directory. | |
111 That is, | |
112 the directory- and file-structure of \unix/ is used directly. | |
113 As a result, | |
114 any \unix/ file-handling command can be applied to any message. | |
115 | |
116 To the novice, | |
117 this may not make much sense or may not seem important. | |
118 However, | |
119 as users of \MH/ become more experienced, | |
120 they find this capability attractive. | |
121 In addition, | |
122 this approach is often quite pleasing to system implementors, | |
123 because it minimizes the amount of coding to be performed, | |
124 and given a modular design, | |
125 changes to the software system can be maintained easily. | |
126 There are, however, performance penalties to be paid with this scheme. | |
127 This issue is considered later in the paper. | |
128 | |
129 Having described how \MH/ fits into the \unix/ environment, | |
130 we now discuss the mail handling environment which is available to the \MH/ | |
131 user. | |
132 | |
133 \subsection{The \MH/ Environs} % jlr | |
134 In the \file{\$HOME} directory of each \MH/ user, a file named | |
135 \profile/ contains static information about the user's \MH/ environment, | |
136 and default arguments for \MH/ programs. | |
137 For the latter case, | |
138 each line of profile takes the form: | |
139 \example program-name:\ options\endexample | |
140 Each \MH/ program consults the user's \profile/ for its options. | |
141 These options are consulted prior to evaluating any command-line arguments, | |
142 and so provide the \MH/ user the capability to customize the defaults for each | |
143 command. | |
144 Futher, by using the \unix/ link facility, | |
145 different names can be given to the same command. | |
146 Since each \MH/ command looks | |
147 in the \profile/ | |
148 for a component with the name by which it was invoked, | |
149 it's possible to have different defaults for the same program. | |
150 For example, | |
151 it is not uncommon to link \pgm{prompter} | |
152 (a simple prompting editor front-end) | |
153 under the name \pgm{rapid} in the | |
154 user's \file{bin/} directory, and add to the \profile/: | |
155 \example rapid:\ -prepend\ -rapid\endexample | |
156 As a result, | |
157 when \pgm{prompter} is invoked as \pgm{rapid}, | |
158 it automatically uses the \switch{prepend} and \switch{rapid} options. | |
159 | |
160 The profile component \eg{Path:} is the path to the user's | |
161 \MH/-directory, usually \Mail/. | |
162 In addition to containing the user's folders, | |
163 the \MH/-directory also contains {\it skeletons} and | |
164 {\it templates} used by the \MH/ programs, | |
165 and the user's \context/ file. | |
166 This latter file has the same format as the user's \profile/, | |
167 and contains the dynamic, | |
168 context-dependent information about the user's environment. | |
169 Whenever \MH/ looks for an \MH/-specific file, | |
170 such as a template or skeleton, | |
171 it first consults the user's \MH/-directory, | |
172 and then a system-wide library area. | |
173 | |
174 The \MH/ user always has a {\it current folder}, | |
175 which is the folder in which | |
176 the user is currently (or was last) working. | |
177 Since any \MH/ program which deals with folders implicitly manipulates this | |
178 information, | |
179 the name of the current folder is stored in the \file{context} | |
180 component \eg{Current-Folder:}. | |
181 Every folder has a {\it current message} known as \arg{cur}. | |
182 These values are the defaults for \MH/ commands which | |
183 accept folder and/or messages arguments. | |
184 | |
185 \MH/ programs make use of a set of envariables | |
186 which further customize their behavior. | |
187 The \file{\$MH} envariable, if present, | |
188 specifies the name of an alternate profile for the user. | |
189 This allows a user of \MH/ to | |
190 easily maintain multiple mail-handling environments. | |
191 | |
192 In terms of command syntax, | |
193 most \MH/ commands accept an optional {\it folder} argument, | |
194 such as \arg{+outbox}. | |
195 Unlike most \unix/ commands, | |
196 all \MH/ commands have switches which are words, rather than single letters. | |
197 Switches may be abbreviated to the least unambiguous prefix. | |
198 All \MH/ commands also support a \switch{help} switch, | |
199 which lists the syntax of the command along with available switches, | |
200 and the version number of the command. | |
201 Most \MH/ commands also take a \arg{msg} or \arg{msgs} argument | |
202 which takes the form of a message number (\eg{1}), a message range (\eg{1-2}), | |
203 a standard sequence name (\eg{cur}), | |
204 or a user-defined sequence name (\eg{select}). | |
205 | |
206 \tagdiagram{1}{An \MH/ Session}{session} | |
207 \subsection{An \MH/ Transcript} % jlr | |
208 Figure~\session\ contains a transcript of a simple \MH/ session. | |
209 First, \pgm{inc} is run to incorporate the new mail into the | |
210 user's \eg{+inbox} folder. | |
211 | |
212 A \pgm{scan} listing of the mail is printed while | |
213 it is being incorporated. | |
214 (The user could run \pgm{scan} explicitly to generate additional \pgm{scan} | |
215 listings later on.) | |
216 The \pgm{scan} listing gives the message number, followed | |
217 by the date, message sender, and subject. | |
218 (If the message originated from the user generating the listing, | |
219 the \eg{to:} addressee is displayed instead of the sender.) | |
220 If the subject is short, | |
221 the first part of the message body is displayed after the characters \eg{<<}. | |
222 The plus sign (`+') after | |
223 the message number indicates the current message. | |
224 | |
225 The user \pgm{show\/}s the message, and decides to \pgm{repl\/}y. | |
226 A reply draft | |
227 is created using the headers of the message being replied-to, | |
228 using the default \file{replcomps} template. | |
229 The default editor, \pgm{prompter}, is called to edit the draft. | |
230 When an EOT is typed, \pgm{prompter} exits and the | |
231 user is left at the \whatnow/ prompt. | |
232 The option \pgm{send} is chosen. | |
233 Since there were no problems in posting the draft with the message transport | |
234 system, | |
235 no additional output is produced. | |
236 (\MH/ is not verbose by default.) | |
237 | |
238 The user then decides to compose a new message. | |
239 The default skeleton, \file{components}, is copied to the draft, | |
240 and \pgm{prompter} is once again called. | |
241 After entering the addresses, subject, and body, | |
242 the user then \pgm{send\/}s the \file{draft} from the \whatnow/ prompt, | |
243 using \eg{send\ -verbose}, which causes | |
244 \MH/ to list out the message addresses as it submits them | |
245 to the message transport system. | |
246 | |
247 \section{Some \MH/ Features} % mtr | |
248 We now consider certain advanced features in \MH/. | |
249 These features have been chosen to demonstrate some useful capabilities | |
250 available to the \MH/ user. | |
251 | |
252 \subsection{Message Sequences and Selection} % jlr | |
253 \MH/ has several built-in message sequence names, which may | |
254 be used anywhere a \arg{msg} or \arg{msgs} argument is expected. | |
255 These are: | |
256 \arg{cur}, \arg{next}, \arg{prev}, \arg{first}, \arg{last}, and \arg{all}. | |
257 Message ranges may also be specified. | |
258 For example, \arg{all} is actually \arg{first-last}, and | |
259 \arg{+mh\ last:5} references the last five messages in your | |
260 \arg{+mh} folder. | |
261 A powerful capability of \MH/ is the ability to use not only the pre-defined | |
262 message sequence names, | |
263 but also arbitrary user-defined message sequence names. | |
264 | |
265 Although all \MH/ programs recognize user-defined sequences when appropriate, | |
266 the \pgm{pick} and \pgm{mark} commands can create and modify | |
267 user-defined message sequences. | |
268 The \pgm{mark} command allows low-level manipulation of sequences, | |
269 and is not particularly interesting in our discussion. | |
270 | |
271 The \pgm{pick} command selects certain messages out of a folder. | |
272 The criteria used for selection may be a search string and/or a date range. | |
273 | |
274 Searching is performed on either a specific header in the message | |
275 (e.g., \eg{To:}), | |
276 or anywhere within the message. | |
277 By default, | |
278 \pgm{pick} lists out the message numbers that matched | |
279 the selection criteria. | |
280 Thus, \pgm{pick} is useful in backquoted operations to the shell. | |
281 For example, to scan all the messages in the current folder from ``frated'', | |
282 the \MH/ user issues the command: | |
283 \example scan\ \bq{pick\ -from\ frated}\endexample | |
284 To perform more complicated message selection, | |
285 user-defined sequences are employed. | |
286 Supplying a \switch{sequence\ name} | |
287 argument to \pgm{pick}, will cause it to define the | |
288 sequence \arg{name} as those messages matched. | |
289 | |
290 Giving \pgm{pick} a list of messages causes it to limit its search to just | |
291 those messages. | |
292 For example, | |
293 to find all the messages in the current folder from ``frated'' also dated | |
294 before friday: | |
295 \example pick\ -from\ frated\ -sequence\ select\\ | |
296 pick\ select\ -before\ friday\ -sequence\ select\endexample | |
297 With the first \pgm{pick} command, | |
298 the sequence \eg{select} is defined | |
299 to be all those messages from ``frated''. | |
300 In the second command, only those messages already in the \eg{select} | |
301 sequence are searched, and the \eg{select} sequence is redefined to be | |
302 only those messages which are also | |
303 dated before friday. | |
304 Those messages could then be \pgm{show\/}n with: | |
305 \example show\ select\endexample | |
306 When a \switch{sequence\ name} argument is given to \pgm{pick}, | |
307 the default behavior --- listing the message numbers | |
308 matched --- is inhibited. | |
309 To re-enable this behavior, the \switch{list} option may be given. | |
310 As a result, | |
311 advanced users of \MH/ often put the following line in their \profile/: | |
312 \example pick:\ -sequence\ select\ -list\endexample | |
313 which allows them to easily make use of the \arg{select} sequence as the | |
314 messages last selected with \pgm{pick}. | |
315 | |
316 Often it is desirable to act upon those messages which | |
317 are {\it not} members of a given sequence. | |
318 For this purpose, | |
319 the \eg{Sequence-Negation:} profile entry is useful. | |
320 If the name of a user-defined sequence is prefixed with the value of the | |
321 sequence-negation profile entry, | |
322 \MH/ commands will operate upon those messages which are {\it not} members | |
323 of that sequence. | |
324 For example, given a profile entry of: | |
325 \example Sequence-Negation:\ not\endexample | |
326 those messages which | |
327 are not in the \arg{select} sequence could be \pgm{scan\/}'d with: | |
328 \example scan\ notselect\endexample | |
329 | |
330 Obviously, some confusion could result if an attempt was made | |
331 to define a sequence name | |
332 which began with the sequence-negation string (e.g., \eg{notselect}). | |
333 For this reason, \MH/ users will often use a single | |
334 character, | |
335 which their shell doesn't interpret, | |
336 as their sequence-negation string | |
337 (e.g., up-caret (`\^{}') for {\it C} Shell users, | |
338 and exclamation-mark (`!') for {\it Bourne} shell users). | |
339 | |
340 \MH/ also provides a way of automatically remembering the last | |
341 message list given to | |
342 an \MH/ command. | |
343 This facility is implemented by using a profile entry called | |
344 \eg{Previous-Sequence:}. | |
345 | |
346 \subsection{Draft Handling} % jlr | |
347 After the initial edit of a message draft, | |
348 the \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} programs | |
349 give the user a \whatnow/ prompt. | |
350 The valid responses include: | |
351 \pgm{edit} to re-edit the draft, | |
352 \pgm{quit} to exit without sending the draft, | |
353 \pgm{send} to send the draft, and | |
354 \pgm{push} to send the draft in the background. | |
355 | |
356 When the \pgm{send} option is given, | |
357 the draft is posted with the message transport system. | |
358 If there problems posting the draft, | |
359 the \whatnow/ prompt is re-issued, | |
360 so errors in the draft may be corrected. | |
361 | |
362 Since posting the draft can be slow, | |
363 the \pgm{push} option allows the \MH/ user to send the draft in the | |
364 background, and return immediately to the shell. | |
365 If there are problems posting the message, | |
366 the user will not see the diagnostics produced by | |
367 the message transport system. | |
368 For this reason, | |
369 if \pgm{push} is used instead of \pgm{send}, | |
370 and the message is not successfully posted, | |
371 \MH/ mails a message to the user | |
372 containing any diagnostics which the message transport system produced | |
373 along with a copy of the message. | |
374 Later, | |
375 the draft may be re-edited by entering \eg{comp\ -use}. | |
376 | |
377 A relatively new feature of \MH/ is the ability to use a folder to store | |
378 multiple drafts. | |
379 These drafts are kept in an ordinary \MH/ folder, | |
380 and may be operated upon by \MH/ commands. | |
381 To enable this feature, | |
382 the \MH/ user selects a folder-name for the draft-folder, | |
383 and creates an entry in the \profile/: | |
384 \example Draft-Folder:\ +foldername\endexample | |
385 From this point on, | |
386 when a message is composed, | |
387 the draft will be created as a message in that folder, | |
388 instead of using the \file{draft} file in the user's \MH/ directory. | |
389 Unfortunately, | |
390 if posting problems occur on a message which has been \pgm{push\/}'d, | |
391 it may be difficult to re-edit the draft with | |
392 \eg{comp\ -use}. | |
393 This might be the case if the user had started composing another message, | |
394 while that first draft was being posted. | |
395 In that event, | |
396 the current-message in the draft-folder would no longer point | |
397 to the failed draft. | |
398 | |
399 There is a solution for this problem, however. | |
400 By default, | |
401 \pgm{push} assumes the \switch{forward} option, | |
402 which says that if the message draft fails to be posted, | |
403 it should be forwarded back to the user in the | |
404 error report which \pgm{push} generates. | |
405 The failed draft may then be extracted with the \pgm{burst} program | |
406 (discussed later). | |
407 | |
408 \subsection{BBoards} % mtr | |
409 \MH/ has a convenient interface to the UCI BBoards facility\cite{MRose84a}.% | |
410 \nfootnote{The UCI BBoards facility can run under either the \MMDF/ or | |
411 \SendMail/, | |
412 or in a more restricted form under stand-alone \MH/.} | |
413 This facility permits the efficient distribution of interest group messages | |
414 on a single host, | |
415 to a group of hosts under a single administration, | |
416 and to the ARPA Internet community. | |
417 | |
418 Although most readers are probably familiar with the concept of an interest | |
419 group in the Internet context, a brief description is now given. | |
420 Observant readers will notice that the distributed nature of the | |
421 ``network news'' (a.k.a.~USENET) | |
422 tends to avoid many of the problems described below. | |
423 | |
424 Described simply, an interest group is composed of a number of subscribers | |
425 with a common interest. | |
426 These subscribers post mail to a single address, known as the | |
427 {\it distribution} address (e.g., {\tx MH-Workers@UCI}. | |
428 From this distribution address, a copy of the message is sent to each | |
429 subscriber. | |
430 Each group has a {\it moderator}, | |
431 who is the person that runs the group. | |
432 This moderator can usually be reached at a special address, | |
433 known as the {\it request} address (e.g., {\tx MH-Workers-Request@UCI}). | |
434 Usually, the responsibilities of the moderator are quite simple, | |
435 since the mail system handles distribution to subscribers automatically. | |
436 In some interest groups, | |
437 instead of each separate message being distributed directly to subscribers, | |
438 a batch of (hopefully related) messages | |
439 are put into a {\it digest} format by the | |
440 moderator and then sent to the subscribers. | |
441 (This is similar to a newsletter format.) | |
442 Although this requires more work on the part of the moderator | |
443 and introduces delays, | |
444 such groups tend to be better organized. | |
445 | |
446 Unfortunately, some problems arise with the scheme outlined above. | |
447 First, if two users on the same host subscribe to the same interest group, | |
448 two copies of the message are delivered. | |
449 This is wasteful of both processor and disk resources at that host. | |
450 | |
451 Second, | |
452 some groups carry a lot of traffic. | |
453 Although subscription to a group does indicate interest on the part of a | |
454 subscriber, | |
455 it is usually not interesting to get 50 or so messages delivered | |
456 each day | |
457 to the user's private maildrop, | |
458 interspersed with {\it personal} mail, | |
459 which is likely to be of a much more important and timely nature. | |
460 | |
461 Third, if a subscriber's address in a distribution list | |
462 becomes ``bad'' somehow and causes failed mail to be returned, | |
463 the originator of the message is normally notified. | |
464 It is not uncommon for a large list to have several bogus addresses. | |
465 This results in the originator being flooded with ``error messages'' from | |
466 mailers across the Internet stating that a given address on the list was | |
467 bad. | |
468 Needless to say, | |
469 the originator usually does not care if the bogus addresses got a copy | |
470 of the message or not. | |
471 The originator is merely interested in posting a message | |
472 to the group at large. | |
473 On the other hand, | |
474 the moderator of the group does care if there are bogus addresses on the list, | |
475 but ironically does not receive notification. | |
476 | |
477 To solve these problems, | |
478 the UCI BBoards facility introduces a new entity into the picture: | |
479 a {\it distribution channel}. | |
480 All interest group mail is handled by | |
481 the special mail system component. | |
482 The distribution address for an interest-group | |
483 maps mail for that interest-group to the distribution channel, | |
484 which then performs | |
485 several actions. | |
486 First, if local delivery is to be performed, | |
487 a copy of the message is placed in a global maildrop for the interest | |
488 group with a timestamp and a unique number. | |
489 Local users can read messages posted for the interest group by reading this | |
490 ``public'' maildrop. | |
491 Second, if further distribution is to take place, | |
492 a copy of the message is sent to the distribution address in such a way that | |
493 if any of the addresses are bogus, | |
494 failure notices will be returned to the local maintainer of the group | |
495 address list, rather than the originator of the message. | |
496 | |
497 This scheme has several advantages: | |
498 First, messages delivered to the local host are processed and saved once | |
499 in a globally accessible area. | |
500 The UCI BBoards facility supports software which allows a user to query an | |
501 interest group for new messages and to read and process | |
502 those messages in the \MH/-style. | |
503 Second, once a host administrator subscribes to an interest group, | |
504 each user may join or quit the list's readership without | |
505 contacting anyone. | |
506 Third, a hierarchical distribution scheme can be constructed to | |
507 reduce the amount of delivery effort. | |
508 Finally, errors are prevented from propagating. | |
509 When an address on the distribution list goes bad, | |
510 the list moderator who is responsible for the address is notified. | |
511 If a local moderator does not exist, | |
512 then the local PostMaster is notified (not the global group moderator). | |
513 | |
514 In addition to solving the problems outlined above, | |
515 the UCI BBoards facility supports several other capabilities. | |
516 BBoards may be automatically archived in order to conserve disk space and | |
517 reduce processing time when reading current items. | |
518 Also, | |
519 the archives can be separately maintained on tape for access by interested | |
520 researchers. | |
521 | |
522 Special alias files may be generated which allow the \MH/ user to shorten | |
523 address entry. | |
524 For example, instead of sending to {\tx SF-Lovers@Rutgers}, | |
525 a user of \MH/ usually sends to \eg{SF-Lovers} and the \MH/ aliasing | |
526 facility automatically makes the appropriate expansion in the headers of the | |
527 outgoing message. | |
528 Hence, | |
529 the user need only know the name of an interest group and not its global | |
530 network address. | |
531 | |
532 Finally, the UCI BBoards facility supports {\it private} interest groups | |
533 using the \unix/ group access mechanism. | |
534 This allows a group of people on the same or different machines to conduct a | |
535 private discussion. | |
536 | |
537 The practical upshot of all this is that the UCI BBoards facility automates | |
538 the vast majority of BBoards handling from the point of view of both the | |
539 PostMaster and the user. | |
540 | |
541 \MH/ provides three programs to deal with interest groups. | |
542 The \pgm{bbc} program is used to check on the status of one or more groups, | |
543 and to optionally start an \MH/ shell on those groups which the user is | |
544 interested in. | |
545 The \pgm{bbl} program can be used to manually perform maintenance on a | |
546 discussion group beyond the normal automatic capabilities of the UCI BBoards | |
547 facility. | |
548 Finally, | |
549 the \pgm{msh} program implements an \MH/ shell for reading BBoards, | |
550 in which nearly all of the \MH/ commands are implemented in a single program. | |
551 | |
552 Observant readers may note that the use of \pgm{msh} is contrary to the \MH/ | |
553 philosophy of using relatively small, single-purpose programs. | |
554 Sadly, | |
555 the authors admit that this is true. | |
556 In an effort to minimize use of system resources however, | |
557 BBoards are kept in maildrop format instead of folders.% | |
558 \nfootnote{When the message transport system delivers a message to a user | |
559 it stores it in a single file, called a {\it maildrop}. | |
560 Since many messages may be present in a single maildrop, | |
561 (in theory) there is a unique string acting as a separator between messages | |
562 in the maildrop. | |
563 Although this is convenient for storage of messages, | |
564 it makes retrieval more difficult unless a separate index into the maildrop | |
565 is kept. | |
566 This latter approach is taken by the \pgm{msg} program available with \MMDFII/ | |
567 and by \pgm{msh} as well.} | |
568 Some research has gone into overcoming this problem to restore | |
569 \MH/'s purity of purpose, | |
570 but all solutions proposed to date are either unworkable or require | |
571 significant recoding of \MH/'s internals. | |
572 | |
573 \subsection{Bursting} % jlr | |
574 Internet interest group mail is often sent out in digest form. | |
575 The experienced \MH/ user may wish to deal with the digest messages on | |
576 an individual basis, however. | |
577 The \pgm{burst} program allows the \MH/ user to extract these digest | |
578 messages, | |
579 and store each as an individual \MH/ message. | |
580 | |
581 \pgm{Burst} will also extract forwarded messages generated by \pgm{forw} | |
582 (or the forwarded message in the error report generated by \pgm{push}, | |
583 as described above). | |
584 Although \pgm{burst} cannot always decapsulate | |
585 messages encapsulated by sites not running \MH/, | |
586 it adheres to the proposed standard described in \cite{MRose85b}. | |
587 | |
588 \subsection{Distributed Mail} % mtr | |
589 The ARPA Internet community consists of many types of heterogeneous nodes. | |
590 Some hosts are large mainframe computers, | |
591 others are personal workstations. | |
592 All communicate using the \milstd/ TCP/IP protocol suite\cite{IP,TCP}. | |
593 Messages which conform to the Standard for the Format of ARPA Internet Text | |
594 Messages\cite{DCroc82} | |
595 are exchanged using the Simple Mail Transfer Protocol\cite{SMTP}. | |
596 | |
597 On smaller nodes in the ARPA Internet, | |
598 it is often impractical to maintain | |
599 a message transport system (e.g., \SendMail/). | |
600 For example, | |
601 a workstation may not have sufficient resources (cycles, disk space) | |
602 in order to permit an SMTP server and associated local mail delivery system | |
603 to be kept resident and continuously running. | |
604 Furthermore, | |
605 the workstation could be off-net for extended periods of time. | |
606 Similarly, | |
607 it may be expensive (or impossible) to keep a personal computer | |
608 interconnected to an IP-style network for long periods of time. | |
609 In other words, | |
610 the node is lacking the resource known as ``connectivity''. | |
611 | |
612 Despite this, | |
613 it is often desirable to be able to manage mail with \MH/ on these smaller | |
614 nodes, | |
615 and they often support a user agent to aid the tasks of mail handling. | |
616 To solve this problem, | |
617 a network node which can support a message transport entity | |
618 (known as {\it service} host) offers | |
619 a maildrop service to these less endowed nodes | |
620 (known as {\it client} hosts). | |
621 The Post Office Protocol\cite{JReyn84} (POP) is intended to permit a | |
622 workstation to dynamically access a maildrop on a service host to pick-up | |
623 mail.% | |
624 \nfootnote{Actually, | |
625 there are three different descriptions of the POP. | |
626 The first, cited in \cite{JReyn84}, | |
627 was the original description of the protocol, | |
628 which suffered from certain problems. | |
629 Since then, | |
630 two alternate descriptions have been developed. | |
631 The official revision of the POP\cite{MButl85}, | |
632 and the revision of the POP which \MH/ uses | |
633 (which is documented in an internal memorandum in the \MH/ release). | |
634 This paper considers the POP in the context of the \MH/ release.} | |
635 The level of access includes the ability to | |
636 determine the number of messages in the maildrop and the size of each message, | |
637 as well as to retrieve and delete individual messages. | |
638 More sophisticated implementations of the POP server | |
639 are able to distinguish between the header and body portion of each message, | |
640 and send $n$ lines of a message to the POP client. | |
641 This capability is useful in thinly connected environments where conservation | |
642 of bandwidth is important. | |
643 By utilizing a more intelligent POP client, | |
644 a user may generate ``scan~listings'' and decide dynamically which messages | |
645 are worth taking delivery on. | |
646 The philosophy of the POP is to put intelligence in the | |
647 POP clients and not the POP servers. | |
648 | |
649 The current release of \MH/ supports the above model fully. | |
650 A POP client program is available to retrieve a maildrop from a POP service | |
651 host. | |
652 In addition, | |
653 using the SMTP configuration for delivery in \MH/ | |
654 (either in conjunction with \SendMail/ or the \MMDF/), | |
655 a user is able to specify a search-list of service hosts (and/or networks) | |
656 to try to post mail. | |
657 Using this search-list, | |
658 when an \MH/ user posts a draft, | |
659 the \pgm{post} program will attempt to establish an SMTP connection | |
660 with each host in the search-list to post the message until it succeeds. | |
661 Initial experimentation using the POP and \MH/ | |
662 in a local network environment has proved quite successful. | |
663 | |
664 \section{User Interface Issues in \MH/} % mtr | |
665 At this point, | |
666 it is perhaps useful to take a step backwards and examine the success | |
667 and problems of \MH/'s approach to user interfaces. | |
668 | |
669 \subsection{Creeping Featurism} % mtr | |
670 A complaint often heard about systems which undergo substantial development | |
671 by many people over a number of years, is that more and more options are | |
672 introduced which add little to the functionality but greatly increase the | |
673 amount of information a user needs to know in order to get useful work done. | |
674 This is usually referred to as {\it creeping featurism}. | |
675 | |
676 Unfortunately \MH/, | |
677 having undergone six years of off-and-on development by ten or so | |
678 well-meaning programmers (the present authors included), | |
679 suffers mightily from this. | |
680 For example, | |
681 the \pgm{send} command has twenty-five visible switches, | |
682 and at least nine hidden switches, | |
683 for a total of thirty-four. | |
684 The poor user who types \example send\ -help\endexample watches the options | |
685 scroll off the screen | |
686 (since the \switch{help} switch also lists out four other lines of | |
687 information).% | |
688 \nfootnote{Recently, | |
689 this was fixed by compressing the way in which switches are presented. | |
690 The solution is only temporary however, | |
691 as \pgm{send} will no doubt acquire an {\it endless} number of switches in | |
692 the years to come.} | |
693 The sad part is that all of these switches are useful in one form or another. | |
694 | |
695 There are a lot of good things to be said for the | |
696 ``one program, one function'' philosophy of system design. | |
697 In the \MH/ case, however, | |
698 each program really does only one mail handling activity | |
699 (with a few minor exceptions). | |
700 The options associated with each command are present to modify the program's | |
701 behavior to perform similar, but slightly different tasks. | |
702 In further defense of \MH/, | |
703 note that there are~32 \MH/ commands at present, | |
704 all performing different tasks. | |
705 | |
706 The problem with creeping featurism though, | |
707 is that while the functionality of the system increases sub-linearly, | |
708 the complexity of the system increases linearly. | |
709 That is, | |
710 although the number of switches that a program takes might double, | |
711 it is unlikely that the program's functionality or capabilities will double. | |
712 | |
713 \subsection{Templates versus Switches} % mtr | |
714 One way to trim the explosion of available options, | |
715 while still increasing functionality, | |
716 is to introduce options with a richer domain. | |
717 Hence, | |
718 instead of using options which take {\it on} or {\it off} forms | |
719 or simple numeric or string values, | |
720 the possible values which an option might take on is given a large space. | |
721 There are several ways that this might be accomplished. | |
722 | |
723 \tagdiagram{2}{Draft Skeleton}{components} | |
724 The \pgm{comp}, \pgm{dist}, and \pgm{forw} programs | |
725 use draft {\it skeletons} (simple form fill-in files) to construct the | |
726 general format of the draft being composed. | |
727 An example of a draft skeleton used for composing new messages | |
728 (by \pgm{comp\/}) is shown in Figure~\components. | |
729 The approach is to let the user specify (and later edit) both arbitrary | |
730 headers of draft and the body of the draft. | |
731 Note while most of the fields are empty, | |
732 the first \eg{Fcc:} field already contains a value. | |
733 By using the simple prompting editor, \pgm{prompter}, | |
734 the user can speedily enter the headers of the message. | |
735 The \pgm{prompter} program given the skeleton in Figure~\components\ would | |
736 prompt the user for the contents of each field, | |
737 except for the second \eg{fcc:}, | |
738 which it would include verbatim. | |
739 It would then read the body of the message up to an end-of-file. | |
740 Naturally, | |
741 the \MH/ user is free to use {\it any} editor to edit {\it any} part of the | |
742 draft (headers or body). | |
743 This example | |
744 demonstrates the flexibility achieved by not limiting what headers a | |
745 draft may contain (which most mail sending programs do), | |
746 while still retaining the simplicity of being able to treat the entire | |
747 message draft as a \unix/ file. | |
748 | |
749 \tagdiagram{3}{Reply Template}{replcomps} | |
750 Another more interesting approach is used by the \pgm{repl} command, | |
751 which constructs a draft in reply-to a previously received message. | |
752 Instead of adding switches to indicate which fields of the draft should be | |
753 derived from the message being replied-to, | |
754 and how they should be derived, | |
755 a single option, | |
756 the ability to specify a {\it template}, was made available. | |
757 An example of a reply template is shown in Figure~\replcomps. | |
758 Put simply, | |
759 based on the presence of certain fields in the message being replied-to, | |
760 and a few switches given by the user, | |
761 using the reply template, | |
762 \pgm{repl} generates the reply draft automatically. | |
763 | |
764 \tagdiagram{4}{The \file{tripcomps} Reply Template}{tripcomps} | |
765 This facility, for example, | |
766 can be used to generate automatic replies.% | |
767 \nfootnote{\MH/ supports the notion of a user-defined {\it mail hook} | |
768 which is invoked each time a user receives mail.} | |
769 One function might be to write a \pgm{rcvtrip} shell script | |
770 which automatically answered messages when mail wasn't being read for a | |
771 period of time | |
772 (e.g., while attending a conference). | |
773 An example of a reply template at the heart of such a script | |
774 is shown in Figure~\tripcomps. | |
775 | |
776 \tagdiagram{5}{The \file{bombcomps} Reply Template}{bombcomps} | |
777 Finally, | |
778 another application might be to utilize | |
779 the highly useful letter bomb protocol.% | |
780 \nfootnote{The authors wish to credit Ron Natalie of the Ballistics Research | |
781 Laboratory in Aberdeen, Maryland for formalizing the | |
782 use of this protocol in the ARPA Internet community.} | |
783 The important thing to note about this template is that it generates not only | |
784 the headers of the reply draft (with a creative \eg{Reply-to:} address), | |
785 but the body as well. | |
786 Hence, | |
787 the commands | |
788 \example | |
789 repl\ -form\ bombcomps\ -noedit\ ;\ rmm\\ | |
790 What\ now?\ push% | |
791 \endexample | |
792 are very handy for dealing with disturbing mail in a straight-forward manner. | |
793 Of course, \pgm{repl} could be linked to \pgm{bomb} in the user's \file{bin/} | |
794 directory and an appropriate line could be added to the user's \MH/ profile, | |
795 in order to further shorten type-in. | |
796 | |
797 \tagdiagram{6}{Display Template}{mhlforward} | |
798 A variation on the reply template is the {\it display template}. | |
799 A display template, as used by the \pgm{mhl} program, | |
800 contains instructions on how to format a message. | |
801 In addition to being used by \pgm{show}, et.~al., | |
802 the \pgm{forw} program can also use a display template to format each | |
803 message being forwarded. | |
804 Similarly, | |
805 although \pgm{repl} uses a reply template to construct the draft | |
806 being composed, | |
807 it also may use a display template to format the body of the message | |
808 being replied-to for enclosure in the reply. | |
809 Furthermore, | |
810 the \pgm{post} program may use a display template to format the body of a | |
811 blind-carbon-copy. | |
812 An example of a display template used for formatting forwarded messages | |
813 is shown in Figure~\mhlforward. | |
814 | |
815 As with reply templates, | |
816 display templates can offer a lot of functionality. | |
817 For example, | |
818 the one line display template: | |
819 \example | |
820 body:nocomponent,overflowtext=,overflowoffset=0,width=10000% | |
821 \endexample | |
822 can be used to extract the body of a message, | |
823 while ignoring the headers. | |
824 Hence, | |
825 if a \pgm{shar} archive arrived in the mail, | |
826 a convenient way to unpack it, | |
827 assuming the above display template was called \file{mhl.body}, | |
828 would be: | |
829 \example show\ -form\ mhl.body\ |\ sh\endexample | |
830 | |
831 The biggest win with display templates, | |
832 of course, | |
833 is that all those annoying header lines which mailers | |
834 everywhere generate can be simply and easily filtered out. | |
835 | |
836 \subsection{Modularity versus Monolithicity} % jlr | |
837 Since \MH/ is a set of programs | |
838 which perform separate tasks, | |
839 as opposed to being a single, monolithic program, | |
840 the power of the shell is used directly to aid in mail-handling. | |
841 One powerful capability which this design achieves is the ability to extend | |
842 the \MH/ command set, | |
843 by developing shell scripts which use the standard \MH/ | |
844 programs to accomplish complicated or specialized tasks. | |
845 | |
846 \tagdiagram{7}{The \pgm{mpick} Script}{mpick} | |
847 For example, | |
848 in the \MH/ distribution there is a shell script | |
849 called \pgm{mpick} (shown in Figure~\mpick) | |
850 which tries to locate all the messages which pertain to a given discussion, | |
851 by looking at the \eg{Message-ID:} and \eg{In-reply-to:} headers, | |
852 to find matching message-ids.% | |
853 \nfootnote{Note that the shell scripts included in the \MH/ distribution | |
854 are written for the {\it Bourne} shell, | |
855 and have a `:' as the first character of the first line, | |
856 so they will be portable to all versions of \unix/, | |
857 not just those which support the | |
858 Berkeley `\#!' enhancement.} | |
859 | |
860 \tagdiagram{8}{The \pgm{append} Editor}{appended} | |
861 Unfortunately, some parts of \MH/ are somewhat monolithic. | |
862 An example of this is the \whatnow/ prompt. | |
863 There are only a few options at this prompt, | |
864 and one cannot give a normal shell command. | |
865 Some \MH/ users seem to feel that more options should be added to | |
866 the \whatnow/ prompt, such as an \pgm{insert-file} option. | |
867 It was argued that just about any editor would allow you to | |
868 insert a file, and another \whatnow/ option was not needed. | |
869 These users persisted, however, so the | |
870 problem was solved, by writing a trivial shell | |
871 script ``editor'' (see Figure~\appended) | |
872 which could be invoked by the \pgm{edit} option: | |
873 \example What now?\ edit\ append\ filename\endexample | |
874 | |
875 A better interface at this point is really needed, however. | |
876 One possibility is to simply pass any unrecognized commands on | |
877 to a shell for interpretation, supplying the path name of the draft file | |
878 as an argument. | |
879 A solution which shows more promise is to give you a sub-shell | |
880 {\it instead} of the \whatnow/ prompt, | |
881 and setup certain envariables so that | |
882 the \MH/ commands would act upon the \file{draft} by default. | |
883 For example, \pgm{show} with no \arg{msgs} arguments | |
884 would show the draft instead of the current message. | |
885 This alternative has recently been implemented and is under testing. | |
886 | |
887 \section{The \MH/ Distribution} % mtr | |
888 The \mh5 distribution is now briefly described, | |
889 both in terms of static configuration methods | |
890 and dynamic tailoring. | |
891 Appendix~B describes the mechanics of receiving an \mh5 distribution. | |
892 | |
893 \subsection{Configurable \MH/} % jlr | |
894 The \MH/ distribution currently runs on a large number of different \unix/ | |
895 versions, | |
896 ranging from MicroSoft XENIX to Berkeley 4.2\bsd/. | |
897 All the code which is specific to a particular target environment is | |
898 enabled via the C-preprocessor \eg{\#ifdef} mechanism, | |
899 so compilation under different versions of \unix/ is trivial. | |
900 There are, | |
901 however, | |
902 a large number of compile-time options which may vary from site to site, | |
903 so an automated configuration method was needed. | |
904 | |
905 \tagdiagram{9}{Sample \MH/ Configuration File}{mhconfig} | |
906 The \MH/-installer must create a configuration file, | |
907 which contains a list of the compile-time options | |
908 and the values which are desired for them. | |
909 Compile-time options include the installation location for \MH/, | |
910 what kind of message transport system is to be used, | |
911 and the default editor for the installation. | |
912 An example of such a configuration file is shown in Figure~\mhconfig. | |
913 | |
914 After creating this file (several examples are included in the distribution), | |
915 the installer runs the \pgm{mhconfig} program, | |
916 which customizes the \file{Makefile\/}s and some of the programs, | |
917 for that site's particular installation. | |
918 No hand-editing of any source code should be necessary, | |
919 under normal circumstances. | |
920 | |
921 \subsection{Interface to the Message Transport System} % jlr & mtr | |
922 \MH/ will run with a number of message transport systems, | |
923 including \SendMail/, \MMDFII/, and a small stand-alone system. | |
924 One flexible method of posting mail is through an SMTP connection. | |
925 There are a couple of major wins in using this configuration: | |
926 First, | |
927 none of the \MH/ programs need to know where the interface programs to | |
928 the message transport system are located, | |
929 which makes them easier to move between systems. | |
930 Second, | |
931 mail can be posted on relay hosts, | |
932 and the local host of an \MH/ user may not need a message transport system at | |
933 all (as alluded to in the preceeding discussion on the POP). | |
934 | |
935 \tagdiagram{10}{Sample MTS Tailor File}{mtstailor} | |
936 Those parts of \MH/ which interact with the local message transport agent | |
937 read additional tailoring information when they start.% | |
938 \nfootnote{This simple facility is based on a more extensive | |
939 tailoring capability found in \MMDFII/.} | |
940 This information includes | |
941 the location of standard and alternate maildrops, | |
942 maildrop delimiter strings, | |
943 the locking directory and locking style, | |
944 and other tailoring information specific for the particular | |
945 message transport system in use | |
946 (e.g., the default server search-list when mail is posted with the SMTP). | |
947 In most cases, | |
948 by using a tailor file, | |
949 each site running a similar \MH/ configuration is able to simply transfer | |
950 \MH/ binaries between hosts. | |
951 An example of such a tailor file is shown in Figure~\mtstailor. | |
952 | |
953 A continuing question which is often raised is how intelligent should user | |
954 agents (like \MH/ and UCB \pgm{Mail}\/) be with respect to the environment in | |
955 which they operate. | |
956 At present, \MH/ likes to determine | |
957 the official hostnames for addresses when posting mail. | |
958 Many argue that this is improper or unnecessary behavior for a user agent, | |
959 and that the local message transport agent should handle these functions. | |
960 Unfortunately, | |
961 this implies that the message transport agent should munge headers when mail | |
962 is posted to remove local host aliases and only permit address fields with | |
963 fully-qualified addresses. | |
964 Sadly, neither \SendMail/ nor \MMDFII/ really gets this right | |
965 (flames to \file{/dev/null} please). | |
966 The current \MH/ maintainers believe that the resolution of host aliases to | |
967 official names should be a well-supported interface with the local message | |
968 transport agent. | |
969 However, to provide equal time to those who hold opposite views, | |
970 \MH/ supports a configuration option called \eg{DUMB} which disables \MH/'s | |
971 attempts to resolve addresses into fully-qualified strings. | |
972 | |
973 \section{Concluding Remarks} % jlr and mtr | |
974 While \MH/ has undergone significant development since | |
975 the original | |
976 Rand release, the authors have | |
977 tried to keep the fundamental concepts of | |
978 \MH/ unchanged. | |
979 % specific vs. general | |
980 The authors have continually had to battle against | |
981 well-meaning \MH/ users who wanted to make \MH/ | |
982 more like other (less powerful) user agents. | |
983 More and more ``features'' were often suggested for \MH/, | |
984 usually at the expense of making \MH/ less general, and more specific. | |
985 In nearly all cases, the ``features'' which these users wanted | |
986 were already present in \MH/ in a slightly different form, | |
987 or could be realized by simply writing a short shell script. | |
988 A classic example is the repeated requests by one user to have \pgm{dist} | |
989 take a list of messages rather than a single message and distribute each one | |
990 of them in turn. | |
991 A simple shell script which called \pgm{dist} repeatedly, | |
992 perhaps with ``canned'' arguments so the user typed in addressing information | |
993 only once, would easily meet this request. | |
994 | |
995 % generality | |
996 A number of \MH/ comands have a large number of options. | |
997 When adding options, the authors have tried to make the options | |
998 general, while still accomodating the requests of specific users. | |
999 An example of a specific request which was implemented as a | |
1000 general feature is the \eg{Previous-Sequence} profile entry | |
1001 (mentioned above). | |
1002 If you use this profile entry, every \MH/ command is forced to write | |
1003 out \context/ changes, making every command somewhat slower. | |
1004 Since only a few users wanted this capability, it was implemented | |
1005 in such a way that users who didn't want it, didn't have to pay | |
1006 the cost of slowing down every \MH/ command. | |
1007 | |
1008 % naive user :: MH | |
1009 \MH/ has a powerful tailoring capability provided by the \profile/. | |
1010 Using profile entries, users may | |
1011 customize their own environment without affecting others. | |
1012 Novice users often take advantage of the \MH/-tailoring | |
1013 capabilities to try to make \MH/ work similarly to | |
1014 other user agents they've used. | |
1015 This has the advantage of allowing them to quickly begin | |
1016 using \MH/ to handle their mail. | |
1017 However, since these novice users don't take advantange of all the | |
1018 capabilities of \MH/, | |
1019 they frequently will complain about things they think can't | |
1020 be done with \MH/, or could be done ``better'' some other way. | |
1021 Fortunately, | |
1022 as these users become more experienced with both \MH/ and \unix/, | |
1023 they can modify their environment to take better advantage of | |
1024 all of \MH/'s capabilities. | |
1025 Novice \MH/ users who see features lacking | |
1026 are encouraged to take a better look at what \MH/ {\it can} do, | |
1027 instead of trying to make \MH/ into something it isn't. | |
1028 This may sound rather inflammatory, | |
1029 but it would really be a much nicer world for us all if users of software | |
1030 systems would read the manual prior to asking questions. | |
1031 | |
1032 % speed consideration | |
1033 For a moment, let's consider the evolution of one \MH/ feature which has | |
1034 proved itself to be very useful. | |
1035 As users began employing \MH/ to handle their mail, | |
1036 the number of messages that could be processed | |
1037 in a given amount of time increased greatly. | |
1038 As the volume of messages increased however, | |
1039 it became clear that some \MH/ operations were too slow, | |
1040 in particular the interaction with the (slow) message transport system. | |
1041 To overcome this problem, the \pgm{push} option | |
1042 was added at the \whatnow/ prompt. | |
1043 Originally, this option was hidden from novice users | |
1044 and did little more than send the message in the background: | |
1045 any output generated by | |
1046 the background \pgm{send} process would be printed | |
1047 asyncronously on the terminal. | |
1048 If a message failed posting with the message transport system, | |
1049 it would simply be left in the \file{draft} file. | |
1050 | |
1051 Gradually, other features were added to \pgm{push}. | |
1052 Since users wanted to be able to send more than one draft | |
1053 at a time, \pgm{push} was changed to optionally | |
1054 rename the draft file before posting it. | |
1055 (This is what the hidden \switch{unique} option does.) | |
1056 Having message transport system diagnostics | |
1057 written asyncronously on the user's terminal was annoying, | |
1058 so \pgm{push} was made to intercept these diagnostics, | |
1059 and mail the user a report containing them. | |
1060 Although the diagnostic report mailed back by \pgm{push} contains | |
1061 the name of the draft which failed, | |
1062 a useful added feature was the ability to have \pgm{push} | |
1063 include the failed draft as well. | |
1064 Eventually, the draft-folder mechanism was implemented to make | |
1065 handling multiple message drafts much easier. | |
1066 | |
1067 | |
1068 \subsection{TODO} % mtr | |
1069 There are, no doubt, a number of improvements which could be made to \MH/. | |
1070 At the present time, | |
1071 what further development should \MH/ suffer? | |
1072 Although not by any means inclusive, | |
1073 here's a list: | |
1074 \smallskip | |
1075 {\advance\leftskip by\parindent | |
1076 \item{1.} Performance Enhancements\hbreak | |
1077 Hardware gets faster all the time, but people always complain that software | |
1078 is too slow. | |
1079 Owing to its user interface style, | |
1080 \MH/ is somewhat slower than monolithic programs like UCB \pgm{Mail}. | |
1081 It would be nice if \MH/ could be tuned or accelerated somehow. | |
1082 | |
1083 \item{2.} Port to System~5\hbreak | |
1084 \MH/ runs on 4.2\bsd/~\unix/ and Version~7 variants. | |
1085 It should not be difficult to port \MH/ to a SYS5 environment. | |
1086 This should significantly increase the number of hosts | |
1087 on which \MH/ can run. | |
1088 The authors, | |
1089 lacking a SYS5 machine (and experience with SYS5) to perform the port, | |
1090 are actively seeking a System~5 guru to attempt this feat. | |
1091 | |
1092 \item{3.} Interface to the Network News\hbreak | |
1093 Not all sites that run \MH/ are in the ARPA Internet, | |
1094 and as such the UCI BBoards facility may not be of much use to them. | |
1095 A good \MH/ interface to the network news would allow users on hosts with a | |
1096 news feed to employ the same interface for reading and sending both mail and | |
1097 news. | |
1098 | |
1099 \item{4.} Programmed Instruction for Beginners\hbreak | |
1100 The complexity of \MH/ is often intimidating to new users. | |
1101 It would be nice to develop a set of \pgm{learn} lessons for those users who | |
1102 don't like \pgm{man} pages and non-interactive tutorials. | |
1103 | |
1104 \item{5.} Message List Expansion\hbreak | |
1105 At present, when a list of messages is given to an \MH/ command, | |
1106 it expands the list and processes each message in numerical order | |
1107 rather than the order in which the messages were given | |
1108 (e.g., \eg{show\ 2\ 1} \pgm{show\/}s message~1 | |
1109 and then message~2). | |
1110 It would be nice if \MH/ processed messages in the order | |
1111 they were given. | |
1112 | |
1113 \item{6.} Context Changes\hbreak | |
1114 In nearly all cases, | |
1115 an \MH/ command does not write out context changes until it is about to exit | |
1116 successfully. | |
1117 There is some controversy as to whether this is the correct behavior | |
1118 in all cases. | |
1119 Some argue that once an \MH/ command has fully parsed its argument list, | |
1120 the context should be updated. | |
1121 \par} |