Участник:JARVISTheBot/Программное обеспечение

Материал из Minecraft Wiki
Перейти к: навигация, поиск

В разное время для JARVISTheBot используется различное программное обеспечение. Основным ПО бота является Pywikibot, но параллельно с ним используются и иные программы.

Pywikibot[править | править код]

Основное программное обеспечение бота, работающее на языке программирования Python 2 (с третьей версией испытания проводились очень давно и безуспешно). Представляет собой полноценную систему бота с возможностью написания собственных программ на её основе. В ходе работы неоднократно использовались сценарии, написанные вручную; в частности, с их помощью были залиты модули для обновлённой системы спрайтов. Исторически является первым ПО, используемым для JARVISTheBot; эксплуатируется с 2014 года, с довольно редкими обновлениями.

Werther[править | править код]

Проект вручную созданного робота общего назначения, разрабатывается с 2016 года. Концепция менялась неоднократно.

Самый ранний проект бота, изначально под названием GROWEB (Grand, Radical and Operative Wiki Editing Bot), предполагал создание монолитной платформы бота на языке C с использованием ряда сторонних библиотек, прежде всего libcurl (для интернет-соединений), libjson-c (для обработки JSON) и libpcre (для работы с Perl-совместимыми регулярными выражениями). На первом этапе предполагалось создание механизмов взаимодействия с вики, реализации связанных с ними данных, а также интерфейса и лаунчера бота; на втором — поддержка сценариев; на третьем — поддержка расширений.

Затем наметился переход от монолитной архитектуры. В новом варианте отдельная программа, связанная с конкретным вики-проектом, должна была принимать низкоуровневые запросы от внешних программ через средства межпроцессного взаимодействия. Причём как связующих, так и внешних программ может быть произвольно много. Теоретически это придать Werther высокий уровень универсальности (одной из целей является возможность написания сценариев на языке командной оболочки), параллелизма и отказоустойчивости, а также заметно упростило бы разработку. На данный момент вместо C предполагается использовать более перспективный и безопасный язык Rust.

Проект получил нынешнее название в середине 2017 года в честь персонажа советского фильма «Гостья из будущего», робота Вертера, и заметно выделяется на фоне остальных названий, позаимствованных из иностранных произведений. Проект отчасти аналогичен замыслам участника AttemptToCallNil.

На данный момент перспективы проекта неясны. С одной стороны, успешная разработка Werther позволила бы реализовать универсальную систему, с которой могут быть интегрированы многие программы, а также подтвердить, расширить и реализовать навыки оператора как программиста. С другой стороны, сейчас не предвидится задач, которые требовали такую платформу, а возможностей Pywikibot и специализированных программ на данный момент достаточно. Кроме того, не стоит забывать и об ещё одной проблеме — банальной лени.

Попутные программы в рамках проекта Werther[править | править код]

Поскольку разработка принципиально новой платформы бота (да ещё и на компилирующем языке) оценивалась как крайне сложное занятие, предполагалось её вести поэтапно, с созданием попутных программ.

Первым этапом является экспериментальный робот FD2642OBR5 (или просто OBR5; название представляет собой случайную последовательность заглавных букв и цифр), единственной функцией которого является сохранение страницы с текстом, жёстко вшитым в исходный код программы. Первое испытание было совершено 3 июля 2016 года на русскоязычном разделе Справочной Gamepedia. Однако на протяжении около года проект не получил развития. Через год было создано несколько вариантов бота 0BR5, как правило отличающихся содержимым записываемого текста и описанием (так, один из вариантов позволял очищать песочницу по команде). Впоследствии удалось вместо перезаписи страницы добавлять текст в её конец.

Самым радикальным изменением FD2642OBR5 стало добавление возможности блокирования участников с фиксированными параметрами по вводу. Так в конце 2017 года появилась программа, известная как «Прометей». В то время вики-проект переживал волну массового вандализма с использованием как учётных записей, так и IP-адресов открытых прокси-серверов. И тех, и других прозвали «репликаторами» в честь механических существ из «Звёздных врат», а программу для борьбы с ними — в честь первого боевого корабля землян из того же сериала, который в свою очередь был назван именем персонажа древнегреческой мифологии. Первоначально он поддерживал только один режим блокировки, и для смены параметров необходимо было перекомпилировать всю программу, но с добавлением поддержки опций командной строки стало возможно выбирать два режима: блокировку обычных адресов или подсетей (на две недели, позднее на один месяц) или блокировку прокси (на один год). С помощью «Прометея», используя механизм перенаправления ввода/вывода командной оболочки, можно было бы реализовать массовую блокировку адресов открытых прокси-серверов по списку из файла, однако в таком режиме бот не использовался. Хотя проект получил название «Прометей», его файлы были созданы под названием DakaraProject — подробнее см. здесь.

Все программы семейства OBR5 были написаны на C с использованием библиотек libcurl и libjson-c, соответствуя изначальному варианту проекта Werther.

Следующим этапом является отделение ввода от основной программы, своего рода эксперимент по межпроцессному взаимодействию. На практике он был реализован в изначальной версии программы «Дедал».

После отказа от C было создано несколько тестовых программ на Rust, тестирующих различные аспекты его возможного применения для бота (HTTP-соединения, многопоточность, межпроцессное взаимодействие). А 22 июля тестовый бот, написанный на Rust и известный под названием Inlicense Legion, впервые проставил шаблон {{Лицензия}} на более чем четырёх тысячах файлов, не помеченных шаблоном лицензии. До этого около 14 тысяч файлов были обработаны ботом участника MakandIv, работающем на базе pywikibot. То, что pywikibot делал несколько часов, было выполнено Inlicense Legion всего за несколько десятков минут. Высокая скорость работы Inlicense Legion достигалась прежде всего за счёт высокой параллелизации действий — на каждые 500 файлов программа запускала по одному подботу (то есть восемь на четыре тысячи), а последние файлы обрабатывала сама. Впервые параллельная схема работы была опробована в проекте CarpetBomber (см. Другое).

Дедал[править | править код]

«Дедал» — специализированная программа для оперативной блокировки массовых злоумышленников, таких как IP-адреса, подсети или аккаунты-виртуалы, а также для блокировки открытых прокси-серверов в соответствии с пунктом 7 правил об учётных записях. Является заменой «Прометею» и его более функциональным аналогом, что отражено в наименовании: в «Звёздных вратах» «Дедал» — боевой корабль, превосходящий «Прометей» по боевым возможностям (назван в честь легендарного мастера из греческой мифологии).

Первая версия «Дедала» написана на C с использованием тех же библиотек, что и «Прометей», но у неё есть несколько существенных отличий.

  1. Возможность настройки параметров блокировки во время работы. Отсюда также вытекает поддержка команд («Прометей» позволяет вводить только цели блокировки, а режим — их было всего два — выбирался с помощью параметров запуска).
  2. Модулизация. Было создано три файла с кодом, один отвечает за интерфейс (высокий уровень), другой за непосредственную работу с вики-проектом (низкий уровень), третий является заголовочным файлом, указывающим общие определения для остальных двух. Если в «Прометее» вся логика была записана в одной-единственной функции main, то в «Дедале» за отдельные аспекты работы отвечают отдельные функции. Впрочем, для «Дедала» это мало отражается на процессе сборки, так как при изменении любого файла должна была быть перекомпилирована вся программа.
  3. Отделение ввода от программы через FIFO-канал, на который и посылаются команды. С одной стороны, это позволяет создать примитивное подобие сценариев (например, для настройки параметров под определённый режим, или блокировки по списку — сам «Дедал» поддерживал только блокировку одной цели за раз). Но с другой стороны, это позволяет запускать только один экземпляр «Дедала», в отличие от «Прометея», так как название канала было строго фиксированным.

Предполагалась разработка графической версии «Дедала» на основе GTK+ (при сохранении языка программирования), при этом библиотеки связи и разбора JSON предполагалось заменить на аналогичные из набора GNU. Но была создана только разметка основного окна.

На настоящий момент используется версия «Дедала» на языке Python 3, которая заменяет версию на C. Для HTTP-запросов используется пакет Requests. Таким образом, проект «Дедал» получил самостоятельное развитие, независимое от проекта Werther.

Другое[править | править код]

Используемые
  • CarpetBomber — сценарий для ускоренного удаления страниц. Использует Python 3 и пакет Requests, поддерживает несколько потоков (каждый с собственным сеансом связи). Работает намного быстрее аналогичного сценария, встроенного в pywikibot, однако последний всё же используется для создания списков удаляемых страниц.
  • Voyager — сценарий для сохранения списка заблокированных открытых прокси-серверов на русскоязычной Википедии. Написан на том же языке и с использованием того же пакета, что «Дедал» и CarpetBomber. Использовался один раз, 7 декабря 2018 года, и сохранил более 1,8 млн адресов в текстовый файл размером 26,2 Мбайт. Фактически программа Voyager используется анонимно, так как учётная запись бота на Википедии не зарегистрирована. Назван в честь сериала Star Trek: Voyager.
Бывшие в использовании
  • AutoWikiBrowser — предназначено для работы на Windows (попытки применения на Linux через Mono и Wine не увенчались успехом). Использовался только один раз для устранения включений удалявшегося шаблона {{Код}}. На данный момент вероятность применения оценивается как крайне низкая.
  • Java Wiki Bot Framework — библиотека для разработки бота на Java. Временно использовалась для экспериментов. На данный момент использование этой библиотеки не планируется.
Нереализованные
  • Wraith — проект робота общего назначения с ядром, написанным на языке Perl, задумывавшийся как «младший брат» Werther. На данный момент разработка не планируется. Назван в честь расы из мира «Звёздных врат».
  • Dakara — система автоматической блокировки IP-адресов, соответствующих открытым прокси-серверам. На данный момент целесообразность этой системы под вопросом (блокировать прокси-сервера по фиксированному списку можно существующими программами, а сам список можно составить программами вроде Voyager). Названа в честь планеты Дакара из «Звёздных врат»: по сюжету там располагалось устройство, с помощью которой были раз и навсегда уничтожены репликаторы — точно так же система в перспективе должна была устранить острую в своё время проблему анонимного вандализма с открытых прокси (подробнее см. здесь).