? Editing: Post:21.body Save Delete Cancel
Initial sync in progress...

Newest topics

Follow in NewsfeedFollowing
+ Start new topic
Loading...
stickied

Title

Body
^1 ^2 added ━ started by user_name
More topics

 

Follow in NewsfeedFollowing

Flatnesy: распределённая соцсеть на плоских файлах + персональный человекочитаемый архив

Топик-резюме в продолжение темы Мысли о flatfile-форуме и блоге

На данный момент про[ж]ект одновременно решает задачи:

  • Бэкап личных записей в форумах и блогах. Информация сохраняется в человекочитаемом формате, так что архивы в будущем будут доступны для чтения даже при полном прекращении поддержки инфраструктуры.
  • Бэкенд и транспорт для социальной сети/форумов/блогов. Из любых форумов и блогов записи можно конвертировать и сохранить в наш формат и обратно.
  • Информационную изоляцию спамеров/троллей/флудеров/педофилов и т.п. без цезуры. Мы просто подписываемся исключительно на тех, кто нам интересен и не подписываемся на остальных. В идеальном случае генераторы «вредного» контента просто не получают поддержки в распространении. А если их контент кто-то распространяет — значит, это им нужно. Свобода слова и одновременно свобода не слушать и не распространять чужое слово.
  • Обмен контентом любым способом. Хоть флоппинетом. Каждый сам для себя решает как получить данные того, на кого подписан в зависимости от уровня доверия. Файловый синк (rslsync, syncthing, dropbox…), ZeroNet или просто винчестер с картинками и кино.

Технически это выглядит так:

  • Сообщения (посты, записи блогов) хранятся в формате Markdown + YAML-хедер, условно принятом в Infonesy.
  • Каждый юзер имеет свои репозитории (без ограничений) с разбивкой по темам/датам.
  • Каждый репозиторий включает в себя полный и автономный архив сообщений со всеми аттачами и метаданными.
  • Посты располагаются в произвольной иерархии каталогов, которые подразумевают форумы и подфорумы. Последний каталог — это контейнер сообщений, то есть или топик с последующими ответами юзера, или блок с первым постом + комментариями.
  • В перспективе подразумевается любой транспорт (хоть ZeroNet), но сейчас для простоты и единообразия используется rslsync с ключами r/o. То есть пользователь предоставляет другим участникам сети r/o-ключ с доступом к своему репозиторию.
  • Пользователь сети подписывается на других участников, вводя полученные от них ключи в свой rslsync и включая полученные каталоги в движок системы.
  • Будущий движок системы собирает из каталогов с сообщениями тех, на кого ты подписался, в единый поток блогов и топиков.

Ближайшие планы

  • ☐ Экспорт разных традиционных источников соответствующих данных (ZeroBlog, ZeroTalk, Twitter, разные форумы) в формат системы. Черновой тест: BPBISMAHDMR435FYIELW6UGFDUNOBBBJ6 (ключ rslsync на мой ZeroBlog).
  • [ ] Вьювер для просмотра каталогов в режиме форума и блога.
  • [ ] Вьювер для того же, но с объединением структуры каталогов разных юзеров.
  • [ ] Экспорт текущей инфо от пользователей моих форумов — Авиабаза и разные ZeroTalk.
  • [ ] Полноценные автономные форумы/блоги на этой системе.
  • [ ] Импорт из этой системы на традиционные движки с целью включения в многосторонний обмен контентом.
^4 ^5 balancer73 posted on May 14, 2018
Please sign innew comment
Sign in as...
Submit comment
You are running out of your allowed space, please contact the site's admin at unknown to raise your limit.
user_nameadded ^1 ^2
Reply
Body
balancer73on Oct 13, 2018 ^1 ^2
Reply

Сегодня, наконец, взялся немного покодировать сабж :) Сделал начерно экспорт своего твиттеровского фида в Infonesy-формат (который и будет в итоге вариантом хранения). Решил не связываться с rslsync, будущее которого из-за его закрытости неизвестно, а экспортировал всё в ZeroNet: http://127.0.0.1:43110/1baLtw4qsnRAYp3faqizVk3BcrwL5jNWv

Т.е. ZN тут (пока) используется только как простой транспорт. Кстати, дополнительный бонус перед rslsync — оно не сканирует периодически каталог на предмет изменений, поэтому хранение не создаёт дополнительной нагрузки на систему :) Хотя, понятно, транспортом может быть что угодно, задача тупо доставить контент до другой ноды.

Пока экспорт сырого текста, без картинок/аттачей. Также нет файлов юзера/ноды. Только сами файлы твитов.

geeklesson Oct 11, 2018 ^1 ^2
Reply

Если делать транспорт на основе ZN, то можно запилить proof-of-concept на JS (вьюер, как минимум). Потом попробовать засунуть туда пару десятков гигабайт данных, посмотреть, с какого момента всё пойдёт не так. После этого на костылях запилить в ядро ZeroNet биндинг к СУБД и повторить эксперимент. Будет видно, насколько вообще ZN пригодна для такого.

Что касается шардинга, я думаю, к чему-то подобному и ZN неминуемо придёт по мере роста. Сейчас я это вижу так, что все "свои" данные пользователь хранит на собственном зайте (или нескольких зайтах), а в data/users/ на чужих зайтах дублируются лишь апдейты, свежие комментарии или что-то такое. Типа push-уведомлений.

balancer73on Oct 11, 2018 ^1 ^2
Reply

geekless: Если нормальным юзерам не нужно локально перепахивать гигабайты данных, то sqlite сойдёт. А если надо, то в чем заключается выбор? Либо СУБД, либо ничего.

Так в ZeroNet пока и не требуется перепахивать гигабайты данных :)

А вот во Flatnesy, скорее всего, придётся делать оба варианта. Простейший пакет/инсталляшку для простых юзеров и что-то более мощное для больших объёмов, кому нужно.

geeklesson Oct 11, 2018 ^1 ^2
Reply

Кстати, для Linux нет сложности засунуть СУБД в один контейнер с ZeroNet. А для виндовс проблема тоже решается. Я, правда, не силён в Windows, но не вижу принципиальной сложности притащить в архиве с программой еще один сервис.

geeklesson Oct 11, 2018 ^1 ^2
Reply

balancer73: Эта нормальная СУБД должна тащиться в дистрибутиве, чтобы нормальным юзерам без сложностей можно было поставить ноду. Поэтому и SQLite.

Если нормальным юзерам не нужно локально перепахивать гигабайты данных, то sqlite сойдёт. А если надо, то в чем заключается выбор? Либо СУБД, либо ничего.

balancer73on Oct 11, 2018 ^1 ^2
Reply

geekless: Я тут подумал, а зачем нам конкретно sqlite в ZeroNet? Можно использовать нормальную СУБД.

Эта нормальная СУБД должна тащиться в дистрибутиве, чтобы нормальным юзерам без сложностей можно было поставить ноду. Поэтому и SQLite.

geeklesson Oct 11, 2018 ^1 ^2
Reply

balancer73: Большие объёмы форумов, гигабайты текста, миллионы сообщений, sqlite очевидно не потянет.

Я тут подумал, а зачем нам конкретно sqlite в ZeroNet? Можно использовать нормальную СУБД. Веб-морде всё равно, куда запросы слать, она через прослойку движка работает. А движку тоже всё равно, куда данные пихать, требуется лишь переписать кусок кода, отвечающий за связь с БД.

Есть только проблема несовместимости разных диалектов SQL и фич СУБД, но это привычная проблема при разработке сайтов.

stre10kon Oct 11, 2018 ^1 ^2
Reply

В качестве транспорта может еще быть полезен Dat Protocol.
https://docs.datproject.org/tutorial#sharing-data

balancer73on Sep 22, 2018 ^2 ^3
Reply

Тема заглохла :) Отчасти, потому что всё лето было не до компьютеров, отчасти, потому что мысли разбегаются от направлений для работы и непонятно, за что браться в первую очередь и будет ли оно, вообще, кому-то нужно.

Пока сформировались две новых мысли.

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

Техническая реализация клиента и транспорта. И хочется и колется на счёт rslsync. Хочется, потому что удобна идея обмена контентом по ключу. Колется, потому что это закрытый проект. Зато, как ни удивительно, я практически пришёл к выводу, что и транспортом, и даже клиентом системы может быть ZeroNet :) В самом деле, не нужно делать мультипользовательские сайты. Делаем просто индивидуальный сайт/репо (а ля ZeroBlog) в виде Merger-сайта. Собеседники грузят этот Merger и получают сообщения пользователя на своих форумах. Не хотят, не нравится пользователь — просто удаляют сайт. Нет игноров, пользователь может как угодно дробить свои репозитории (темы/даты) регулируя размеры. И пользователь не ограничен в объёме данных. Хоть кино целиком в неопциональном виде кидай. Это будет только проблемой подписчиков пользователя. Не готовы терпеть — удалят сайт :)

В плане транспорта проблем никаких. Вот в плане клиента — всё сложно. Большие объёмы форумов, гигабайты текста, миллионы сообщений, sqlite очевидно не потянет. Значит, надо либо делать несколько сайтов-форумов с фрагментацией по темам/датам, либо использовать ZeroNet только как транспорт, а клиент делать сторонний.

balancer73on May 25, 2018 ^1 ^2
Reply

Побочный эффект Flatnesy — можно делать и распределённые коллективно пополняемые сайты :) В принципе, ни что не мешает рассматривать «блог-записи» как статьи (с комментариями). Вопрос только в оформлении и выводе на фронтенде. Также может быть и коллективная работа, да хоть через тот же GitHub (+SparkleShare опционально).

Офтопик про SparkleShare. Попытался обновиться. Официально оно под Linux сейчас только через Flatpak. Пробовал поставить через Flatpak (под Ubuntu 16.04) — вытянуло более 500Мб архивов и так и не заработало. В GitHub висят жалобы, разработчики SparkleShare спихивают проблемы на Flatpak и ОС… Как-то всё это криво и печально :-/ Наверное, придётся откатиться на древнюю 1.5

balancer73on May 14, 2018 ^1 ^2
Reply

stre10k: Получается lock на технологии rslsync.

Это пока и для простоты. А так, как я писал, транспорт может быть любой. Хоть флоппинет, если доверяешь источнику, хоть ZeroNet, если в обёртку добавить siteSign --publish :)

stre10kon May 14, 2018 ^1 ^2
Reply

balancer73: Ключи в rslsync делятся на R/O и R/W. Если ты скачал репозиторий по R/O-ключу, то как его ни меняй, твои данные никуда не уйдут, а при первом же синке заменятся на оригинал. Подразумевается, что посторонним будут раздаваться R/O ключи (начинаются на букву B, как я выше дал свой). R/W-ключи (на букву A) можно использовать для целей, например, группового редактирования топиков-статей (в rslsync у каждого каталога есть и R/O, и R/W-ключ).

Получается lock на технологии rslsync.

balancer73on May 14, 2018 ^1 ^2
Reply

stre10k: Как на счет публикации ключей своих подписок в каком-нибудь виде?

Это вопрос пока открытый :) Можно будет просить публиковать свои ключи знакомых. Можно будет делать публичные r/w-репозитории короткого времени жизни (для защиты от вандалов), где можно публиковать свои ключи, может быть ещё что-то придумаем.

Как в rslsync решается проблема целостности данных, например если автор offline, а другой участник подправил его файлы или удалил часть?

Ключи в rslsync делятся на R/O и R/W. Если ты скачал репозиторий по R/O-ключу, то как его ни меняй, твои данные никуда не уйдут, а при первом же синке заменятся на оригинал. Подразумевается, что посторонним будут раздаваться R/O ключи (начинаются на букву B, как я выше дал свой). R/W-ключи (на букву A) можно использовать для целей, например, группового редактирования топиков-статей (в rslsync у каждого каталога есть и R/O, и R/W-ключ).

Кстати, в ZeroNet китайцы активно используют обмен R/O ключами ко всякому варезу и контрафакту. Правда, пример сейчас не подкину, я отписался от их форумов :)

stre10kon May 14, 2018 ^1 ^2
Reply

Как на счет публикации ключей своих подписок в каком-нибудь виде?
Как в rslsync решается проблема целостности данных, например если автор offline, а другой участник подправил его файлы или удалил часть?
Может стоит подписывать свои файлы своим ключом?
Но это запрещает только несанкционированные правки.

balancer73on May 14, 2018 ^1 ^2
Reply

Тут же можно и что-то типа FAQ'а набросать. Например:

почему rslsync?

Он обеспечивает очень простую модель обмена контентом. Достаточно опубликовать свой ключ и любой может подписаться по нему, получив репозиторий пользователя в свою локальную копию форума/блога. В принципе, с этой ролью, правда, и ZeroNet может справиться. Но там публикация будет выглядеть сложнее. Если в rslsync достаточно кинуть файл в каталог, чтобы он всюду распространился, то в ZeroNet нужно ещё подписывать и публиковать зайт с контентом. Хотя на уровне личного взаимодействия пользователей это решается любым способом, хоть флоппинетом. Каждый сам решает, как принимать данные от того, на кого подписался. Дописал этот пункт в топикстарт :)

balancer73on May 14, 2018 ^1 ^2
Reply

Пример записи блога в бэкенде в чистом виде:

This page is a snapshot of ZeroNet. Start your own ZeroNet for complete experience. Learn More