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