Меня попросили сделать небольшое введение в Мойру для новых пользователей. Я давно собирался написать такое объяснение базовых вещей — что это вообще за сеть, почему она устроена именно так, а не иначе. Воспользуюсь случаем и соберу мысли в одном месте.
* * *
Когда говорят, что появилась новая социальная сеть, обычно представляют себе большой сайт, где люди регистрируются, у каждого есть аккаунт, есть лента постов, другие подписываются, читают, комментируют, ставят лайки — и всё это происходит внутри одного сайта.
Но интернет вообще-то не задумывался таким.
Если вспомнить ранние времена, веб виделся как большая паутина маленьких сайтов, связанных ссылками. Будущее представляли так: у каждого человека, компании, проекта — своя «домашняя страница», то есть отдельный сайт, где лежит всё, что связано именно с этим человеком или темой. А дальше всё связывается ссылками.
Но веб отлично работает для выдачи информации: ты запрашиваешь адрес и получаешь публичную страницу. А вот для получения информации от пользователя (комментарий, лайк, приватный доступ) нужна авторизация: кто-то должен представитьcя, идентифицироваться, и другая сторона должна наделить его правами. Эту проблему проще всего решать внутри одного большого сайта: он регистрирует пользователей, задаёт правила, хранит данные на одном сервере, раздаёт их из централизованной базы. Поэтому история ушла от «паутины личных страниц» к форумам, а затем к соцсетям, где всё в одном месте — и так, увы, продолжается до сих пор.
* * *
Централизация создаёт вполне конкретные проблемы.
1. Зависимость от владельца сервиса
Если бизнес не пошёл — сервис закрывается, и вместе с ним пропадает ваш контент и ваши социальные связи, существовавшие только внутри этого сайта.
2. Зависимость от правил и вкусов хозяина площадки
Владелец может решить, что ему не нравится ваш контент, или вы ему не подходите по любому признаку — и просто закрыть вам доступ.
3. Рекламная модель искажает стимулы
По-хорошему, если вы пользуетесь услугой — вы за неё платите. Но поначалу платежи в интернете были затруднены, особенно микроплатежи. Поэтому сервисы выбрали рекламную модель монетизации — как газеты, телевидение и радио — и приучили пользователей к халяве.
А реклама означает: задача соцсети — показать вам как можно больше рекламы. Значит, вы должны сидеть дольше и потреблять нескончаемый поток контента, который не даёт оторваться. В результате вы получаете меньше того, на что подписались, и больше того, что приносит площадке доход: продвижение, рекомендации, спонсируемый контент.
4. Площадке выгодно вас запереть
Если вы вложили годы в свой блог и социальные связи, вам психологически тяжело уйти. Поэтому соцсети намеренно усложняют экспорт, миграцию, автоматизацию, сторонние клиенты и инструменты — всё, что даёт пользователю контроль (и одновременно мешает рекламной модели).
Это картина, которую мы наблюдаем сегодня.
* * *
В Мойре я изначально ставил себе задачу продумать строение соцсети заново, исходя из идеи: веб — это сеть личных сайтов.
Мойра — это не один большой сайт, где хранится весь контент. С самого начала она строится так, что у вас есть ваше место в облаке — ваш домашний узел, ваша домашняя страница (по сути, ваш собственный сайт), где хранится ваш контент: посты, комментарии к ним, реакции и всё, что вокруг этого. (Этот «домашний узел» может хранить не только социальное. В принципе, любую информацию от любых приложений, которые вы захотите использовать.)
* * *
Чтобы другие могли комментировать и ставить лайки, нужно их авторизовать. И здесь ключевой момент: система регистрации/авторизации не должна зависеть от конкретного сервера, иначе вы снова окажетесь привязаны к площадке. Нужна общая интернетовская система — по смыслу чем-то похожая на DNS, только с авторизацией. В DNS есть имена и концепция владения именем, но нет встроенной криптографической авторизации (и регистрация имён — не автоматический процесс).
Пример базы пользователей с автоматической регистрацией и криптографическим подтверждением владения аккаунтом — блокчейн: в нём можно хранить имя и открытый ключ, а владение подтверждать закрытым ключом. Тогда любой сервер может просто проверять электронную подпись и решать, какие права давать данному пользователю.
Таким образом, узлы Мойры независимы, но благодаря общей системе имён и электронным подписям вам не нужно заводить аккаунт на каждом узле по отдельности. Сегодня имена хранятся в базе данных сервера имён, а в дальнейшем он будет заменен или дополнен блокчейном или любым другим механизмом. Важно, что концепция отделения имени от хостинга сохраняется.
В Мойре используется два ключа: один — для управления именем через сервер имён, второй — для подписей и авторизации. В идеале первый ключ передаётся сервером имён напрямую пользователю, и он хранит его у себя на компьютере или на бумаге в виде набора из 24 слов. В этом случае провайдер никаким образом не сможет получить к нему доступ. Но, к сожалению, для большинства пользователей такая процедура слишком сложна, и мне пришлось реализовать хранение обоих ключей на сервере.
* * *
Итак, аккаунт в Мойре состоит из двух частей:
- Имя в системе имён (оно не привязано к конкретному серверу).
- Домашний сервер (узел), на котором установлен софт Мойры и где физически хранится ваш контент.
Вы можете поставить софт Мойры на свой сервер или арендовать хостинг у провайдера (на большом сервере, где хостится много пользователей). Но в любой момент вы можете забрать весь свой контент, переехать к другому провайдеру или на свой сервер — и сохранить социальные связи, потому что имя не связано с сервером: вы просто перенаправляете его на новый узел.
Провайдер, разумеется, не обязан предоставлять услуги бесплатно. Самая здоровая модель — брать плату за хранение и/или за нагрузку, чтобы уйти от рекламной модели и выстроить правильные стимулы. Но это уже личное дело каждого провайдера как владельца бизнеса.
* * *
Серверный софт Мойры предоставляет API, и через него любой клиент или любая программа, которую вы захотите использовать, может работать с вашим контентом.
Я сделал веб-клиент, который выглядит привычно (в духе Facebook / Minds / Instagram), и постарался, чтобы для неподготовленного пользователя регистрация имени и выбор провайдера были максимально простыми и по возможности спрятанными за интерфейсом.
Но принципиально: открытые протоколы и открытый исходный код не ограничивают вас вообще. Это ваш сайт и ваш контент — хотите, используйте мой клиент, хотите — сторонний, хотите — пишите свой.
* * *
Даже если вы сидите у провайдера, ваш аккаунт там — это отдельный сайт. Поэтому френдлента устроена не как выборка из одной базы данных.
Мойра взаимодействует с теми, на кого вы подписаны, как с независимыми сайтами: получает уведомления о новых постах, копирует их в вашу ленту новостей на вашем узле. Взаимодействие с пользователем на том же сервере и с пользователем на любом другом сервере не отличаются. И, разумеется, другой участник сети не обязан пользоваться именно моим софтом — он может использовать любой другой, который реализует тот же протокол.
* * *
Софт в Мойре не устанавливает правила общения и не решает, что должно быть открыто или закрыто — это настраиваете вы. Настроек много: Мойра позволяет делать больше, чем любая другая соцсеть. (Чтобы интерфейс не выглядел как кабина самолёта, кое-что пришлось спрятать, но через API доступно всё.)
По форматам тоже нет искусственных ограничений: есть Markdown, есть визуальный редактор. При этом клиент на стороне читателя может фильтровать оформление (например, если кто-то решит писать всё огромными буквами или на ярко-красном фоне, чтобы выделиться во френдленте).
* * *
Поиск устроен так же, как поиск в вебе: есть отдельный поисковый сервер, который собирает публичные посты, имена, публичные связи и индексирует это. Естественно, вы можете поднять свой поисковик или пользоваться любым поисковиком, которому доверяете. Тот же поисковик выдаёт рекомендации, чтобы помочь новому пользователю сформировать свою ленту (их можно отключить).
* * *
Для тех, кто видел децентрализованные соцсети, многое из описанного выше будет звучать знакомо. Но у Мойры есть важные отличия.
1. Имя отделено от серверов
В отличие от федеративных сетей, где вы прикреплены к серверу/инстансу как к колхозу, в Мойре провайдер — это просто хостинг. Он не определяет правила, нет «конституции вашего пода», и вы можете уйти, не теряя контент и подписчиков.
2. Мойра не ограничивается моделью Твиттера
Цель — реализовать возможности уровня Facebook: разные уровни доступа, управление комментариями, группы, рекомендации и прочее. И сделать это всё максимально удобным для пользователя.
* * *
В Мойре нет и не может быть единой системы модерации. Есть контроль на вашей стороне: вы можете заблокировать пользователя, чтобы он не мог писать комментарии вам; можете настроить клиент так, чтобы не видеть этого пользователя в других обсуждениях. Но при этом он всё равно остаётся участником сети: может вести свой блог, читать ваш публичный контент (если он не требует авторизации), строить свой круг общения отдельно от вашего.
Пользователи могут добровольно формировать общие списки (например, антиспам) — и каждый сам решает, сверяться с ними или наплевать. С помощью того же механизма можно создавать сообщества внутри сети и наделять их правами.
Но есть одно исключение: мобильное приложение в магазинах приложений.
По правилам Google Play, любое приложение, показывающее пользовательский контент, должно иметь контактное лицо для жалоб на контент, нарушающий правила Google Play — и такой контент должен скрываться внутри приложения. В Мойре этот человек называется шерифом: он может помечать определённые блоги или посты так, чтобы мобильный клиент их не показывал.
Важно: это не «удаление контента из сети». Через браузер и на других платформах контент всё равно будет виден — в Мойре физически нет возможности удалить контент из чужого блога.
Кроме того, провайдеры будут вынуждены соблюдать законы стран, где они находятся — иногда это касается и модерации. Единственное, что вам остаётся в таком случае — хранить контент на своём сервере или выбирать провайдеров в юрисдикциях без драконовской цензуры.
* * *
Вот, вкратце, что такое Мойра и почему она устроена именно так. Приглашаю всех присоединяться — как пользователей, так и тех, кто хочет участвовать в разработке: есть GitHub и группа разработчиков в Telegram. Идей ещё море — я уже реализовал много всякого такого, чего вы никогда не дождётесь от Facebook. Очень удобно владеть кодом своей собственной соцсети 😉
Comments (72)
У вас, в целом, хорошо продуманный интерфейс, нет сомнений, что вы найдёте как не отпугнуть.
В окне редактирования комента не нашел выделения цитаты.
Ссылки с превью открываются в текущем табе, хотя нужно, чтобы в новом.
Под полем коммента есть кнопка "tT" - это меню редактора. Там есть пункт "Quote". Или нажать
Ctrl-'. Ещё можно выделить текст в каком-нибудь комменте и нажать "Reply" - тогда этот текст будет вставлен в редактор как цитата.Для этого есть настройка Settings > My Client > Other > Open external links in a new tab.
Как раз этой кнопки и не хватает в ОКНЕ редактирования (Меню Edit)
Это хорошо, но эта настройка должна быть включена по умолчанию.
Когда я вижу список пользователей, в каждой строке есть кнопка Subscribe. Но у тех, кто на меня подписан эта кнопка отсутствует (её место занято Subscribed to me). Чтобы было консистентно, Subscribed to me можно заменить иконкой рядом с аватаром или чем-нибудь подобным, а кнопку Subscribe можно сделать переключателем Subscribe/Unsubscribe.
по умолчанию во всех браузерах чтобы открыть в другом табе можно нажать средней кнопкой мыши или ctrl+click. это фейсбук научил людей плохому 😁
Возможно. Надо подумать.
У меня такой кнопки почему-то нет.
Реакции (лайки) не всегда аккумулируются.
Так есть же панель вверху 😉
Так и должно быть. Реакция автора поста показывается отдельно.
Так в этой панеле нет работы с текстом как с HTML (нет тегов)
OK
Вы спрашивали не о работе с HTML, а о выделении цитаты https://moera.page/@lamed/lamed.moera.blog/post/b45d5771-76d8-4113-89a3-b3aa911c3eb2?comment=10887a2c-a7a8-4f00-ab60-65d93ec56c55
Ах! Понятно! Кстати, было бы неплохо видеть дерево комментов.
Да, я планирую это сделать. Не полное, как в ЖЖ, потому что его сложно показывать на телефоне, но хотя бы 3-4 уровня.
Оффтопик(или нет): а Мойра чистит трекеры YouTube при встройке видео?
Если нет, то нужно ли это делать самому?
Периодически размещаю видео и чот пригнался на тему трекеров.
Предвижу ответ: выбери сам, в зависимости от того, чего ты хочешь. )
При встройке - нет. Я запускаю чистку только, когда вставляется ссылка. Чистить ссылки внутри HTML я не рискую, чтобы ничего не сломать.
А какие трекеры есть при встройке видео? Мне казалось, что когда ты получаешь код для вставки с YouTube, там нет ничего постороннего. Ну, YouTube тебя в любом случае посчитает 😉
Не сильно хорошо знаю предмет...
<iframe width="560" height="315" src="https://www.youtube.com/embed/0dafkqIZVbs?si=yZPPzCtIy-6CnoCP" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
Здесь "?si=yZPPzCtIy-6CnoCP" - не трекер?Похоже, что трекер.
Значит не жидко мыслю. Ну, можно и в руки удалить, как мне кажется. )
Можно. Но всё равно закину себе задачу это обрабатывать когда-нибудь в будущем 😉
Значит не зря побеспокоил. Спасибо. )
Резать чужие ссылки не лучшее решение. Это примерно то, что падчить чужой бинарный код. Теоретически, это si может быть не тем, чем вы предполагаете, например, это, скажем, некий load balancing параметр. Вы не можете изучать анатомию ссылок у всех платформ и поддерживать вашу хлеборезку в состоянии апдейта ко всем последующим изменениям, просто не стоит это того. С точки зрения юзера, здесь тоже "не всё так однозначно", трекинг, это не всегда что-то плохое.
Если на это замахиваться - нужно, чтоб было отключабельно.
Оно отключабельно.
А беспокоиться насчёт того, что я не то вырежу, не стоит. Я пользуюсь community-driven базой даных этих параметров, которая используется и расширением ClearURLs, например.
Меня действительно бесит, когда вставляют ссылку длиной в восемь строчек (я не преувеличиваю), из которых только первые полторы - сама ссылка, а остальное - рекламный мусор. Это то же самое, что и статья с баннерами через каждый абзац. Не говоря уже о том, что это нарушение стандарта HTTP, оно ломает кэширование, ломает сайты (я сталкивался с тем, что страница не открывается, потому что ФБ добавил свой параметр, и сайт тут абсолютно прав). Фтопку.
А меня бесит, когда недокументированная информация используется по принципу: "кто-то раскопал, что всё работает и без этого параметра" Работает у него. Не у всех. Не везде. Не всегда. Потом сами же пользователи будут жаловаться, что у них видео на *tube не открывается, когда они заходят с вашего сайта. Ну, и вишенка не торте: подписанные ссылки, идите, режте, наздоровье, ссылка всё равно будет отклонена. Это технический аспект. Но есть и моральный. Я дал вам ссылку для публикации, я просил её резать? Просил? Можно начать с авторезки сылок, а затем плавно двигаться в сторону авторезки слов, постов, юзеров, слава Б-гу, наработки в этом деле гигантские. Пользовательский контент - это святое и неприкосновенное. Вы сами приводите пример, как плохо, что ФБ добавил свой параметр. Добавлять свой параметр, не предусмотренный хостом ссылки, так же плохо, как и вырезать чужой.
Что именно является нарушением стандарта HTTP так и не понял.
Документация по параметрам встроенного плеера YouTube
Успокойтесь, никто не режет ссылки у вас в постах и комментах. Публикуйте, что хотите. Никто не трогает контент других пользователей. Чистка ссылок - это фича редактора. Чтобы облегчить работу тем, кто, как я, каждый раз вручную удаляет эти параметры перед публикацией. Не хотите - выключите, в настройках есть галочка.
По стандарту HTTP, две ссылки, отличающиеся параметрами, указывают на разные ресурсы. Поэтому Facebook, добавляя свой
fbclid, превращает её в другую ссылку. Поэтому, например, прокси, действующая по стандарту, уже не может взять контент для этой ссылки из кэша. (И да, есть руководства, как настроить свой прокси, чтобы он резал эти параметры.) Facebook, добавляя этот параметр к ссылкам, действует не по стандарту, а значит - на свой страх и риск. Если я этот параметр удаляю - это проблемы Facebook, а не мои.Ок, вы правы, хотя это не "по стандарту HTTP", а скорее по духу, идеологически. Прокси, совершенно правильно рассматривает эти URLы, как разные. Это модель разделения полномочий. То, что в прокси, есть настройки для модификации URL-ов, превращает прокси в непонятно что. Такие вещи - удел специализированных хэндлеров.
Что касается удаления вручную, то это хорошая практика, так как она не даёт расслабиться и потерять бдительность, как случилось с одним, очень секретным, но теперь всем хорошо известным, безопасником, не подчистившим ссылки перед публикацией.
Ещё хотел сказать, что чем меньше помогать "большим", адаптируя себя под них, тем лучше для децентрализации. Понимаю, что есть привычки пользователей, но есть ведь и идея!