Портрет 4X_Pro
Был в Сети 27 авг. 2025 г., 05:32
Мультиблог
4X_Pro
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.

Социальные сети


Новости сайта в Telegram

t.me/4x_pro

Лог жизни

Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.


Некоторое разочарование в IndieWeb

4X_Pro

В последние дни начались какие-то разочарования, связанные с IndieWeb. Сначала перепутал MicroSub с WebSub. Хотел было сделать возможность читать уведомления в мобильном приложении Indigenos. Прочитал описание WebSub, подумал «надо же, как легко реализовать», а потом оказалось, что для Indigenos нужен MicroSub, который значительно сложнее.
Сегодня решил наладить ретрансляцию сообщений через сервис Bridgy.io Но оказалось, что там далеко не всё так хорошо. Для тех же Instagram и Facebook нужно ставить «костыль» в виде web-расширения для броузера. VK он не поддерживает в принципе. По сути, из того, что мне нужно, там нормально работает только взаимодействие с Twitterом. Но и тут возникли сложности: там нельзя явно указать адрес сайта, а Bridgy берёт его из аккаунта в Twitter. И в результате начинаются сложности из-за того, что у меня мультиблог: endpointы для WebMention находятся в подразделах, а не на главной, и Bridgy их просто не видит (хотя отчасти это можно обойти через явную отправку WebMention-запроса к Bridgy).
В общем, возвращаюсь примерно к тому, с чего когда-то начинал: нужно делать ретрансляцию сообщений в соцсети (POSSE в терминах IndieWeb) своими силами. Только вот для Facebook, насколько я понимаю, получить такие права на приложение можно только после прохождения идентификации, что для меня не вариант. В Twitter нужно писать запрос в свободной форме, но неизвестно, дадут права или нет…
А самое главное, видна тенденция на то, что доступ к API у крупных площадок всё более и более ограничивается. И не окажется ли так, что со временем его закроют вообще, и все мои усилия пропадут напрасно.

Осваиваю IndieAuth

4X_Pro

После нескольких дней переживаний по поводу того, что «всё уже придумано до нас» решил всё же делать поддержку протоколов, используемых в IndieWeb, в Intellect Board. Тем более, большинство из них в реализации куда проще, чем ActivityPub. Единственное что смущает — не получится ли в итоге очередной войны протоколов, и не окажется ли в конце, что я выбрал не то, что нужно.
И сегодня стал разбираться в протоколе IndieAuth. Серверная часть, как выяснилось, в нём реализуется достаточно просто. С клиентской главная сложность в том, чтобы найти все ссылки с rel="me" и авторизовать пользователя через них. Впрочем, как выяснилось, существует сервер indielogin.com, который может взять это на себя. Но когда стал с ним экспериментировать, выснилось, что client_id туда добавляются вручную, и для этого нужно писать создателю этого скрипта. К счастью, на GitHubе есть исходный код, и при необходимости можно будет поднять свою копию для форумов на IntellectBoard, но всё равно как-то несколько разочаровало.

Узнал об IndieWeb

4X_Pro

Сегодня искал материалы по децентрализованным социальным сетям и наткнулся на сайт IndieWeb.Org. Оказалось, что под словом IndieWeb подразумеваются те же концепции, которые хотел с 2019 года реализовать я сам: Интернет, построенный по принципу «всё своё держу на личном сайте, но при этом могу взаимодействовать с другими, в том числе и большими соцсетями». Более того, оказалось, что там уже созданы протоколы, а то и готовые сервисы даже для того, о чём я толком и подумать не мог, например, протокол webmention — аналог pingback из WordPressа. Или импорт не только своего контента в большие соцсети, но и обратный импорт лайков и комментариев. А ещё обнаружилось, что есть и готовая CMS, где многое из этого реализовано. Называется она Known.
В общем, теперь пребывают в полнейшей растерянности. С одной стороны, хорошо, что не я один мыслю в этом направлении, и уже немало сделано. С другой — растерянность от того, как быть дальше. Получается, нет смысла реализоваывать всё это в Intellect Board, как я задумывал изначально. Тем более, что множество новых протоколов увеличивает время реализации в разы.

Отправил первый комментарий в Mastodon из своего скрипта

4X_Pro

Сегодня проснулся бодрый и мотивированный. За окном был по-настоящему зимний день с очень приятным снежком. Но при этом не серый, как обычно, а довольно светлый. В какой-то момент я даже захотел выбраться на прогулку, но желание доразобраться с протоколом ActivityPub перевесило! И не зря! Всё же я разобрался, почему вчера не работала цифровая подпись для сообщений. Всё оказалось достаточно просто: я отправлял сообщение в /users/4xpro/inbox/, а при формировании HTTP-подписи в (request-target) указывал просто /inbox. Естественно, Mastodon такое не признавал действительным.
Когда разобрался, отправился первый комментарий от имени моего Wordpress-пользователя. Но почему-то от пользователя с socionics.me ничего не получалось, хотя ошибок не было. Опять долго ломал мозг, а оказалась очередная невнимательность: забыл указать расширение .json в URL в поле actor уже внутри самого сообщения. В общем, теперь могу уверенно сказать: IntB будет движком децентрализованной соцсети!
В общем, испытываю эмоциональный подъём. Правда, как всегда понимаю, что это за счёт биоритмического максимума, а когда он закончится, опять снесёт потоком жизни неизвестно насколько.
Ещё решил сверстать прототип главной страницы для децентрализованной сети-мультиблога, взяв за основу цветовую схему Mastodon и разместить его на CodePen.io. Может, там попадётся кому-то на глаза, кто тоже заинтересован в подобных идеях.
А ещё на lor.sh, несмотря на малочисленность этого сообщества, есть какая-то реакция на мои сообщения. Да и ленту почитать бывает интересно. Почти как в старом добром Интернете! Только политоты многовато…

Децентрализованные соцсети и Wordpress

4X_Pro

Ситуация с идеям, о которой писал в прошлом сообщении, продолжается. Видимо, минимум по интеллектуальному биоритму наложился на максимум по интуитивному.
В частности, ночью пришла ещё идея: написать plugin для взаимодействия с Mastodon и прочими сетями на протоколе ActivityPub для Wordpress. Для начала хотя бы такой, который позволяет просто подписываться и транслировать записи блога в Mastodon.
Но получилось как всегда: сразу не приступил, а лёг спать дальше. Утром же, когда встал, идея казалась не столь привлекательной. Плюс куча всего отвлекала от основного замысла. В итоге только к вечеру поставил на поддомен WordPress и настроил https на хостинге, где стоят мои старые сайты. Причём провозился по очень глупой причине: настраивая поддомен, сразу включал в настройках https, а уже потом пытался получить сертификат от Let's encrypt.
Когда всё сделал, на всякий случай решил поискать, а нет ли готового plug-in. Как выяснилось, есть! Эх, и тут меня опередили!
Поставил. Вроде работает, но кнопки «Подписаться через Mastodon» или чего-то подобного не появилось. И тут я чуть не сломал мозг, как сделать это в самом Mastodon. Полез в раздел «Подписки и подписчики», но там были только действующие подписки, без кнопки «Добавить новую». Облазил весь интерфейс, долго ругался, и только после этого обратил внимание на подсказку в строке поиска, что туда можно вводить не только ключевые слова, но и URL. Ввёл адрес поддомена и всё получилось! Сейчас вижу в ленте сообщения из блога WordPress. Нужно ещё попробовать подписки на отдельные категории.
Ещё узнал, что для Wordpress есть plug-inы, добавляющие функциональность соцсетей. Если их доработать на поддержку получения данных из Mastodon, то получится примерно то, как я представляю себе децентрализованную сеть из личных сайтов! К тому же узнал, что в Wordpress с версии 3.x можно создавать свои типы сообщений, а не только обычные записи в блоге.
Всё это поставило меня перед непростым выбором. С одной стороны, я всегда хотел делать децентрализованную соцсеть на своём собственном движке. С другой — если взять Wordpress за базу, то это может значительно поспособствовать популяризации децентрализованных соцсетей среди блоггеров. А именно с их среды, на мой взгляд, и может начаться уход от традиционных соцсетей.

Снова о децентрализованной соцсети

4X_Pro

Сегодня неожиданно для себя вернулся к размышлениям о децентрализованной социальной сети, о чем немало писал в августе-сентябре. И теперь вроде сложилась в голове картина, как все должно быть устроено. Все же то, что я называю инфохабом, должно быть отдельно, идея насильственно интегировать его с Intellect Board — не очень хорошая. А в IntB нужно просто предусмотреть возможность указать в контактах свою страницу, поддерживающую ActivityPub, и, если она указана, выводить кнопки для подписок на тему/раздел/форум, где каждая тема будет выступать в роли виртуального пользователя, а точнее, в терминах ActivityPub, агента. Ну и возможность отправки уведомлений об активности типа «Создал новую тему на форуме» (для этого, возможно, создать отдельный канал). А дальше — все как я и задумывал раньше: блочный вывод на главной странице инфохаба с возможностью подписаться на каждый из каналов в отдельности или на весь поток событий в целом. И в качестве отдельных независимых сервисов реализовать шлюзы с ВК, Facebook и т.п. (Кстати, для Twitter и Instagram они уже есть.)
С другой стороны, проблема заключается в том, что некоторые типы каналов будут дублироваться и в IntB, и в инфохабе. Например, раздел со списком задач, раздел анонимных вопросов и т.п. И тогда имеет смысл подумать об еще одном варианте — двух разных сборках на основе общего кода, различие которых будет, в основном, в инсталляторе и начальных настройках. В общем, опять не могу определиться…
Впрочем, кое-что все-таки ясно: сервисы-шлюзы можно делать уже сейчас. Равно как и поддержку подписки в IntB. А еще можно сверстать статическую страницу для того, чтобы понять, как все должно выглядеть…

Размышления об IntB и децентрализованных сетях

4X_Pro

Опять не успеваю писать в блог. Впрочем, особо и не о чем, если не считать «многозадачных настолок» в прошлую субботу, когда несколько человек показывали сеанс одновременной игры в «японский бэнг» и «Колонизаторов».
Впрочем, все же одна тема есть. На прошлой неделе рассказал Kitsune о своих идеях о том, чтобы сделать децентрализованную социальную сеть на базе IntB, но в голове никак не складывается целостная картина, как все должно быть. Она спросила, почему, но я тогда не смог ответить. И только вчера пришло осознание, в чем же сложность. Она в двух моментах. Первый заключается в том, что согласно моему замыслу, в инфохабе должна быть возможность подписаться как на пользователя, так и на раздел или тему, причем, желательно, через протокол ActivityPub, а не через RSS. Но я долго не мог понять, как ее сделать. Но в итоге решение нашлось: для каждой темы и форума создавать псевдопользователей (точнее, агентов в терминах ActivityPub) с именами вида intb-forum-номер и intb-topic-номер, запретив регистрацию пользователей с именами на intb-, чтобы не было неоднозначностей, и делать подписку на них.
Со вторым сложнее. В IntB никогда не планировалось такой вещи, как feed (новостная лента). Предполагалось, что когда появятся личные разделы, участники будут заходить в них через список друзей, либо общие «Обновившиеся», либо через раздел «Блоги/Фото», подразделами которого они будут являться. Но это плохо стыкуется с концепцией инфохаба как места сбора всей важной для данного человека информации в одном месте, а кроме того, непонятно, куда принимать и сохранять уведомления о новых событиях за пределами локального сервера. С другой стороны, feed технически добавить можно, но возникает вопрос, как избежать дублирования локальной информации, когда одно и то же сообщение идет и на форум обычным порядком, и в feed, и в то же время не забивать feed хламом во время активных дискуссий.
Еще прихожу к выводу, что надо бы разрисовать на бумаге страницы интерфейса децентрализованной сети, чтобы понять, чего я вообще хочу видеть и где. Может быть, это прояснит и то, как это надо реализовывать.
Также хотел было вернуться к идее моделирования моего алгоритма социального доверия, но мотивация почти на нуле. Еще раз убеждаюсь, что делать все нужно сразу, пока горишь идеей, а потом вернуться к ней оказывается очень сложно, по крайней мере, без ограничения Интернета.

Возвращаюсь к децентрализованным сетям

4X_Pro

Опять получается «как всегда»: стоило допустить в жизни два вычеркнутых дня (среду и четверг, когда я большую часть дня провел вне дома), и теперь снова сложно настроиться на основную задачу — децентрализованные соцсети. Впрочем, по-прежнему не могу определиться, куда двигаться. С подачи одного анонима из комментариев поставил было Hubzilla на локаль, но впечатления остались прежними. Вроде возможностей много, но по кривизне интерфейса не намного лучше friendica, только цветовая гамма другая и значки/кнопки поаккуратнее выглядят. Но с другой стороны, можно попробовать полностью заменить интерфейс на нормальный.
С другой стороны, решимости на fork Mastodon пока тоже не хватает по причинам, которые уже описывал. А также возникли мысли, что разбиение инфопотока outbox на несколько блоков приведет к необходимости делать кучу AJAX-запросов, что явно не будет способствовать скорости работы.
Еще есть мысль вообще взять и встроить поддержку ActivityPub прямо в IntB, сделав каждую тему или раздел actorом, чтобы можно было экспортировать темы в децентрализованные сети, да и все. А уже потом развивать его до полноценной социальной сети. Сейчас основное, чего там не хватает — это ленты (feeds), уведомления и возможности выполнять асинхронные задачи. Но с другой стороны, тогда не будет возможности использовать существующие мобильные клиенты.
Впрочем, постепенно ищу вспомогательную информацию, которая может оказаться полезной. В частности, вчера нашел и в общих чертах разобрался в трех microframeworks: Slim (а началось все с того, что заинтересовался одноименным шаблонизатором для Ruby), Fat-free и Silex. По benchmarkам уверенно лидирует первый, но с другой стороны, у него возможности минимальные: роутинг запросов и вставка middleware, и все. В IntB и то больше есть…
А сегодня разобрался наконец-то с работой протокола OAuth. Правда, одного не понял: зачем нужен лишний шаг с обменом access code на access token? Почему бы сразу его не давать в URL. Еще искал готовые решения для авторизации (все же от uLogin, да и вообще от любых сторонних сервисов надо уходить) и нашел сайт с забавным названием The League of Extraordinary Packages, где есть подходящее решение.

Размышления о Mastodon

4X_Pro

Продолжаю изучать децентрализованные соцсети. Попробовал было еще раз Friendica (впервые сталкивался с ней в 2017 году, когда искал движок для соционической сети). Ставил и локально, и смотрел на одном из общедоступных серверов. Привлекло, в основном, то, что она умеет взаимодействовать с сайтами на ActivePub (fediverse), так и с Disapora и сайтами на OStatus (так называемой the federation). И даже для gate в Facebook нашлось дополнение. Но увы, результат тот же самый: не нравится категорически интерфейс, просто какой-то дискомфорт от нахождения на сайте с ней чувствую. Да и в плане оптимизации времени загрузки все просто ужасно. А вот Mastodon вызывает противоположное чувство: как же классно сделано! Хотя на самом деле потом мелкие недоработки (или просто неудачные решения) в интерфейсе нашлись.
В общем, сейчас размышляю, то ли делать fork Mastodon и добавлять в него возможности, необходимые для мультиблога примерно такого же формата, как этот мой сайт + профилей контактов, то ли взять от Mastodon только frontend, а backend написать на PHP. С forkом смущает то, что Mastodon работает на связке RoR + Postgres + Redis, что, фактически, означает, что без VDS не обойдешься. А это уже не каждому по силам и плохо стыкуется с моей концепцией «каждый участник сети — полный хозяин своего сайта» (а не «один сервер для целого сообщества», из которой исходил автор Mastodon), так как для этого желательно, чтобы такой сайт можно было без особых усилий поставить на любой бомжехостинг.
С другой стороны, возникает проблема масштабируемости. ActivityPub работает по принципу push, то есть сайт автора комментария сам рассылает уведомления подписчикам (да еще стандарт требует отслеживания ошибок и попыток повтора отправки, если сервер получателя упал). И если их будет 400—500 (в том же ВК легко находятся люди с таким количеством друзей/подписчиков), то выполнить все push из обработчика POST-запроса нереально. В Mastodon это решается через то, что в RoR есть Active Jobs, а в PHP готового решения, которое было бы на любом хостинге, вроде нет, поэтому придется извращаться либо через cron, либо через AJAX-запросы, либо использовать промежуточные сервера (и сразу же возникают вопросы безопасности).
В общем, пока еще очень и очень многое непонятно. Впрочем, пока займусь тем, что поставлю свою копию Mastodon на VDS с соцсетью: все равно там сейчас нагрузка никакая, а оперативной памяти относительно много.


Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.