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