Сказ о том, как я погряз в Матрице

в 17:16, , рубрики: Блог компании Фонд ReactOS

Сказ о том, как я погряз в Матрице - 1

Всем привет! С вами Станислав, и это моя вторая по счёту статья на Хабре. Как вы возможно помните из моей первой статьи, я увлекаюсь программированием, и операционной системой ReactOS.

Но мои увлечения вовсе не ограничиваются этим. Сегодня я расскажу вам, как я буквально погряз в Матрице… Нет, это не про фильм, как вы возможно подумали, а про федеративную чат-систему, которая появилась в уже далёком 2014 году :)

Перед тем, как начать, рекомендую ознакомиться, что вообще Matrix из себя представляет. В кратце — это децентрализованный, федеративный, и открытый протокол обмена сообщениями, и в принципе любыми данными, с возможностью end-to-end шифрования (в том числе в комнате с несколькими людьми), и работающий поверх REST API (HTTP с JSON).

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

Начало начал

Всё началось в сообществе ReactOS, на местном Discord сервере — именно там я впервые открыл для себя Matrix. Дело было летом 2020 года, шла очередная дискуссия на тему полноценной миграции сообщества в Матрицу. За свою многолетнюю историю, сообщество данного проекта раздробилось на несколько подсообществ, как крупных вроде Дискорда, так и поменьше, вроде групп в Telegram. Но на этот раз дискуссия была подогрета тем фактом, что Дискорд в очередной раз без объяснения причин заблокировал несколько пользователей сообщества, и это осталось бы незамеченным, если в число этих пользователей не входили двое особо активных.

Сказ о том, как я погряз в Матрице - 2

Было решено создать зеркала двух Дискорд-каналов в Матрице, которые будут объединены с ним мостом. В идеале конечно хотелось свой выделенный Матрикс-сервер, но мы начали с простого — используя matrix.org (официальный публичный сервер). Как только настройка комнат на стороне Матрицы была завершена, ранее заблокированные в Дискорде пользователи зашли в них, и стали первыми тестировщиками. Насколько я помню, в Дискорде меня назначили модератором в тот же самый день (совпадение?), и согласно моим новым правам и обязанностям, мне нужно было следить за порядком, и наказывать неверных нарушителей. Учитывая, что комнаты в Матрице были публичными, а их модерация со стороны Дискорда, мягко говоря, не была идеальной и удобной, я понял, что нормально смогу их модерировать лишь из Матрицы напрямую. Мне посоветовали создать аккаунт на matrix.org, и подключиться с помощью официального клиента Element, что я в результате сделал. После этого я сразу же заметил, что клиент Element очень сильно напоминает мне Дискорд, как по внешнему виду интерфейса, так и по его функциональности. Собственно, вот так я и втянулся. Но это только начало.

Сказ о том, как я погряз в Матрице - 3

Потом мне рассказали, что с помощью Матрицы можно подключаться к IRC каналам, на тех серверах, для которых есть мост — при этом для посетителей этих каналов я буду выглядеть, как обычный пользователь IRC, поскольку мосты работают в прозрачном режиме с серверами IRC сетей напрямую. Я сразу же взял это на вооружение, поскольку такой инструмент прекрасно заменяет IRC баунсер, при этом на нескольких серверах разом. Удалось успешно подключиться к интересующим меня каналам на IRC серверах Freenode и OFTC. Это был последний день, когда я пользовался обычным IRC клиентом :D

И вроде всё пошло даже очень хорошо, никаких серьёзных проблем не было. В последствии ещё несколько человек в Дискорде обмолвились, что сменят привычную платформу на Матрицу. И так было до поры до времени… где-то в середине января 2021 появилась первая проблема. Дело в том, что в качестве моста к Дискорду мы тогда использовали бесплатного публичного бота t2bot.io, и, вероятно из-за пика высокой нагрузки, он начал сильно тормозить — обмен сообщениями между двумя сторонами проходил с большими задержками. В принципе этого стоило ожидать, ведь этим ботом пользуется множество сообществ одновременно. Проблема была решена поднятием идентичного моста на выделенном сервере, благо исходники бота открыты под свободной лицензией.

FOSDEM как катализатор прогресса

Тем временем дело подходило к концу января, а на начало февраля 2021 у нас было запланировано участие в конференции FOSDEM'21. Обычно она проходит в Брюсселе, но учитывая последние события в мире, это мероприятие было переведено в онлайн формат. И вот тут очень кстати, организаторы мероприятия выбрали Matrix в качестве основного способа коммуникации. Как затем выяснилось, ответственные люди с нашей стороны за несколько дней до начала успели подготовить наш официальный Matrix-сервер на домене reactos.org — и даже подключили его к федерации. Конечно же первым тестировщиком сервера вызвался я!

Сказ о том, как я погряз в Матрице - 4

А план был примерно такой — все ведущие конференции от нашей стороны должны были зайти в отведённые нам комнаты на FOSDEM со своих аккаунтов на нашем подготовленном Матрикс-сервере, который в свою очередь уже был интегрирован с нашей общей системой входа RosLogin — через эту систему все пользователи заходят в наш чат, на форум, и в баг-трекер, без необходимости регистрации на каждом сервисе отдельно. Таким образом это позволит нам явно отличаться от простых посетителей комнаты, а также от людей из других сообществ… Но как именно отличаться? — Об этом я расскажу чуть ниже.

Помимо самого Матрикс-сервера, товарищи также подняли мосты с основными каналами (общий канал ReactOS, канал разработки, и канал RosBE — инструменты сборки). Они тогда ещё располагались в IRC сети Freenode, но при этом у нас там уже был мост с чатом Mattermost, на который мы перешли в 2019 году в качестве основной платформы для коммуникации. В ходе конференции мы могли приглашать посетителей комнат FOSDEM в комнаты на нашем собственном сервере. Благодаря тому, что наш Матрикс-сервер уже был подключён к федерации, посетителям не нужно было регистрировать аккаунты на нашем сервере, они просто заходили к нам, и могли общаться со своих существующих аккаунтов.

Конференция пролетела довольно быстро, за это время мы успели опробовать видеосвязь через Jitsi, а также некоторые другие фишки, доступные через систему виджетов в Element. В целом, мы получили довольно интересный багаж опыта, в котором были как положительные, так и отрицательные моменты. Одна из неприятных проблем, которая потрепала нервы многим: Шифрованные комнаты работали крайне нестабильно — то есть если кто-то создаёт такую комнату, начинает там общение, и после этого через какое-то время в комнату приглашают нового человека, у последнего с большой вероятностью не будет нормально отображаться история чата до его входа. Насколько я помню, с этой проблемой сталкивались те, кто использовал мобильный клиент Element. Как выяснилось, эта проблема уже известна разработчикам Element, отслеживается здесь, а также здесь. Были и другие мелкие проблемы, в основном различия в функционале между клиентом на ПК и мобильным клиентом. Лично мне такое приключение понравилось, и в результате я ещё больше втянулся во всё это :) По окончанию конференции, в блоге Матрицы был опубликован отчёт о том, как именно конференция была организована с технической стороны, и как в итоге всё прошло.

Но теперь вернёмся на несколько мгновений назад, к тому моменту, где я вызвался протестировать наш сервер. Первое что я попробовал — это войти в те комнаты, в которых я уже присутствовал со своего раннего аккаунта на matrix.org. К моему удивлению, это сработало! Правда не сразу, прошло некоторое время, пока история сообщений в комнате прогрузилась.

Сказ о том, как я погряз в Матрице - 5

Следующим шагом я решил проверить, работают ли IRC мосты, которые я также успел ранее опробовать с первого аккаунта. Они также работали без проблем, однако поскольку некоторые каналы требовали зарегистрированный ник в IRC, мне пришлось отвязать мои данные IRC авторизации в боте matrix-appservice-irc, а затем привязать их снова уже на новом аккаунте. Всё работало в соответствии с моими ожиданиями, так что с 1 февраля я уже использовал свой Матрикс-аккаунт на reactos.org как основной.

Через некоторое время уже после конференции, ближе к весне, у нас возникли очередные тормоза с мостом между Дискордом и Матрицей. На этот раз проблема была на стороне сервера matrix.org, в котором располагались наши первые комнаты, ранее созданные для тех, кого "выкинуло" из Дискорда. После очередного инцидента часть комнат переместили на наш собственный сервер reactos.org, а ещё часть комнат на другой новый сервер, поднятый одним из администраторов нашего Дискорд сообщества.

Мессенджеры, мессенджеры повсюду...

Сказ о том, как я погряз в Матрице - 6

Вообще, история использования разных протоколов обмена сообщениями в сообществе ReactOS допольно богатая. В самом начале был лишь официальный IRC чат на Freenode с несколькими каналами. Сам я присоединился к проекту в 2014 году, и сколько помню, у нас очень часто возникали дискуссии о переезде на современную чат-платформу, и это продолжается по сей день :) Участники сообщества многократно пытались решить этот вопрос собственной инициативой, создавая чаты на разных платформах. По поводу создания чата в Телеграме даже опубликовали статью на сайте. Но для того, чтобы чат мог стать официальным, необходимо чтобы он располагался полностью на нашей инфраструктуре, следовательно чаты с закрытыми протоколами никогда не будут официальными.

В августе 2018 прошёл очередной хакатон в Берлине, на котором уже этот вопрос поставили ребром. Было проведено оперативное заседание, в котором решали, какую платформу или несколько платформ нам стоит попробовать. Несколько вариантов, в том числе Матрицу, тогда опробовали сразу же, но на тот момент она не пришлась по вкусу. В результате, в конце 2018 года было принято решение опробовать Mattermost в качестве основной платформы. Чат стал доступен разработчикам уже в январе 2019 года, и началось масштабное внутреннее тестирование. После 3 месяцев тестирования платформа показала себя пригодной для использования, и в марте 2019 она стала официальной. В целях обратной совместимости, были организованы мосты с исходными IRC каналами.

Ну так получается, скажете вы, что современная чат-платформа у нас уже есть, зачем переезжать куда-то ещё? Лучшее — враг хорошего, и всё такое. Но на самом деле не всё так однозначно. Во-первых, лицензию Mattermost Enterprise необходимо периодически продлевать, и это не бесплатно. Учитывая то, каким образом платформа интегрирована в нашей инфраструктуре, без этой лицензии к сожалению не обойтись. Во-вторых, из-за тех же особенностей интеграции, в чате существенно ограничены возможности — например нельзя произвольно создавать группы пользователей, и задавать им различные права. Для этого приходится обращаться к администратору инфраструктуры. Чтобы хоть как-то улучшить ситуацию с модерацией чата, пришлось реализовать костыль в виде отдельной панели управления пользователями чата.

Админ-панель

Сказ о том, как я погряз в Матрице - 7

В конце 2021 года нарисовалась очередная проблема, на этот раз уже критическая. Компания-разработчик Mattermost установила истечение срока действия для некоторых Enterprise-тарифов, в частности Mattermost Enterprise Edition E20, который мы используем, так что миграция сообщества в Матрицу скорее всего неизбежна… Впрочем, фундамент для этого уже заложен :) Осталось придумать, как полностью импортировать историю сообщений из Mattermost в Matrix.

К миграции в Matrix многие участники сообщества, в том числе разработчики, всё ещё относятся скептически, в первую очередь из-за клиента Element. Учитывая, что он написан на React, а десктопное приложение реализовано на Electron, этот клиент справедливо называть тяжеловесным. Существует множество альтернативных клиентов Матрицы, есть даже клиенты с текстовым интерфейсом для консоли / терминала, но практически у каждого из них не хватает каких-либо функций. Foxlet, участник сообщества ReactOS, решил написать собственный клиент, под названием MatrixRetro, у которого будет своя отличительная особенность — он будет запускаться на старых версиях систем Windows (ожидается поддержка вплоть до Windows 98, если не ниже), а следовательно он будет отлично работать и в ReactOS:

Сказ о том, как я погряз в Матрице - 8

Клиент пока находится на ранней стадии разработки, и его автор пока не публиковал ни исходников, ни собранного приложения. Через какое-то время автор планирует открыть этот проект вместе с его исходным кодом под одной из свободных лицензий.

Идентификация в Matrix

Как вы вероятно заметили, клиент на скриншоте выше очень напоминает IRC клиент. Однако, имена пользователей в главном окне имеют непривычный формат — сначала идёт собачка "@", за ней следует имя пользователя, затем двоеточие, и всё заканчивается именем домена. Это называется MXID (Matrix ID) идентификатором, и он уникален во всей федерации, точно также, как уникален ваш адрес электронной почты в Интернете. Именно этим пользователи Матрикс-сервера ReactOS отличаются от пользователей других серверов.

Изначально MXID идентификаторы пользователей задумывались, как сугубо внутренние идентификаторы, которые простым пользователям в принципе видеть не нужно. Для публичной идентификации предлагается использовать идентификаторы третьего лица (3PID), которые могут представлять из себя например уникальный публичный псевдоним на стороннем сервисе (примеры: ICQ UIN / Jabber ID / имя пользователя в Skype / юзернейм Telegram), полный адрес электронной почты, или номер телефона в международном формате. Естественно, для привязки 3PID к вашему Матрикс-аккаунту, потребуется подтвердить владение этим сторонним идентификатором.

Но практика использования Matrix показывает, что в большинстве клиентов (в том числе в Element) идентификаторы MXID публично отображаются для пользователей, и их довольно удобно использовать. Например, чтобы оставить свой контактный адрес, достаточно написать @username:domain.com в сообщениях комнаты, в её теме / заголовке, или в каком-то другом месте. Чтобы делиться ссылками на комнаты или на пользователей в Матрице за её пределами, можно использовать сервис https://matrix.to/ — ссылка на пользователя будет выглядеть вот так: https://matrix.to/#/@username:domain.com, а ссылка на комнату вот так: https://matrix.to/#/#room:domain.com

Поскольку Матрица постоянно расширяется, появляются новые серверы и публичные комнаты, возникает естественная потребность в сборе и индексации этой информации. Подобно тому, как поисковые боты Google и других компаний сканируют и индексируют сайты в Интернете, в Матрице есть по крайней мере один известный бот — Matrix Traveler (Voyager). Он заходит в публичные комнаты и отлавливает сообщения с ссылками на другие публичные комнаты, в которые затем он также пытается войти, и процесс рекурсивно повторяется. Всю накопленную ботом информацию можно посмотреть здесь — https://voyager.t2bot.io/ (на момент написания статьи не работает), там же можно прочитать о самом боте в деталях. Пообщаться с разработчиками можно в комнате #voyager:t2bot.io.

Мосты — это хорошо

Наш сервер Matrix сейчас работает в тестовом режиме. В принципе, его можно смело назвать официальным, так как он соответствует всем критериям, но мы пока нигде не объявляли о переходе на эту платформу, и не приняли окончательного решения по этому поводу. Тестирование идёт полным ходом, и проводится в открытом виде — любой пользователь, зарегистрированный на любом Матрикс-сервере в федерации, может свободно зайти в наши чат-комнаты.

Но что насчёт обратной совместимости? — Правильный вопрос. Когда наши первые комнаты в Матрице были созданы перед участием в FOSDEM, в них были добавлены мосты к соответствующим IRC каналам с помощью matrix-appservice-irc. Поскольку мост между IRC и Mattermost уже был налажен задолго до этого, это сразу позволило обмениваться сообщениями между всеми сторонами:

Сказ о том, как я погряз в Матрице - 9

Выглядело это вот так (2 скриншота)

Mattermost

Сказ о том, как я погряз в Матрице - 10

Matrix/Element

Сказ о том, как я погряз в Матрице - 11

В подобной конфигурации были определённые проблемы, в частности нам пришлось снять запрет на подключение гостей к IRC каналам, поскольку в ином случае каждому пользователю Matrix было необходимо иметь зарегистрированный ник в IRC сети, и чтобы он был привязан к их аккаунту в Matrix. Когда пользователи Matrix заходили в наши комнаты, мост выкидывал их с причиной ERR_NEEDREGGEDNICK. Ранее такое ограничение было введено из-за спама в IRC. Потом через какое-то время открылась другая проблема, мост выкидывал пользователей из комнаты с причиной User has been idle for 30+ days. — зачем так делать, мне совершенно не понятно. На GitHub пишут, что это нормально, с чем я в корне не согласен, у этой проблемы должно быть другое решение.

Однако летом 2021 года с Freenode произошли известные события, в результате которых мы наконец решили полностью отказаться от IRC. И, вероятно, не только лишь мы:

Сказ о том, как я погряз в Матрице - 12

Отказ от IRC по сути развязал нам руки, открылось много возможностей, которые невозможно было бы реализовать со старым мостом. Благодаря этому, сейчас у нас есть 4-way мосты, разом объединяющие 4 платформы обмена сообщениями:

Сказ о том, как я погряз в Матрице - 13

А вот так это всё выглядит в мессенджерах:

4 скриншота из разных мессенджеров

Mattermost

Сказ о том, как я погряз в Матрице - 14

Telegram

Сказ о том, как я погряз в Матрице - 15

Discord

Сказ о том, как я погряз в Матрице - 16

Matrix/Element

Сказ о том, как я погряз в Матрице - 17

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

Раньше мы даже не могли мечтать о таком качественном объединении чатов сообщества. В Дискорде до этого у нас были очень простые мосты на базе Matterbridge, которые могли передавать только текст, и картинки только с одной стороны. Про аватарки пользователей вообще молчу :)

По состоянию на август 2021 большинство админов нашего Дискорда мигрировало в Матрицу, и теперь модерируют каналы оттуда — для этого потребовалось добавить несколько новых возможностей в мост.

Доработки моста matrix-appservice-discord от нашего сообщества (улучшенные возможности модерации, обработка inline-ответов в Discord, реакции на сообщения Discord → Matrix) можно взять в этой ветке.

Как видите, Matrix отлично решает проблемы с объединением каналов связи, и это значительно улучшило качество жизни сообщества ReactOS, но что насчёт других сообществ?

Типичный netsplit в сообществах

У очень многих сообществ, в которых я участвую, есть свои чаты в Telegram, у некоторых также есть Discord. Но при этом, у этих же сообществ есть свои сайты, расположенные на доменах первого уровня… так почему бы вместо использования чатов на закрытых технологиях не поднять свои собственные Матрикс-серверы? Нет, я не призываю удалять Telegram чат, или закрывать доступ к Discord. Просто в Матрице есть всё необходимое, чтобы объединить популярные платформы общения при помощи мостов, при этом максимально прозрачно для пользователей на всех его концах. Тем, кто уже привык к этим платформам, не обязательно переезжать в Матрицу.

Есть у меня ещё одно интересное сообщество, в котором сложилась довольно интересная ситуация взаимодействия между участниками. Это сообщество посвящено, как сейчас популярно говорить, одной инди-игре, которая называется Doom 2D Forever, в разработке которой я принимаю непосредственное участие. А проблема заключается в том, что у сообщества есть свой IRC канал (около 10 человек), есть чат в Telegram (73 человека), и есть Discord сервер (96 человек). Ирка появилась в самом начале, затем через сколько-то лет решили создать чат в Телеге. В последствии Телега и Ирка были объединены ботом-мостом, написанным на коленке другим участником сообщества. Дискорд был создан значительно позже остальных, и в нём сейчас больше всех пользователей. Но, как ни странно, там практически не происходит никакого общения — основной актив происходит в Телеге и Ирке. Периодически в Дискорд приходят люди и спрашивают… — Почему чат мёртв? На что через день-два получают ответ — приходите в телегу, у нас там бурлит жизнь. Не говоря о Дискорде, есть ещё одна маленькая проблема — когда в Телеге кто-то отвечает на сообщение другого человека, то на стороне Ирки видно лишь сообщение ответа, но нет цитаты сообщения, которому предназначался этот ответ.

Обе эти проблемы можно решить с помощью Матрицы. Как я уже выше говорил, в сообществе ReactOS мы держим 4-way мосты, и вполне успешно и с комфортом ими пользуемся. Такой вот примерно рецепт усреднённый — поднимаем сервер, подключаем к федерации, убираем мост-бота (написанного на коленке) из телеги/ирки, создаём нужные комнаты в матрице, объединяем их стабильными мостами с существующими чатами, и в конце подключаем интеграцию c аккаунтами форума на сайте, чтобы на сервер могли заходить те, кто уже зарегистрирован в сообществе — это довольно легко сделать с помощью вот этого подключаемого модуля.

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

Присоединяемся!

Учитывая, что у меня накопилось столько положительных впечатлений о Матрице, с недавних пор я начал многим советовать поднимать свои серверы, и подключать их к федерации :)

У таких крупных сообществ, как Хабр, есть большая пользовательская база, и конкретно меня порадовало бы, если этот ресурс проложил своим пользователям путь в федерацию Matrix. Если Хабр решится на такой шаг, и позволит своим зарегистрированным пользователям заходить на свой Матрикс-сервер, это может значительно повлиять на дальнейший ход событий, на развитие протокола и сообщества в целом. Помните, я говорил выше о публичных идентификаторах MXID? Доменное имя является частью идентификатора пользователя в системе (точно также, как в адресе электронной почты), а значит это может послужить продвижением для ресурса! Хотя, с другой стороны, это примерно сопоставимо с поднятием того же почтового сервера.

Для тех, кто всё-таки решится поднять крупный сервер, ориентированный на большую пользовательскую базу, будет очень полезно узнать, как модерировать в Матрице. Надеюсь, мой призыв будет услышан, и, через какое-то время после публикации этой статьи, в федерации появятся новые публичные серверы :)

Собственный сервер Matrix

Но чтобы не выглядеть одним из тех, кто всем указывает, что делать, а сам при этом ничего не делает… Пока я писал эту статью, я успел поднять и настроить собственный Матрикс-сервер Synapse. Стоит отметить, что процесс поднятия Матрикс-сервера, и его подключения к федерации, по моим ощущениям оказался проще поднятия почтового сервера.

Чтобы от моего сервера был какой-то толк, я решил интегрировать его со своим сайтом Stas'M Corp. Дело в том, что мой веб сайт существует уже очень давно, с 2009 года, располагается на бесплатном хостинге от uCoz, и имеет свою довольно богатую историю. С самого начала на сайте был мини-чат, в котором зарегистрированные пользователи могли оставлять сообщения, как в гостевой книге. У чата были ограничения — 500 символов на сообщение, и максимум 30 сообщений в ленте. То есть, если в чате уже было 30 сообщений, при отправке нового сообщения последнее старое сообщение безвозвратно пропадало.

Благодаря тому, что в Wayback Machine сохранились старые копии страниц мини-чата, удалось восстановить около половины всей истории сообщений — с 2013 года по сегодняшний день, но с потерями, особенно в тех временных окнах, когда в чате были активные дискуссии. Часть событий также удалось восстановить благодаря тому, что uCoz бережно хранит логи всех действий на сайте с момента его создания (но сообщения, отправляемые в мини-чат, почему-то не хранит). Полученную историю сообщений мини-чата из веб архива удалось успешно распарсить, и импортировать в публичную комнату на Матрикс-сервере. Чтобы временные отметки событий и сообщений в комнате соответствовали тем, какими они в реальности были, я слегка модифицировал исходный код сервера вот таким образом — в директории сервера помещается небольшой файл timeshift.json, в котором я задаю временное смещение в секундах для конкретной комнаты (либо для конкретного аккаунта, которым создаю комнату). Поскольку на этой же машине работает веб сервер Apache, модификацию этого файла было легко заскриптовать через PHP.

Написание всех скриптов (импорт сообщений, импорт пользователей чата с сайта с их именами и аватарками, отображение предварительного просмотра чата на сайте, а также возможность входа новых людей в чат с сайта) у меня заняло примерно 6 суток. Все скрипты написаны на PHP, но я пока не решился где-либо их публиковать.

Помимо сервера Synapse, я также поднял свой инстанс веб клиента Element, который я также слегка модифицировал, чтобы пользователи могли заходить в него не вводя пароль. Поскольку на моём сайте вход и регистрация пользователей работает через стороннюю систему uCoz UID, я не решился интегрировать вход в чат конкретно с ней, поскольку в таком случае я бы смог перехватывать пароли пользователей UID, что не очень легально. Вместо этого я реализовал вход по временным паролям, а также генерацию рандомного постоянного пароля при первом входе пользователя в чат. Проверка того, что пользователь реально залогинен на сайте, работает благодаря тому, что cookies основного домена также распространяются на все поддомены. Возможно, это не очень безопасно, но зато это открывает такие интересные возможности. Если вдруг эту фичу захотят закрыть, останется как минимум ещё два альтернативных пути проверки — отправлять cookies напрямую через HTTPS запрос (благо uCoz позволяет отключать привязку печенек к IP адресу), либо более сложным способом через модификацию профиля пользователя — но здесь уже от пользователя потребуется вводить капчу при каждом входе в чат (возможно, не очень удобно, как пользователю, так и горе-программисту, но зато безопасно).

Выглядит всё это вот так:

В мессенджере Element Превью на сайте
Сказ о том, как я погряз в Матрице - 18 Сказ о том, как я погряз в Матрице - 19

В общем, сейчас всё работает, как задумано. Сервер подключён к федерации, а значит на него можно зайти с других серверов, и также с него на другие. Новость о переезде мини-чата на технологию Matrix я опубликовал вот здесь. И да, вполне вероятно, что хабраэффект положит поднятый мной сервер… Остаётся лишь надеяться, что ненадолго :D

Прикольные фишки

В Матрице еженедельно выходит сводка новостей This Week in Matrix, отмечу некоторые фишки, которые лично мне понравились.

Вы где-нибудь видели, хоть в каком-нибудь мессенджере, чтобы на сообщения можно было реагировать произвольным текстом? :)

Реакции в Matrix (3 скриншота)

Сказ о том, как я погряз в Матрице - 20

Сказ о том, как я погряз в Матрице - 21

Сказ о том, как я погряз в Матрице - 22

Реагировать нестандартными смайликами тоже возможно, во всяком случае на уровне протокола, просто Element пока не умеет.

А с помощью вот этого виджета можно всей комнатой редактировать документ, практически как в Google Docs:

Сказ о том, как я погряз в Матрице - 23

Его можно добавить в комнату вот такой командой:

/addwidget https://compoventuals-tests.herokuapp.com/host.html?network=matrix&container=demos/rich-text/dist/rich_text.html

Имейте ввиду, что этот виджет на стадии разработки, поэтому не используйте его для чего-то серьёзного.

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

На видео правда другой Matrix-клиент — FluffyChat. Планирую попробовать его в скором будущем.

Задание на дом

Пока писал статью, вспомнил, что ещё у Jeditobe была статья про децентрализованный мессенджер, но работающий поверх электронной почты — Delta Chat.

Как думаете, существует ли мост, которым можно было бы объединить Delta Chat и Matrix? Объединение двух федеративных платформ — по-моему это звучит сильно. Оставлю это вам в качестве задания на дом :)

Заключение

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

Завершая рассказ, рекомендую к прочтению:

Автор: Stas'M

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js