OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 13 Ноябрь, 2019 23:48

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 12:47 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Вот, наконец, я могу достаточно точно сформулировать требования-пожелания.
Как инструмент для индивидуального обучения однозадачному программирования с нуля - это прекрасная среда. У меня сейчас школьники начинаются - буду использовать.
Но хотелось бы вот чего.
Мой аспирант - уже кандидат - преподает алгоритмы и структуры данных. Естественно, есть тема про сортировки. И естественно, стоит проблема проверять студенческие работы.
Применили олимпиадный подход: реализовали на кафедральном сервере задачу, которая от студентов, программирующих в аудитории, принимает исходные тексты (на С++) .
Далее для каждого полученного текста программы запускается отдельный процесс - компилирование, потом выполнение.
Для выполнения требуется тестовый файл. В системе реализована возможность вызывать написанные преподом валидаторы. В частности, для программ сортировки вызывается валидатор, который генерирует файл для сортировки, потом выполняется процесс сортировки студенческой прогой, потом валидатор выполняет анализ результата и выдает сообщение о правильности-неправильности.
Для выполняемого студенческого процесса можно задавать ограничения по времени и по памяти.

Сейчас я наблюдаю такую картину: сидит мой аспирант-кандидат на кафедре за своим компом, подключенным к серверу и на своем экране наблюдает в Мониторе результаты проверки студенческих программ-сортировок. А студенты - в классе пишут за компьютерами.

Проект реализован в дотнете на додиезе с привлечением, естественно, других технологий дотнета. В БД собирается статистика об исполняемых прогах.
Вот примерно такое хотелось сделать с использованием ББ.


Последний раз редактировалось Валерий Лаптев Пятница, 18 Сентябрь, 2009 14:27, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 13:48 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
И в чём проблема?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 13:58 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4525
Откуда: Россия, Орёл
Сергей Губанов писал(а):
И в чём проблема?
Валерий Лаптев писал(а):
Что мне требуется от ББ для использования в учебном процессе
...Вот примерно такое хотелось сделать с использованием ББ.
По-моему, заглавие темы не отражает суть вопроса (можно исправить заголовок первого сообщения); вопрос в том, как решать на ББ задачу
Валерий Лаптев писал(а):
Сейчас я наблюдаю такую картину: сидит мой аспирант-кандидат на кафедре за своим компом, подключенным к серверу и на своем экране наблюдает в Мониторе результаты проверки студенческих программ-сортировок. А студенты - в классе пишут за компьютерами.
Самое главное, не пытаться переписать готовую реализацию на ББ. Смотреть только на задачу и решать с нуля. Должно быть простое решение, в пределах ББ , просто его из-за закостенелости в мозгах стандартных подходов сразу может быть не видно (это про себя). Для начала можно и задачу упросить, оставив самое главное...

Например, студенты работают с серверным вариантом ББ, дополненным функциями тестирования:
* Ввод на хуках. Вывод (Log) уже есть.
Код:
MODULE IvanovSort;
IMPORT In := Hooked_in, Log;...
По-умолчанию вывод StdLog (как и сделано). Ввод - Info21sysIn. Студент работает как обычно. Запускает-тестирует ^Q IvanovSort.Do 1 2 3 4 5

* Выполнение через валидатор. ^Q "XxxxValidate.Do('IvanovSort.Do')". Валидатор подставляет (временно) свои хуки на ввод-вывод. Подсовывает на ввод данные, с вывода анализирует результаты. Формирует текст с результатом анализа для студента; отправляет результаты в базу,...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 14:44 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Евгений Темиргалеев писал(а):
По-моему, заглавие темы не отражает суть вопроса (можно исправить заголовок первого сообщения); вопрос в том, как решать на ББ задачу

Исправил.
Цитата:
Валерий Лаптев писал(а):
Сейчас я наблюдаю такую картину: сидит мой аспирант-кандидат на кафедре за своим компом, подключенным к серверу и на своем экране наблюдает в Мониторе результаты проверки студенческих программ-сортировок. А студенты - в классе пишут за компьютерами.
Самое главное, не пытаться переписать готовую реализацию на ББ. Смотреть только на задачу и решать с нуля. Должно быть простое решение, в пределах ББ , просто его из-за закостенелости в мозгах стандартных подходов сразу может быть не видно (это про себя). Для начала можно и задачу упросить, оставив самое главное...

Упрощение первое - оставить одного пользователя для начала.
Упрощение 2-е реализовать это пока локально.
Цитата:
Например, студенты работают с серверным вариантом ББ, дополненным функциями тестирования:
* Ввод на хуках. Вывод (Log) уже есть.
Код:
MODULE IvanovSort;
IMPORT In := Hooked_in, Log;...
По-умолчанию вывод StdLog (как и сделано). Ввод - Info21sysIn. Студент работает как обычно. Запускает-тестирует ^Q IvanovSort.Do 1 2 3 4 5
* Выполнение через валидатор. ^Q "XxxxValidate.Do('IvanovSort.Do')". Валидатор подставляет (временно) свои хуки на ввод-вывод. Подсовывает на ввод данные, с вывода анализирует результаты. Формирует текст с результатом анализа для студента; отправляет результаты в базу,...

[/quote]
1. Серверный вариант ББ - это где и как взять? У меня только 1.5 от производителя и с информатики-21, который base.
2. За хуки спасибо, посмотрю, как управиться. Может быть и получится. Для меня пока вопрос только в том, что написанные на ББ модули надо как-то вызывать из-под винды.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 15:05 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
В школьных комплектах были полезные модули от И.А.Дехтяренко (Trurl), сделанные для олимпиад. Там нет передачи модулей по сети, но для остального -- отличная затравка.

Передача модулей через TCP/IP, по сути тривиальна (Store экстернализуется в поток байтов, и последний передается, штатными средствами ББ), хотя нужно чуть-чуть потрудится (у меня нет трех свободных дней; орловцы что-то на сей счет сделали; только у них, как всегда у молодежи, замах...).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 15:07 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
1. Серверный вариант ББ - это где и как взять?
Нет никакого особого серверного варианта. Это просто конфигурация. ЕТ не точно выразился, пускай и объясняет :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 15:20 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Info21 писал(а):
Валерий Лаптев писал(а):
1. Серверный вариант ББ - это где и как взять?
Нет никакого особого серверного варианта. Это просто конфигурация. ЕТ не точно выразился, пускай и объясняет :)

Это в конфиге прописывается?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 15:35 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9154
Откуда: Россия, Орёл
Info21 писал(а):
Передача модулей через TCP/IP, по сути тривиальна (Store экстернализуется в поток байтов, и последний передается, штатными средствами ББ), хотя нужно чуть-чуть потрудится


Да на раз-два такие передачи делаются. Недавний простейший пример клиент-сервера на ББ - игра "Точки". Модуль ТочкиСетевая.
http://oberoncore.ru/wiki/blackbox/ex/points_game

А так - берём Files.File (если надо - поверх Stores ставим) - и прокачиваем. (И вообще, к слову - File рулит :) Как раз тот самый "массив растущего размера", о котором все плачуцца.)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 15:36 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Спасибо за инфу!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 15:58 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4525
Откуда: Россия, Орёл
Info21 писал(а):
Валерий Лаптев писал(а):
1. Серверный вариант ББ - это где и как взять?
Нет никакого особого серверного варианта. Это просто конфигурация. ЕТ не точно выразился, пускай и объясняет :)
См. http://oberoncore.ru/wiki/blackbox/server_install
Валерий Лаптев писал(а):
Упрощение первое - оставить одного пользователя для начала.
Упрощение 2-е реализовать это пока локально
...
Для меня пока вопрос только в том, что написанные на ББ модули надо как-то вызывать из-под винды.
В предложенной мной схеме решения:
* Ваши упрощения не имеют смысла, т.к. вопрос решается той самой серверной конфигурацией :)
* в качесте упрощения предлагаю: исключить ограничение по времени/памяти, не завязаываться на ОС: все делать из под ББ


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 16:01 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Спасибо, буду пробовать. К концу года, надеюсь, сварится что-нить.
Отпишу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Сентябрь, 2009 19:14 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
Спасибо, буду пробовать. К концу года, надеюсь, сварится что-нить.
Отпишу.

Ну, Валерий Викторович, если сварганите типа реальную затравку для олимпиадного сервера, буду Вас любить как родного! :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 19 Сентябрь, 2009 14:33 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Валерий Лаптев писал(а):
Спасибо, буду пробовать. К концу года, надеюсь, сварится что-нить.
Отпишу.
Так ведь есть уже один пакет для локального (само-)тестирования. Добавляете сетевые функции по вкусу, вот и всё (как раз O3 опубликовали релиз своего веб-фреймворка).

Правда, задачник надо наполнять, тестовые данные загонять и т.п. Как с этим дела - спрашивайте у А.П.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 06 Октябрь, 2009 10:49 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
На настоящий момент несколько конкретизировалось понимание работы системы.

Исходный код программы, подготовленный студентом, является входными данными для проверяющей системы. Сама проверка состоит из двух этапов: подготовительного и основного. На первом этапе выполняется подготовка программы к проверке. В самом простом случае этот этап представляет собой компиляцию решения в исполняемый файл, или просто сохранение исходного текста в виде файла на жестком диске (для интерпретируемых языков). В более сложных вариантах на этом этапе возможно построение различных моделей проверяемой программы. Эти модели могут быть использованы системой для определения разнообразных характеристик проверяемой программы. Главным результатом этапа подготовки является возможность тестировать решение студента.

Далее осуществляется валидация решения на одном или нескольких тестах. Под валидацией здесь понимается применение к подготовленному на предыдущем этапе решению студента некоторой формальной вычисли-тельной процедуры с булевым результатом V(Input,Output), где Input – на-бор параметров для генерации тестовых исходных данных, на которых будет осуществляться валидация решения, Output – набор параметров для проверки корректности результата, выданного решением студента.
В простейшем случае входные параметры Input могут быть без из-менения поданы на вход студенческой программы, а результат ее работы сверен на полное совпадение с выходными параметрами Output.

В более сложных вариантах реализации валидаторы могут в качестве результата выводить пояснения по результатам проверки. Вообще гово-ря валидаторы могут выполнять ряд задач, на первый взгляд, им не свойст-венных. Например, осуществлять поиск плагиата, выполнять сложную оценку внутреннего и внешнего качества решений. на основе вычисления каких-нибудь метрических показателей.

Архитектура предлагаемого решения. Физическая архитектура системы состоит из четырех узлов. За основу была взята классическая трехзвенная архитектура: тонкий клиент, web-сервер и СУБД. Дополни-тельным узлом в системе является сервер проверки. Непосредственно пользователь (преподаватель или студент) работает с системой через web-браузер. Все программы студентов, отосланные на проверку, сохраняются в БД. Сервер проверки решений периодически опрашивает web-сервер с целью получения новых программ, которые необходимо проверить, после чего осуществляет подготовку и валидацию решения.

В настоящее время, прототип системы реализован с использованием средств и инструментов платформы Microsoft.NET. Для реализации ви-зуальной web-части использовалась технология ASP.NET MVC, для реализации web-сервисов технология Windows Communication Foundation. В ка-честве СУБД использовалась Microsoft SQL Server 2008.

Интерес для рассмотрения представляет логическая архитектура для построения валидаторов программ. Валидатор в прототипе системы представлен в виде класса, реализующего интерфейс IValidator. Класс должен реализовать два метода: BeforeRun() и Validate(). Метод BeforeRun() должен осуществлять генерацию эталонных результатов, а метод Validate() осуществляет сравнение эталонных и полученных после за-пуска программы результатов. Запуск этих методов осуществляет система.

Для запуска программы пользователя определен интерфейс IRunner, единственным методом в котором является метод Run(). В классе-валидаторе должно быть определено свойство типа IRunner. Сам запуск осуществляет система независимо от валидатора. Дополнительно в системе определен интерфейс IPreparator с единственным методом Prepare. На-значение этого метода — осуществление дополнительной подготовки пе-ред запуском валидатора (например, именно этот метод может строить упомянутые выше модели).
В качестве примера можно привести реализацию простейшего ва-лидатора, осуществляющего проверку задач на тему сортировки.

Код:
public class IntegerSortValidator : IValidator         
{      public IRunner Runner { get; set; }
        private int[] ResultArray { get; set; }   // -- эталонный результат
public void BeforeRun(TestInfo testInfo)
{  // -- Получение параметров автогенерации тестового файла
    var parameters = testInfo.InputParams.Split(' ');
    int N = Int32.Parse(parameters[0]);   int seed = Int32.Parse(parameters[1]);
    int maxValue = Int32.Parse(parameters[2]);
   // -- Генерация массива случайных чисел
    var rnd = new Random(seed);    var inputarray = new int[N];
    for (int i = 0; i < N; i++)  inputarray[i] = rnd.Next(maxValue);
   // -- Создание входного тестового файла
   var infile = new StreamWriter("input.txt", false);
   infile.WriteLine(N);
   foreach (var integer in inputarray)   infile.Write("{0} ", integer);
   infile.WriteLine();  infile.Close();
  // -- Сортировка сгенерированного массива и сохранение для проверки
  Array.Sort(inputarray);  ResultArray = inputarray;
}
public bool Validate(out string comment)
{  var outfile = new StreamReader("output.txt");
    var resultStrings = outfile.ReadToEnd().Split(' ');  outfile.Close();
    int counter = 0;
    foreach (var resultString in resultStrings)
    {   if (resultString != String.Empty)
         {  if (ResultArray[counter] != Int32.Parse(resultString))
            { comment = String.Format("Ошибка на позиции {0}: ожидалось {1},
               а на самом деле {2}", counter, ResultArray[counter], resultString);
               return false;
            }
            counter++;
         }
     }
     if (counter != ResultArray.Length)
    { comment = String.Format("Количество чисел в отсортированном массиве
       неправильное: ожидалось {0}, а на самом деле {1}", ResultArray.Length, counter);
       return false;
     }
     comment = "Все Ok!";
     return true;
}  // -- конец валидатора
}  // -- конец класса


Метод BeforeRun() запускается перед запуском проверяемой про-граммы и генерирует массив из N случайных чисел, стартовым значением является seed, максимальным — maxValue. Массив записывается в файл input.txt и является входным для проверяемой программы сортировки. Кроме того, массив сортируется и сохраняется в поле класса-валидатора ResultArray.

Метод Validate() запускается после выполнения проверяемой про-граммы и сравнивает полученный при выполнении программы сортиро-ванный файл output.txt с сортированным массивом ResultArray. По результатам проверки пользователю выдается простейшее сообщение.

В настоящее время мне почти ясны почти все детали реализации в рамках ББ, кроме взаимодействия клиент-сервер. В этом япока не только в ББ, но и вообще чайник.
О макросах я не зря пытал. Поскольку, как вы видите, тут все - call-backи. Для трансляции полученной от студента программы, нужно, чтобы она была оформлена специальным образом: получала данные из отдельного текста с определеннным именем, и результат писала либо в лог, либо в отдельный текст с заданным именем. Кроме того, вызываемый модуль и вызываемая процедура должны называться специальным именем, например Student.Do (как вы понимаете в додиезе имя определено прямо в языке - main).
Система должна поместить полученный модуль в строку (? - посмотрю пример Ермакова) и вызвать компилятор для трансляции.
Интерфейсы делаем с помощью абстрактных записей в одном модуле.
Проверяющая система должна методы означенных интерфейсов.
В методе Run() должен быть прописан вызов пользовательской процедуры.

Вот.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB