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