File:  [Local Repository] / processmail / process.tex
Revision 2.2: download - view: text, annotated - select for diffs - revision graph
Mon Feb 4 15:43:34 2002 UTC (22 years, 5 months ago) by boris
Added new features

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

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