Версия 2.1.39 (20050811) ======================== Поддерживается интерактивное редактирование настроек турниров. Для необходимо запустить программу-менеджер серверов турниров `super-serve'. Редактирование настроек контестов ведётся с помощью CGI-программы `serve-control'. Поддерживается работа CGI-программ по протоколу https. В правилах управления доступом к CGI-программам в конфигурационном файле турнира можно задавать, для какого протокола предназначено данное правило: для любого (http, https) - по умолчанию, только для протокола http, только для протокола https. Поддерживаются ограничения времени с точностью до миллисекунд. Для этого требуется последняя версия библиотеки reuse (4.2.0) и специальная поддержка со стороны ядра Linux, реализованная в патче 2.4.31-cher2. Поддерживается ошибка Memory Limit Exceeded. Тестирование программы завершается с этой ошибкой, если в процессе работы программы её адресное пространство или размер стека превысили установленный лимит. Для этого требуется последняя версия библиотеки reuse (4.2.0) и специальная поддержка со стороны ядра Linux, реализованная в патче 2.4.31-cher2. contest.xml ----------- В элементе поддерживается атрибут "ssl", который может принимать значения "any" (по умолчанию), "yes", "no". Атрибут задаёт, для какого протокола применимо данное правило. Если атрибут установлен в значение "yes", правило применимо только для соединений по протоколу https, если атрибут установлен в значение "no", правило применимо только для соединений по протоколу http. В качестве адреса допускается число "0", которое обозначает произвольный IP-адрес. Например, следующее правило разрешает нешифрованные соединения только с текущего компьютера, а соединения по протоколу https с любого компьютера: 127. 0 В качестве спецификации маски IP-адресов допускается форма A.B.C.D/E, где E - количество бит, отведённых на спецификацию адреса сети. Таким образом записи 192.168.0. и 129.168.0.0/24 эквивалентны друг другу. Поддерживается новый бит полномочий EDIT_CONTEST. Если бит установлен, пользователь может редактировать конфигурационные файлы турнира, используя программу serve-control. serve-control,super-serve ------------------------- Функциональность программы по интерактивному управлению серверами турниров реализована до конца. Кроме того, поддерживается редактирование конфигурационных файлов турнира (contest.xml, serve.cfg), создание новых турниров с нуля и по образцу уже существующих турниров. compile ------- Устранена утечка памяти, возникавшая при обработке каждого запроса на компиляцию. Более не поддерживается опция командной строки -E (запуск внешней программы-препроцессора на конфигурационный файл). serve,run --------- В файле протокола тестирования в режиме сохранения полного архива (full_archive) сохраняется контрольная сумма (SHA1) файла входных данных и правильного ответа. При отображении этих файлов их текущая контрольная сумма сравнивается с сохранённой в файле протокола и в случае несоответствия выдаётся предупреждение. Несоответствие, в частности, возникает тогда, когда файлы с тестами были изменены, а программа не была перетестирована. edit-userlist ------------- Поддерживается выделение пользователей в окне просмотра всех пользователей в базе данных. Установка/снятие выделения выполняются с помощью команды ':'. К выделенным пользователям применима команда 'c' регистрации пользователей на турнир. В режиме просмотра всех зарегистрированных пользователей доступна команда 'm' для массового создания новых пользователей. Для создания новых пользователей необходимо задать следующую информацию: "Template for new logins?" - задаёт шаблон для новых регистрационных имен. Шаблон должен содержать единственную спецификацию %d (допускается указание дополнительных флагов форматирования, например %03d, функций семейства printf), которая будет заменена на номер пользователя. "Template for passwords?" - аналогичным образом задаёт шаблон для паролей новых пользователей. "First number:" - минимальный номер, который будет использован в сгенерированной последовательности регистрационных имён и паролей. "Last number:" - максимальный номер, который будет использован в сгенерированной последовательности регистрационных имён и паролей. "Contest number:" - номер турнира, на который будут зарегистрированы все сгенерированные пользователи. Например, если задать шаблон новых регистрационных имён равный u2005%02d, шаблон новых паролей равный pass%02d, номер первого пользователя 1 и номер последнего пользователя 50, то будут созданы 50 новых регистрационных записей u200501...u200550 с паролями pass01...pass50. ejudge-setup ------------ В сгенерированном файле ejudge.xml устанавливается элемент . Таким образом, для запуска super-serve после выполнения установочного скрипта не требуется никаких дополнительных редактирований файла ejudge.xml. serve ----- Поддерживается новая глобальная конфигурационная переменная `stand_ignore_after' файла serve.cfg. Эта переменная позволяет устанавливать дату, после которой таблица текущих результатов перестаёт обновляться. То есть, если какая-либо посылка поступит позже этой даты, результат её тестирования не будет отображён в таблице текущих результатов. Изменения в более ранних посылках (например, перетестирования) отражены в таблице текущих результатов будут. Дата задаётся в стандартном формате: YYYY/MM/DD HH:MM:SS Поддерживается новая глобальная конфигурационная переменная `ignore_success_time'. Данная переменная действует только в режиме турнира ACM. Если переменная установлена, то при вычислении штрафных баллов по задаче будет игнорироваться время, прошедшее от начала турнира до успешной сдачи. Переменная может использоваться в турнирах, где каждая задача оценивается по системе зачёт/незачёт, и где время от начала турнира не существенно. serve-control,super-serve ------------------------- Поддерживается новая глобальная конфигурационная переменная `secure_run' файла serve.cfg. Данная переменная предназначена только для интерактивного редактирования настроек турнира с помощью serve-control. Если эта переменная установлена, генерируется конфигурационный файл, в котором в тестировщиках включена поддержка защищённого выполнения программ для архитектур Linux, Linux-shared и Java. serve,run --------- Добавлена новая глобальная конфигурационная переменная `enable_memory_limit_error' файла serve.cfg. Если эта переменная установлена, то при запуске программ на тестирование в данном турнире включается поддержка обнаружения ошибки превышения максимально допустимого объёма памяти. Добавлена новая конфигурационная переменная `enable_memory_limit_error' секции описания тестировщиков. Если данная переменная установлена, то для данного тестировщика в принципе возможна поддержка обнаружения ошибки превышения максимально допустимого объёма памяти. Эта переменная может быть установлена для тестировщиков Linux и Linux-shared (при начальной настройке турнира с помощью ejudge-setup или при редактировании настроек турнира с помощью serve-control она устанавливается автоматически), для других тестировщиков (Java, DOS) эта переменная не должна быть установлена, так как контроль размера выделенной памяти в этих случаях производится не средствами ядра Linux. Таким образом, поддержка обнаружения ошибки превышения максимально допустимого объёма памяти работает только если в конфигурационном файле турнира установлена глобальная конфигурационная переменная `enable_memory_limit_error' и только для архитектур Linux и Linux-shared (то есть для программ на gcc, g++, fpc, dcc). Добавлена новая конфигурационная переменная `time_limit_millis' секции описания задачи. Данная переменная позволяет устанавливать ограничение времени с точностью до миллисекунды. Если установлена данная переменная, значение переменной `time_limit' игнорируется. Поддержка миллисекундных ограничений времени работает только, если используется последняя версия библиотеки reuse (4.2.0). Если ядро Linux не поддерживает миллисекундные ограничения времени, reuse будет эмулировать их с помощью секундных ограничений времени. Добавлена новая конфигурационная переменная `check_cmd' секции описания задачи. Данная переменная имеет точно такое же значение, как и одноимённая переменная секции описания тестировщика, то есть позволяет задавать шаблон имени проверяющей программы для данной задачи. Поскольку проверяющая программа не зависит от архитектуры, под которой выполняется тестирующая программа (так как в конечном итоге все архитектуры работают под Linux), переменная `check_cmd' всегда имела одинаковое значение для всех тестировщиков турнира, поэтому целесообразно перенести её в секцию описания задачи. Переменная `check_cmd' секции описания тестировщика сохранена и имеет приоритет над соответствующей переменной секции описания задачи, однако её использование не рекомендуется, так как в этом случае становится невозможным редактирование настроек турнира с помощью CGI-программы serve-control. serve ----- Более не поддерживается опция командной строки -E (запуск внешней программы-препроцессора на конфигурационный файл). Исправлена ошибка, из-за которой каталог аудит-записей создавался раньше, чем тот каталог, в котором он должен быть расположен, из-за чего программа serve завершалась с ошибкой при запуске нового турнира. run --- Более не поддерживается опция командной строки -E (запуск внешней программы-препроцессора на конфигурационный файл). При работе под управлением программы `super-serve' период неактивности отсчитывается с момента завершения тестирования программы, а не с момента начала тестирования. В предыдущих версиях это приводило к тому, что если тестирование одной программы продолжалось дольше, чем период неактивности, программа run завершалась даже если очередь на тестирование была не пуста. В режиме турнира ACM не требуется, чтобы сумма баллов по всем тестам была не больше, чем полное число баллов за задачу. Так как по умолчанию задача оценивается в 25 баллов, а каждый тест - в 1 балл, это приводило к тому, что если у задачи было более 25 тестов, требовалось указание либо параметра `full_score', либо параметра `test_score' в секции описания задачи. Теперь этого не требуется. serve ----- Исправлена ошибка в обработчике команды "Reset Contest". В предыдущих версиях в результате очистки турнира создавался некорректный файл журнала посылок, после чего программа `serve' отказывалась работать. serve,master ------------ Поддерживается изменение длительности турнира с конечной на бесконечную и наоборот. Если в окне ввода указать "0", то будет установлена неограниченная продолжительность турнира. run --- Для каждого поддерживаемого языка программирования LANG помимо скрипта компиляции создаётся и скрипт версии LANG-version (например, gcc и gcc-version). При запуске скрипт печатает на стандартный поток вывода версию языка. Кроме того, поддерживаются две опции: -f Напечатать на стандартный поток вывода название компилятора и его версию. -p Напечатать на стандартный поток вывода путь к компилятору. master,judge,team,serve-control,register,users ---------------------------------------------- Поддерживается протокол https. master,judge ------------ На главной страничке отображается суммарное количество посылок, находящихся в стадии компиляции или тестирования. При просмотре протокола тестирования отображается астрономическое время работы программы на каждом тесте (если эта информация присутствует в протоколе тестирования). В режиме сохранения полного архива вывода тестируемых программ (full_archive) если контрольная сумма тестового файла в момент тестирования не совпадает с контрольной суммой файла при просмотре, выдаётся предупреждение. serve-cmd --------- Поддерживаются новые команды: serve-cmd CONTEST-ID dump-problems SESSION-ID-FILE Печатает информацию о задачах указанного турнира в CSV-формате (поля разделяются знаком ';'). [0] - id [1] - short_name [2] - long_name serve-cmd CONTEST-ID dump-standings SESSION-ID-FILE Печатает текущую таблицу результатов в CSV-формате. Печатается полная версия таблицы результатов, доступная для привилегированных пользователей. Данная команда эквивалентна команде "Dump standings" CGI-программы master. serve-cmd CONTEST-ID dump-all-users SESSION-ID-FILE Печатает таблицу всех пользователей в CSV-формате. Номер турнира CONTEST-ID не используется и может быть произвольным. serve-cmd CONTEST-ID get-contest-name SESSION-ID-FILE Печатает название указанного турнира. serve-cmd CONTEST-ID get-contest-type SESSION-ID-FILE Печатает тип указанного турнира. На стандартный поток вывода печатается одна из трёх возможных строк: acm, kirov, olympiad. testlib ------- Добавлена версия testlib для delphi/kylix. Версия для fpc инсталлируется в ${prefix}/share/ejudge/testlib/fpc, а версия для delphi инсталлируется в ${prefix}/share/ejudge/testlib/delphi. Если при конфигурировании системы поддержка соответствующих языков была включена, при инсталляции файлы библиотеки testlib компилируются соответствующими компиляторами. Путь к библиотеке testlib для соответствующего языка устанавливается автоматически при выполнении команды "Check contest settings" программы serve-control. То есть, не требуется присутствие файла testlib.pas в каталоге чекеров турнира.