{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Блог Дмитрия Серженко: заметки с тегом Бессмертный полк",
    "_rss_description": "Всю сознательную жизнь работаю в образовании.\r\n\r\nВ настоящее время — открываю Лицей информационных технологий Приморского района Санкт-Петербурга.\r\nРанее (в т.ч. по совместительству): зам. директора и  руководитель центра цифрового образования «ИнфинITи» школы № 509, сотрудник СПбЦОКОиИТ и Инспекции Комитета по образованию Санкт-Петербурга, заведующий ЦИО ИМЦ Петродворцового района, сотрудник поддержки ВКонтакте, инженер ЦИО ИМЦ Красносельского района, педагог дополнительного образования УМЦ «ИНФОБ» и лицея № 395, переводчик, индивидуальный предприниматель и проч., проч., проч.…\r\n\r\nDisclaimer. Вся информация, опубликованная в этом блоге, отражает персональное мнение частного лица, даже если затрагивает рабочие темы, и не представляет официальную позицию какой-либо организации или органа власти (хотя и может с таковой позицией совпадать… или не совпадать).",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/serzhenko.ru\/tags\/bessmertny-polk\/",
    "feed_url": "https:\/\/serzhenko.ru\/tags\/bessmertny-polk\/json\/",
    "icon": "https:\/\/serzhenko.ru\/pictures\/userpic\/userpic@2x.jpg?1762279385",
    "authors": [
        {
            "name": "Дмитрий Серженко",
            "url": "https:\/\/serzhenko.ru\/",
            "avatar": "https:\/\/serzhenko.ru\/pictures\/userpic\/userpic@2x.jpg?1762279385"
        }
    ],
    "items": [
        {
            "id": "25",
            "url": "https:\/\/serzhenko.ru\/all\/bot-dlya-akcii-pomnim\/",
            "title": "Бот для акции «Помним»",
            "content_html": "<p>В преддверии Дня Победы ежегодно и повсеместно проходят акции в формате <a href=\"https:\/\/www.moypolk.ru\/\" class=\"nu\">«<u>Бессмертного полка<\/u>»<\/a>.<\/p>\n<p>В этом году, в связи с известными коронавирусными обстоятельствами, бо́льшая часть акций перешла в онлайн-формат. В частности «Российское движение школьников» <a href=\"https:\/\/vk.com\/wall-122623791_193161\">запустило акцию «Помним»<\/a>.<\/p>\n<p>Участникам акции предлагается:<\/p>\n<ol start=\"1\">\n<li>Скачать файл с рамкой;<\/li>\n<li>Наложить слой с рамкой на слой с фото в нужном порядке (да, рамка должна быть на переднем слое, т. к. у неё есть «уголочки», которые должны быть на фотографии, а не под);<\/li>\n<li>Добавить подписи (желательно — уместным шрифтом);<\/li>\n<li>Сохранить фото.<\/li>\n<\/ol>\n<p>Очевидно, что для многих потенциальных участников акции выполнение алгоритма станет не такой уж тривиальной задачей: требуются навыки работы с графическими редакторами или хотя бы онлайн-сервисами аналогичного назначения. Либо <a href=\"https:\/\/vk.com\/@rms_spb-kak-sdelat-fotografiu-bessmertnogo-polka\">использования «костылей» вроде PowerPoint’а<\/a>.<\/p>\n<p>Для того, чтобы повысить потенциальную вовлечённость наших обучающихся и их родителей в акцию, мы решили поэкспериментировать и максимально оптимизировать  процесс подготовки фото в рамке для публикации в школьной онлайн-колонне  «Бессмертного полка».<\/p>\n<div id=\"vk_post_-194939024_5\"><\/div><script type=\"text\/javascript\" src=\"https:\/\/vk.com\/js\/api\/openapi.js?168\"><\/script>\n<script type=\"text\/javascript\">\n  (function() {\n    VK.Widgets.Post(\"vk_post_-194939024_5\", -194939024, 5, 'Y45j8dVxdCE5SxHgfw_WoQ');\n  }());\n<\/script>\n<p>Был реализован следующий пользовательский сценарий:<\/p>\n<ol start=\"1\">\n<li>Бот в сети ВКонтакте принимает в качестве входных данных фотографию, ФИО и (опционально) звание героя.<\/li>\n<li>Подготавливает изображение, присылает его пользователю.<\/li>\n<li>Предлагает пользователю выполнить публикацию в сообществе.<\/li>\n<li>Если пользователь соглашается, фото загружается в альбом сообщества и публикуется на стене с заранее заготовленным набором соответствующих хэштегов. Получившийся пост отправляется пользователю, который может принять решение о лайке, репосте (или каком-либо другом действии в рамках стандартного взаимодействия с соцсетью).<\/li>\n<\/ol>\n<p>Важно, что без прямого на то намерения пользователя ничего никуда не публикуется и, пока пользователь не примет такого решения, никакие данные не выходят за пределы диалога «пользователь — бот».<\/p>\n<p>По сути сейчас нет никакой технической фильтрации ни текстового, ни графического контента, которые подаются на вход боту (кроме, разве что, «загрузите, пожалуйста, вертикальное фото»). Поэтому в целях предупреждения потенциального вандализма была организована команда модераторов, состоящая из педагогов и ребят-активистов, готовых оперативно устранять последствия актов вандализма, если таковые будут иметь место.<\/p>\n<p>Вот что получилось:<\/p>\n<!-- VK Widget --><div id=\"vk_groups\"><\/div><script type=\"text\/javascript\">\nVK.Widgets.Group(\"vk_groups\", {mode: 4, wide: 1, height: \"600\", width: \"auto\", no_cover: 1}, 194939024);\n<\/script>\n<p><hr><\/p>\n<p>Дальше — чуть-чуть технических подробностей разработки. Можете смело пропустить два следующих абзаца, если вас пугают слова и аббревиатуры PHP, API, SDK, NoSQL, «токен» или «standalone» :)<\/p>\n<p>Технически взаимодействие с пользователем осуществляется через <a href=\"https:\/\/vk.com\/dev\/bots_docs\">чат-бота VK<\/a>, серверной частью которого является PHP-приложение, написанное с использованием <a href=\"https:\/\/github.com\/VKCOM\/vk-php-sdk\">официального SDK VK<\/a>:<\/p>\n<ul>\n<li>Для генерации изображений используются библиотеки-обёртки над <a href=\"https:\/\/www.php.net\/manual\/ru\/book.image.php\">GD<\/a>: <a href=\"https:\/\/github.com\/Treinetic\/ImageArtist\">ImageArtist<\/a> и <a href=\"https:\/\/github.com\/stil\/gd-text\">gd-text<\/a>.<\/li>\n<li>Для хранения состояния сессии взаимодействия с пользователем используется NoSQL-хранилище <a href=\"https:\/\/redis.io\/\">Redis<\/a> и его <a href=\"https:\/\/github.com\/nrk\/predis\">PHP-клиент Predis<\/a>.<\/li>\n<li>В целом архитектура проекта такова, что при желании можно изменить (или расширить) платформы взаимодействия с ботом на другие соцсети и\/или мессенджеры, используя их API.<\/li>\n<\/ul>\n<p>Взаимодействие с пользователем осуществляется от имени специально созданного сообщества, однако в процессе разработки я столкнулся с одним логически неочевидным ограничением (однако прямо оговорённым в документации): токен доступа сообщества не позволяет загружать фотографии в альбомы сообщества и создавать записи на его стене. Это возможно только с ключом доступа пользователя, обладающего правами на такие действия в конкретном сообществе. Из этой ситуации был найден следующий выход: создано техническое standalone-приложение, для которого был получен токен пользователя-администратора сообщества с неограниченным сроком действия.<\/p>\n",
            "date_published": "2020-05-07T12:51:45+03:00",
            "date_modified": "2020-11-06T20:13:47+03:00",
            "tags": [
                "Бессмертный полк",
                "боты",
                "программирование",
                "школа № 509"
            ],
            "image": "https:\/\/serzhenko.ru\/pictures\/Bez-imeni-1.png",
            "_date_published_rfc2822": "Thu, 07 May 2020 12:51:45 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "25",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/serzhenko.ru\/pictures\/Bez-imeni-1.png"
                ]
            }
        }
    ],
    "_e2_version": 4134,
    "_e2_ua_string": "Aegea 11.3 (v4134)"
}