воскресенье, 1 января 2012 г.

РосМитинг

Long text warning. A lot of letters is here below!

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


Эту фразу я написал 23 декабря 2011 года, когда мы с чуваками с работы запустили тестовый сервер для очередного такого же сайта с информацией о митингах. По задумке, он должен быть одним из связующих узлов оппозиции-хуеппозии, чтоб там размещались всякая информация о следующих митингах по городам, всякие митинговые новости, и всё такое прочее. Внезапно идея сделать такой сервис загорелась в голове у нашего генерального директора в середине декабря, но, разумеется, к 24 декабря, когда прошёл большой-пребольшой митинг на проспекте Сахарова, мы особо-то ничего сделать не успели толком. Но тестовый сервер запустили. Туда можно пойти, зарегестрироваться, написать пост про митинг и комментарии к другим постам про митинги. Можно одуматься и удалить то, что написал (но не всё). Название выбрали такое, чтоб стояло в одном ряду с РосПилом и РосЯмой - РосМитинг. Йоу.

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

Лично я вижу это примерно так: приходит чувак с работы вечером в пятницу и думает: "хм, куда бы сходить в субботу?", но открывает не сайты кинотеатров или музеев, а РосМитинг, выбирает себе город и читает список предстоящих митингов, выбирая что-нибудь себе по душе. Более того, я категорически не приемлю политическую однобокость ресурса, в разработке которого принимаю непосредственное участие. Он должен объединять вообще все митинги, которые могут быть, всех политических движений. И всяких карманных молодёжных уличных армий правящего режима, и обычных геев, и экологов, и коммунистов, и праворадикальных национал-социалистов (для любителей экстрима, с фаерами, беспорядками и задержаниями), и пенсионеров. Почему бы и нет? Постоять на митинге гораздо более полезно для общества, чем постоять перед картиной в музее, и уж тем более гораздо полезнее, чем давиться попкорном в кино.

Но как-то раз во время мытья под душем у меня появилась ещё одна идея - не надо быть Одним Единственным Сайтом Про Митинги. Даже если разместить такой сайт на ддосоустойчивом и абузоустойчивом хостинге в какой-нибудь далёкой стране, до которой не скоро доберутся ФСОшники с паяльниками или ещё какие-нибудь личности, которым не по нраву придётся эта затея, то до него могут просто закрыть доступ изнутри страны или города на уровне местных провайдеров. Поэтому надо сделать децентрализованную систему хранения информации. Уронят ддосеры один узел сети, но контент останется на других узлах. Как в торрентах, всё просто. Всех не переддосишь.

Далее технические подробности.

Суть идеи такова, что образуется метасеть из сайтов, обменивающихся контентом между собой. Каждый такой сайт называется узлом сети. Как это работает: любой узел по запросу отдаёт свой контент в виде XML или JSON, ну типа как устроен обычный RSS. Контент может быть трёх типов:
  1. собственно сами посты (сообщения о митингах и т.д.) со всей метаинформацией,
  2. список ip-адресов с метаинформацией,
  3. дополнительная информация по постам (можно попробовать умять это в один из предыдущих пунктов, например)
Посты, которые отдаёт узел, он сам собирает с других узлов, в том числе с себя. Каждому посту присваивается уникальный идентификатор в пределах всей сети, и пост привязан к конкретному узлу (тоже по уникальному идентификатору). На каждом узле хранится список ip-адресов (с доменными именами, комментариями и т.д.) узлов, которые входят в сеть. Если появляется новый узел, его надо добавлять и в свой список тоже. Причём узел может собирать контент не со всех ему известных, а только с тех, с которых хочет, то есть только со своих доверенных. Узел должен помечать ip-адреса своих доверенных узлов, как доверенные. Таким образом, включение нового узла с правом постинга (для доступа к сети на чтение никакого доступа и разрешения не требуется) в сеть происходит следующим образом: админстратор этого ресурса пишет письма всем известным ему администраторам существующих узлов, чтоб они включили его в сеть. Администраторы других узлов добавляют указанные ip-адреса в списки узлов сети, чтоб о них знали все; возможно, кто-то даже добавляет в доверенные, чтоб получать с нового узла контент. Если какой-нибудь узел начинает вываливать спам и флуд, администраторы других узлов исключают его из списка доверенных, и не получают более с него контент. Если какой-нибудь узел выкладывает у себя и отдаёт изменённый контент, то его, если это замечают, можно просто выкинуть из сети, но, надеюсь, дело до этого не дойдёт. Ну и третий тип контента - это изменение статуса постов. Например, на одном узле автор поста отредактировал текст, и надо, чтоб все узлы об этом узнали и изменили текст поста у себя. Они не могут этого сделать самостоятельно; редактирование может осуществлять только узел, к которому привязан пост. Он сообщает "пост номер такой-то отредактирован тогда-то", все другие узлы, узнав это, отправляются за новым текстом. Ещё есть статус "пост удалён", и узлы желательно (подчёркиваю - не обязаны) в таком случае убрать его из своих лент. И ещё есть статус "пост потерян", например, если произошло повреждения БД или ещё по какой-то причине текст поста на узле потерялся, но удалять его с других узлов не следует.

Примерно так. Протокол требует обмозговывания и доработки, разумеется. Если он будет принят, по-моему, это будет охрененно круто. Но он вряд ли, конечно, будет принят. Во-первых, это требует серьёзной работы, и не одной группы людей - даже если мы в Гринсайте напишем на PHP полностью переносимый модуль, не привязанный к определённой CMS и СУБД, есть же ещё сайты на питоне, перле, руби, да и для интеграции такого модуля всё равно придётся предпринимать какую-то деятельность (и чем модуль более универсален, тем сложнее его к себе запилить). Во-вторых, все тянут одеяло на себя, и никто не захочет быть узлом в сети, пусть и с правом постинга, а все захотят быть Тем Самым Одним Единственным Сайтом Про Митинги, потому что все видят именно себя в будущем у руля, а делиться властью-славой-известностью-баблом с кем-то, тем более с тем, кто тебе неприятен, никто не захочет.

Однако, я таки попробую как-нибудь на досуге более серьёзно обдумать этот протокол и хотя бы написать по нему документацию, авось, когда-нибудь пригодится.

Комментариев нет:

Отправить комментарий

Ублюдочный Гугл поломал форму комментариев. Извините.