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>