[Logo] Форум DL
  [DL]  На главную страницу 
Индекс форума ->Общего плана ->Предложения по новым курсам DL 1, 2, 3, 4, 5, 6, 7, ... 11, 12, 13
Автор Сообщение
Артур Гайдов

Темы: 9
Сообщений: 24

Мой профиль
Разбор "спец. чекера"

function checkNumberOfChilds(arr, rightNumber) {
	return arr.length === rightNumber;
}

function test () {
  var title = document.title.trim();
  console.log(title);
  
  var arra = document.body.children;
  if (!checkNumberOfChilds(arra, 2)) {
	  return;
  }
  
  var el = arra[0];
  if (el.tagName != "A") {
	  return;
  }
  if (el.href != "http://dl.gsu.by/NForum/forum/list.dl") {
	  return;
  }
  
  var arri = el.children;
  if (!checkNumberOfChilds(arri, 1)) {
	  return;
  }
  
  el = arri[0];
  if (el.tagName != "IMG") {
	  return;
  }
  if (el.src != "http://dl.gsu.by/art/_f.GIF") {
	  return;
  }
  
  console.log("OK");
}

test();


Сначала обычная проверка заголовка страницы(trim() убирает пробелы с концов строки.). Потом я получаю массив детей тега body(Их будет на 1 больше, чем их есть в блоке тега body. Появляется ребенок SCRIPT. Хоть он и не лежит внутри тега body. Я сам не до конца разобрался с этим, поэтому кто может объяснить это, то пишите.) В решении у body должен быть только один ребенок - тег a. Если кол-во детей не равно 2(тег a + SCRIPT???), тогда выходим. Потом идет проверка: является ли первый ребенок ссылкой. И также выходим, если нет. Потом проверяем ссылку. И снова по тому же сценарию. Потом смотрим на детей тега a. Если он не равен 1(тег img), тогда выходим(Кстати тут уже нету SCRIPT.). Дальше проделываем ту же процедуру, что и с тегом a.

Вообщем, идея просто "проверить дерево".

Также в задаче я просил после тега body написать - <script src="check.js"></script>. Я пытался по-нормальному, но не получилось. Когда я тестил все это дело, я убирал эту строку из html-файла и делал след. проверку в чекере:
if (!checkNumberOfChilds(arra, 1)) {
	  return;
  }

Делал архив и отправлял на дл. Но он не хотело принимать мое решение. В итоге остановился на том, который сейчас лежит на дл. Вообщем, кто может помочь с этим пишите. Архив этой задачи уже лежит на форуме(http://dl.gsu.by/images/_i4f/JavaScript/example_spec_checker.rar).
Артур Гайдов

Темы: 9
Сообщений: 24

Мой профиль
По тексту Жаркова замечаний не нашел.
Алена Карнаухова

Темы: 0
Сообщений: 36

Мой профиль


Артур Гайдов:


Также в задаче я просил после тега body написать - <script src="check.js"><script>. Я пытался по-нормальному, но не получилось. Когда я тестил все это дело, я убирал эту строку из html-файла и делал след. проверку в чекере:
if (!checkNumberOfChilds(arra, 1)) {
	  return;
  }

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

У меня задача прекрасно работает "по-нормальному", если scripts.rar содержит папку scripts, в которой и лежит чекер вместо корня архива.
По поводу появления элемента script в качестве ребенка body есть предположение: если элемент не вложен ни в какой другой элемент, он считается ребенком body.
ПО-11 Григорьев, Логинов

Темы: 0
Сообщений: 1

Мой профиль
Загрузил задачу в дерево. При тестировании выдает ошибку: -[Input file 1.in not found!]. В архиве tests.rar он пустой. Подскажите, где я мог ошибиться. https://yadi.sk/d/rtpgXkx63Qjswh Вот ссылка на мой архив.
Артур Гайдов

Темы: 9
Сообщений: 24

Мой профиль
Разбор чекера на задачу "Цветные списки"


function check(a, b) {
	return (a === b)
}

function checkList(list) {
	for(var i = 0; i < list.length; i++) {
		var el = window.getComputedStyle(list[i]);
		if (list[i].id) {
			if (list[i].id === "c") {
				if (!check(el.color, "rgb(255, 0, 0)") || !check(el.fontWeight, "900")) {
					return false;
				}
				continue;
			}
			if (list[i].id === "e") {
				if (!check(el.color, "rgb(4, 0, 247)") || !check(el.fontWeight, "bold") || !check(el.fontFamily, "Verdana")) {
					return false;
				}
				continue;
			}
			if (list[i].id === "d") {
				if (!check(el.color, "rgb(4, 0, 247)") || !check(el.fontWeight, "bold") || !check(el.fontStyle, "italic")) {
					return false;
				}
				continue;
			}
		}
		if (!check(el.color, "rgb(4, 0, 247)") || !check(el.fontWeight, "bold")) {
			return false;
		}
	}
	
	return true;
}

function test () {
	var el = document.body;
	if (!check(window.getComputedStyle(el).backgroundColor, "rgb(41, 247, 0)")) {
		return;
	}
	
	var list = document.body.children;
	for(var i = 0; i < list.length; i++) {
		if (!checkList(list[i].children)) {
			return;
		}
		if (list[i].className === "a") {
			if (!check(window.getComputedStyle(list[i]).backgroundColor, "rgb(255, 255, 0)")) {
				return;
			}	
		} else {
			if (!check(window.getComputedStyle(list[i]).backgroundColor, "rgb(97, 81, 81)")) {
				return;
			}
		}
	}
		
	console.log("OK");
	
}

test();



Функция check проверяет равенство строк. Тут все понятно.
Функция checkList принимает список и проверяет его. Здесь все тоже достаточно тривиально, кроме, вероятно, этой строки:
var el = window.getComputedStyle(list[i]);

Про getComputedStyle можно почитать здесь. Я понимаю его так: в getComputedStyle мы передаем элемент, и функция возвращает нам объект, который хранит всю информация о стилистике элемента, который мы передавали в функцию. Дальше просто извлекаем поля, которые нам надо. Надо учитывать, что el.field - строка(На сколько я помню). checkList возвращает true, если со списком все хорошо.
Функция test проверяет body и запускает checkList для каждого списка, попутно проверяя стилистику списка, характерную для определенного класса.
if (list[i].className === "a") {
			if (!check(window.getComputedStyle(list[i]).backgroundColor, "rgb(255, 255, 0)")) {
				return;
			}	
		} else {
			if (!check(window.getComputedStyle(list[i]).backgroundColor, "rgb(97, 81, 81)")) {
				return;
			}
		}

Алена Карнаухова

Темы: 0
Сообщений: 36

Мой профиль


ПО-11 Григорьев, Логинов :

Загрузил задачу в дерево. При тестировании выдает ошибку: -[Input file 1.in not found!]. В архиве tests.rar он пустой. Подскажите, где я мог ошибиться. https://yadi.sk/d/rtpgXkx63Qjswh Вот ссылка на мой архив. 

У меня ошибка пропала после создания новых 1.in и 1.out и вставки в них содержимого старых.
Михаил Долинский

Темы: 1982
Сообщений: 47182

Мой профиль


Артур Гайдов:

Разбор чекера на задачу "Цветные списки" 


Michael Dolinsky:

Проверь пожалуйста
Новая задача про спецчекер
http://dl.gsu.by/task.jsp?nid=1740509&cid=1058
Описание спецчекера к нему
http://dl.gsu.by/NForum/posts/topicshow/2787.dl?postid=74822#74822 


Алена Карнаухова:

Задача работает, но чекер, на мой взгляд, выполняет много лишних действий и слишком тесно привязан к структуре страницы. Вместо использования свойства children в данной ситуации лучше использовать поиск по классу для самих списков и по тэгу 'li' для элементов списков. Проверка в дочерних элементах свойств, унаследованных от уже проверенных родительских, бессмысленна. А на месте длинного списка if-else или if-continue гораздо лучше смотрелся бы switch.  
Роман Осадчий

Темы: 0
Сообщений: 20

Мой профиль
Java Server Pages - обучение

Диплом

Обсуждаем содержание текста диплома +1 +2

Работа с примерами по JSP в Codenvy
JSP-course
JSP-примеры на DL Новая версия
Learning Resources
Как задокументировать примеры JSP и сервлетов
Как организовать тестирование JSP-страниц и сервлетов
Ссылки на учебные материалы по JSP и сервлетам


Одна из важнейших технологий создания серверных компонент – Java Server Pages.
Jsp-странички создаются на сервере, вызывают сервлеты Java и генерируют HTML-странички, которые передаются клиенту. Основная идея – поддержать шаблон (паттерн) Model-View-Controller
 - Controller – сервлет (скомпилированный java-код)
 - Model      - пакет данных, сформированный сервлетом
 - View       - JSP-страница

JSP-страница представляет из себя шаблон с уже заготовленными HTML-тегами,
между которыми надо вставить нужные данные. При этом jsp-файл представляет из себя смесь тегов для HTML и кода на Java. JSP при первом обращении преобразуется в сервлет и работает уже как сервлет. А пользователю в браузер приходит уже готовая HTML-страница, на которой никаких признаков JAVA нет. в JSP-страничке код Java заключается в угловые скобки со знаком процента <% и %>. JSP имеет в своем составе несколько предопределенных объектов. Это request, response, out, session, application, config, pageContext и page. Пользовательские теги. Библиотеки пользовательских тегов. Работа с файлами и базами данных.


Вадим Копиченко:

JSP и сервлеты - в хорошо структурированном коде должны выполнять лишь презентационную функцию, а вся полезная логика выносится в отдельные java-классы. Поэтому обучение именно JSP и сервлетам стоит ограничить особенностями их взаимодействия с HTTP, HTML и жизненного цикла в контейнере
Подробнее  

А ещё предлагаю сделать конкретное и подробное описание «преломления» на DL.
С указанием, куда что и для чего на DL нужно ложить, (конкретно в какие каталоги).
В частности, для сервлетов
«примеры сервлетов из патча второго Ромы уже размазываются по коду DL в трёх разных местах (jsp, классы и web.xml)»

По поводу показа исходников
Кто или что мешает сделать хотя бы так:
http://dl.gsu.by/Images/_i4f/_diploms/taskviewLE_new.jsp.txt


Вадим Копиченко:

Причем, раз тестовые проекты не будут ограничены привязкой к ДЛ, то можно использовать готовую современную инфраструктуру:
исходники хранить на GitHub под контролем версий с удобным просмотром, а для запуска (если нет желания или возможности настройки собственного Tomcat и IDE) можно использовать готовую облачную песочницу вроде Codenvy со всеми плюшками, включая встроенный отладчик

Требование изучения Git и GitHub тоже можно считать плюсом.
Фичу GitHub Pull Requests можно удобно использовать для краудсорсингового добавления новых примеров в тестовый проект. Кто-то отладит в своей ветке новый пример и пришлёт его в виде Pull Request в общий проект, бывалые студенты смогут прямо там публично прокомментировать проблемные строчки в коде или принять подходящую правку.

Можно сильно не бояться завязки именно на Codenvy, т.к. оно позволяет запускать проекты стандартной для языка структуры с минимальной специфичной для себя обвязкой.
Ничто не помешает взять тот же проект с GitHub и запустить локально в собственном контейнере.
Также есть открытая совместимая версия Eclipse Che, бесплатно доступная для установки на собственном хостинге.

Причём Codenvy удобно использовать для более-менее полноценных проектов, где от студента требуется доработка, а простенькие одностраничные обучающие примерчики с опциональной возможностью запуска или изменения удобнее публиковать на специализированных сайтах вроде https://codeone.online/, https://jsfiddle.net/, http://sqlfiddle.com/, https://try.kotlinlang.org и т.п.

Даже для JSP нашёлся аналогичный сайт https://www.tutorialspoint.com/execute_jsp_online.php, с слегка не очевидной, но имеющейся возможностью публикации своих примеров.

И лучше использовать готовые обучающие курсы и материалы со структурированной теорией . Например, на https://stepik.org/ есть много бесплатных русских курсов по разным технологиям. 


P.S. Роман нашёл немного ссылок по обучению JSP
http://dl.gsu.by/NForum/posts/topicshow/2787.dl?postid=75112#75112
Но там только дока, по-моему.

А кто-то знает сайты с он-лайн-обучением JSP страницам?
Если да – ссылками поделитесь, пожалуйста.
Роман, сам тоже ещё поищи и если найдёшь – постарайся понять, а там как обучение и проверка выстроены?
Артур Гайдов

Темы: 9
Сообщений: 24

Мой профиль
Я переделал чекер с учетами:
function check(a, b) {
	return (a === b)
}

function checkList(list) {
	for(var i = 0; i < list.length; i++) {
		
		var el = window.getComputedStyle(list[i]);
		var elColor      = el.color,      rightColor;
		var elFontWeight = el.fontWeight, rightFontWeight;
		var elFontFamily = el.fontFamily, rightFontFamily;
		var elFontStyle  = el.fontStyle,  rightFontStyle;
		
		switch (list[i].id) {
			case "c": 
				rightColor = "rgb(255, 0, 0)";
				rightFontWeight = "900";
				rightFontFamily = "'Times New Roman'";
				rightFontStyle = "normal";
				break;
			case "e": 
				rightColor = "rgb(4, 0, 247)";
				rightFontWeight = "bold";
				rightFontFamily = "Verdana";
				rightFontStyle = "normal";
				break;
			case "d":
			    rightColor = "rgb(4, 0, 247)";
				rightFontWeight = "bold";
				rightFontFamily = "'Times New Roman'";
				rightFontStyle = "italic";
				break;
			default:
				rightColor = "rgb(4, 0, 247)";
				rightFontWeight = "bold";
				rightFontFamily = "'Times New Roman'";
				rightFontStyle = "normal";
				break;
		}
		
		if (!check(elColor, rightColor) || 
		    !check(elFontWeight, rightFontWeight) || 
			!check(elFontFamily, rightFontFamily) || 
			!check(elFontStyle, rightFontStyle)) {
			return false;
		}
		
	}
	
	return true;
}

function test () {
	var el = document.body;
	if (!check(window.getComputedStyle(el).backgroundColor, "rgb(41, 247, 0)")) {
		return;
	}
	
	var list = document.body.getElementsByTagName("ol");
	for(var i = 0; i < list.length; i++) {
		if (!checkList(list[i].getElementsByTagName("li"))) {
			return;
		}
		switch (list[i].className) {
			case "a": 
				if (!check(window.getComputedStyle(list[i]).backgroundColor, "rgb(255, 255, 0)")) {
					return;
				}	
				break;
			case "b":
				if (!check(window.getComputedStyle(list[i]).backgroundColor, "rgb(97, 81, 81)")) {
					return;
				}
				break;
		}
	}
		
	console.log("OK");
	
}

test();


Его я тестил локально и вроде все нормально. На дл я почему-то не могу загрузить задачу сейчас, но в любом случае жду критики кода.
Михаил Долинский

Темы: 1982
Сообщений: 47182

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

Темы: 0
Сообщений: 36

Мой профиль


Артур Гайдов:

Я переделал чекер с учетами: 

Да, так гораздо лучше смотрится. Я бы предложила еще сразу присваивать переменным для верных значений значения по умолчанию, чтобы не повторять их практически в каждом варианте.
Артур Гайдов

Темы: 9
Сообщений: 24

Мой профиль
Конечный вариант чекера:
function check(a, b) {
	return (a === b)
}

function checkList(list) {
	for(var i = 0; i < list.length; i++) {
		
		var el = window.getComputedStyle(list[i]);
		var elColor      = el.color,      rightColor = "rgb(4, 0, 247)";
		var elFontWeight = el.fontWeight, rightFontWeight = "bold";
		var elFontFamily = el.fontFamily, rightFontFamily = "'Times New Roman'";
		var elFontStyle  = el.fontStyle,  rightFontStyle = "normal";
		
		switch (list[i].id) {
			case "c": 
				rightColor = "rgb(255, 0, 0)";
				rightFontWeight = "900";
				break;
			case "e": 
				rightFontFamily = "Verdana";
				break;
			case "d":
				rightFontStyle = "italic";
				break;
		}
		
		if (!check(elColor, rightColor) || 
		    !check(elFontWeight, rightFontWeight) || 
			!check(elFontFamily, rightFontFamily) || 
			!check(elFontStyle, rightFontStyle)) {
			return false;
		}
		
	}
	
	return true;
}

function test () {
	var el = document.body;
	if (!check(window.getComputedStyle(el).backgroundColor, "rgb(41, 247, 0)")) {
		return;
	}
	
	var list = document.body.getElementsByTagName("ol");
	for(var i = 0; i < list.length; i++) {
		
		if (!checkList(list[i].getElementsByTagName("li"))) {
			return;
		}
		
		var backgroundColor = window.getComputedStyle(list[i]).backgroundColor;
		var rightBackgroundColor = "rgb(255, 255, 0)";
		
		if (list[i].className === "b") {
			rightBackgroundColor = "rgb(97, 81, 81)";
		}
		
		if (!check(backgroundColor, rightBackgroundColor)) {
			return;
		}
		
	}
		
	console.log("OK");
	
}

test();

Денис Вегеро

Темы: 2
Сообщений: 9

Мой профиль
При попытке открыть папку виртуальной машины из windows 10 получаю ошибку:"You can't connect to the share because it's not secure. This share requires the obsolete SMB1 protocol, which is unsafe and could expose your system to attack. Yuor system requires SMB2 or higher. For more info on resolving this issue, see: https://go.microsoft.com/fwlink/?linked=852747". Помогите решить эту проблему.
Михаил Долинский

Темы: 1982
Сообщений: 47182

Мой профиль
Имеются 3 способа ставить тестовые задания на DL, со следующими исторически сложившимися названиями

1. Математические
2. Английские
3. Флеш-конструктор

Они расположены в порядке увеличения сложности разработки заданий
И, соответственно, в порядке увеличения разнообразия и интересности их выполнения.

1. Математические

- поля ввода, выбор одного из нескольких ответов, выбор нескольких правильных ответов
В задании можно использовать рисунки
Есть специальная программа, помогающая создавать такие задания
http://dl.gsu.by/NForum/posts/topicshow/2232.dl?postid=57882#57882

2. Английские задания

Внешний вид таких заданий можно увидеть в курсе English Demo (Выбор курсов – Английский – English Demo)
Поддерживаются следующие виды заданий
Simple: Drop-down list, Horizontal radio group, Vertical radio group, Checkboxes, Matching, Manual typing
Scripting: Clicking incorrectness, Ordering words, Classify table, Image mapping, Multipages
Архив с заданиями из English Demo
http://dl.gsu.by\Images\_i4f\author\English_Demo.rar
Теория по созданию таких заданий
http://dl.gsu.by/enghelp.asp
Дока по установке задач (Хиженок)
http://dl.gsu.by\Images\_i4f\author\hizhenok.doc


3. Флеш-конструктор

Визуальный редактор с кучей возможностей в добавление к первым двум (Математические, английские),
в том числе:
перенос рисунков, выделение областей, области внесения, точки соединения

Дока по установке задач (Осадчий)
http://dl.gsu.by\Images\_i4f\author\osadchi.doc

Примеры заданий находятся в курсах
Математика (Выбор курсов – СШ 27 - Математика)
Например: Приёмы работы http://dl.gsu.by/task.jsp?nid=1076075&cid=857
Создание флеш-заданий для DL (Выбор курсов - Программирование – Создание флеш-заданий для DL (Теория, Задачи))
Михаил Долинский

Темы: 1982
Сообщений: 47182

Мой профиль
Решение проблемы "лишние пробелы" (Штоп Кирилл, май 2017)

Вот ссылка на задачу: http://dl.gsu.by/task.jsp?nid=1735730&cid=1058

В данном примере функция test() проверяет текст заголовка html страницы без учёта лишних (не видимых) пробелов
Код файла check.js
String.prototype.trimRight=function()
{
  var r=/\s+$/g;
  return this.replace(r,'');
}
String.prototype.trimLeft=function()
{
  var r=/^\s+/g;
  return this.replace(r,'');
}
String.prototype.trim=function()
{
  return this.trimRight().trimLeft();
}
String.prototype.trimMiddle=function()
{
  var r=/\s\s+/g;
  return this.trim().replace(r,' ');
}

function test () {
  var title = document.getElementsByTagName('title')[0].innerHTML;
  
  console.log(title.trimMiddle());
}
test();

Функция trimRight() убирает все пробелы справа от текста.
Функция trimLeft () убирает все пробелы слева от текста.
Функция trim() убирает все пробелы слева и справа от текста.
Функция trimMiddle() убирает все пробелы слева и справа, а также оставляет один пробел между словами.
Пример:
Исходный текст
Hello World Hello World
После применения функции trimMiddle()
Hello World Hello World
Все остальные файлы задачи без изменений.
 
Индекс форума ->Общего плана ->Предложения по новым курсам DL 1, 2, 3, 4, 5, 6, 7, ... 11, 12, 13
Time:0,079