Пояснительная записка (1231610), страница 4
Текст из файла (страница 4)
– выбор формата истории посылок;
– выбор момента «заморозки» таблицы;
– обнуление таблицы и переход на момент «заморозки»;
– регулирование скорости анимации «разморозки»;
– последовательная или хронологическая «разморозка». Под хронологической «разморозкой» подразумевается заполнение таблицы результатами в хронологическом порядке. Алгоритм последовательной «разморозки» начинает обработку посылок самого нижнего участника в таблице, у которого еще остались «замороженные» посылки. В случае, если его посылка была успешной – он поднимается вверх по таблице;
– пошаговая или автоматическая «разморозка»: то есть «разморозка» по нажатию кнопки или же без него соответственно;
– включение и выключение отображения времени посылок;
– включение и выключение отображения будущих посылок;
– обработка только последней посылки.
История посылок с результатами соревнований должны загружаться с сервера или с компьютера пользователя.
3 Реализация системы для проведения соревнований по программированию с модулем подведения итогов
3.1 Установка и настройка системы для проведения соревнований по программированию Ejudge
В текущий момент заказчик – кафедра «Вычислительная техника и компьютерная графика», не имеет своего сервера с операционной системой Ubuntu, поэтому установка системы Ejudge произведена на тестовую машину.
3.1.1 Подготовка рабочей среды для установки Ejudge
Подготовка рабочей среды состоит из нескольких шагов [33].
Необходимо установить следующие сторонние программы и библиотеки:
– bison;
– flex;
– ncurses, ncurses-devel;
– expat, expat-devel.
Следует создать пользователя ejudge с домашним каталогом /home/ejudge/:
# groupadd ejudge
# useradd ejudge -s /bin/bash -m -d /home/ejudge -g ejudge
Находясь в роли пользователя ejudge выполнить установку библиотеки reuse:
– скачать в домашний каталог пользователя ejudge архив с исходными файлами текущей версии библиотеки reuse;
– в консоли выполнить следующее:
$ tar -xvzf reuse-VERSION.tgz
$ cd reuse/source
$ ./configure
$ make && make install
Помимо этого, в системе должен быть установлен web-сервер. Для Ejudge рекомендуется использовать web-сервер Apache2, но так же возможна корректная работа и с web-сервером Apache.
3.1.2 Настройка web-сервера Apache2
Следует найти в конфигурационном файле web-сервера директиву <Directory "/usr/lib/cgi-bin">. Фрагмент конфигурационного файла должен выглядеть следующим образом:
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options FollowSymLinks Includes
AddOutputFilterByType INCLUDES text/html
Order allow,deny
Allow from all
</Directory>
Также следует добавить в конфигурационный файл:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Для доступа web-сервера к файлам *.css и *.js системы ejudge, а также к директории с изображениями, необходимо добавить следующий фрагмент:
Alias /ejudge/ /home/ejudge/inst-ejudge/share/ejudge/style/
<Directory "/home/ejudge/inst-ejudge/share/ejudge/style">
AllowOverride None
Order allow,deny
allow from all
</Directory>
3.1.3 Установка системы Ejudge
Предполагается, если не указано иначе, что все действия совершаются от имени пользователя ejudge [34].
Сначала нужно создать каталог /home/judges и назначить ему права пользователя ejudge, набрав в консоли от имени пользователя root:
# mkdir -p /home/judges
# chown ejudge:ejudge /home/judges
# chmod 755 /home/judges
Далее следует скачать в домашний каталог пользователя ejudge архив с исходными файлами текущей версии ejudge.
Для установки ejudge стоит набрать в консоли следующие команды:
$ tar -xvzf ejudge-VERSION.tgz
$ cd ejudge
$ ./configure PARAMS
$ make && make install
Описание параметров PARAMS приведено в таблице 1.
Таблица 1 – Описание параметров установки системы Ejudge
Параметр | Описание |
--prefix = /home/ejudge/inst-ejudge | Корневой каталог системы |
--with-reuse = /home/ejudge/reuse | Каталог с reuse |
--enable-contests-home-dir = /home/judges | Каталог для турниров judges |
--with-httpd-cgi-bin-dir = /usr/lib/cgi-bin | Каталог cgi-bin сервера Apache2 |
--with-httpd-htdocs-dir = /var/www | Каталог, содержащий web-файлы (*.html, *.php, и т.д.) |
-- enable-ajax | Включает движок Ajax для системы |
Таким образом, команда ./configure будет иметь вид:
$ ./configure –prefix = /home/ejudge/inst-ejudge --with-reuse = /home/ejudge/reuse --enable-contests-home-dir = /home/judges --with-httpd-cgi-bin-dir = /usr/lib/cgi-bin --with-httpd-htdocs-dir = /var/www/ --enable-ajax
Здесь перечислены обязательные параметры для конфигурирования. Чтобы узнать остальные параметры необходимо выполнить:
$ ./configure –help
Следует отметить, что пользователь ejudge должен обладать правами доступа к каталогам web-файлов и cgi-bin сервера Apache2. Если это не выполняется, то необходимо установить требуемые права доступа к этим каталогам.
3.1.4 Настройка и запуск системы Ejudge
Для начала необходимо создать конфигурацию системы Ejudge. Для этого предназначен скрипт ejudge-setup:
$ ./ejudge-setup
В меню следует обратить внимание на пункты «Edit global settings» и «Edit Administrator Identity».
Для пункта меню «Edit global settings» необходимо заполнить:
– «Sendmail program» – полный путь к программе отсылки почты. Присваиваем этому параметру значение «/usr/sbin/sendmail».
– «Create Workdisk?» – установить в значение «no».
Для пункта меню «Edit Administrator Identity» следует заполнить информацию об администраторе системы:
– ID – указывается «1»;
– Login – логин администратора (например, admin);
– E-Mail – почта администратора;
– Name – отображаемое в системе имя;
– Password – пароль.
После заполнения следует сохранить файл, выбрав пункт «Save Setup Script». Зачем от пользователя root запускаем установку:
# ./ejudge-install.sh
В заключении необходимо выставить права на доступ к ссылкам на исполняемые файлы, которые установила система Ejudge в указанный ранее каталог cgi-bin:
# cd /usr/lib/cgi-bin # chmod 755 new-* judge master register serve-control team users
Для запуска системы Ejudge необходимо находясь в роли пользователя ejudge выполнить:
$ cd /home/ejudge/inst-ejudge/bin/
$ ./ejudge-control start
Следует отметить, что если после этого web-сервер выдаёт ошибку, стоит удалить все файлы в каталоге cgi-bin и скопировать туда файлы из каталога пользователя ejudge:
$ cd /usr/lib/cgi-bin
$ rm –rf new-* judge master register serve-control team users
$ cp /home/ejudge/inst-ejudge/libexec/ejudge/cgi-bin/* ./
После этого, если web-сервер запущен, можно получить доступ к системе Ejudge через браузер по адресу http://localhost/cgi-bin/serve-control.
3.1.5 Экспорт истории посылок из системы Ejudge
Как говорилось ранее, в системе Ejudge присутствует возможность автоматического экспорта истории посылок любого соревнования в файле формата XML. Данная функция доступна как администратору систему, так и администратору конкретного турнира.
Экспорт истории посылок может быть двух видов:
– внешний, для взаимодействия с другими системами;
– внутренний, для импорта в другие компоненты Ejudge.
История посылок, экспортируемая из системы Ejudge внешним типом, имеет формат PCMS2. Подробно данный формат истории посылок будет рассмотрен в следующем разделе.
Выводы по разделу
В текущий момент установка и настройка системы Ejudge произведена лишь на тестовой машине, но в будущем планируется её внедрение и использование на сервере заказчика.
Система Ejudge предоставляет следующие возможности для обучения студентов:
– подготовка к соревнованиям по программированию;
– проведение соревнований по программированию;
– тренировка навыков программирования на базовом и продвинутом уровнях.
Участвовать в соревнованиях и тренироваться в системе Ejudge можно удалённо, так как доступ к ней предоставляется посредству web-интерфейса.
В системе Ejudge присутствует возможность экспорта истории посылок в формате PCMS2. Разрабатываемый модуль подведения итогов должен принимать на вход данную историю посылок для визуализации хода и подведения итогов соревнований по программированию проводимых в системе Ejudge.
3.2 Разработка модуля подведения итогов
По требованиям, предъявляемым к модулю подведения итогов, он может быть реализован посредством одной web-страницы. На данной странице размещены меню настроек и таблица с результатами. Помимо этого присутствуют две кнопки – первая для вызова меню, вторая для управления «разморозкой».
3.2.1 Реализация меню настроек
Всплывающее меню с настройками (рисунок 3.1) описанными в требованиях реализовано с помощью HTML, CSS, JavaScript и библиотеки jQuery.
Рисунок 3.1 – Меню с настройками «разморозки»
Меню с настройками имеет так называемую табличную вёрстку страницы, которая определена тэгом table в файле index.php (приложение А, листинг А.1).
Оформление меню определено свойствами тэгов в файле setting.css (приложение А, листинг А.2).
Выпадающий список в меню содержит в себе информацию о том, какие истории посылок имеются на сервере. Формирование данного списка будет рассмотрено в следующем подразделе.
Вызов меню осуществляется посредству одной из кнопок на web-странице. При нажатии на кнопку меню плавно исчезнет или появится. Исчезновение сопровождается изменениями размера меню и параметра прозрачности, благодаря чему исчезновение выглядит так, как будто меню сжимается в одну точку. Такая анимация реализована с помощью библиотеки jQuery (листинг 3.1).
Листинг 3.1 – Реализация анимации исчезновения/появления меню
var showSetting = true;
function hideSetting() {
if( showSetting )
$( "#setting" ).hide( "slow" );
else
$( "#setting" ).show( "slow" );
showSetting = !showSetting;
}
Функции hide() и show() библиотеки jQuery позволяют добиться описанной выше анимации.
3.2.2 Хранение историй посылок на сервере
На сервере в папке log хранятся файлы формата XML с историями посылок различных соревнований. Точно такой же формат имеют истории посылок, которые экспортируются из системы Ejudge.
Помимо этого на сервере имеется база данных с наименованиями всех имеющихся историй посылок. Подключение к базе данных осуществляется через PHP-сценарий db.php (листинг 3.2).
Листинг 3.2 – Файл db.php
<?php
$dbhost = 'localhost'; $dbname = 'table';
$dbuser = 'root'; $dbpass = '';
$connection = mysql_connect( $dbhost, $dbuser, $dbpass ) or die( mysql_error() );
mysql_select_db( $dbname, $connection ) or die( mysql_error() );
?>
Наименования историй посылок хранятся в базе данных для быстрого формирования выпадающего списка из меню настроек, которое реализовано вызовом PHP-сценария logs.php (листинг 3.3):
<?php include "php/logs.php"; ?>
Листинг 3.3 – Файл logs.php
<?php
include "php/db.php";
$query = "SELECT * FROM `logs`";
$res = mysql_query( $query );
echo "<select id = 'fileLogFromServer'>";
while( $row = mysql_fetch_array( $res ) ) {
echo "<option>".$row["name"]."</option>";
}
echo "</select>";
?>
Сценарий logs.php делает запрос в базу данных для получения списка наименований историй посылок. После этого, через цикл, идёт заполнения тэга select, который в свою очередь является выпадающим списком. Элементы выпадающего списка выделяются тэгами option.