Программирование (syllabus) 2026/Task/Aggregator

Материал из Поле цифровой дидактики

Программирование/Задание:Aggregator

Это учебное задание посвящено работе с Lua-модулем Module:Aggregator в среде MediaWiki + Scribunto.


Идея задания

Используем готовый модуль Module:Aggregator как базовый объект для remix. Сначала мы вызываем готовые функции модуля на wiki-странице. Затем каждый студент создаёт свой собственный remix-модуль, добавляя новые режимы анализа.

Идея задания состоит в том, что страница wiki становится данными, а Lua-модуль становится инструментом их анализа и представления. На сайте уже существует модуль: Module:Aggregator. Этот модуль умеет работать в нескольких режимах:

Режим Что делает
args считает количество переданных аргументов
chars считает длину исходного вики-текста страницы
words считает количество слов в исходном вики-тексте страницы
links считает количество wiki-ссылок вида [[...]]
headings считает количество заголовков вида == ... ==

Часть 1. Попробуйте готовый модуль

Сначала попробуйте использовать уже готовый модуль Module:Aggregator.

Пример 1. Подсчёт аргументов

Вызов:

{{#invoke:Aggregator|main|mode=args|a=Lua|b=SMW|c=NetLogo}}

Результат:

Всего передано аргументов: 4

Пример 2. Подсчёт длины страницы

Вызов:

{{#invoke:Aggregator|main|mode=chars|title=Lua}}

Результат:

Длина исходного вики-текста в байтах: 5813

Пример 3. Подсчёт слов на странице

Вызов:

{{#invoke:Aggregator|main|mode=words|title=Lua}}

Результат:

Количество слов в исходном вики-тексте: 565

Пример 4. Подсчёт wiki-ссылок

Вызов:

{{#invoke:Aggregator|main|mode=links|title=Lua}}

Результат:

Количество wikilinks ...: 18

Пример 5. Подсчёт заголовков

Вызов:

{{#invoke:Aggregator|main|mode=headings|title=Lua}}

Результат:

Количество заголовков ==...== : 8

Что важно понять

Модуль Module:Aggregator анализирует исходный wiki-текст страницы. Это значит, что он работает с текстом разметки, шаблонами, ссылками и заголовками как с данными.

Поэтому один и тот же вопрос можно понимать по-разному:

Вопрос Что фактически считает модуль
Сколько слов на странице? Сколько слов в исходном wiki-тексте
Сколько символов на странице? Длину строки исходного текста
Сколько ссылок на странице? Количество конструкций [[...]]
Сколько заголовков на странице? Количество строк или фрагментов вида == ... ==

Часть 2. Создайте свой remix

Задача — не просто использовать готовый модуль, а сделать собственный remix.

Создайте личный модуль, например:

  • Module:Student/Smirnov/Aggregator
    • предпочтителен вариант с подстраницами, потому что он лучше организует пространство имён.

Что нужно сделать в remix

В вашем remix-модуле должно быть:

  1. не меньше 2 новых режимов по сравнению с исходным Module:Aggregator;
  2. страница документации /doc;
  3. страница демонстрации, на которой показаны примеры вызова вашего модуля;
  4. короткое объяснение, что именно делает ваш remix.

Возможные направления remix

Новый режим Идея Что анализировать
templates считать шаблоны количество конструкций {{...}}
categories считать категории количество вхождений [[Категория:...]]
externallinks считать внешние ссылки ссылки вида http:// и https://
files считать файлы вхождения [[Файл:...]]
sentences считать предложения количество предложений в тексте
paragraphs считать абзацы количество текстовых блоков
tables считать таблицы количество wiki-таблиц

Часть 3. Создайте страницу демонстрации

После создания вашего remix-модуля создайте отдельную страницу демонстрации, в категории Категория:Работы МФ-221 например:

Придумать название!!!

На этой странице нужно показать:

  1. название вашего модуля;
  2. список новых режимов;
  3. не меньше 3 примеров вызова;
  4. краткое объяснение результатов.

Рекомендуемая структура demo-страницы

= AggregatorDemo =

== Мой модуль ==
[[Module:Student/Иванов/Aggregator]]

== Новые режимы ==
* templates
* categories

== Примеры ==
{{#invoke:Student/Иванов/Aggregator|main|mode=templates|title=Lua/Tutorial}}

{{#invoke:Student/Иванов/Aggregator|main|mode=categories|title=Lua/Tutorial}}

== Комментарий ==
Мой remix считает шаблоны и категории в исходном wiki-тексте страницы.

Часть 4. Документация

У вашего модуля должна быть страница документации:

  • Module:Student/Иванов/Aggregator/doc

На странице /doc должно быть:

Что должно быть Обязательно?
краткое описание модуля да
список режимов да
примеры вызова да
описание новых режимов да
указание автора remix да

Минимальные требования

Требование Минимум
Личный remix-модуль 1
Новые режимы 2
Примеры вызова на demo-странице 3
Страница /doc 1
Рабочий вызов без ошибок обязательно

Критерии оценки

Критерий Что оценивается
Работоспособность модуль запускается без Lua error
Понятность кода читаемые имена функций и режимов
Качество remix есть собственные новые режимы, а не только переименование
Документация есть /doc и примеры вызова
Демонстрация есть отдельная страница с результатами
Интерпретация студент понимает, что именно считает модуль

Вопросы для размышления

После выполнения задания ответьте письменно на 3 вопроса:

  1. Чем отличается исходный wiki-текст страницы от её визуального отображения?
  2. Что именно считает ваш модуль?
  3. Что в вашем remix является новой функцией, а что — только изменением оформления?

PlantUML-схема задания

Что сдавать

Итогом задания являются 3 объекта:

  1. ваш личный remix-модуль;
  2. страница документации /doc;
  3. страница демонстрации с примерами вызова.

Формула задания

Use → Understand → Remix → Document → Demonstrate

Дополнительная идея

Если базовый remix выполнен успешно, можно сделать второй уровень и превратить агрегатор из простого счётчика в модуль, который не только считает, но и строит таблицу с результатами анализа нескольких страниц.

Например:

  • сравнить 3 страницы по числу слов;
  • сравнить 3 страницы по числу ссылок;
  • сравнить 3 страницы по числу заголовков.