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