Версия 2.1.43 (20051117) ======================== Исправлен URL системы ejudge. Теперь это http://www.ejudge.ru. Поддерживается компилятор GCC 4.0.*. Если при конфигурировании системы в качестве компилятора по умолчанию используется GCC 4.0, то для компиляции включается флаг -Wno-pointer-sign. Устранены все предупреждения компилятора, выдаваемые при уровне оптимизации -O2. Система ejudge портирована на Linux/x86_64. fpc/testlib.pas --------------- Исправлены ошибки работы с Unix-концами строк (Victor Matyukhin). delphi/testlib.pas ------------------ Адаптирована последняя версия testlib Андрея Станкевича. contest.xml ----------- Поддерживаются два новых элемемента: и . Элемент позволяет задать произвольный HTML-текст, который будет выводиться в форме регистрации на турнир CGI-программы register рядом с полем ввода имени команды. Данный текст, например, может содержать инструкции по выбору названия команды и пр. Элемент позволяет ограничить языки и среды программирования, которые пользователи могут указывать при регистрации на турнир. Если элемент не задан, то поле `Programming languages' регистрационной формы по прежнему будет обычной строкой ввода. Если же элемент установлен, то вместо строки будет выведена форма, в которой перечислены все допустимые языки, каждый язык может быть помечен. В элементе языки должны перечисляться через запятую, например: Borland C/C++, Borland Pascal, Delphi Добавлена поддержка флага DISABLE_MEMBER_DELETE. Если этот флаг установлен, в форме регистрации на турнир не отображается кнопка удаления члена команды. Добавлены новые элементы , , , . Они позволяют управлять видом таблицы зарегистрированных пользователей турнира, выводимой CGI-программой `users'. Элементы , позволяют определять вид строки-заголовка таблицы зарегистрированных пользователей. В элементах задаётся текст, который будет выводиться в колонках таблицы со второй по предпоследнюю. Первая колонка таблицы всегда называется "NN" (порядковый номер в списке), а последняя - "Status" (или "Статус") - статус регистрации участника. Колонки отделяются друг от друга символом "|". Например, Id|Имя участника|Учебное заведение|Факультет означает, что таблица зарегистрированных пользователей будет содержать столбцы "NN", "Id", "Имя участника", "Учебное заведение", "Факультет", "Статус". Элемент используется, когда выводится таблица зарегистрированных пользователей на английском языке (то есть locale_id == 0), а элемент используется для вывода таблицы зарегистрированных пользователей на локальном языке (locale_id != 0) (например, русском). Если значение элемента не установлено, то используется вид таблицы по умолчанию. Элементы , определяют информацию, которая будет выведена для каждого участника турнира в таблице зарегистрированных участников. В элементе могут использоваться форматные преобразования (см. далее), а описание столбцов разделяются символом "|". В первом столбце таблицы всегда выводится порядковый номер участника в таблице, а в последнем столбце - статус регистрации. Например, спецификация %Ui|%Un|%Ut|%Uf означает, что таблица будет состоять из 6 столбцов: порядкового номера, идентификатора пользователя, имени пользователя, краткой формы записи учебного заведения, краткой формы записи факультета, статуса регистрации. Элемент используется для вывода таблицы на английском языке (то есть при locale_id == 0), а элемент - для вывода таблицы на локальном языке, когда locale_id != 0 (например, русском). Если значение элемента не установлено, используется вид таблицы по умолчанию. Элементы , должны быть либо оба установлены, либо не установлены, причём должны описывать одинаковое количество столбцов. Аналогичное правило действует для элементов , . Если правило нарушается, используется вид таблицы по умолчанию. Из , может быть установлен только один элемент, тогда для другого будет использоваться значение по умолчанию. serve ----- Добавлена поддержка новой глобальной конфигурационной переменной `users_on_page' файла `serve.cfg'. Если эта переменная установлена в положительное значение, таблица результатов турнира будет разбиваться на страницы по заданному числу пользователей на страницу. Пока разбиение на страницы работает только для турниров по системе KIROV. Добавлены новые глобальные конфигурационные переменные `stand_fail_attr' и `stand_trans_attr'. Эти переменные позволяют определить атрибут ячейки таблицы текущих результатов, если для данного пользователя и для данной задачи есть посылки в состоянии "Check failed" и "Compiling..." или "Running..." соответственно. Атрибут `stand_fail_attr' может использоваться для наглядного выделения проблемных мест турнира, а атрибут `stand_trans_attr' может использоваться для индикации того, что в данный момент посылки тестируются, что может привести к изменению таблицы. Добавлена новая глобальная конфигурационная переменная `stand_show_att_num' файла конфигурации турнира `serve.cfg'. Данная переменная действует только в режимах турнира KIROV или OLYMPIAD. Если эта переменная установлена в ненулевое значение, в таблице результатов турнира для каждого участника и каждой задачи рядом с количеством баллов за задачу отображается количество попыток. Если задача была полностью сдана, то отображается количество попыток до момента первой сдачи задачи (включая и успешную попытку). Если задача не сдана полностью, отображается текущее количество попыток по данной задаче. Добавлена новая глобальная конфигурационная переменная `stand_sort_by_solved' файла конфигурации турнира `serve.cfg'. Данная переменная действует только в режимах работы турнира KIROV или OLYMPIAD. Если эта переменная установлена в ненулевое значение, то сортировка участников для распределения их по местам ведётся по убыванию решенных задач, и затем по убыванию количества баллов (в обычной системе KIROV сортировка ведётся только по убыванию количества набранных баллов). Добавлена новая конфигурационная переменная `lang_time_adj' раздела определения задачи файла `serve.cfg'. Данная конфигурационная переменная позволяет задавать поправку к максимальному времени тестирования на 1 тесте (time_limit) в зависимости от языка программирования. Поправка задаёт дополнительное время в секундах и должна быть больше 0 и не больше 100. конфигурационная переменная `lang_time_adj' может быть задана несколько раз, определяя таким образом поправки для нескольких языков в данной задаче. Каждая спецификация поправки имеет вид: LANG=ADJ где LANG - это короткое имя языка программирования, а ADJ - целое число. Например, lang_time_adj="dcc=1" lang_time_adj="java=10" Для некоторой задачи задаёт, что для программ для Delphi время тестирования должно быть увеличено на 1 секунду по сравнению с заданным в поле `time_limit', а для программ на Java - на 10 секунд. Добавлена новая глобальная конфигурационная переменная `disable_submit_after_ok' конфигурационного файла `serve.cfg'. Если эта переменная установлена в 1, то участникам запрещается посылка уже сданных задач. Сданные задачи не появляются в списке задач, доступных для сдачи. Добавлена новая конфигурационная переменная `skip_testing' раздела описания задачи. Если для некоторой задачи эта переменная установлена, программа `run' будет пропускать запросы на тестирование данной задачи, однако запрос будет доступен другим программам `run'. Данная конфигурационная переменная может использоваться для балансировки нагрузки по задачам между несколькими программами `run' на нескольких проверяющих компьютерах совместно с директивами условной компиляции, например: [problem] short_name = "Z" @if host == "host1" skip_testing @endif В этом случае программа `run', запущенная на компьютере "host1", будет игнорировать запросы на тестирование задачи "Z". Добавлен новый тип турнира "Moscow". Этот тип турнира - модификация турниров типа ACM. В отличие от ACM, в турнире Moscow задачи могут оцениваться в произвольшое количество баллов >= 1. Тестирование посылки ведется до первой неудачи, и в зависимости от количества прошедших тестов посылка оценивается в 0, 1, 2 ... N баллов. Полное количество баллов за задачу определяется конфигурационной переменной `full_score'. Для каждой задачи, которая оценена более чем в 1 балл, должна быть определена конфигурационная переменная `score_tests'. Если задача оценивается в N баллов, переменная `score_tests' должна задавать N-1 число. Числа разделяются пробелами. Каждое число задает номер теста, числа должны образовывать возврастающую последовательность, причем последнее число должно быть меньше общего количества тестов по данной задаче. K-е число в этом списке задаёт количество тестов, которые должна пройти посылка, чтобы быть оцененной в K баллов. Например, для следующей спецификации: full_score = 5 score_tests = "10 20 30 40" и общего количества тестов по задаче 50, если задача прошла 0-9 тестов, то она оценивается в 0 баллов, если 10-19 тестов - то в 1 балл, 20-29 тестов - 2 балла, 30-39 тестов - 3 балла, 40-49 тестов - 4 балла, 50 тестов - 5 баллов. Добавлены новые конфигурационные переменные для управления внешним видом таблицы текущих результатов участников. Глобальная конфигурационная переменная `stand_row_attr' позволяет определять атрибуты строк таблицы. Эти атрибуты используются, когда к строке таблицы неприменимы другие атрибуты, задаваемые глобальными конфигурационными переменными `stand_v_row_attr', `stand_r_row_attr', `stand_u_row_attr', `stand_self_row_attr', `stand_contestant_status_attr'. Конфигурационная переменная `stand_row_attr' должна быть определена либо 5, либо 6 раз, задавая таким образом массив из 5 или 6 атрибутов. Массив используется следующим образом: stand_row_attr[0] - это атрибут строки заголовка таблицы, stand_row_attr[1], stand_row_attr[2] - атрибуты четных и нечетных строк таблицы соответственно, stand_row_attr[3], stand_row_attr[4] - атрибуты четных и нечетных строк таблицы соответственно, эти две группы атрибутов используются попеременно при изменении количества решенных задач у команд. stand_row_attr[5] (если определен) - атрибуты строк таблицы, в которых отображается суммарная информация по всем участникам турнира. Пример использования переменной `stand_row_attr': stand_row_attr = " bgcolor=\"#cccccc\" valign=\"top\"" stand_row_attr = " bgcolor=\"#eeffff\" valign=\"top\"" stand_row_attr = " bgcolor=\"#ddffff\" valign=\"top\"" stand_row_attr = " bgcolor=\"#ffeeff\" valign=\"top\"" stand_row_attr = " bgcolor=\"#ffddff\" valign=\"top\"" stand_row_attr = " bgcolor=\"#cccccc\" valign=\"top\"" Для совместимости со стандартным видом таблицы в предыдущих версиях системы, если ни глобальная конфигурационная переменная `stand_table_attr', ни глобальная конфигурационная переменная `stand_row_attr' не установлена, переменная `stand_row_attr' устанавливается в значение " border=\"1\"". Добавлена глобальная конфигурационная переменная `stand_page_table_attr', которая позволяет задавать атрибут таблички ссылок на страницы текущих результатов, если включено разбиение таблицы текущих результатов на страницы. Добавлена глобальная конфигурационная переменная `stand_page_row_attr', которая позволяет задавать атрибуты строк таблицы ссылок на страницы текущих результатов, если включено разбиение таблицы текущих результатов на страницы. Эта переменная должна быть определена 4 раза, формируя массив атрибутов из 4 элементов. Массив используется следующим образом: stand_page_row_attr[0] - атрибут первой строки таблицы: номера страниц, stand_page_row_attr[1] - атрибут второй строки таблицы: места stand_page_row_attr[2] - атрибут третьей строки таблицы: число решенных задач (набранный балл для Moscow), stand_page_row_attr[3] - атрибут четвертой строк таблицы: набранные баллы (штрафной балл для Moscow, ACM). Пример использования переменной: stand_page_row_attr = " bgcolor=\"#ccddcc\" valign=\"top\" align=\"center\"" stand_page_row_attr = " bgcolor=\"#ccddcc\" valign=\"top\"" stand_page_row_attr = " bgcolor=\"#ccddcc\" valign=\"top\"" stand_page_row_attr = " bgcolor=\"#ccddcc\" valign=\"top\"" Добавлена глобальная конфигурационная переменная `stand_page_col_attr', которая позволяет задавать атрибуты столбцов таблицы ссылок на страницы таблицы текущих результатов, если включено разбиение таблицы текущих результатов на страницы. Эта переменная должна быть определена 2 раза, формируя массив атрибутов из 2 элементов. Массив используется следующим образом: stand_page_col_attr[0] - атрибут первого столбца таблицы (названия строк), stand_page_col_attr[1] - атрибут всех остальных столбцов таблицы. Пример использования переменной: stand_page_col_attr = "" stand_page_col_attr = " width=\"60\"" Добавлена новая глобальная конфигурационная переменная `stand_page_cur_attr', которая позволяет задавать атрибуты текста "Page N of M.", выводимого, когда включено разбиение таблицы текущих результатов на страницы. В протоколе тестирования участника отображается астрономическое время тестирования задачи. userlist -------- В базе данных пользователей изменена поддержка поля `Phone' в данных по пользователю и данных по членам команды. Ранее поддерживался элемент , в котором находился список элементов , однако эта структура нигде не использовалась и её редактирование не поддерживалось. Теперь элемент удалён, а представляет собой обычную строку. Редактирование поддерживается всеми программами. userlist-server --------------- Исправлена ошибка, появившаяся в предыдущей версии, связанная с некорректным удалением cookie при смене пароля. Поддерживается редактирование поля `phone'. Изменена политика аутентификации пользователей CGI-программы `team'. Теперь если у турнира установлен флаг `disable_team_password', то проверяется только регистрационный пароль (поле `register_password'), а если флаг `disable_team_password' не установлен, то проверяется только пароль участника (поле `team_password'), а регистрационный пароль игнорируется. В предыдущих версиях проверялись оба пароля и принимался любой. Данное изменение может привести к тому, что участники не смогут войти в работающий турнир, если для турнира был неправильно установлен флаг `disable_team_password', для тех участников, которые поменяли пароль в CGI-программе `team'. Для устранения этой проблемы администратор турнира должен вручную исправить соответствующие поля данных участника (например, скопировать пароль участника в регистрационный пароль) с помощью команды `o' программы edit-userlist. Добавлены новые команды протокола для операций с паролями одного участника: генерация случайного пароля и копирование одного пароля в другой. См. команды `o', `y' программы edit-userlist. register,userlist-server ------------------------ При регистрации нового пользователя проверяется статус отсылки e-mail сообщения. Если отсылка завершилась неуспешно, пользователю возвращается соответствующий код ошибки. Программа `register' обрабатывает код новый код ошибки регистрации и отображает соответствующее диагностическое сообщение. super-serve ----------- Улучшена поддержка турниров с вариантными задачами. Ссылка на страницу редактирования таблицы вариантов добавлена в заголовок страниц редактирования настроек турниров. В конец страницы редактирования таблицы вариантов добавлены стандартные кнопки сохранения изменений. Исправлена ошибка некорректной работы команды смены варианта. serve-control, super-serve -------------------------- Поддерживается редактирование новых полей XML-файла конфигурации турнира: элементов , , флага DISABLE_MEMBER_DELETE. Поддерживается редактирование глобальной конфигурационной переменной `users_on_page' файла `serve.cfg'. Поддерживается редактирование новых элементов XML-файла конфигурации турнира: , , , . Поддерживается редактирование новой глобальной конфигурационной переменной `stand_show_att_num'. Поддерживается редактирование новой глобальной конфигурационной переменной `stand_sort_by_solved'. Поддерживается редактирование конфигурационной переменной `lang_time_adj' раздела описания задачи. При редактировании поправки для всех языков для данной задачи записываются в одной строке и разделяются пробелами, например: dcc=1 java=10 Поддерживается редактирование новой глобальной конфигурационной переменной `disable_submit_after_ok'. Исправлена ошибка, из-за которой терялся первый тест в случае, когда `super-serve' не хватало прав для модификации теста при выполнении команды "Check contest settings". При создании нового турнира файл `serve.cfg' корректно добавляется в систему контроля версий. run --- Исправлена ошибка в поддержке стандартных проверяющих программ для вариантных задач. Если `run' работает не в управляемом режиме, то пакеты принудительного завершения игнорируются. В предыдующих версиях `run' аварийно завершал работу. Управляющий пакет содержит новое поле `time_limit_adj', которое содержит поправку к ограничению времени для данного тестирования. Новое поле обрабатывается программой `run'. Поправка ко времени тестирования должна быть больше 0 и не больше 100 и задаёт дополнительное время в секундах. register -------- Поддерживается редактирование полей `phone' в форме регистрации на турнир. Поддерживаются новые элементы , и флаг DISABLE_MEMBER_DELETE конфигурационного файла описания турнира. Форма регистрации на турнир упрощена за счёт удаления полей, значение которых никак не использовалось (show_email, show_login, use_cookies_default). edit-userlist ------------- Поддерживается редактирование полей phone. В меню пользователей и турниров поддерживается команда 't' (Toggle) - инвертировать все флаги выделения. Если ни один пользователь или турнир не был выделен, то в результате выполнения этой команды будут выделены все. Поддерживается команда '0' - сбросить все флаги выделения. Поддерживается выделение нескольких турниров. Для этого в меню турниров используются команды ':', 't', '0'. Поддерживается регистрация одного пользователя сразу на выделенное множество турниров. Поддерживается регистрация выделенного множества пользователей на выделенное множество турниров. В меню пользователей, зарегистрированных на турнир, добавлена команда 'f', позволяющая установить или сбросить некоторые поля данных пользователя. Сбросить можно поля Read-only, Never-clean, Location. Установить (в значение true) можно поля Read-only, Never-clean. Команда может применяться как к одному пользователю, так и к нескольким выделенным пользователям. При редактировании данных пользователей поддерживаются две новых команды, применимые к паролям: `o' - сгенерировать случайный пароль. Курсор должен находиться либо на поле регистрационного пароля (Reg password), либо на поле пароля участника (Team password). `y' - скопировать текущий пароль в другой пароль. Если курсор находится на регистрационном пароле, то он копируется в пароль участника, и наоборот, если курсор находится на пароле участника, то он копируется в регистрационный пароль. users,userlist-server --------------------- При выводе таблицы зарегистрированных участников турнира поддерживается возможность управления информацией, выводимой в таблице, с помощью новых элементов , , , XML-конфигурационного файла турнира (см. выше). При выводе элементов таблицы могут использоваться следующие форматные преобразования: %Ui идентификатор пользователя (id) %Un имя пользователя (name) %Ul регистрационное имя (login) %Ue адрес email (email) %Uz регистрационный пароль (если он не был зашифрован) %UZ турнирный пароль (если он не был зашифрован) %Uc город (city) %UC город (англ) (city_en) %Uo страна (country) %UO страна (англ) (country_en) %Ut аббревиатура учебного заведения (inst_short) %UT аббревиатура учебного заведения (англ) (inst_short_en) %Uu учебное заведение (inst) %UU учебное заведение (англ) (inst_en) %Uf аббревиатура факультета (fac_short) %UF аббревиатура факультета (англ) (fac_short_en) %Ud факультет (fac) %UD факультет (англ) (fac_en) %UL размещение (location) %Up имя назначенного принтера (printer_name) %Uh домашняя страница WEB (homepage) %UH телефон (phone) %UP языки программирования (languages) Кроме того, с помощью групп форматных преобразований %UM выводится информация об участниках команды: %UMp информация об основных участниках %UMr информация о запасных %UMa информация о руководителях %UMc информация о тренерах %UMg информация о гостях Номер участника специфицируется сразу же после буквы типа участника десятичным числом, начиная от 1, например, %UMp2 - второй основной участник, %UMc1 - первый тренер. Далее специфицируется поле в записи об участнике: f имя (firstname) F имя (англ) (firstname_en) m отчество (middlename) M отчество (англ) (middlename_en) s фамилия (surname) S фамилия (англ) (surname_en) g группа, класс (group) G группа, класс (англ) (group_en) e email h домашняя страница (homepage) o должность (occupation) O должность (англ) (occupation_en) u учебное заведение (inst) U учебное заведение (англ) (inst_en) t аббревиатура учебного заведения (inst_short) T аббревиатура учебного заведения (англ) (inst_short_en) a аббревиатура факультета (facshort) A аббревиатура факультета (англ) (facshort_en) d факультет (fac) D факультет (англ) (fac_en) H телефон b статус (status) B статус (англ) (status_en) c номер курса, класса (grade) C номер участника в команде (number) Например, %UMp1s обозначает фамилию первого основного участника команды. ejudge-setup ------------ При генерации конфигурационного файла ejudge.xml у создаваемого пользователя-администратора устанавливаются биты полномочий MASTER_LOGIN и JUDGE_LOGIN.