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