Давненько я искал нормальную альтернативу проприетарным системам комментирования в духе Disqus или Cackle и наконец-то нашел!
Remark42! Всем советую, выглядит вот так: https://krasovs.ky/2021/04/07/hello.html
Официальный сайт с описанием всех плюшек: https://remark42.com
@skobkin @drq @rf это будет другой по сложности проект с другим названием, ИМХО.
А вообще я может чего не понял. Вы хотите чтобы он просто участвовал в федерализации, но не имел своих аккаунтов?
Иначе по факту вы предлагаете тоже самое: нужно будет сначала зарегаться на инстансе AP, а потом уже комментить.
@savely @drq @rf
Если я правильно понял Дока, суть идеи такова, что можно было бы посты представлять в виде AP-объектов (именно тут должна быть сложность с Ремарком), а комментирование через AP просто было бы ещё одним способом оставить комментарий. Сейчас там есть аутентификация через соцсети и гитхабы, а добавился бы к этому AP.
Но если я правильно помню суть Remark42, то здесь сложность именно архитектурная. Ведь он встраивается как побочная сущность на страницу с постом и сам ни на какие запросы кроме рендеринга ленты комментов не отвечает.
А значит поддержка AP должна быть со стороны того, куда встраивается ремарк.
Буду рад ошибаться.
@skobkin @drq @rf ну да, я так понимаю пост должен создаваться помимо непосредственно блога, ещё и в AP.
Сейчас Remark42 смотрит ссылку на которую его вытащили и создает в boltdb запись мол вот пост, вот его комментари.
По идее можно сделать так, чтобы он создавать пост в своей базе, а потом в AP. Дальше просто получать на него AP-ответы.
Можно даже в AP завести отдельный блог-бот-аккаунт, который будет от анинимов кидать реплаи.
AP - это протокол, а не какая-то база данных или что-то ещё. Там ничего создавать не надо. Ты можешь в виде AP-объектов представлять то, что у тебя уже есть в базе данных. В данном случае - в boltdb (неважно где).
Сущности вроде ботов-анонимов тут излишни.
Проблема в другом.
РЕСУРСОМ, который запрашивается является страница, которая отдаётся тем, куда Remark42 встроен. А это может быть в том числе статический HTML (для такого в основном и сделан Remark42).
То есть, если смотреть в тот же стандарт, то:
> Servers MAY use HTTP content negotiation as defined in [RFC7231] to select the type of data to return in response to a request, but MUST present the ActivityStreams object representation in response to application/ld+json; profile="https://www.w3.org/ns/activitystreams", and SHOULD also present the ActivityStreams representation in response to application/activity+json as well.
https://www.w3.org/TR/activitypub/#retrieving-objects
Это разве что какой-то дополнительной миддлварью можно решить.
Это проблема номер раз.
Проблема номер два - если делать подписки - ремарк должен уметь рассылать активити в инбоксы.
https://www.w3.org/TR/activitypub/#delivery
Короче с точки зрения архитектуры ремарка это сомнительное предприятие.
Возможно имеет смысл сделать отдельный проект, возможно в виде миддлвари, который будет решать подобную задачу чуть по-другому и с учётом федерации.
Да не в страничке проблема, а в том, что в идеале у тебя ресурс http://domain.tld/somepost должен в зависимости от заголовков возвращаться либо в HTML (браузеру) либо в виде AP-объекта. Remark на это никак не может повлиять вообще. Он (точнее, его фронтенд) загружается уже внутри того самого HTML в том или ином виде.
@skobkin @drq @rf ааа, понял. Ну тут да, нужна будет модификация ресурса. А почему нельзя использовать URL Remark42?
У меня вот он висит на субдомене: remark42.krasovs.ky. В другом вариант его можно повесить на путь а-ля krasovs.ky/remark42/
Если посещение из браузера пусть перекидывает редиректом на ссылку из базы. Если нет, то пусть отвечает AP-объектом.
Извиняюсь, если я опять чего-то не понял.
> А почему нельзя использовать URL Remark42?
Я не помню в деталях как работает Remark42.
В теории ты, конечно, можешь запилить такой конфиг Nginx, который в зависимости от заголовка будет отдавать либо твою статику, либо то, что сгенерит Remark42.
Но ЕМНИП, Remark не хранит само содержимое поста. То есть, если я не ошибаюсь, в лучшем случае даже с костылями в Nginx у тебя будет в лучшем случае заголовок поста в виде контента (и то не уверен, что Ремарк его хранит).
> Если нет, то пусть отвечает AP-объектом.
Я выше написал, что В ТЕОРИИ это можно сделать, НО.
В случае тех же динамических сайтов кроме Ремарка генерировать AP-объекты некому. А в ремарке, скорее всего, нет нужного набора данных о постах.
То есть, скорее всего (если я не ошибаюсь), без сильного перепиливания Ремарка это не реализуемо в юзабельном виде.
Повторюсь: я предлагал не рассылать в виде AP-объектов содержимое поста. ТОЛЬКО ССЫЛКА. Она в полном распоряжении Remark42.
У нас для того чтобы сделать превью давно есть OpenGraph, который Mastodon и другие AP-сети поддерживают.
Remark42 без всяких конфигураций Nginx может полностью взять эту роль на себя, потому что он Go-апп у котого полностью свои хендлеры и он там сам может управлять HTTP-заголовками как хочет. Вплоть до того, что может сам выступать реверс-прокси.
> я предлагал не рассылать в виде AP-объектов содержимое поста. ТОЛЬКО ССЫЛКА. Она в полном распоряжении Remark42.
Если ты имеешь в виду одну ссылку вместо текста - тогда это очень всрато и стоит вопрос: стоит ли вообще такое делать.
Если ты имел в виду как ссылку на объект, то когда по этой ссылке запросят объект, его никто не отдаст...
> чтобы сделать превью давно есть OpenGraph
Проблема не в превью, а именно в самой федерации.
На том же сайте на Github Pages ты не можешь сказать гитхабу роутить запросы к inbox/outbox на свой Remark.
И всё. Это уже всё ломает.
Нет смысла делать в движке встраиваемых комментариев поддержку AP, которая будет работать только в очень специфичном подмножестве кейсов применения этого движка.
Красочный, но странный пример: "Давайте встроим в автомобиль удочку, ведь иногда мы ездим на нём на рыбалку".
> если у вас на сайте текст помечен классом или айди X, то Remark42 его подберет
Это очень плохо. Во-первых, нужно учить Remark это делать. Во-вторых любой современнный разработчик SPA такое говно никогда не будет к сайту подключать, если оно вопреки его тулкита будет пытаться в DOM лезть.
Можно при инициализации Remark передавать ему с параметрами нужные данные. Но это не решает фундаментальной проблемы, которую я описал выше: ты не можешь контролировать роутинг запросов в основных кейсах применения Remark, что делает такую интеграцию невозможной или как минимум односторонней (ты сможешь рассылать объекты, но не сможешь получать).
> Что в этом сложного?
Технически сложного ничего.
Беда в том, что это уже не поддержка федерации, а двусторонний репостинг в Mastodon.
И чтобы работать через мастодон, ремарку нужно будет слушать или регулярно читать его ленту. Что мягко говоря уже немного не вписывается в минималистичность этого движка.
Ну и реализация в целом будет состоять из костылей.
@skobkin @drq @rf мой ответ на эту проблему:
GET /blogpost1.html HTTP/1.0
Host: remark42.krasovs.ky
HTTP/1.1 301 Moved Permanently
Location: https://krasovs.ky/blogpost1.html
Во-первых, это костыли. Во-вторых, это должно работать наоборот. Ты должен иметь возможность пойти, скопировать адрес странички из браузера, вставить в поиск в Mastodon и он должен отобразиться как пост в Mastodon.
Вот зайди ко мне на сайт в пост типа этого:
https://skobk.in/2020/06/asus-rog-g15-review/
Скопируй из адресной строки ссылку и вставь в поиск в Mastodon.
@skobkin @drq @rf мы до сих пор не знаем о чем точно говорил Док.
Мне кажется блог на то и блог, что статьи на нём должны читаться. Я там вертку для кого делаю? :) В ActivityPub достаточно линк и возможность обсудить.
Поэтому я вообще изначально сказал, что меня и так Remark42 устраивает без всяких федерализаций, но раз уже предложили, решил развить идею, которая в итоге оказалась двухсторонним репостингом.
@skobkin @drq @rf нашёл, я имел в виду Plume (https://github.com/Plume-org/Plume)
@savely @drq @rf
А. Я про эту штуку и забыл уже. Из подобного есть ещё Write Freely, ЕМНИП.
Но говоря о "Mastodon всё-таки микроблогинговая платформа" стоит помнить, что это федеративная сеть. Читать твои большие посты будут всё равно будут в основном из ленты того же Mastodon. Если ты, конечно, искусственно не будешь отдавать юзерам только "excerpt" (чем снизишь себе конверсию).
Тут вон есть @cats-shadow@hub.cats-home.net, у которого Hubzilla и мне, если честно, в 99% случаев западло открывать внешнюю ссылку и идти к нему в Hubzilla.
Это ровно то, к чему стремятся все соцсети (особенно хорошо это поняли вконтактики-фейсбуки): пользователю должно быть удобно в их интерфейсе и у него не должно быть особо поводов уйти наружу.
@skobkin @drq @rf @cats-shadow не, я с основным поинтом согласен и ничего против людей, которые пользуются другим ПО не имею.
Просто я блог не для того делал, чтобы в его в федиверсе читали :) Надо будет, закину линк.
@skobkin @drq @rf @cats-shadow
На самом деле после того как ты мне показал как это работает, ты меня заинтригиговал! Я изучу на досуге.
Я так понимаю по сути нужно чтобы мой сервер просто отдавал ActivityPub-объект при особом запросе. При этом вроде как больше ничего и не нужно (могу ошибаться).
@savely А ты не знал про эту штуку?
@drq @skobkin @rf @cats-shadow нет, я вообще новенький в федиверс движухе.
Раньше сидел в RO-режиме с другого аккаунта :)
Но федиверс завлекает всё больше на фоне общемировой печальной движухи в непонятном направлении.
@savely Не-не, ты что? Федиверс это такая наколеночная фигня, которая ещё месяцок-другой да и вымрет ;)
@drq @skobkin @rf @cats-shadow
@Revertron Люди явно недооценивают всю мощь наколеночной фигни.
@drq @Revertron @savely @rf @cats-shadow@hub.cats-home.net
"Нет ничего более постоянного, чем временное"
@drq Да, когда-то вон и Git был наколеночной фигнёй, написанной в очередном двухнедельном отпуске :)
@drq @Revertron @skobkin @rf @cats-shadow на мой скромный взгляд, наколеночной фигни в энтерпрайзе чуть ли не больше.
@skobkin @drq @rf @cats-shadow я могу твои блог посты комментить, кстати? Если я правильно понимаю, для этого нужен уже свой инбокс на блоге, который будет это как-то принимать и раскидывать подписчикам.
@savely @drq @rf @cats-shadow@hub.cats-home.net
Если под "тут" ты имеешь в виду у меня на сайте - теоретически можешь. Кто-то даже комментил. Но плагин ActivityPub для вордпресса работает нестабильно и я не ручаюсь, что именно твой коммент отобразится. То ли он там с антиспамом конфликтует, то ли ещё что - я не разбирался.
Можешь попробовать. И дай мне знать по результатам - я смогу ещё посмотреть не упал ли он на премодерацию, например.
@skobkin Антиспам. Кстати, а можно, интересно, исключение ввести, чтобы антиспам его не грыз?
@drq @savely @rf @cats-shadow@hub.cats-home.net
Технически-то всё можно.
Я подозреваю, что этот плагин может рассчитывать на нативный (херовый) антиспам вордпресса, но у меня стоит несколько более продвинутый антиспам. И вот возможно с ним и есть конфликт.
Но я не уверен - всё же чей-то коммент из федивёрса у меня на пост прилетал и отображался.
@skobkin @drq @rf @cats-shadow у меня в этом плане руки развязаны.
Во первых у меня Hugo, во вторых у меня есть Nginx перед ним, в третьем я если что не по брезгую поставить за реверсом какую-нибудь самописную гошную приблуду.
@savely @drq @rf @cats-shadow@hub.cats-home.net
Ну, скорее всего, тебе надо будет писать какой-нибудь плагин к Hugo, который вместе со статикой HTML будет генерить статику AP, которую ты уже в зависимости от заголовков будешь отдавать Nginx.
А вот комменты учитывая стоящий у тебя Remark - это другое дело. Можно придумать миддлварный AP-сервер, который будет юзать Remark в качестве бэкенда, но это адовые костыли. Я бы в эту сторону не пошёл.
@skobkin @drq @rf @cats-shadow с комментами чёрт с ними да, там адок намечается.
А вот по Hugo да, я таким путём и планировал пойти.
@skobkin @drq @rf да хоспади. Ничего уже не понимаю. Я же тебе сказал Remark42 это САМОСТОЯТЕЛЬНЫЙ HTTP-демон, который может делать вообще ЧТО УГОДНО. Он даже в документации разработчиков по умолчанию на субдомене висит.
Я предлагаю чтобы содержимым AP-объекта была просто чистая ссылка в вакууме, которая является в случае с Remark42 ключом в базе.