File:  [Local Repository] / processmail / process.tex
Revision 2.6: download - view: text, annotated - select for diffs - revision graph
Mon Jan 24 03:28:53 2005 UTC (19 years, 5 months ago) by boris
Re-added

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

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