Diff for /processmail/process.tex between versions 2.3 and 3.2

version 2.3, 2002/02/04 16:52:37 version 3.2, 2013/10/11 15:39:35
Line 1 Line 1
 %$Id$  %$Id$
 %$Log$  %$Log$
   %Revision 3.2  2013/10/11 15:39:35  boris
   %Lev's changes
   %
   %Revision 3.1  2008-03-23 18:04:51  boris
   %documentation update
   %
   %Revision 3.0  2008-03-23 17:50:50  boris
   %Added Lev's corrections
   %
   %Revision 2.7  2005/02/20 03:24:43  boris
   %Wrote readme
   %
   %Revision 2.6  2005/01/24 03:28:53  boris
   %Re-added
   %
   %Revision 2.4  2002/02/04 16:53:15  boris
   %Added numletters
   %
 %Revision 2.3  2002/02/04 16:52:37  boris  %Revision 2.3  2002/02/04 16:52:37  boris
 %Added num  %Added num
 %  %
Line 38 Line 56
 %  %
 \usepackage[koi8-r]{inputenc}  \usepackage[koi8-r]{inputenc}
 \usepackage[russian]{babel}  \usepackage[russian]{babel}
 \usepackage{pscyr}  \usepackage{t1enc}
 \usepackage{amsmath}  \usepackage{amsmath}
 \newcommand{\prog}[1]{\ensuremath{\text{{\textsl{#1}}}}}  \newcommand{\prog}[1]{\ensuremath{\text{{\textsl{#1}}}}}
   
Line 46 Line 64
   
 \begin{document}  \begin{document}
   
 \title{Программа для обработки писем в IGP}  \title{Программа для обработки писем в ИГП и ИЧБ}
 \author{Boris Veytsman, \texttt{borisv@lk.net}}  \author{Boris Veytsman, \texttt{borisv@lk.net}}
 \date{Февраль 2002}  \date{Март 2008}
 \maketitle  \maketitle
 \thispagestyle{empty}  \thispagestyle{empty}
 \tableofcontents  \tableofcontents
Line 60 Line 78
 команды. Прочесть невероятное количество писем, извлечь ответы,  команды. Прочесть невероятное количество писем, извлечь ответы,
 составить таблицу, да еще Собрание Сочинений\dots{} На это вполне может  составить таблицу, да еще Собрание Сочинений\dots{} На это вполне может
 уйти целиком рабочий день. Именно с этой целью по предложению Якова  уйти целиком рабочий день. Именно с этой целью по предложению Якова
 Зайдельмана написана эта программа.  Зайдельмана написана эта программа.  Позднее эта программа
   переписывалась при изменении регламента соревнований, добавлении ИЧБ и
   т.д. 
   
 Идея состоит в следующем. Самый важный этап в деятельности дежурной  Идея состоит в следующем. Самый важный этап в деятельности дежурной
 команды---решить, заслуживает ли данный ответ плюса или минуса. Это мы  команды---решить, заслуживает ли данный ответ плюса или минуса. Это мы
Line 76 Line 96
 \item Время от времени создавать список команд, чьи ответы уже  \item Время от времени создавать список команд, чьи ответы уже
   получены, и слать на информационный лист.    получены, и слать на информационный лист.
 \end{enumerate}  \end{enumerate}
 Необходимо учесть еще два важных обстоятельства:  Необходимо учесть еще несколько важных обстоятельств:
 \begin{enumerate}  \begin{enumerate}
 \item Команда может прислать несколько писем. В этом случае более  \item Команда может прислать несколько писем. В этом случае более
   позднее письмо считается более авторитетным, чем более раннее. Мы    позднее письмо считается более авторитетным, чем более раннее. Мы
Line 86 Line 106
   корректируя взбрыки e-mailа).    корректируя взбрыки e-mailа).
 \item Дежурная команда может оценивать ответы параллельно их  \item Дежурная команда может оценивать ответы параллельно их
   получению. Поэтому нельзя ``забывать'' старые оценки, читая новые.     получению. Поэтому нельзя ``забывать'' старые оценки, читая новые. 
   \item В последнее время в ИГП и ИЧБ принято два зачёта:  спринт и
     стайер.  При этом соблюдаются следующеи правила:
     \begin{enumerate}
     \item Если команда сдала ответ в спринте и не сдала ответ в стайере,
       учитывается ответ, сданный в спринте.
     \item При равенстве количества ответов в стайере победу в стайере
       одерживает команда, показавшая лучший результат в спринте.
     \end{enumerate}
 \end{enumerate}  \end{enumerate}
   
   
Line 184  Subject: Otvety komandy "Stop", 222 Line 212  Subject: Otvety komandy "Stop", 222
   
 \subsection{Формат таблицы результатов}  \subsection{Формат таблицы результатов}
   
 У таблицы результатов есть два формата.   У таблицы результатов есть три формата. 
 \begin{enumerate}  \begin{enumerate}
 \item Длинный формат  \item Длинный формат
 \begin{verbatim}  \begin{verbatim}
     N  1  2  3  4  5  6  7  8  9 10 11 12  О   Р КОМАНДА      N  1  2  3  4  5  6  7  8  9 10 11 12 О     Р КОМАНДА
   111  +  +  +  +  +  +  +  +  +  +  +  + 12 359 Марсиане    111  +  +  +  +  +  +  +  +  +  +  +  + 12.04 359 Марсиане
   436  +  +  +  +  +  +  +  +  +  +  +  + 12 359 Venera II    436  +  +  +  +  +  +  +  +  +  +  +  + 12.02 359 Venera II
 [...]  [...]
 \end{verbatim}  \end{verbatim}
   
   \item Промежуточный формат
   \begin{verbatim}
       N  12345 67890 12  О     Р   КОМАНДА
     111  +++++ +++++ ++  12.04 359 Марсиане
     436  +++++ +++++ ++  12.04 359 Venera II
   [...]
   Рейтинг
    1  2  3  4  5  6  7  8  9 10 11 12
   24 21 34 24 41 43 18 31 26 32 36 29
   \end{verbatim}
   
   
 \item Короткий формат  \item Короткий формат
 \begin{verbatim}  \begin{verbatim}
     N  123456789012  О  Р   КОМАНДА      N  123456789012  О     Р   КОМАНДА
   111  ++++++++++++  12 359 Марсиане    111  ++++++++++++  12.04 359 Марсиане
   436  ++++++++++++  12 359 Venera II    436  ++++++++++++  12.04 359 Venera II
 [...]  [...]
 Рейтинг  Рейтинг
  1  2  3  4  5  6  7  8  9 10 11 12   1  2  3  4  5  6  7  8  9 10 11 12
Line 207  Subject: Otvety komandy "Stop", 222 Line 248  Subject: Otvety komandy "Stop", 222
 В последних графах стоит полное число взятых вопросов и суммарный  В последних графах стоит полное число взятых вопросов и суммарный
 рейтинг соответственно. В последней строке таблицы---рейтинги  рейтинг соответственно. В последней строке таблицы---рейтинги
 вопросов. В коротком формате вместо строки с рейтингом отдельная  вопросов. В коротком формате вместо строки с рейтингом отдельная
 таблица ``Рейтинг''.  таблица ``Рейтинг''.  В графе ``О'' стоят набранные командой очки в
   данном зачёте (до десятичной точки) и в предыдущем (после точки).
   
   При печати незачетных вопросов взятый вопрос помечается буквой
   \prog{X}, а невзятый, как обычно, \prog{-}.
   
 \subsection{Формат собрания сочинений}  \subsection{Формат собрания сочинений}
   
Line 217  Subject: Otvety komandy "Stop", 222 Line 262  Subject: Otvety komandy "Stop", 222
 \begin{verbatim}  \begin{verbatim}
 ВОПРОС NN:  ВОПРОС NN:
 \end{verbatim}  \end{verbatim}
 \item По два заголовка подразделов:  \item По три заголовка подразделов:
 \begin{verbatim}  \begin{verbatim}
 ЗАСЧИТАНЫ ОТВЕТЫ:  ЗАСЧИТАНО:
   \end{verbatim}
   
   \begin{verbatim}
   НЕ ЗАСЧИТАНО:
 \end{verbatim}  \end{verbatim}
 и  и
 \begin{verbatim}  \begin{verbatim}
 НЕ ЗАСЧИТАНЫ ОТВЕТЫ:  НЕ ЯСНО:
 \end{verbatim}  \end{verbatim}
 \item Каждый ответ имеет формат:  \item Каждый ответ имеет формат:
 \begin{verbatim}  \begin{verbatim}
Line 231  s Текст ответа Line 280  s Текст ответа
   Текст ответа    Текст ответа
   ...           [f]    ...           [f]
 \end{verbatim}  \end{verbatim}
 Здесь \prog{s}---один из символов \prog{+} или \prog{-},  Здесь \prog{s}---один из символов \prog{+}, \prog{-}, или \prog{?},
 \prog{f}---частота ответа, которая печатается только если она не равна  \prog{f}---частота ответа, которая печатается только если она не равна
 единице.   единице. 
 \end{enumerate}  \end{enumerate}
   
   По умолчанию, заголовки всех подразделов выводятся даже если для данного 
   вопроса нет ответов, попадающих в какой-либо подраздел (подраздел пуст).
   Это предсказуемо и удобно, но не всегда удобочитаемо с точки зрения 
   читателя-человека, поэтому по желанию возможна генерация промежуточного 
   или короткого вариантов собрания сочинений.  От описанного выше полного 
   формата они отличаются режимом печати пустых подразделов:
   \begin{enumerate}
   \item В промежуточном формате подразделы \prog{ЗАСЧИТАНО} и 
    \prog{НЕ ЗАСЧИТАНО} показываются всегда (даже пустые), а подраздел
    \prog{НЕ ЯСНО}---только если он не пуст.
   \item В коротком формате все подразделы выводятся только если они
     не пусты (исключения для \prog{ЗАСЧИТАНО} и \prog{НЕ ЗАСЧИТАНО}
    не делаются).
   \end{enumerate}
   
   По мнению автора, промежуточный формат представляет собой оптимальный
   компромисс между читаемостью и полнотой (и действительно, зачем 
   печатать пару десятков пустых \prog{НЕ ЯСНО} в официальной сводке,
   в которой уже давно все ясно?)
   
   
   
   
 \section{Пользовательский интерфейс}  \section{Пользовательский интерфейс}
   
   
   \subsection{Файл настроек}
   \label{sec:conf}
   
   Настройки программы хранятся в файле \prog{parameters.pl}.  Пример
   этого файла приведен ниже:
   \begin{verbatim}
   # В этом файле собраны ЛОКАЛЬНЫЕ параметры -- "настройки"
   #
   # Количество зачётов
   $ROUNDS=2;
   
   ###############################################################
   # Следующие настройки индивидуальны для каждого раунда, начиная
   # с первого
   ###############################################################
   
   # Первый раунд
   
   # Название раунда
   
   $NAME[1]="Спринт";
   
   # Вопросы раунда
   
   $MINQUEST[1]=1;
   $MAXQUEST[1]=12;
   
   # Файлы раунда.  Следующий перекрывает предыдущий.
   # Список заключён в квадратные скобки, отдельные файлы разделены ЗАПЯТЫМИ.
   #       $FILES[1] = [ "sprint.mail", "sprint-extra.mail" ];
   #
   # ВНИМАНИЕ: формат этого параметра изменился с предыдущей версии!
   
   $FILES[1]= [ 'sprint.mail' ];
   
   # Внезачётные вопросы раунда. В квадратных скобках, номера разделены ЗАПЯТЫМИ.
   # Во втором раунде эти вопросы тоже будут вне зачёта (но можно будет и
   # учесть, см. ниже описание $NOCOUNT[2]).
   #       $NOCOUNT[1] = [];
   #       $NOCOUNT[1] = [ 2, 3, 4 ];
   
   $NOCOUNT[1]= [];
   
   
   # Второй раунд
   
   # Название раунда
   
   $NAME[2]="Стайер";
   
   # Вопросы раунда
   
   $MINQUEST[2]=1;
   $MAXQUEST[2]=18;
   
   # Список заключён в квадратные скобки, отдельные файлы разделены ЗАПЯТЫМИ.
   #       $FILES[2] = [ 'predvarit.mail', 'osnovn.mail' ];
   #
   # ВНИМАНИЕ: формат этого параметра изменился с предыдущей версии!
   
   $FILES[2]= [ 'stayer.mail' ];
   
   # Внезачётные вопросы в этом раунде.  В квадратных скобках, через ЗАПЯТУЮ.
   # Этот список ДОБАВЛЯЕТСЯ к уже перечисленным в $NOCOUNT[1].  Однако
   # если вы хотите исключить какой-то из ранее указанных вопросов (например,
   # в гипотетической ситуации "вопрос номер 5 был исправлен слишком поздно,
   # поэтому в Спринте не учитывается, а для Стайера используется"), то
   # укажите его номер со знаком минус: "3 -5 6"
   #       $NOCOUNT[2] = [];
   #       $NOCOUNT[2] = [ 3, -5, 6 ];
   
   $NOCOUNT[2]= [];
   
   
   #########################################################
   #   Теперь общие настройки
   #########################################################
   
   
   #
   # Адрес листа z-info
   #
   $address = 'z-info@chgk.info';
   #$address="boris";
   #
   # Обратный адрес дежурной команды и ее название
   #
   $fromaddress = 'Boris Veytsman <borisv@lk.net>';
   $DK = '"Дракоша"';
   #
   # $date -- системная процедура, которая вычисляет МОСКОВСКОЕ
   # время. В Линуксе zdump это делает хорошо. В других операционных 
   # системах надо как-то исхитряться...  На самый худой конец, используйте
   #       $date='';
   #
   $date = "export TZ='Europe/Moscow'; date";
   
   #
   # Процедуры, которые печатают заголовок и конец мейла-напоминания
   #
   sub printheader
   {
   print  <<"END";
   To: $address
   From: $fromaddress
   Subject: Svodka
   MIME-Version: 1.0
   Content-type: text/plain; charset=koi8-r
   Content-Transfer-Encoding: 8bit\n
   
   Уважаемые знатоки!
   
   С вами говорит робот команды $DK
   
   END
   print "На момент ", `$date`, "в зачёте '$NAME[$round]' сданы ответы от команд:\n\n"; 
   }
   
   
   sub printfooter
   {
       print  <<END;
   
   --
   Good luck
   
   -Robot
   END
   
   }
   \end{verbatim}
   
   
 \subsection{Основная программа}  \subsection{Основная программа}
   
 Дежурный по туру складывает все письма в файл. Время от времени он  Дежурный по туру складывает все письма в файл. Время от времени он
 запускает команду  запускает команду
 \begin{verbatim}  \begin{verbatim}
 processmail.pl [-d] [-t table_file] [-m mail_file]  [-o results]   processmail.pl [-d] [-t table_file]  [-o results] 
 \end{verbatim}  \end{verbatim}
 где   где 
 \begin{description}  \begin{description}
 \item[table\_file] файл с предыдущими оценками (по умолчанию  \item[table\_file] файл с предыдущими оценками (по умолчанию
   отсутствует),     отсутствует), 
 \item[mail\_file] файл с письмами (по умолчанию---стандартный вход),   
 \item[results] файл с результатами (по умолчанию---стандартный  \item[results] файл с результатами (по умолчанию---стандартный
   выход).     выход). 
 \end{description}  \end{description}
Line 266  processmail.pl [-d] [-t table_file] [-m Line 468  processmail.pl [-d] [-t table_file] [-m
   
 Время от времени дежурный запускает программу  Время от времени дежурный запускает программу
 \begin{verbatim}  \begin{verbatim}
 reminder.pl [-t table_file]  reminder.pl [-r номер_раунда]
 \end{verbatim}  \end{verbatim}
 Она генерирует список команд, которые имеются в файле с таблицей (по  Она генерирует список команд, которые имеются в файле с таблицей (по
 умолчанию---стандартный вход), и посылает его на z-info.  умолчанию---стандартный вход), и посылает его на z-info.
Line 276  reminder.pl [-t table_file] Line 478  reminder.pl [-t table_file]
   
 Итоговая таблица и собрание сочинений генерируются программами  Итоговая таблица и собрание сочинений генерируются программами
 \begin{verbatim}  \begin{verbatim}
 createtable.pl [-d] [-s] [-t table_file] [-m mail_file]  [-o results]   createtable.pl [-d] [-s|-m] [-t table_file]  [-o results] 
 collection.pl  [-d] [-t table_file] [-m mail_file]  [-o results]   collection.pl  [-d] [-s|-m] [-t table_file]  [-o results] 
 \end{verbatim}  \end{verbatim}
 Ее ключи имеют то же смысл, что и у программы \prog{processmail.pl}.   Ключи имеют тот же смысл, что и у программы \prog{processmail.pl}. 
 Флаг \prog{-s} означает выбор короткой формы таблицы.  Флаг \prog{-s} означает выбор короткой формы вывода, а флаг \prog{-m}
   означает выбор промежуточной формы.
   
 \section{Программа}  \section{Программа}
   
Line 295  collection.pl  [-d] [-t table_file] [-m Line 498  collection.pl  [-d] [-t table_file] [-m
   полями:     полями: 
   \begin{description}    \begin{description}
   \item[\prog{regnum}] регистрационный номер    \item[\prog{regnum}] регистрационный номер
   \item[[\prog{num}] количество ответов    \item[\prog{numletters}] количество писем с ответами
   \item[\prog{answers}] ссылка на массив из ответов    \item[\prog{answers}] ссылка на массив из ответов
   \item[\prog{score}] общий итог    \item[\prog{score}] общий итог
   \item[\prog{rating}] общий рейтинг    \item[\prog{rating}] общий рейтинг
Line 307  collection.pl  [-d] [-t table_file] [-m Line 510  collection.pl  [-d] [-t table_file] [-m
 а элементы---опять таки ссылки на хэши следующего содержания:  а элементы---опять таки ссылки на хэши следующего содержания:
 \begin{description}  \begin{description}
 \item[\prog{score}] \prog{+}, \prog{-} или \prog{?}  \item[\prog{score}] \prog{+}, \prog{-} или \prog{?}
 \item[\prog{teams}] массив команд, давших этот ответ  \item[\prog{teams}] хэш команд, давших этот ответ
 \end{description}  
   
 \subsection{Глобальные переменные}  
   
 Мы используем следующие глобальные переменные:  
 \begin{description}  
 \item[\prog{\$MAXQUEST}] максимальное число вопросов  
 \item[\prog{\$DEBUG}] флаг, показывающий, задана ли debugging mode.  
 \end{description}  \end{description}
   
   
Line 323  collection.pl  [-d] [-t table_file] [-m Line 518  collection.pl  [-d] [-t table_file] [-m
 \section{Благодарности}  \section{Благодарности}
   
 Я благодарен Якову Зайдельману, Льву Горенштейну, Алексу Покрасу и  Я благодарен Якову Зайдельману, Льву Горенштейну, Алексу Покрасу и
 Дмитрию Рубинштейну за помощь в разработке этой программы.  Дмитрию Рубинштейну за помощь в разработке этой программы.  Версия~3
   программы (поддержка незачетных вопросов и промежуточного формата
   таблицы) была написана Львом Горенштейном.
   
 \end{document}  \end{document}
   

Removed from v.2.3  
changed lines
  Added in v.3.2


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