Rose debug info
---------------

Блог Крузи

Личная заметочная база простого студента из Ижевска

Выборы в Госдуму 2021

Не хотел вообще ничего на эту тему где-либо писать, но пока высру здесь этот крик души, буду ссылаться на него, вместо того, чтобы дублировать постоянно из письма в письмо.

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

Немного предыстории. Я в самом начале месяца (09.2021) ушёл на больничный режим с диагнозом коронавируса. Лечился на домашнем режиме. 8-го сентября, во время очередного захода доктора на дом, приняли решение перейти на стационарное лечение, в связи с подозрением на пневмонию легких, типа «дома не лечится, вас там обследуют, полечат, так лучше будет всем». Ну, ладно, без вопросов. Надо — так надо.
Вызвал скорую, она приехала в ночь с 8-го на 9-ое, по документам я официально госпитализирован 9-го сентября, в 00:40 поступил в стационар, а в палату заехал в ~03:20 той же ночи.
Узнав от врача, что до 19-го меня отсюда никто не выпустит, зашёл на портал Госуслуг и оставил заявку на «голосование вне помещения для голосования». Электронного голосования в Удмуртии до сих пор не предусмотрено. Было это всё 14-го сентября, т. е. по срокам ещё нормально оставил, кажется...

Отправленное заявление в приложении Госуслуг

В госуслугах оно до сих пор так и числится «на обработке», но на самом деле, мне звонила девушка из ТИК 16-го сентября.

Звонок из ТИК
Запрос в Google о принадлежности номера, чтобы сомнений не было

Я ей обрисовал ситуацию, что пребываю в стационаре в связи с пневмонией, и она мне сказала, что «поликлиника должна была уже самостоятельно позаботиться на эту тему», и что от меня ничего не требуется. Но 17-го числа было полное молчание, а сегодня, 18-го, когда вся палата решила поинтересоваться на эту тему, врач сначала убежал проконсультироваться на эту тему с человеком, который отвечает за весь этот балаган в поликлинике, а потом вернулся с новостью, что «в красную зону урну никто приносить не будет», т. е. как будто «у ковидных права голоса нет».

Позвонил на горячую линию ЦИК РФ, где меня проинформировали, что поликлиника, оказывается, меня должна была известить о необходимости написать заявление до 16-го сентября включительно. Но пока я наблюдаю полный мороз со стороны администрации под предлогом «ну вы же в красной зоне, куда вам голосовать».

У меня абсолютно хорошее самочувствие последнюю неделю, мои анализы идеальны, последнее КТ показало, что «пневмония лечится, ничего предпринимать дополнительно не надо», процент поражения уже минимален (5%). Я согласен даже на самостоятельный выход из поликлиники на свой избирательный участок с взятием всей ответственности за нарушение режима на себя, но наблюдаю полный мороз. Все выглядит так, будто за меня давно решено было проголосовать «по правильному» (так, как удобно).

Если кому-то из СМИ интересно связаться со мной на эту тему — можете написать на электронную почту в любой момент [email protected], или позвонить на телефон — +79128716229 (в период с 07:30 по 22:00 по Москве).
Жалобу в ЦИК РФ я ещё сейчас напишу тоже. Работаю над этим прямо сейчас. Буду добиваться своего права на голос.

Пользовательские настройки стиля

Когда-то смотрел стили у XenFocus, и очень понравилась идея с возможностью пользователю самому менять какие-то части стиля. Тот же фон, например. Администратор заливает какие-то картинки на сервер, указывает их в свойствах стиля, а они становятся доступны для выбора пользователем. Или переключатели, позволяющие, к примеру, поменять сторону у сайдбара. Вот был он слева, а стал справа.

Я солидарен с XenFocus, и считаю, что такие вещи не должны выноситься в свойства стиля, которые доступны только администратору, и которые распространяются на всех сразу. Они должны выноситься именно в пользовательские настройки, а пользователь уже сам решает, что ему нужно, а что — нет.

Не забудьте нажать «Demo»!

XenFocus сделал это через JS и хранение в локал сторейдже. Простая, но в то же время неплохая задумка толком не реализована никак отдельно от его стилей. Before this day.
Какое-то время я потратил на реализацию дополнения, реализующего этот же механизм. Но без необходимости конечным администратором писать JS-код. Он пишет только LESS, который и активируется на странице. А дополнение само всё делает :)

Админка
Пользовательская часть

Пока что,

  1. Мы умеем выводить только обычные галочки. При активации которых после сохранения, активируется нужный LESS-код. Именно LESS, не CSS. Но заранее откомпилированный на сервере, и имеющий доступ ко всем свойствам стиля XenForo, если очень нужно.
  2. Админка совсем сырая :(
  3. Кешей нет почти. Каждый запрос к каждой странице провоцирует один дополнительный запрос за включенными настройками. Зато LESS компилируется единожды через стандартный механизм движка.

Из приятного, если сравнивать с реализацией Фокуса: настройки сохраняются на сервере, тут же «бродкастятся» (передаются) в рамках браузера на соседние вкладки с этим же сайтом. На остальных устройствах потребуется или обновить страницу, или спровоцировать любой поход на сервер по AJAX. Как настроили ресурс — так его и видите везде. Ну, почти. Помним про адаптивность, и размеры экранов.

После первоначального релиза, который состоится явно не раньше, чем два последних пункта из списка выше будут поправлены, хотелось бы сделать ещё:

  1. Хранение разных значений настройки для разных стилей.
  2. Возможность делать те или иные настройки — недоступными для некоторых стилей.

Ах да, цена. Я не знаю пока ещё сам, как дополнение будет распространяться. С одной стороны, я выпустил уже много дополнений бесплатно на всеобщее пользование, и некоторые из них реально используются много где (тот же вход через Телегу), с другой — кошелёк мой пустеет с каждым днём, донаты прибывают раз в столетие, а люди порой не понимают, что на дополнение я потратил время, и что было бы неплохо закинуть немного на кофе/пропитание, чтобы хоть как-то восполнить то время, что я потратил фактически на них, а мог пойти запилить что-то кому-то в приват или вообще на работу уйти...
Так что этот вопрос я пока оставлю без ответа.

Если кого-то заинтересовало — ждите релиз на оф. форуме в ближайшее время (неделя-две). А прямо сейчас дополнение можно уже пощупать на HLmod, но потребуется зарегистрироваться (платно, 150р; ценник выставляю вовсе не я).

Material Admin: обновление шаблонизатора

О, сколько боли в этом скрипте.
Когда я брался за его поддержку в 2015-2016 годах, я и не подозревал, что мне его придётся ещё долгое время поддерживать. Сейчас уже начало 2021 года, а я уже несколько дней, лежа на самоизоляции с COVID-19 (отдельная история) обновляю его для работы на PHP 8.

В общем, этот «аннонсмент» преимущественно для тех, кто делает или модифицирует шаблоны Material Admin.
В связи с обновлением шаблонизатора с Smarty v2 до Smarty v3, произошло несколько изменений как со стороны синтаксиса, так и со стороны встроенного функционала. Я не буду покрывать в этой заметке изменения самого Smarty (с этим прекрасно справится заметка от авторов), затрону лишь то, что было сделано мной в рамках «расширения функционала».

Функции

Было введено несколько вспомогательных функций, блоков и модификаторов. К примеру, теперь, благодаря функции avatar, стало возможным вывести аватарку там, где ранее это не было возможно (в бан-листе, например). Эта функция так же использует кеш, как и сам МА повсюду, и её вызов вернёт ссылку на аватар. Если аватарки в кеше нет — сходит в Steam API, достанет её и вернёт ссылку, так же записав в кеш.
Но, так же, вывод аватарок там, где нужно, не стал бы возможен без другой, отличной функции steam, которая берёт на вход SteamID и преобразует его в нужный формат. Точно так же, как и «внутрикапотовая» функция GetUserAvatar(), avatar в шаблонах хочет Community ID. Потому нужна возможность перегонять стимы в любой формат прямо в шаблонах, и она была реализована. Это позволяет так же избавиться от вызовов преобразования в пыхокоде, и вынести всё в шаблоны, не делая лишней работы.

Блоки

Иногда может понадобиться обернуть какую-то часть разметки в какие-то блоки. Раньше для этого приходилось писать «бойлерплейт» (дублировать нужные куски кода). Smarty v3 позволяет включать другие шаблоны в Ваш, но это не всегда удобно, т. к. приводит к коду вида:

<html>
  <head>
    ...
  </head>
  <body>
    {include file="page_header.tpl"}
      ... ваш шаблон ...
    {include file="page_footer.tpl"}
  </body>
</html>

Согласитесь, выглядит не красиво, и не очень-то и удобно. Мы представляем тег wrap, который позволит один раз написать шаблон вида:

<div class="card">
  <div class="card-body">
    {$innerContent} <!-- на месте {$innerContent} будет выведен обёрнутый в тег код -->
  </div>
</div>

И подключать его в нужных местах:

{wrap template="page_card.tpl"}
  <h1>Привет, мир!</h1>
{/wrap}

«Обёртки» получают все параметры рендера текущего шаблона, что позволяет, к примеру, заводить переменную $title с текущим заголовком страницы, и использовать её в подобных шаблонах.

Управление «зависимостями» (CSS, JS)

Если Вам понадобится в своём шаблоне подключить какой-то JS-файл или CSS в «шапке», Вы можете теперь это сделать! Мы вводим функции js и css. Основная их задача — пометить тот или иной файл в «очередь на подключение» в нужном блоке. Они не умеют пока что подключать динамический код, но заставить загрузиться нужный скрипт прямо перед отрисовкой всей страницы или после — без проблем.
К примеру, в SourceBans очень много мест, где вместо классического содержимого, выводятся вкладки.

Пример вкладок

При переключении между вкладками, меняется основное содержимое страницы. Следующий код мы используем для подключения и запуска таб-менеджера — нового функционала для работы с вкладками:

{js block="head" src="theme/js/core/tabs.js"}
<script type="text/javascript">TabManager.setup({$uniqueContainerId|json});</script>

block указывает область, где должен быть подключен JS-скрипт, src — место расположения скрипта.
Если Вы укажете скрипт, расположенный локально, мы так же добавим GET-параметр для их загрузки с UNIX Timestamp модификации файла. Это полезно для борьбы с жёстким кешем, навроде CloudFlare, когда требуется сбрасывать кеш в самом CloudFlare и браузере для обновления JS-скрипта. Скажи «Нет» постоянным сбросам кешей! 😃

Вы можете объявлять свои блоки. В случае такого кода:

{js block="own" src="theme/js1.js"}
{js block="own" src="theme/js2.js"}

// ...
{js block="own"}

Мы зарегистрируем новый блок own, а в месте, где произойдёт вызов функции без указания файла — будет выведен HTML-код для подключения всех перечисленных ранее JS-файлов. Точно так же это работает и для функции css.

page_header.tpl и page_footer.tpl

В Material Admin ещё в наследие от SourceBans, используется «дебильная система вывода страницы». Знали ли Вы, что для отрисовки, к примеру, бан-листа, будет выведено 5 разных шаблонов?

  • page_header.tpl
  • submenu.tpl
  • content_header.tpl
  • page_bans.tpl
  • page_footer.tpl

Часть разметки вообще спрятана в PHP-коде. Это создаёт ту ещё боль, когда Вы хотите поменять радикально разметку основной страницы, поскольку Вам приходится лезть в PHP-код, модифицировать разметку там, и ещё как-то запоминать, что и где было внесено, если однажды Вам понадобится обновиться. Знакомо?..

В обновлении я попытался избавиться от четырёх шаблонов выше. Теперь это всё объединено в «гипер-шаблон», именуемый «контейнером страницы». Его разметка может быть изменена, как Вам необходимо.
ПыСы: вполне возможно, что какие-то части ещё не вынесены в шаблон. Я постепенно работаю над этим.

Вместо отрисовки пяти разных шаблонов (явно), мы теперь честно отрисуем только два: page_bans.tpl и __container.tpl. Именно в последнем теперь объединены все прошлые шаблоны. Теперь Вы можете взять и поменять местами админское меню и «боковое», не залезая в PHP-код! Разве это не здорово? Вся разметка подчинена Вам.

Документация

Вся документация по нововведённым тегам и блокам расположена будет на GitHub, в день выхода патча. Ориентировочно, это произойдёт в январе. Я честно хотел успеть к началу нового года, но...

[Telegram] Core: приближающийся мажорный v2.1

Близится дата релиза следующего «мажорного» апдейта [Telegram] Core, и на момент написания заметки, уже вышли основные изменения, которые будут представлены в новой версии:

  • Несколько ботов. Может использоваться сторонними дополнениями для некоторых специфичных задач.
  • Более удобное API для реализации команд.
    • Для реализации команды, достаточно написать небольшой класс-хандлер (наследуется от специального класса).
    • Ядро строит цепочки обработчиков для той или иной команды. К примеру, есть «супер-обработчик» /start, который при виде специального аргумента, передаст управление на обработчики команды /auth.
    • Пока что необходимо вручную «вставлять» запись в базу при установке; при удалении — удалять. Позже будет механизм импорта/экспорта, как основная часть метаданных самого движка сделана (те же шаблоны).
  • Markdown Renderer. Теперь можно те же темы «рендерить» для отправки в Telegram. Единственные ограничения — это сам Markdown; те же таблицы никак не отрисовать.
  • Пользовательские команды. Можно реализовать свою команду по типу /rules, которая будет выводить относительно статический контент. Может быть полезно в групповых чатах. Для групповых чатов так же позже будет выложено отдельное дополнение, которое расширит возможности интеграции.
  • Клиент и API теперь можно расширять через функционал движка Class extensions.

Обновление

При обновлении на новую версию будут выполнены следующие действия:

  1. Созданы таблицы для хранения обработчиков команд (xf_smodders_tgcore_command), пользовательских команд (xf_smodders_tgcore_user_command) и ботов (xf_smodders_tgcore_bot).
  2. В таблицу обработчиков команд будут занесены все стандартные обработчики (их два): /start и /auth.
  3. Будет произведён импорт токена в «ботов», установлен «бот для авторизации» в настройках интеграции.
  4. Перестроен локальный кеш команд. Пока что он глобальный, но к релизу он станет локальным для каждого бота, и можно будет выключать обработку тех или иных команд для бота индивидуально

Админка

Все скриншоты были сделаны на версии движка XenForo v2.1.10 Patch 2 и версии дополнения [Telegram] Core v2.0.5 Alpha 8
После установки обновления, в админке появится отдельный раздел Telegram

Раздел в админ-панели

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

Выбор бота

В интерфейсе редактирования бота, по сути, есть только одно важное поле для заполнения: токен доступа (он же «Ключ доступа» в русской локализации).

Интерфейс редактирования бота

Если не заполнять заголовок, туда автоматически подставится юзернейм бота.
Если бот был импортирован с прошлой установки — он получит «заголовок» Authorization bot (@username).

«Пользовательские» команды крайне минималистичны на данный момент. При создании команды, Вам нужно заполнить только два поля: сама команда и ответ бота на неё.
В ответе работает шаблонизатор XenForo, и доступна глобальная переменная $xf, что позволяет, к примеру, делать такие штуки:

Пользовательская команда, отправляющая пользователю ссылку на правила

При выполнении любой команды, ядро переводит контекст исполнения (активного пользователя, шаблон и язык) по привязанной учётной записи — на форумную учётную запись.
Позже будут добавлены более гибкие настройки для команды, но пока — как-то так.

Прямо сейчас Вы можете установить текущую альфа-версию на свой форум, но понадобится собрать релизную версию или включить на «продакшене» режим разработчика (как?) и установить дополнение через консоль. Все исходники, как и прежде, доступны на GitHub.

О номере версии

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