File:  [Local Repository] / processmail / process.tex
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Mon Feb 4 15:04:07 2002 UTC (22 years, 5 months ago) by boris
Initial revision

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>