Annotation of processmail/process.tex, revision 2.1
2.1 ! boris 1: %$Id: process.tex,v 1.1 2002/02/04 15:04:07 boris Exp boris $
1.1 boris 2: %$Log: process.tex,v $
2.1 ! boris 3: %
1.1 boris 4: %Revision 1.9 1998/11/29 21:56:12 boris
5: %Добавил благодарности
6: %
7: %Revision 1.8 1998/11/29 21:50:48 boris
8: %Добавил изменения в формате.
9: %
10: %Revision 1.7 1998/11/17 22:48:33 boris
11: %Отказался от попытки включить программу в файл -- не совместимы с кои-8
12: %:(
13: %
14: % Revision 1.6 1998/11/17 17:02:51 boris
15: % Добавил регистрационные номера в формат.
16: %
17: % Revision 1.5 1998/11/15 04:52:25 boris
18: % Написал интерфейс.
19: %
20: %Revision 1.4 1998/11/15 03:38:25 boris
21: %Написал раздел "Форматы"
22: %
23: %Revision 1.3 1998/11/15 02:35:43 boris
24: %Исправил заголовки
25: %
26: \documentclass{article}
27: %
28: % Руссификация. Бывает и новее...
29: %
30: \usepackage{lh,russian,koi8}
31: \usepackage{amsmath}
32: \newcommand{\prog}[1]{\ensuremath{\text{{\textsl{#1}}}}}
33:
34:
35:
36: \begin{document}
37:
38: \title{Программа для обработки писем в IGP}
39: \author{Boris Veytsman, \texttt{boris@plmsc.psu.edu}}
40: \date{November 1998}
41: \maketitle
42: \thispagestyle{empty}
43: \tableofcontents
44:
45: \section{Введение}
46:
47: С тех пор, как количество команд в IGP превысило первый десяток,
48: подведение итогов тура стало тяжким бременем для дежурной
49: команды. Прочесть невероятное количество писем, извлечь ответы,
50: составить таблицу, да еще Собрание Сочинений\dots{} На это вполне может
51: уйти целиком рабочий день. Именно с этой целью по предложению Якова
52: Зайдельмана написана эта программа.
53:
54: Идея состоит в следующем. Самый важный этап в деятельности дежурной
55: команды---решить, заслуживает ли данный ответ плюса или минуса. Это мы
56: автоматизировать не можем. Но это автоматизировать и не надо. А вот
57: все остальное автоматизировать можно и нужно. Значит, программа должна
58: делать следующее:
59: \begin{enumerate}
60: \item Извлекать ответы из файла с письмами команд
61: \item Записывать их в файл, где все ответы были бы рядом, и было бы
62: оставлено место для оценки
63: \item Читать этот файл \emph{после} того, как дежурная команда
64: проставит оценки и составлять таблицу и собрание сочинений.
65: \item Время от времени создавать список команд, чьи ответы уже
66: получены, и слать на информационный лист.
67: \end{enumerate}
68: Необходимо учесть еще два важных обстоятельства:
69: \begin{enumerate}
70: \item Команда может прислать несколько писем. В этом случае более
71: позднее письмо считается более авторитетным, чем более раннее. Мы
72: будем предполагать для простоты, что более поздние письма находятся
73: в файле с письмами позже более ранних. Дело дежурной
74: команды---обеспечить такой порядок писем (может быть, вручную
75: корректируя взбрыки e-mailа).
76: \item Дежурная команда может оценивать ответы параллельно их
77: получению. Поэтому нельзя ``забывать'' старые оценки, читая новые.
78: \end{enumerate}
79:
80:
81: \section{Форматы}
82:
83:
84: \subsection{Письма с ответами}
85:
86: \begin{enumerate}
87: \item Каждое письмо содержит в строке Subject: строку в латиннице:
88: \begin{verbatim}
89: Subject: Otvety komandy "Nazvanie_komandy", NNN
90: \end{verbatim}
91: При этом название команды не должно содержать кавычек, а
92: \prog{NNN}---регистрационный номер команды. Если у команды еще нет
93: регистрационного номера, допускается его НЕ указывать
94: \item В теле письма может быть все, что угодно, вплоть до строки
95: \begin{verbatim}
96: *** "Название_команды", NNN
97: \end{verbatim}
98: При этом название команды может быть как в латиннице, так и в
99: кириллице, но быть \emph{одинаковым} для всех писем от данной команды
100: \item Каждый ответ имеет следующую структуру:
101: \begin{verbatim}
102: #NN. Текст ответа
103: Текст ответа
104: ...
105: \end{verbatim}
106: Здесь \prog{NN}---номер вопроса, а за ним следует текст ответа
107: (возможно, из нескольких строк)
108: \item Ответы заканчиваются строкой
109: \begin{verbatim}
110: ***
111: \end{verbatim}
112: После этой строки может следовать все, что угодно.
113: \item В тексте письма не рекомендуется употребление символов
114: ``\prog{\#}'' и ``\prog{*}'' и \emph{запрещается} их
115: употребление первыми в строке (или после пробелов).
116: \end{enumerate}
117:
118: \paragraph{Пример:}
119: \begin{verbatim}
120: Date: 12 Nov 98 18:31:53 MSK
121: From: Aleksandr Ivanov <ivanov@boga.net>
122: To: catamaran@hal.plmsc.psu.edu
123: Subject: Otvety komandy "Stop", 222
124:
125: Здравствуйте, уважаемые игроки Катамарана!
126:
127: Большое спасибо за вопросы.
128:
129: *** "Стоп", 222
130: #1. Сид
131: #2. Мышка-наружка
132: #3. Ллойд-Джордж
133: #4. В жирафа
134: #5. Шалтай-Болтай, Барклай де Толлли
135: #6. У Геркулесовых столпов.
136: #7. В коров
137: #8. Глокая куздра
138: #9. Александр Македонский и Гордий I
139: #10. Поставить точку над i.
140: #11. Кольцо Нибелунгов, Вагнер, Мефистофель
141: #12. Венера
142: ***
143:
144: Капитан команды "Стоп"
145: Александр Иванов
146: \end{verbatim}
147:
148:
149: \subsection{Формат файла с результатами}
150:
151: Файл с результатами состоит из ответов. Каждый ответ имеет следующую
152: структуру:
153: \begin{enumerate}
154: \item Заголовок
155: \begin{verbatim}
156: #NN. Frequency: f. Score: s
157: \end{verbatim}
158: Здесь \prog{NN}---номер вопроса, а \prog{s}---оценка, один из
159: трех символов: \prog{+}, \prog{-} или \prog{?}.
160: \item Собственно текст ответа:
161: \begin{verbatim}
162: Текст ответа
163: Текст ответа
164: ...
165: \end{verbatim}
166: При этом каждая строка текста начинается с двух пробелов.
167: \item В конце всех ответов идет строка из трех звездочек:
168: \begin{verbatim}
169: ***
170: \end{verbatim}
171: \end{enumerate}
172:
173:
174: \subsection{Формат таблицы результатов}
175:
176: Таблица результатов имеет следующий формат:
177: \begin{verbatim}
178: N 1 2 3 4 5 6 7 8 9 10 11 12 О Р КОМАНДА
179: 111 + + + + + + + + + + + + 12 359 Марсиане
180: 436 + + + + + + + + + + + + 12 359 Venera II
181: [...]
182: Р 24 21 34 24 41 43 18 31 26 32 36 29
183: \end{verbatim}
184: В последних графах стоит полное число взятых вопросов и суммарный
185: рейтинг соответственно. В последней строке таблицы---рейтинги
186: вопросов.
187:
188: \subsection{Формат собрания сочинений}
189:
190: Собрание ответов на каждый вопрос имеет следующую структуру:
191: \begin{enumerate}
192: \item Заголовок раздела
193: \begin{verbatim}
194: ВОПРОС NN:
195: \end{verbatim}
196: \item По два заголовка подразделов:
197: \begin{verbatim}
198: ЗАСЧИТАНЫ ОТВЕТЫ:
199: \end{verbatim}
200: и
201: \begin{verbatim}
202: НЕ ЗАСЧИТАНЫ ОТВЕТЫ:
203: \end{verbatim}
204: \item Каждый ответ имеет формат:
205: \begin{verbatim}
206: s Текст ответа
207: Текст ответа
208: ... [f]
209: \end{verbatim}
210: Здесь \prog{s}---один из символов \prog{+} или \prog{-},
211: \prog{f}---частота ответа, которая печатается только если она не равна
212: единице.
213: \end{enumerate}
214:
215:
216:
217: \section{Пользовательский интерфейс}
218:
219:
220: \subsection{Основная программа}
221:
222: Дежурный по туру складывает все письма в файл. Время от времени он
223: запускает команду
224: \begin{verbatim}
225: processmail.pl [-d] [-t table_file] [-m mail_file] [-o results]
226: \end{verbatim}
227: где
228: \begin{description}
229: \item[table\_file] файл с предыдущими оценками (по умолчанию
230: отсутствует),
231: \item[mail\_file] файл с письмами (по умолчанию---стандартный вход),
232: \item[results] файл с результатами (по умолчанию---стандартный
233: выход).
234: \end{description}
235:
236: В этом файле вручную расставляются плюсы и минусы.
237:
238: Флаг \prog{-d} означает ``Debigging mode''. В этом режиме программа
239: печатает массу дополнительной информации.
240:
241: \subsection{Сводка}
242:
243: Время от времени дежурный запускает программу
244: \begin{verbatim}
245: reminder.pl [-t table_file]
246: \end{verbatim}
247: Она генерирует список команд, которые имеются в файле с таблицей (по
248: умолчанию---стандартный выход), и посылает его на z-info.
249:
250:
251: \subsection{Результаты}
252:
253: Итоговая таблица и собрание сочинений генерируются программами
254: \begin{verbatim}
255: createtable.pl [-d] [-t table_file] [-m mail_file] [-o results]
256: collection.pl [-d] [-t table_file] [-m mail_file] [-o results]
257: \end{verbatim}
258: Ее ключи имеют то же смысл, что и у программы \prog{processmail.pl}.
259:
260: \section{Программа}
261:
262:
263: \subsection{Внутреннее представление данных}
264:
265: Сведения о командах хранятся в хэше \prog{\%teams} со следующими
266: полями:
267: \begin{description}
268: \item[ключ] название команды
269: \item[элемент] ссылка на анонимный хэш \prog{\%teams\{\$team\}} с
270: полями:
271: \begin{description}
272: \item[\prog{regnum}] регистрационный номер
273: \item[\prog{answers}] ссылка на массив из ответов
274: \item[\prog{score}] общий итог
275: \item[\prog{rating}] общий рейтинг
276: \end{description}
277: \end{description}
278:
279: Сведения о вопросах хранятся в массиве \prog{\%answers}. Его
280: элементы---ссылки на анонимные хэши. Ключи в хэшах---тексты ответов,
281: а элементы---опять таки ссылки на хэши следующего содержания:
282: \begin{description}
283: \item[\prog{score}] \prog{+}, \prog{-} или \prog{?}
284: \item[\prog{teams}] массив команд, давших этот ответ
285: \end{description}
286:
287: \subsection{Глобальные переменные}
288:
289: Мы используем следующие глобальные переменные:
290: \begin{description}
291: \item[\prog{\$MAXQUEST}] максимальное число вопросов
292: \item[\prog{\$DEBUG}] флаг, показывающий, задана ли debugging mode.
293: \end{description}
294:
295:
296:
297: \section{Благодарности}
298:
299: Я благодарен Якову Зайдельману, Льву Горенштейну, Алексу Покрасу и
300: Дмитрию Рубинштейну за помощь в разработке этой программы.
301:
302: \end{document}
303:
304: %%% Local Variables:
305: %%% mode: latex
306: %%% TeX-master: t
307: %%% End:
308:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>