Версия 2.3.3 (r4320) (20070825) =============================== Дальнейшее развитие системы. Многочисленные усовершенствования, чтобы облегчить распространение системы в бинарном виде (в виде RPM и т. п.). Изменена структура каталогов инсталляции системы, чтобы сделать её более подходящей для инсталляции с префиксом /usr. Поддерживается усовершествованная система запуска программ в защищённом окружении, реализованная в виде патча к ядрам 2.6.18 и 2.6.22. Для её поддержки не требуется библиотеки libcap. Наличие поддержки защищённого режима полностью определяется при запуске тестируемых программ. Таким образом, можно скомпилировать систему ejudge на обычном ядре, и защищенный режим будет активирован, когда программа будет запускаться на усовершенствованном ядре, и наоборот, система, скомпилированная под усовершенствованным ядром, будет нормально работать под обычным ядром. Усовершенствованная система запуска программ требует последней версии (4.3.2) библиотеки reuse. Изменилось расположение файлов в каталоге ${libexecdir}/ejudge. Стандартные проверяющие программы перенесены в подкаталог `checkers'. Скрипты компиляции и запуска перенесены в каталог `lang'. Если указана опция `--enable-hidden-server-bins', исполняемые файлы находятся в подкаталоге `bin'. Незначительно переработан формат конфигурационных файлов. Сохранена полная совместимость с предыдущими версиями, но в новой версии нигде не требуется задания абсолютных путей. Кроме того, улучшена поддержка безопасного запуска программ. Для сохранения конфигурационных файлов в новом формате достаточно открыть турнир на редактирование в CGI-программе `serve-control' и сразу сохранить настройки. Улучшена поддержка архитектуры x86_64. Система компилируется и работает на архитектурах PPC и PPC64 (однако интенсивно не тестировалась). configure --------- Добавлена опция `--enable-hidden-server-bins'. Если опция задана, то в каталог ${prefix}/bin не будут инсталлироваться программы, не предназначенные для непосредственного запуска пользователем, например, `new-server', `serve' и т. п. Каталог ${prefix}/bin в этом случае будет содержать только программы `edit-userlist', `ejudge-control', `ejudge-config' и несколько других. contest.xml ----------- Изменены правила, по которым определяется корневной каталог турнира (root_dir). Если элемент не установлен или является относительным путём, то базовым каталогом считается каталог CONTESTS_HOME_DIR, устанавливаемый опцией --enable-contests-home-dir скрипта configure. Если элемент не установлен, то корневым каталогом турнира считается каталог с шестизначным номером турнира в каталоге CONTESTS_HOME_DIR. Таким образом, в типичной конфигурации ejudge теперь элемент является необязательным. Предыдущие версии ejudge требовали, чтобы элемент был задан и являлся абсолютным путём. Для постепенного перехода к новой семантике программа `serve-control' выполняет нормализацию значения элемента при сохранении настроек турнира. То есть, если установлен, но так, что на самом деле достаточно относительного пути или вообще значения по умолчанию, при сохранении настроек турнира значение элемента будет обновлено. В элемент `contest' добавлен атрибут "personal", который может принимать значения "yes" или "no". Если атрибут установлен в значение "yes", этот турнир считается личным. В личном турнире нет понятия "участник команды", "запасной". При регистрации на личный турнир личная информация (фамилия, имя и пр.) вводится непосредственно при редактировании информации о городе, стране и т. п. Добавлены элементы , , , , которые могут использоваться для тонкой настройки вида генерируемых страниц. Добавлены элементы , , , , которые позволяют задавать группу и права на создаваемые в процессе создания турнира в программе `serve-control' файлы и каталоги. Впрочем, данная возможность пока не реализована. Добавлен элемент , который позволяет задавать язык турнира по умолчанию. Если значение элемента равно "Russian", "ru", "ru_RU", то языком по умолчанию будет русский. Это значит, что при входе в турнир, если явно не выбран язык, будет включён русский язык. Возможность последующего переключения языка на английский (или любой другой) сохраняется. Добавлен элемент , который позволяет задавать имя файла, в котором будет находиться текст, выдаваемый пользователю при попадании на страницу входа в турнир ещё до ввода регистрационного имени и пароля. Добавлены элементы , , которые используются при работе программы `super-serve' в подчинённом режиме. Элемент используется как элемент верхнего уровня для элемента . Элемент позволяет задавать имя компьютера, на котором будет работать программа `run' для данного турнира. Например, следующий фрагмент файла: pc1 указывает, что тестирование посылок данного турнира будет вестись на компьютере `pc1'. При этом атрибут "run_managed" для данного турнира может быть как установлен (тогда тестирование будет вестись параллельно на двух компьютерах), так и нет. Добавлен элемент , который позволяет иметь общую регистрацию пользователей на несколько турниров. Значением элемента является идентификатор (номер) турнира, который будет основным для данного турнира. Все пользователи (в том числе привилегированные), флаги регистрации, регистрационная информация для данного турнира будет браться из турнира, идентификатор которого указан. Добавление новых пользователей в текущий турнир будет автоматически добавлять их в основной турнир. Основной турнир не может ссылаться на какой-либо другой турнир, то есть у основного турнира элемент не должен быть установлен. При создании нового турнира по умолчанию включается флаг нового режима обслуживания (`new_managed') и запрета турнирного пароля (`disable_team_password'). userlist.xml ------------ В базу пользователей добавлены поля и . Оба поля локальны для турнира. может использоваться для задания номера экзаменационного листа или другой информации (номера зачетной книжки), которая позволяет однозначно идентифицировать пользователя. может использоваться для задания "шифра" участника в тех случаях, когда проверяющие не должны знать личных данных участника. Добавлен флаг регистрации на турнир "INCOMPLETE", который устанавливается автоматически, если регистрационные данные участника не соответствуют требованиям, установленным в файле описания турнира, то есть тогда, когда участник не заполнил какие-либо обязательные для заполнения поля. Добавлен флаг регистрации на турнир "DISQUALIFIED", который запрещает указанному участнику вход в турнир (как и флаг BANNED). Если установлен флаг "DISQUALIFIED", при попытке входа дисквалифицированному пользователю будет выдано персональное сообщение об его дисквалификации. serve.cfg --------- Изменены правила, по которым определяется корневной каталог турнира (root_dir). Если глобальная переменная `root_dir' не установлена или является относительным путём, то базовым каталогом считается каталог CONTESTS_HOME_DIR, устанавливаемый опцией --enable-contests-home-dir скрипта configure. Если глобальная переменная `root_dir' не установлена, то корневым каталогом турнира считается каталог с шестизначным номером турнира в каталоге CONTESTS_HOME_DIR. Таким образом, в типичной конфигурации ejudge теперь глобальная переменная `root_dir' является необязательной. Предыдущие версии ejudge требовали, чтобы глобальная переменная `root_dir' была задана и являлась абсолютным путём. Для постепенного перехода к новой семантике программа `serve-control' выполняет нормализацию значения глобальной переменной при сохранении настроек турнира. То есть, если `root_dir' установлена, но так, что на самом деле достаточно относительного пути или вообще значения по умолчанию, при сохранении настроек турнира значение `root_dir' будет обновлено. Новая глобальная переменная `disable_language'. Если значение переменной не нулевое, при отображении таблицы посылок не отображается столбец "Язык программирования". Новая глобальная переменная `problem_tab_size', которая позволяет устанавливать ширину закладки задачи в режиме отображения закладок (`problem_navigation'). Ширина закладки задаётся в пикселях. Новая глобальная переменная `vertical_navigation', которая включает отображение закладок задач в одном столбце страницы (вместо строки). Закладки в этом случае будут расположены вертикально с правой стороны страницы. Новая глобальная переменная `disable_virtual_start', которая, если установлена в ненулевое значение, запрещает пользователям самостоятельно начинать виртуальный турнир. Виртуальный турнир для выбранных пользователей может быть начат только администратором турнира с помощью команды "Force start virtual contest". Новая глобальная переменная `disable_virtual_auto_judge'. Переменная действует только для виртуальных турниров по системе OLYMPIAD. Если значение переменной не равно 0, то сразу после окончания виртуального турнира участника тестирование его решений проводиться не будет. Тестирование решений должно запускаться администратором турнира. Новая глобальная переменная `enable_auto_print_protocol'. Переменная действует только для турниров по системе OLYMPIAD (в том числе и виртуальных). Если значение переменной не равно 0, то сразу после окончания турнира для участника на печать будет отправлен пользовательский протокол экзамена. Для печати используется принтер, заданный в поле `printer_name' данного пользователя. Если значение поля `printer_name' не установлено, используется принтер по умолчанию. Новая глобальная переменная `stand_fancy_style'. Если её значение не равно 0, таблица текущих результатов отображается в более красивом виде. Новая глобальная переменная `stand_collate_name'. Если значение переменной не равно 0, то в таблице текущих результатов сливаются результаты участников с одинаковым именем. То есть, в этом случае для идентификации участников используется имя участника, а не его идентификатор. Каждому участнику команды может быть выдано индивидуальное регистрационное имя (login), но в итоговой таблице результатов их результаты будут объединены, при условии, что у всех участников одной команды одинаковое имя, и у участников, не входящих в команду, другое имя. Новая глобальная переменная `stand_enable_penalty', которая работает в турнирах типа OLYMPIAD. В этом случае при отображении таблицы текущих результатов будт учитываться штрафное время участников, равное сумме штрафных времён по каждой задаче. Штрафное время задачи вычисляется как количество минут, прошедших от начала турнира до момента последней сдачи задачи, принятой на проверку. Новая глобальная переменная `plugin_dir', которая позволяет задать базовый каталог для подгружаемых модулей задач. Значение этой переменной по умолчанию - "../plugins", то есть подгружаемые модули задач должны находиться в каталоге "plugins" каталога турнира (на одном уровне с каталогами "conf", "checkers", "tests" и т. д.). Новые глобальные переменные `user_exam_protocol_header_file', `user_exam_protocol_footer_file', `prob_exam_protocol_header_file', `prob_exam_protocol_footer_file', `full_exam_protocol_header_file', `full_exam_protocol_footer_file' позволяют задавать начало и конец разных типов файлов печатных протоколов. Для генерации протокола используется LaTeX, таким образом, в этих файлах должны находиться корректные заголовки и окончания LaTeX файлов. `user' - это пользовательский протокол, который печатается непосредственно по окончанию экзамена. `prob' - это позадачный протокол. `full' - это полный протокол (анонимный или неанонимный). Новая переменная раздела описания задачи `ignore_compile_errors'. Эта переменная позволяет переопределить действие глобальной конфигурационной переменной `ignore_compile_errors' для одной задачи. Например, если глобальная переменная установлена (то есть ошибки компиляции игнорируются при подсчёте результатов), строка ignore_compile_errors = 0 раздела определения задачи позволит не игнорировать ошибки компиляции только для данной задачи. Новая переменная раздела описания задачи `ignore_penalty'. Переменная работает только для турниров OLYMPIAD в режиме, задаваемом глобальной конфигурационной переменной `stand_enable_penalty'. Если значение переменной `ignore_penalty' не равно 0, то для данной задачи штрафные баллы всегда будут равны 0, независимо от времени её сдачи. Новая переменная раздела описания задачи `min_tests_to_accept'. Переменная работает только для турниров OLYMPIAD и позволяет задать минимальное количество тестов, которое должна пройти программа при предварительном тестировании, чтобы быть принятой на проверку. Предположем, что всего предварительных тестов 3, из них для принятия задачи на проверку достаточно только одного. Тогда раздел описания задачи может содержать следующие строки: tests_to_accept = 3 min_tests_to_accept = 1 Значение переменной наследуется от абстрактной задачи. Новая переменная раздела описания задачи `disable_tab'. Если значение этой переменной не равно 0, для данной задачи не будет отображаться закладка (в режиме `problem_navigation'). Новая переменная раздела описания задачи `restricted_statement'. Если значение этой переменной не равно 0, условие данной задачи перестанет отображаться после конца турнира или после момента закрытия сдачи этой задачи (установленного переменной `deadline'). По умолчанию условия задач продолжают отображаться после окончания турнира или закрытия сдачи задачи. Новая переменная раздела описания задачи `advance_to_next'. Данная переменная работает только для задач типа select-one (выбор одного ответа из нескольких данных). Если значение переменной не равно 0, после сдачи задачи (то есть нажатия на кнопку "Submit" или щелчка мыши на варианте ответа для упрощенного режима (exam_mode)) происходит автоматический переход на следующую задачу. Значение переменной наследуется от абстрактной задачи. Новая переменная раздела описания задачи `lang_time_adj_millis'. Данная переменная аналогична переменной `lang_time_adj', то есть позволяет задавать поправку к ограничению времени на тест в зависимости от языка программирования, но значение поправки выражается в миллисекундах. Переменная `lang_time_adj_millis' имеет приоритет над переменной `lang_time_adj', то есть если задано значение первой переменной, то вторая не используется. Новая переменная раздела описания задачи `valuer_cmd'. Данная переменная позволяет задать имя программы оценивания задачи. Программа оценивания задачи получает на стандартном потоке ввода последовательность результатов запуска программы на всех тестах и должна выдать на стандартный поток вывода балл, в который оценивается данное решение. Более подробно о формате входных данных и результата для программы оценивания см. в соответствующем разделе. По умолчанию программы оценивания находятся в том же каталоге, что и проверяющие программы - в каталоге `checkers'. Значение переменной наследуется от абстрактной задачи, при этом выполняются форматные подстановки. Новая переменная раздела описания задачи `valuer_env'. Эта переменная позволяет задать значения переменных окружения для программы оценивания, заданной переменной `valuer_cmd'. Формат задания переменных окружения аналогичен переменной `checker_env'. Новая переменная раздела описания задачи `xml_file'. Переменная позволяет задать имя файла с описанием задачи. Формат этого файла находится в развитии. Текущая версия формата обсуждается в соответствующем разделе. В перспективе предполагается, что большинство настроек задачи будут браться из XML-файла задачи, а секция описания задачи позволит переопределять настройки из XML-файла и доопределять недостающие. Значение переменной наследуется от абстрактной задачи, и при этом выполняются форматные подстановки. Новая переменная раздела описания задачи `plugin_file'. Данная переменная позволяет задать имя подгружаемого модуля (плагина) задачи. В текущей версии системы ejudge плагин задачи используется только для задач типа custom и отвечает за обработку данных формы, поступающих при сдаче задачи. По умолчанию плагины задач находятся в каталоге, задаваемом глобальной конфигурационной переменной `plugin_dir'. Значение переменной наследуется от абстрактной задачи, при этом выполняются форматные подстановки. Новые переменные описания задачи `source_header' и `source_footer', которые позволяют задавать имя файла с текстом, который будет использоваться в начале и конце сданных решений при компиляции программы. Например, условие задачи может требовать написания одной функции или класса, а не целой программы. В этом случае при компиляции в начало текста программы можно добавить, например, директивы подключения необходимых библиотек, а в конец программы - главную функцию программы, которая считывает входные данные из файла, запускает пользовательскую функцию и записывает результат в выходной файл. Таким образом на турнирах могут использоваться задачи в стиле TopCoder. Значения переменных наследуются от абстрактной задачи, при этом выполняются форматные подстановки. Особенность данных переменных в том, что форматные подстановки выполняются непосредственно перед компиляцией программы и, таким образом, могут использовать форматные преобразования языка программирование. С помощью форматных преобразования языка программирования можно использовать различные файлы для разных языков программирования. Новая переменная описания тестировщика `ignore_stderr'. Если значение этой переменной не равно 0, то вывод тестируемой программы на стандартный поток ошибок полностью игнорируется (перенаправляется в /dev/null). В частности, если тестируемая программа запускается под dosemu, диагностические сообщения dosemu будут проигнорированы и не попадут в протокол тестирования. При редактировании настроек турнира с помощью CGI-программы `serve-control' эта переменная устанавливается для тестировщика архитектуры dos. Новая переменная описания тестировщика `time_limit_adj_millis'. Эта переменная аналогична переменной `time_limit_adj', но позволяет задавать поправку к ограничению по времени в миллисекундах. Новая переменная описания тестировщика `secure_exec_type'. Данная переменная устанавливает тип безопасного запуска для данного тестировщика. Поддерживаются следующие типы безопасного запуска: none никаких дополнительных настроек; используется, в частности, для компиляторов dos static статически скомпонованный исполняемый файл linux; такие файлы получаются в результате компиляции программ на языках gcc, g++, fpc dll динамически скомпонованный исполняемый файл linux; такие файлы получаются в результате компиляции программ на языках dcc java jar-файл с java байт кодом если значение переменной не установлено, то используется старая семантика (для совместимости), согласно которой настройки безопасного запуска определяются значениями переменных `start_cmd', `start_env'. Преимущество новой схемы в том, что при переключении режима безопасного запуска с помощью глобальной конфигурационной переменной `secure_run' вид разделов тестировщиков не изменяется. Кроме того, в новой схеме не требуется использование программы `capexec' для безопасного запуска статических исполняемых программ linux, и, таким образом, лучше обнаруживаются ошибочные ситуации при работе тестируемой программы. В принципе, значение этой переменной не предназначено для ручного редактирования. Правильное значение переменной автоматически устанавливается программой `serve-control' при сохранении настроек турнира. variant.map ----------- Поддерживается версия 2 формата файла вариантов заданий. При чтении поддерживаются файлы и версии 1, но при сохранении турнира в CGI-программе `serve-control' файл варианта заданий записывается в версии 2. Версия 2 отличается от версии 1 следующим образом: o версия 2 представляет собой корректный XML-файл, то есть в начале файла присутствуется заголовок , в заголовке используются XML-комментарии ; o версия 2 поддерживает сквозные варианты, то есть для всех задач турнира у данного участника будет один и тот же вариант. Для этого используется следующий синтаксис: LOGIN variant NUM1 [virtual NUM2] где "variant" и "virtual" - ключевые слова, конструкция virtual NUM2 не обязательная LOGIN - регистрационное имя пользователя, NUM1 - вариант пользователя, NUM2 - необязательный виртуальный вариант. Виртуальный вариант - это номер варианта, который может отображаться участнику. Например, в турнире может быть 100 виртуальных вариантов по одному на каждого участника и всего 4 реальных варианта. Впрочем, в текущей версии ejudge ни реальный, ни виртуальный вариант участнику нигде не отображается. problem.xml ----------- Для описания задач поддерживается новый формат файлов, основанный на XML. Поддерживается описание свойств задачи (ограничение памяти, времени, входные и выходные файлы), формулировка задачи в формате HTML (возможно, на нескольких языках), варианты ответа и правильный ответ. Полное описание файла смотрите в Wiki-разделе сайта www.ejudge.ru. edit-userlist ------------- Полностью поддерживается кодировка UTF8. Во всех меню работает кнопка ESC для выхода. Поддерживаются новые поля базы пользователей и новые флаги регистрации (см. выше). При редактировании списка пользователей, зарегистрированных на турнир, поддерживается команда `v' - импорт информации о пользователях из файла в формате CSV. Далее задаются имя CSV-файла и символ-разделитель полей. Можно установить значения следующих полей базы данных пользователей: e-mail password name team_password inst inst_en instshort instshort_en fac fac_en facshort facshort_en homepage city city_en country country_en region location spelling printer_name exam_id exam_cypher languages phone В личных турнирах можно дополнительно ко всем предыдущим устанавливать значения следующих полей: status grade firstname firstname_en middlename middlename_en surname surname_en group group_en occupation occupation_en birth_date entry_date graduation_date При этом в качестве первичного ключа используется поле login. Данная команда не позволяет создавать новых пользователей в базе данных или создавать новые регистрации в турнире. Импорт информации возможен только для уже существующих пользователей, зарегистрированных на турнир. При этом статус их регистрации и флаги регистрации могут быть произвольными. ejudge-control -------------- Поддерживается опция командной строки `-f'. Если опция задана, то она передаётся всем запускаемым программам. Опция `-f' используется, когда отдельные компоненты системы ejudge завершились аварийно, и не были удалены файлы управляющих сокетов. В этом случае, если не указать опцию -f, при запуске системы возникнет ошибка невозможности создания нового управляющего сокета, так как старый не удалён. ejudge-setup ------------ Поддерживается кодировка UTF8. В сгенерированном настроечном скрипте не выполняется вызов `serve' в режиме настройки. Поддерживаются опции -u, -g, -C командной строки. new-server ---------- Поддерживаются следующие новые конструкции в выражении фильтра посылок: name string имя пользователя (поле `name') userincomplete boolean флаг `INCOMPLETE' регистрации пользователя userdisqualified boolean флаг `DISQUALIFIED' регистрации пользователя cypher string шифр пользователя (поле `cypher') examinator(ID) string пользователь ID является экзаменатором examinable boolean данная посылка проверяется вручную Протокол проверки содержит информацию о максимальном времени работы программы на всех тестах. Поддерживается печать на принтере нескольких видов протоколов: 1) Протокол участника: содержит его личную информацию и данные им ответы. 2) Позадачный анонимный протокол: содержит результаты проверки всех посылок по некоторой задаче. Посылки идентифицируются шифром участника. 3) Полный анонимный протокол: содержит результаты проверки посылок участника. Удастник идентифицируется шифром. 4) Полный протокол: содержит результаты проверки посылок участника. Участник полностью идентифицирован. На главную страницу привилегированного пользователя добавлена ссылка "View who is currently online", ведущая на страницу, отображающую список пользователей, находящихся в турнире в данный момент. В список попадают пользователи, которые выполнили какое-либо действие в турнире за последние 65 секунд. На страницу просмотра информации об участнике турнира добавлена возможность дисквалификации участника. Дисквалификация отличается от "бана" тем, что при дисквалификации можно задать текст (например, причину дисквалификации), который будет отображаться дисквалифицированному пользователю при его входе в турнир. При получении архива посылок на странице "Download runs" поддерживается структурирование архива по имени пользователя. Имя файла может содержать имя пользователя, или файлы могут размещаться в каталоге с именем пользователя. При этом для русских имён в кодировке koi8-r выполняется их преобразование в translit, так как в противном случае при развертывании архива в Windows имена искажаются. При импорте информации о посылках в формате CSV ("Import CSV runs") в качестве первичного ключа поддерживаются поля: run_id login,prob_id name,prob_id должно быть уникальным для каждого пользователя в турнире cypher,prob_id должно быть уникальным для каждого пользователя в турнире В случае, если в качестве первичного ключа выступает пара полей, тип турнира должен быть OLYMPIAD. Модифицироваться будут данные о последней посылке, принятой на проверку. Поддерживается возможность создания новых записей о посылках при импорте информации о посылках в формате CSV. Для этого на странице подтверждения операции необходимо установить флажок "Create new runs". Поддерживается возможность назначения экзаменаторов на ручную проверку задач. Реализована поддержка регистрации новых пользователей, регистрации пользователей на турнир и редактирования личных данных в турнире. Для доступа к новой функциональности используется CGI-программа `new-register' (которая на самом деле просто является другим именем для `new-client'). Реализованная функциональность полностью заменяет собой старую функциональность CGI-программы `register', дальнейшее использование которой не рекомендуется. Новый сервис регистрации более удобен, чем старый, имеет больше возможностей и интерфейс, аналогичный новому клиентскому интерфейсу CGI-программы `new-client'. Перенаправление на другую страницу сделано с помощью HTTP-поля Location:, что устраняет 1-секундную задержку при перенаправлении. Добавлена возможность принудительного начала виртуального турнира для выделенных пользователей. Для этого необходимо перейти на страницу просмотра обычных пользователей ("View regular users"), выделить нужных пользователей и затем нажать на кнопку "Force start virtual contest". Вместе с возможностью запрещать самостоятельное начало виртуального турнира пользователем это позволяет реализовывать турниры в "несколько смен". Поддерживается установка и сброс флага "Testing finished" (тестирование окончено). Данный флаг поддерживается только в турнирах OLYMPIAD. Если он установлен, то отображение некоторых страниц пользователей (в частности, страницы суммарной статистики по задачам и протокола тестирования) несколько изменяется. Поддерживается новый тип задач "CUSTOM". В этом типе задач форма ответа на задачу должна находиться непосредственно в условии задачи (кроме кнопки Submit - сдать решение). Для обработки посланной при сдаче формы используется загружаемый модуль (плагин), который должен быть указан для каждой такой задачи. Плагин в настоящее время представляет собой динамическую библиотеку, написанную на языке Си. Поддерживается генерация базы посылок в формате XML с исходным текстом программ. Для этого нужно нажать на ссылку "Export XML runs with source" вверху главной странице администратора. Для уменьшения размера исходные тексты сжимаются gzip и конвертируются в base64. Поддерживается режим дорешивания турнира. При активации режима дорешивания с помощью кнопки "Start upsolving" можно выбрать несколько режимов дорешивания: Freeze contest stadings не обновлять результаты турнира в процессе дорешивания; сданные в процессе дорешивания задачи не будут отражаться в таблице текущих результатов Allow viewing source code разрешить просмотр исходных текстов посылок Allow viewing run report разрешить просмотр протокола тестирования Allow viewing full protocol разрешить просмотр полного протокола тестирования Disable clarifications запретить посылку вопросов жюри На странице информации о турнире пользователей и на главной странице привилегированных пользователей выводится статистика о посещаемости турнира. Многочисленные улучшения пользовательского интерфейса непривилегированных пользователей (участников турнира). В частности, при сдаче задачи язык программирования устанавливается в последний использованный этим участников язык программирования. Поддерживается описание задачи во внешнем XML-файле. См. далее. Для задач типа select-one в режиме экзамена (exam_mode) поддерживается сдача ответа без кнопки "Сдать ответ". При выборе варианта ответа JavaScript на странице отсылает выбранный вариант. Если по данной задаче данным пользователем посылок ещё не было, создаётся новая посылка, а в противном случае изменяется существующая посылка. Для задач типа select-one, все возможные варианты ответа и правильный ответ для которой заданы в XML-файле задачи, поддерживается встроенная проверка. При встроенной проверке не формируется запрос на тестирование программе `run', а правильный ответ сравнивается с данным участником непосредственно в сервере. В результате для задачи типа select-one, заданной XML-файлом, не требуется ни каталога тестов, ни проверяющей программы, то есть она полностью задаётся XML-файлом. Корректно поддерживается суффикс CGI-программ, задаваемый с помощью опции --enable-cgi-suffix скрипта configure. Поддерживаются новые форматные преобразования: %Uy exam_id %UY exam_cypher %VS SID super-serve ----------- Поддерживается новая опция командной строки `-s' (slave mode). В подчинённом режиме не создаётся управляющий UNIX-сокет и не обрабатываются веб-запросы на управление турнирами. В XML-файлах описания турнира игнорируются атрибуты "managed", "new_managed" и "run_managed". Вместо этого обрабатываются элементы и вложенные в них элементы . Если имя компьютера, заданное в элементе , совпадает с именем компьютера, на котором работает `super-serve', то программа `super-serve' будет контролировать программу тестирования `run' для данного турнира. Подчинённый режим предназначен для использования на компьютерах, на которых выполняется тестирование турниров в режиме распределённого тестирования. run --- Удалена поддержка опции командной строки `-T'. Поддерживается кодировка UTF8. Поддерживается запуск программ оценивания решений, задаваемых с помощью конфигурационной переменной `valuer_cmd' раздела описания задачи. На стандартный поток ввода программе оценивания подаётся следующая информация: N - количество тестов: целое число >=0 и < 100000 результаты запуска программы на каждом тесте задаются тремя числами: S R T где S - статус выполнения программы (0 - OK и т. д.), R - балл, полученный за тест, T - процессорное время работы на данном тесте (в миллисекундах) libchecker ---------- Вместо кодировки UCS2 используется кодировка UCS4. Соответственно, все функции, содержавшие в своём имени ucs2, теперь содержат ucs4. Добавлено семейство функций `checker_{koi8r,cp866,cp1251,iso,mac,utf8}_to_ucs4_str', которые конвертируют строку, заканчивающуюся байтом 0, (то есть строку языка Си) из заданной кодировки в UCS4. Добавлены функции `checker_ucs4_to_utf8_size', `checker_ucs4_to_utf8r_str' для перевода из UCS4 в UTF8. Добавлены функции `checker_ucs4_to_koi8', `checker_ucs4_to_koi8r_str' для перевода из UCS4 в KOI8-R. Добавлена функция `checker_is_utf8_locale' для проверки, является ли текущая локаль локалью с кодировкой UTF8. Заголовочные файлы теперь инсталлируются в каталог ${prefix}/include/ejudge. cmp_huge_int ------------ Исправлена ошибка при чтении числа. cmp_yesno --------- Если установлена переменная окружения `CASE_INSENSITIVE', то сравнение ответов ведётся без учёта регистра букв. compile ------- При запуске компилятора устанавливается ограничение на процессорное, а не на реальное время. Это необходимо для корректного завершения компиляторов типа gcc, которые в процессе компиляции запускают несколько процессоров. Исправлена ошибка, из-за которой в предыдущей версии ограничение времени работы компилятора вообще не работало. Опция `-T' более не поддерживается.