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