Версия 2.1.36 (20050402) ======================== В данной версии исправлено несколько серьёзных ошибок в программах userlist-server и serve. Рекомендуется обновиться до данной версии. Программы `compile' и `run' снова собираются на платформе Win32. Для компиляции программ необходим пакет Cygwin, но для их последующего выполнения пакет Cygwin не требуется. Для сборки и работы требуется Windows 2000 или выше. Для компиляции на Win32 необходима последняя версия библиотеки reuse: 4.0.1. Рекомендуется использовать последнюю версию reuse и при компиляции на Linux. Добавлено много усовершенствований для турниров по системе OLYMPIAD. serve ----- В базу посылок добавлено два новых статуса проверки посылки: "Memory Limit" (RUN_MEM_LIMIT_ERR) и "Security Error" (RUN_SECURITY_ERR). Они обрабатываются везде точно также, как, например, "Run-time error" (RUN_RUN_TIME_ERR) и могут использоваться для более точного указания причины ошибки. Хотя два новых статуса ошибки были добавлены в базу, программа `run' пока не поддерживает диагностику этих кодов ошибок по причине невозможности их надёжного определения на Linux. Два новых статуса пока могут быть установлены только вручную при редактировании базы посылок. Добавлен новый статус посылки "Pending" (RUN_PENDING). Посылка устанавливается в этот статус, когда она была принята сервером, но по каким-либо причинам не была отправлена на тестирование, например, если установлен флаг задачи или языка программирования `disable_testing' или `disable_auto_testing', или если в турнире приостановлено тестирование поступающих решений. Ранее в этих случаях посылка получала статус "Accepted for Testing" (RUN_ACCEPTED), однако этот статус используется и в турнирах по системе OLYMPIAD при предварительном тестировании задач, поэтому эти два типа использования RUN_ACCEPTED были разделены и введён специальный статус RUN_PENDING. В выражении фильтра посылок новые статусы кодируются следующим образом: PD RUN_PENDING ML RUN_MEM_LIMIT_ERR SE RUN_SECURITY_ERR compile ------- Программа `compile' собирается на Win32 (см. выше). Данная версия программы не тестировалась на Win32, поэтому поддержка Win32 находится в альфа-стадии. compile, serve -------------- Переработан формат управляющих пакетов, с помощью которых serve передаёт задания на компиляцию compile и получает результаты компиляции. Теперь данные передаются в бинарном формате. Кроме того, пакеты включают поля временных отметок, которые используются затем для выдачи подробной статистики о ходе прохождения задания на тестирование. configure --------- Поддерживается платформа Win32 (Cygwin с опцией -mno-cygwin). edit-userlist ------------- Добавлена частичная поддержка выполнения команд над группой пользователей. При просмотре списка пользователей, зарегистрированных на некоторый турнир, можно ставить/снимать выделение каждого пользователя. Для этого используется команда ':'. Если выделено несколько пользователей, команды 'r' (изменить статус регистрации), 'd' (удалить регистрацию), 'i' (изменить статус видимости), 'b' (изменить статус дисквалификации), 'l' (изменить статус заблокированности) выполняются над всеми выделенными пользователями. Если ни один пользователь не выделен, указанные выше команды выполняются над текущим пользователем. В режим просмотра участников, зарегистрированных на турнир, добавлена команда 'c', которая позволяет зарегистрировать данного участника или группу участников на другой турнир. Данная команда совместно с командной группового выделения ':' даёт возможность зарегистрировать всех участников одного турнира на другой турнир, что может использоваться, например, при подготовке пробного тура, виртуального турнира по результатам реального турнира и т. д. serve ----- Улучшена диагностика неправильных выражений фильтра. Теперь если пользователь вводит неправильное ключевое слово, например, problem вместо prob, то будет выдана ошибка о недопустимом ключевом слове problem вместо трёх ошибок о недопустимых символах l, e, m. Исправлена серьёзная ошибка, проявлявшаяся при вводе ошибочного выражения фильтра. В этом случае выделялся блок динамической памяти, размер которого задавался неинициализированной переменной. В дальнейшем это могло приводить к фатальному завершению `serve' из-за нехватки памяти, неправильной работе и т. п. serve ----- Убрано ограничение на то, что количество баллов, полученное за задачу с учётом всех дополнительных факторов (штраф за время и т. п.), не может привышать полного балла задачи (full_score). В турнире по системе OLYMPIAD в режиме предварительного тестирования переработан вид таблицы текущих результатов участников. В этом режиме каждый из предварительных тестов оценивается в 1 балл вне зависимости от оценки этого теста в конфигурационном файле (обычно это --- 0 баллов). Задача помечается как сданная (выделяется жирным шрифтом), если она прошла все предварительные тесты. Участники ранжирутся по числу сданных задач, а после этого по количеству набранных баллов. В режиме окончательного тестирования вид таблицы текущих результатов не изменился и совпадает с видом таблицы текущих результатов в турнире по системе KIROV. serve, team ----------- CGI-программа team также поддерживает отображение протоколов в формате HTML. Хотя только судейские протоколы могут генерироваться в формате HTML, участник получает доступ к ним, если установлена глобальная конфигурационная переменная `team_show_judge_report' конфигурационного файла serve.cfg. run --- Программа `run' собирается на Win32 (см. выше). Данная версия программы не тестировалась на Win32, поэтому поддержка Win32 находится в альфа-стадии. serve,run --------- Переработан формат управляющих пакетов, с помощью которых serve передаёт задания на выполнение run и получает результаты тестирования. Теперь данные передаются в бинарном формате. Кроме того, пакеты включают поля временных отметок, которые используются затем для выдачи подробной статистики о ходе прохождения задания на тестирование. run --- В судейский протокол тестирования печатается статистика о прохождении задания по этапам тестирования. Отслеживается постановка задания в очередь на компиляцию, компиляция, ожидание в очереди скомпилированных заданий, постановка задания в очередь на выполнение, выполнение. serve, master, judge -------------------- В турнире по системе OLYMPIAD в режиме предварительного тестирования поддерживается команда "Full rejudge", которая вызывает полное тестирование задачи на всех тестах. Эта команда может использоваться, когда в режиме предварительного тестирования необходимо полностью протестировать, например, судейское решение. serve ----- Улучшена обработка ситуации, когда ошибка возникает в процессе добавления новой посылки. Если запись новой посылки в файл завершилась с ошибкой, эта посылка будет удалена и из базы посылок. Таким образом исправлена старая ошибка, которая возникала в случае, если на файловой системе, на которой хранится архив посылок, заканчивалось свободное место. В этом случае исходный текст программы в архив не записывался, но в базе посылок запись сохранялась и имела статус "Available". В базу посылок добавлено новое поле judge_id, которое принимает значения от 0 до 65535. Когда посылка направляется на тестирование или перетестирование, ей назначается некоторый judge_id, который сохраняется в базе. Когда serve получает пакеты с результатами компиляции или тестирования программы, judge_id, указанный в пакете, проверяется на соответствие judge_id, сохранённому в базе посылок, и если judge_id не совпадают, полученный пакет игнорируется. Таким образом решается проблема, когда посылка, находящаяся на тестировании, снова направляется на тестирование. В этом случае старый judge_id в базе будет замещён новым и таким образом результаты более старого перетестирования будут проигнорированы. Раньше этого гарантировать было нельзя, так как более ранний запрос на тестирование мог выполниться первым, после чего статус посылки менялся на статус, определённый в результате тестирования, и более новые результаты тестирования игнорировались. Поле judge_id в структуре описания посылки занимает 2 байта. Таким образом размер всех значимых полей стал равным 64 байта, и в структуре не осталось неиспользуемого места, так как с момента перехода с текстового формата журнала посылок на бинарный размер одной записи равен 64 байта. В журнале посылок не осталось места для дальнейшего добавления полей без изменения формата журнала (например, перехода к 128-байтовым записям). Добавлено новое форматное преобразование '%M1', которое выводит значение поля `extra1' структуры информации о пользователе. Это поле не доступно для редактирования ни обычным пользователем, ни администратором и используется для служебных целей. Текущая версия программы userlist-server при передаче списка пользователей, зарегистрированных на турнир, помещает в данное поле значение поля `grade' первого участника команды. В личных олимпиадах это поле содержит класс или курс участника. Таким образом, можно считать, что форматное преобразование '%M1' отображает класс или курс участника личной олимпиады. userlist-server --------------- Исправлена ошибка разыменования нулевого указателя при попытке регистрации нового пользователя в системе если не был задан номер турнира. Она проявлялась, если для регистрации пользователя использовался URL без задания параметра contest_id, например, http://acm.msu.ru/cgi-bin/register. Если параметр contest_id был указан, например, http://acm.msu.ru/cgi-bin/register?contest_id=83, проблема не возникала. Данная ошибка была внесена в предыдущей версии, когда была добавлена поддержка шаблонов регистрационных писем. super-serve ----------- UNIX-сокеты для управления программами serve всех управляемых турниров, которые создаются программой super-serve при старте, удаляются при завершении работы.