Наконец-то мы созрели для того, чтобы написать небольшую статью, в которой расскажем как подружить приложения написанные на JavaScript с СДО WebTutor, используя новый стандарт Tin Can API. Статья будет состоять из двух частей. Первая – это небольшой рассказ о том, что такое стандарт Tin Can API и как он устроен, а вторая часть статьи будет посвящена непосредственно практическому применению.
Первая вещь, которую обязательно надо знать! Tin Can API, Experience API, xAPI — это три разных названия одного и того же стандарта. В этой статье мы будем использовать термин Tin Can API, так как разработчики-основоположники из Rustici Software используют именно этот термин. Если вам любопытно, почему возникло несколько названий одного стандарта, то узнать можно тут Tin Can API | xAPI.
Вторая вещь, которую важно знать, это то, что стандарт Tin Can API разрабатывался компанией Rustici Software по заказу ADL («хранители» SCORM), в рамках проекта по созданию нового стандарта электронного обучения. Поэтому, когда Tin Can API называют стандартом SCORM следующего поколения – это правда.
Зачем же нам новый стандарт, если есть классический и широко распространенный стандарт SCORM? Достоинства SCORM не вызывают никаких сомнений, но давайте рассмотрим ограничения, которые в нем существуют. На самом деле ограничение одно – при использовании SCORM учебными материалами могут выступать только курсы, разработанные по стандарту SCORM и предварительно загруженные в СДО (система дистанционного обучения). Это значит, что если мы хотим разрабатывать учебные материалы, которые должны использоваться в СДО, то необходимо соблюдать требования, которые накладывает SCORM на их структуру. Одно то, что учебные материалы должны быть написаны на языке JavaScript чего стоит! Получается, что мы не можем использовать в СДО, например, интерактивные или мобильные приложения, разработанные на других языках программирования. А как быть с учебными активностями, например, лекциями, семинарами, вебинарами? Можно ли из них создать электронный курс? Стандарт SCORM не дает такой возможности.
И вообще, человек может учиться везде и всегда, взаимодействуя с огромным количеством источников информации и другими людьми. Почему бы нам не учитывать любые возможности получения знаний в СДО? Видимо это был как раз тот вопрос, который и привел в итоге к созданию Tin Can API. Итак, Tin Can API – новый стандарт в электронном обучении, который позволяет собирать и передавать информацию о ЛЮБОМ обучении человека/сотрудника/студента.
Как Tin Can API работает?
Tin Can API — это веб-сервис, который доставляет и хранит учебные активности (statements) в хранилище учебных активностей (Learning Record Store). В свою очередь, хранилище может передавать данные в СДО или, при необходимости, в другие хранилища. Хранилище учебных активностей также может быть интегрировано в СДО. Веб-сервис позволяет пользователям в неявном виде генерировать учебные активности, которые содержат нужную информацию о действиях пользователях. В простейшей форме, учебная активность имеет вид — «я сделал это»(«I did this») или в более общей форме — «пользователь глагол объект»(«actor verb object»). Учебная активность – это объект, поэтому, например, фраза «Иванов просмотрел видеозапись» в JSON-формате выглядит так:
{
“actor”:“Иванов”,
“verb”:“просмотрел”,
“object”:“видеозапись”
}
Конечно же, Ивановых и видеозаписей может быть много, поэтому для соответствующих полей существуют идентификаторы:
“actor”: {
“name”:“Иванов”,
“mbox”:user:ivanov@itorum.ru
},
“verb”: {
“id”:“http://elearning-itorum.ru/verbs/001”,
“display”:{“ru-RU”:’просмотрел’}
},
“object”: {
“id”:“http://elearning-itorum.ru/activities/001”,
“definition”:{
“name”:{“ru-RU”:’видеозапись’}
}
}
}
Все, самая простая учебная активность готова, осталось только отправить ее в хранилище учебных активностей.
Еще раз, в любой учебной активности всегда будет идентификатор пользователя, действие, которое он выполнил, и объект над которым было выполнено действие.
Учебные активности могут быть более сложными, например, содержать поле для результата или включать в себя еще одну учебную активность, но об этом следующий раз.
Получается, что Tin Can API не говорит нам ни слова, о том какая структура должна быть у нашего учебного курса/компьютерной программы/приложения, а только говорит о том, какая структура должна быть у исходящей от него информации!
Часть 2
Реализация Tin Can API на JavaScript
Итак, давайте реализуем очень простой пример, где в качестве JavaScript приложения будет выступать веб-страница.
На учебном портале WebTutor есть раздел с видеозаписью, которую обучаемый должен просмотреть. После просмотра данной видеозаписи обучаемый должен нажать кнопку «Видео просмотрено» при нажатии на которую должна генерироваться соответствующая учебная активность и отправлять в хранилище.

Для стандарта Tin Can API обязательно наличие хранилища учебных активностей, и встроенное хранилище учебных активностей в СДО WebTutor прекрасно подойдет нам для нашего примера. Откроем карточку «Встроенное хранилище учебных активностей» и выберем «Стандартная аутентификация по E-mail и паролю» для того, чтобы хранилище идентифицировало пользователей по их email.

Осталось научиться генерировать и отправлять учебные активности. Rustici Software проделали большую работу и выложили в открытый доступ сразу несколько библиотек для разных языков программирования. Поэтому смело скачиваем библиотеку для JavaScript, которая называется TinCanJS. Для того чтобы использовать функционал библиотеки TinCanJS, скачанные файлы необходимо разместить на сервере, а на страницу (например в тег head) необходимо вставить:
Теперь нам доступны все классы и методы, которые есть внутри библиотеки. Первым делом, давайте создадим новую функцию (назовем ее, например, SendTrainingInfo()).
function SendTrainingInfo(){
}
Внутри этой функции создадим экземпляр класса TinCan, который будет содержать информацию о хранилище учебных активностей:
var tincan = new TinCan (
{
recordStores: [
{
endpoint: "http://localhost:100/lrs/",
username: "<%=curUser.login%>",
password: "<%=curUser.password%>",
allowFail: false
}
]
}
);
Поле endpoint — url-адрес нашего хранилища учебных активностей (если мы используем СДО WebTutor, то к url-адресу порталу надо добавить «/lrs»). Поля username и password – логин и пароль пользователя, от имени которого будет происходить авторизация учебной активности в СДО (в нашем примере от имени самого пользователя). Экземпляр создан, теперь нужно применить к нему метод sendStatement(), который сформирует и отправит учебную активность в уже указанное хранилище.
tincan.sendStatement(
{
actor: {
mbox: "mailto:"+"<%=curUser.email%>"
},
verb: {
id: "http://elearning-itorum.ru/verbs/001",
display: {"en-US": "просмотрел"}
},
target: {
id: "http://elearning-itorum.ru/activities/001",
definition: {
name: {"en-US": "видеозапись"}
}
}
}
);
В качестве аргумента метода sendStatement() указываем нужную нам учебную активность в JSON-формате. В поле actor будет вставляться электронная почта конкретного пользователя, для того чтобы хранилище учебных активностей могло идентифицировать, какой конкретно пользователь просмотрел видео. В verb помимо поля id, очень желательно указать поле display, которое содержит текстовое описание нашего глагола (удобно будет читать в «Администраторе WebTutor»). Поле target это и есть наш объект над которым совершается действие (выше оно называлось object, но в TinCanJS называется target).
Последнее шаг — при нажатии на кнопку «Видео просмотрено» должна вызываться функция SendTrainigInfo():
$('button').click(function(){
SendTrainigInfo();
});
Все! Теперь наша страница умеет отправлять учебные активности в соответствии со стандартом Tin Can API в СДО WebTutor!

Вместо вывода
Очевидно, что вместо веб-страницы может быть любое JavaScript приложение/программа/курс, при разработке которых стоит заботиться только о том, чтобы генерация и передача учебных активностей осуществлялась в соответствие со стандартом Tin Can API. Мы рассмотрели библиотеку TinCanJS, а у Rustici Software есть еще много библиотек и для других языков программирования, что позволяет свободно использовать разнообразные инструменты, платформы или движки для разработки учебных материалов! Правда здорово? В следующей статье мы расскажем о том, как создавать электронные курсы в СДО WebTutor, используя учебные активности!
Далее...