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

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

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