Annotation of processmail/process.tex, revision 2.6

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

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