Pandora – это распределенная (p2p) информационная система, включающая в себя функции социальной сети (аналогично facebook или vkontakte), средства голосового и видео общения (skype), энциклопедии (wikipedia), обмена файлами (torrent), деловой системы (1C), электронного магазина (ebay), реестра законов и стандартов (Консультант+), совместной работы над проектами (git), а также систему голосования и рейтингов (democratia2.ru).
Пандора может использоваться для личного общения, ведения бизнеса, создания проектов и совместного управления обществом. Но обо всём по порядку.
Компьютерные сети прочно вошли в нашу жизнь. И уходить не собираются. Перечислим цели, которым служат компьютерные сети.
Мы узнаём новое. Общаемся с близкими. Заключаем сделки. Участвуем в совместной разработке проектов. Управляем процессами.
В интернете много сервисов. Несмотря на кажущееся разнообразие, основные сервисы достаточно централизованы. Google имеет сервера в определенном месте, миллионы запросов проходят через этот центр и анализируются. Facebook, Vkontakte также имеют свои центры, миллионы сообщений людей проходят через центральный сервер социальной сети и отслеживаются. Skype на сегодня также имеет выделенные сервера, через которые проходит весь трафик. Сети электронной коммерции, разработки проектов, форумы – всё находится на чьих-либо центральных серверах. Вся информация проходит через единые центры и хранится там. Это общеизвестно. В чём проблема?
Проблема первая. Сегодня мы доверяем свою информацию обезличенным корпорациям. Остаётся искренне уповать на то, что во многих корпорациях работают порядочные люди, которые уважают наше доверие. Но в корпорациях могут быть люди, которые распоряжаются вверенной им информацией преследуя свои умыслы.
Проблема вторая. Сегодня во всех странах правительственные службы на законодательном уровне контролируют все информационные потоки. У каждого интернет-провайдера установлено оборудование спецслужб, которое полностью отслеживает весь трафик. Считается что правительства всегда поступают честно. Но среди государственных служащих могут быть люди, которые преследуют интересы определенных групп.
Проблема третья. Центральные точки в сети подвержены риску выйти из строя или быть уничтоженными во время внешнего вторжения. Случаи, когда сервера выходят из строя (или их выводят из строя) и системы перестают работать случались неоднократно. Кроме того, некоторые владельцы просто останавливали свои сервера, иногда даже не уведомив нас. В этих случаях мы больше не можем пользоваться остановленными сервисами и зачастую теряем свою информацию. Централизованные сервисы физически уязвимы и подчинены воле определенных лиц.
В трёх словах: центры подвержены утечкам, цензуре и краху.
Это три основные проблемы, но далеко не единственные. Скажите, на скольких сайтах вам приходилось регистрироваться и раз за разом вводить одну и ту же информацию? Сколько раз вам приходилось вникать в особенности каждого сервиса и перестраиваться под различные требования? Сколько программистов каждый день запускают очередной сайт, чтобы создать для нас новую головоломку?
Не слишком ли это, лишь для того чтобы:
1) узнавать новое;
2) общаться с близкими;
3) заключать сделки;
4) совместно разрабатывать проекты;
5) контролировать процессы.
Не слишком ли много порождено сущностей для наших простых задач?
Не слишком ли дорогую цену мы платим?
Это традиционные социальные сети. Сервер принадлежит одному владельцу или группе людей. Пользователи полностью доверяют информацию владельцу, хостеру и спецслужбам. Данные хранятся удаленно и централизованно на сервере.
Такие сети подверженны отказу в обслуживании, взлому, массовому сливу данных, актам вандализма и анонимной безответственности.
Если личность напакостила на одном сайте, и её выгнали, она свободно продолжает пакостить на других. Централизованные сети как никогда порождают безответственное общение. Владельцы же для привлечения публики готовы держать двери открытыми.
В этой сети несколько центров. Пользователи могут выбирать сервер, которому они доверяют. Данные всё еще хранятся удаленно на сервере. Пользователи полностью доверяют информацию владельцу. При этом некоторые сервера размещены у хостеров, со всеми вытекающими последствиями. Но даже если сервер Diaspora принадлежит частному лицу – кто он? Пользователь снова должен тренировать силу своего доверия.
Такие сети меньше подверженны отказу в обслуживании, менее массовому сливу данных при взломе, акты вандализма и анонимной безответственности имеют меньший масштаб.
Сеть полностью децентрализованная. Невозможно вывести сеть из строя или взять её под контроль. Публичные данные (например, энциклопедические статьи) свободно курсируют между узлами, приватные данные распределяются по узлам, согласно схемам доверия.
Так как обмен данными происходит среди близких, друзей, коллег, партнеров по бизнесу, единомышленников, то вероятность утечек данных третьим лицам почти отсутствует. Фотографии ваших детей попадут только на компьютеры близких. Анекдоты вы будете травить только со своими друзьями. Ваш заказ увидит только продавец. Деловые бумаги разойдутся только партнерам. Над проектами работают только единомышленники.
Общение ответственное и конструктивное. Ответственное, потому что люди заботятся о своей репутации. Конструктивное, потому что никто не хочет поддерживать бесполезные данные, размещая их на своём компьютере.
Рассмотрим поближе устройство Пандора.
1. Мир – самые очевидные сущностиДанные, понятные подросткам до 12 лет в любой точке планеты.
Объекты: Человек. Сообщество. Страна. Город. Улица. Адрес. Язык. Слово. Вещь. Статья. Файл. Мнение.
2. Дело – продуктивная и хозяйственная деятельность
Данные, понятные подросткам любой национальности до 18 лет.
Объекты: Товар. Услуга. Работник. Клиент. Склад. Заказ. Сделка. Платеж.
3. Регион – записи регионального значения
Данные, понятные социально-адаптированным гражданам конкретного региона.
Объекты:
Ресурс (месторождение).
Закон – акт, разработанный и утвержденный сообществом.
Проект (социальный). Например, проект нового детского сада.
Постановление (принятое сообществом на основании голосования).
Взнос – платеж в поддержку проекта; если платеж на общие социальные цели, то это налог, если на не утвержденный постановлением проект, то это краудфандинг.
Расход – платеж реализующий проект. Например, оплата за кирпич.
Нарушение - признанный факт социального нарушения.
Наказание – меры, принятые сообществам для компенсации нарушения.
Региональными данными могут быть данные города, района, области или страны.
4. Пандора – данные и сервисы, служащие для работы сети Пандора.
Объекты: Параметр. Ключ. Подпись. Узел. Патч. Событие. Хранилище.
Авторизация – это активация ключа пользователя паролем. После авторизации доступны функции подписи и шифрования.
Слушание – запуск программы на прием входящих соединений.
Охота – запуск программы на циклический опрос узлов сети Пандора в поисках новых данных, на которые подписан авторизованный пользователь, а также для раздачи своих новых данных, которые могли за это время быть созданы на узле-охотнике. Обычно охота желательна, если узел был какое-то время отключен. Если же узел постоянно находился в режиме слушания, то об изменениях данных рассылаются уведомления. Рассылка уведомлений происходит в рамках очередной охоты сразу же при возникновении новой записи, или через заданные интервалы времени – в случае возникновения порции новых данных.
Поиск – одинарный опрос узлов в поисках конкретного типа записи. Например поиск мирового объекта «Человек» по имени и фамилии. При поиске, в отличие от охоты, задается большая глубина опроса сетевого дерева по доверенным веткам.
Каждая запись в Пандоре имеет уникальный составной хэш, именуемый «панхэш». Панхэш формируется из усеченных хэшей полей записи. Текстовые поля хэшируются md5, даты кодируются в 3 байта, при ссылке на другие записи Пандоры берется их панхэш (частично).
Например, панхэш человека выглядит следующей последовательностью:
[type/lang:FirstName/LastName/BirthDate/BirthCity/FatherFN/MotherFN]
Панхэш может записываться в человеко читаемом виде:
[person/ru:Линус/Торвальдс/28.12.1969/Хельсинки/Нильс/Анна]
Панхэш человека кодируется по следующей формуле:
FLDCAM, 6/10/3/3/2/2 = 16+6+4 = 22+4 = 26 байт + 2 байта (тип и язык)
или примерный вид в 16-ричной кодировке:
[0108: e6fb7d1b01dc ebb27cf540a56f05fd98 d343e3 5de465 f547 72fd]
Здесь:
01 – тип записи «персона»
08 – русский язык
e6fb7d1b01dc, ebb27cf540a56f05fd98, f547 и 72fd – усеченный md5 от «Линус» и «Торвальдс», «Нильс» и «Анна»
d343e3 – закодированная в 3 байта дата
5de465 – усеченный панхэш записи город "Хельсинки" на русском языке.
Некоторые поля могут быть пропущены (пустые, т.е. не заполненные), в этом случае составные хеши заполняются нулями. Например, если заданы только имя, фамилия и дата рождения (FLD=19 байт), то панхэш будет выглядеть примерно так:
[0108 e6fb7d1b01dc ebb27cf540a56f05fd98 d343e3 000000 0000 0000]
концевые нули можно не указывать:
[0108 e6fb7d1b01dc ebb27cf540a56f05fd98 d343e3]
Сокращенный панхэш в человеко читаемом виде может выглядеть так:
[персона:Линус/Торвальдс]
Даже если в сети одна и та же запись была введена дважды (трижды и т.д.), её панхэш будет абсолютно одинаковым, и такая запись будет идентифицироваться как одна и та же.
Неполные записи (панхэши которых имеют нулевые пропуски) могут соотносится с более полными (у которых панхэши имеют меньше пропусков). Такое соотношение называется подобие, и настраивается дополнительно.
В Пандоре базовые типы записей (как правило, это мировые записи, такие как «человек», «сообщество» и т.п.) описываются с нуля. Остальные типы записей порождаются от базовых (в основном это деловые и региональные записи).
Дочерние записи, порожденные от других типов (например, «сотрудник» от «персона») имеют удлиненный панхэш относительно базового типа, удлиненный на добавленные поля. Кроме того, порожденные записи не содержат в себе данные родительский полей. Родительские данные хранятся в записи базового типа, а в потомке хранится только ссылка на панхэш родителя, плюс хэши дополнительных полей. Например, если вы заводите сотрудника «Иван Иванов, менеджер», то создаются две записи: персона Иван Иванов и сотрудник с панхэшем Ивана Иванова и дополнительное поле – должность. Панхэш сотрудника будет представлять собой панхэш персоны, плюс хэш поля «должность». Панхэш сотрудника может выглядеть так:
[сотрудник:Иван/Иванов/////менеджер]
Записи представлены в Пандоре в виде объектов. К дочерним объектам применимы все методы родителя. Например, если ищется человек «Иван Иванов», то он будет найден, даже если вводился только на деловом уровне в виде сотрудника. С другой стороны, при начале трудовой деятельности не придется вводить данные человека, если они существуют на мировом уровне.
Такая иерархия позволяет: 1) вводить данные только один раз, 2) экономить дисковое пространство, 3) иметь сквозную единую идентификацию объектов, 4) применять методы родительских классов.
Пандора вычисляет бинарные (байтовые) панхэши, и в своей работе оперирует ими при идентификации и поиске объектов.
Существует всего два способа, какими запись попадает в вашу Пандору:
1) вы сами ввели запись;
2) запись пришла к вам по сети.
Каждая запись помечается панхэшем создателя.
Запись, однажды введенная, обладающая своим уникальным панхэшем и помеченная панхэшем создателя, начинает своё путешествие в сети.
Если вы ввели запись, она автоматически помечается как «поддерживаемая». До тех пор, пока вы держите включенной пометку «поддерживаю», ваша Пандора будет хранить эту запись в базе.
Поддержка чем-то напоминает «лайк» в социальной сети. Но когда вы ставите «лайк», вы ничем по сути не помогаете записи. В Пандоре поддержка имеет физическую суть.
Например, когда вы смотрите фотографию друга, и она вам нравится - вы нажимаете «поддерживаю». С этих пор фотография задерживается в вашей базе. Ваши общие друзья смогут загрузить эту фотографию с Пандоры друга, или с вашего компьютера.
После загрузки чужие записи хранятся некоторое заданное время (например, для типа «персона» по умолчанию задано 3 дня), после чего записи, если им не была оказана поддержка или доверие автоматически удаляются с вашего узла.
Также вы можете настроить автоподдержку, т.е. автоматическое включение флага «поддерживаю» для записей по определенному условию. Например, вы можете указать, что всегда поддерживаете статьи Ивана Иванова, или анкеты своих друзей.
Доверие - это цифровое подписывание записи.
Например, если вы подписали анкету друга, вы гарантируете, что этот человек настоящий. Когда вы подписываете статью, вы подтверждаете истинность сведений, которые в ней содержатся. Когда вы оказываете «доверие» договору с вписанным своим именем, вы фактически принимаете этот договор.
Система доверия позволяет установить достоверность данных в Пандоре. Это одна из ключевых функций в работе сети.
Ваши друзья, близкие, партнеры, единомышленники, увидев подпись, понимают, что это проверенные данные. Пользуйтесь доверием ответственно. Оказывая доверие сомнительным данным, вы можете подмочить свою репутацию.
Оказанное доверие не обязывает вас хранит саму запись, но всего лишь подпись этой записи. Тем не менее, по умолчанию Пандора настроена хранить доверенные записи также как и поддерживаемые.
Пометка на записи «публичная», делает запись всенародной. Публиковаться могут общеупотребительные данные, например, анкеты исторических деятелей, или энциклопедические статьи.
Если запись помечена как «публичная» и уходит в сеть, то её скорее всего будет уже не сделать обратно приватной. Это не баг Пандоры – такова природа сети.
Но даже если запись опубликована, то она будет жить в сети пока получает поддержку, и/или ей оказано доверие.
Неинтересные записи, без поддержки и доверия быстро «угасают». В Пандоре происходит настоящая борьба записей за поддержку и доверие.
Вы можете публиковать как свои записи, так и чужие. Но публикация чужих записей без согласия создателя является дурным тоном.
Вы можете изменить свою запись или чужую. В любом случае при изменении записи создается "патч", которые распространяется среди заинтересованных узлов. Может получиться так, что первоначальная запись создана одним человеком, а затем несколько других внесли изменения. Участники Пандоры могут поддерживать патчи, оказывать им доверие и публиковать, т.е. патчи обладают всеми свойствами записи.
Так, в Пандору заложена возможность совместной разработки записей любого типа, начиная от энциклопедической статьи, и заканчивая региональным постановлением.
Каждая запись может быть прокомментирована и оценена участниками Пандоры. Для этого создается специальная запись – мнение. Мнение содержит панхэш комментируемого объекта, панхэш создателя мнения, оценку от -127..+128 (или 0, если нейтрально), текст комментария (или пусто, если только оценка) и время создания мнения.
Мнение может комментировать другое мнение. Так образуются ветки дискуссии. Если мнение состоит только из оценки, то оно прибавляет, или убавляет рейтинг записи, к которой относится, но не отображается в ветке. Если мнение содержит еще и текст, то кроме влияния на рейтинг записи, оно еще отображается в ветке дискуссии.
Обычно Пандора при запуске сама входит в режим слушания. Ручное включение и выключение режима слушания доступно командой Пандора-Слушать. В режиме слушания внизу в статусной строке высветится ваш IP-адрес.
При этом IP-адрес может быть всегда одинаковым (статическим), а может меняться время от времени (быть динамическим).
Если вы обладаете статическим IP-адресом, то можете сообщить друзьям свой IP-адрес, чтобы они добавили его в свой список узлов. Кроме того, если вы обладатель статического адреса, то ваша Пандора будет также выполнять функцию трекера для ваших друзей, коллег, клиентов, единомышленников и т. д., в зависимости от той настройки, которую вы пожелаете.
Если у вас динамический адрес, то сообщать его друзьям смысла нет. Динамические адреса могут быть определены только через общих друзей, обладающих статическими узлами.
Когда ваша Пандора находится в режиме слушания, другие пользователи могут подключаться к вам, считывать и записывать данные на которые у них есть разрешения.
Сразу после установки Пандоры заданы минимальные разрешения, которые со временем вы можете расширить для своих друзей и других доверенных групп.
В списке Пандора-Узлы добавьте узел, IP-адрес который вам удалось узнать. Достаточно указать только IP-адрес, другие поля будут заполнены автоматически при обмене данными.
Не беспокойтесь, что вам постоянно придется вручную вводить адреса. В основном таблица узлов будет пополняться автоматически при обмене данными с другими узлами. При этом узлы также являются записями, которые распространяются по цепочкам доверия.
Узел Пандоры перебирает известные узлы, и этим самым как бы выходит на охоту. При этом охотник ищет слушающие узлы. Если «охотник» нашел «слушателя», он подключатся к нему, и начинается обмен данными. Обычно, узел Пандоры находится и в режиме слушания и в режиме охоты одновременно.
Хотя соединение всегда инициирует охотник, сразу после подключения различие между охотником и слушателем стираются, обмен данными идёт в обе стороны. При этом каждый узел выставляет свои запросы, а другой узел должен ответить на эти запросы.
Соединение или разрывается сразу после обмена данными, или остаётся подключенным, если было запрошено живое общение (чат, звонок или игра).
Пандора в режиме охоты циклически опрашивает только те узлы, на которые вы подписаны.
Подписки определяют данные какого типа необходимо запрашивать у заданных сообществ, людей или узлов. Например, вы можете указать, чтобы ваша Пандора запрашивала новые фотографии группы «Мои друзья», или новые товары у заданной компании.
Кроме обмена записями Пандора поддерживает обмен сообщениями, голосовой разговор, видео звонок и игры.
При открытии окна разговора Пандора подключается к узлу, если не была подключена до этого, после чего можно отправлять мгновенные сообщения и запустить аудио или видео поток. Кроме того можно поиграть, например в «Морской бой» или «Шахматы».
При каждом подключении создается сокет. Сокеты создаются как слушателем, так и охотником. На каждое соединение запускается свой обработчик. Все установленные соединения регистрируются в списке активных узлов.
Обмен данными происходит асинхронно. Каждый узел отправляет запросы и блоки данных в одной очереди, а принимает ответы и данные в другом цикле. Пакеты со звуком и видео при отправке помечаются с большим приоритетом, а на приеме обрабатываются в первую очередь, эти медиа пакеты не требуют подтверждения. Напротив, записи передаются в запросах, и требуют подтверждения о приеме.
При построении Пандоры выбирались кросс платформенные, популярные, ясные и хорошо документированные компоненты.
Вот текущий список: ruby, gtk, sqlite, openssl, gstreamer.
1. Установите git в Ubuntu:
sudo apt-get install git
(в Windows установите "Git-x.x.x...exe" отсюда:
http://code.google.com/p/msysgit/downloads/list)
2. Создайте пустой каталог "Pandora", оставаясь в нем скачайте Pandora используя git:
mkdir /home/user/Pandora
cd /home/user/Pandora
git clone https://github.com/Novator/Pandora.git
3. Сделайте скрипт Pandora.sh запускамым (только для Ubuntu):
chmod +x ./pandora.sh
4. Установите дополнительные пакеты для Ubuntu:
sudo ./pandora.sh --init
(в Windows вы можете распаковать архив отсюда:
https://github.com/Novator/RubyFull/raw/master/rubyfull.exe)
5. Запуск Pandora в Ubuntu:
./pandora.sh
(в Windows запускайте bat-файл pandora.bat)
Описанный выше функционал еще не работает!
Несколько лет назад я сел писать свободную бухгалтерию. Неоднократно я менял название и концепцию системы. В итоге пришел к тому, что описано в этой статье. Код пишу урывками, в свободное время. Работы еще очень много, а реальная жизнь засасывает и постоянно отвлекает от программирования... с каждым днем все больше и больше. Испугавшись, что я так и не успею реализовать проект, решил опубликовать хотя бы то, что есть. Хотя бы озвучить идею.
Возможно, мне удастся довести Пандору до какого-либо рабочего состояния. Но возможно, упавшее знамя придется подхватить более молодым.
Пандора не первая и не единственная социальная пиринговая сеть.
Существует несколько интересных проектов:
http://p2pframework.com/?page_id=9&lang=en
http://gitorious.org/social-p2p/
http://blogs.cs.st-andrews.ac.uk/peerbook/
http://www.st-andrews.ac.uk/news/archive/2010/title,53046,en.php
Но все они ограничены функцией социальной сети. Пандора же призвана быть универсальной системой, для общения, бизнеса и управления обществом.
Основная идея Пандоры в том, чтобы не общество определялось государством, а государство формировалось обществом.
Я как бы задался вопросом: «Почему мы, граждане, бежим за чиновниками? Глядим в рот чиновникам, подстраиваемся под них, и ждем от них решений наших проблем? Почему бы чиновникам не бежать за нами?» Спасение утопающих – дело рук самих утопающих.
У общества должен быть инструмент, пользуясь которым, граждане смогут создавать проекты, совместно дорабатывать их и оказывать им доверие.
Решения должны приниматься авторитетными гражданами, специалистами в своих отраслях, которым общество оказало доверие.
Государственные службы из ленивого, ненасытного и карательного органа должны превратиться в немых исполнителей народной воли.
Пандора может использоваться для личного общения, ведения бизнеса, создания проектов и совместного управления обществом. Но обо всём по порядку.
Зачем нам сети?
Компьютерные сети прочно вошли в нашу жизнь. И уходить не собираются. Перечислим цели, которым служат компьютерные сети.
Мы узнаём новое. Общаемся с близкими. Заключаем сделки. Участвуем в совместной разработке проектов. Управляем процессами.
В интернете много сервисов. Несмотря на кажущееся разнообразие, основные сервисы достаточно централизованы. Google имеет сервера в определенном месте, миллионы запросов проходят через этот центр и анализируются. Facebook, Vkontakte также имеют свои центры, миллионы сообщений людей проходят через центральный сервер социальной сети и отслеживаются. Skype на сегодня также имеет выделенные сервера, через которые проходит весь трафик. Сети электронной коммерции, разработки проектов, форумы – всё находится на чьих-либо центральных серверах. Вся информация проходит через единые центры и хранится там. Это общеизвестно. В чём проблема?
Проблема первая. Сегодня мы доверяем свою информацию обезличенным корпорациям. Остаётся искренне уповать на то, что во многих корпорациях работают порядочные люди, которые уважают наше доверие. Но в корпорациях могут быть люди, которые распоряжаются вверенной им информацией преследуя свои умыслы.
Проблема вторая. Сегодня во всех странах правительственные службы на законодательном уровне контролируют все информационные потоки. У каждого интернет-провайдера установлено оборудование спецслужб, которое полностью отслеживает весь трафик. Считается что правительства всегда поступают честно. Но среди государственных служащих могут быть люди, которые преследуют интересы определенных групп.
Проблема третья. Центральные точки в сети подвержены риску выйти из строя или быть уничтоженными во время внешнего вторжения. Случаи, когда сервера выходят из строя (или их выводят из строя) и системы перестают работать случались неоднократно. Кроме того, некоторые владельцы просто останавливали свои сервера, иногда даже не уведомив нас. В этих случаях мы больше не можем пользоваться остановленными сервисами и зачастую теряем свою информацию. Централизованные сервисы физически уязвимы и подчинены воле определенных лиц.
В трёх словах: центры подвержены утечкам, цензуре и краху.
Это три основные проблемы, но далеко не единственные. Скажите, на скольких сайтах вам приходилось регистрироваться и раз за разом вводить одну и ту же информацию? Сколько раз вам приходилось вникать в особенности каждого сервиса и перестраиваться под различные требования? Сколько программистов каждый день запускают очередной сайт, чтобы создать для нас новую головоломку?
Не слишком ли это, лишь для того чтобы:
1) узнавать новое;
2) общаться с близкими;
3) заключать сделки;
4) совместно разрабатывать проекты;
5) контролировать процессы.
Не слишком ли много порождено сущностей для наших простых задач?
Не слишком ли дорогую цену мы платим?
Структуры сетей
Централизованная социальная сеть
Это традиционные социальные сети. Сервер принадлежит одному владельцу или группе людей. Пользователи полностью доверяют информацию владельцу, хостеру и спецслужбам. Данные хранятся удаленно и централизованно на сервере.
Такие сети подверженны отказу в обслуживании, взлому, массовому сливу данных, актам вандализма и анонимной безответственности.
Если личность напакостила на одном сайте, и её выгнали, она свободно продолжает пакостить на других. Централизованные сети как никогда порождают безответственное общение. Владельцы же для привлечения публики готовы держать двери открытыми.
Частично децентрализованная сеть Diaspora
В этой сети несколько центров. Пользователи могут выбирать сервер, которому они доверяют. Данные всё еще хранятся удаленно на сервере. Пользователи полностью доверяют информацию владельцу. При этом некоторые сервера размещены у хостеров, со всеми вытекающими последствиями. Но даже если сервер Diaspora принадлежит частному лицу – кто он? Пользователь снова должен тренировать силу своего доверия.
Такие сети меньше подверженны отказу в обслуживании, менее массовому сливу данных при взломе, акты вандализма и анонимной безответственности имеют меньший масштаб.
Распределенная (p2p) информационная система Pandorа
Сеть полностью децентрализованная. Невозможно вывести сеть из строя или взять её под контроль. Публичные данные (например, энциклопедические статьи) свободно курсируют между узлами, приватные данные распределяются по узлам, согласно схемам доверия.
Так как обмен данными происходит среди близких, друзей, коллег, партнеров по бизнесу, единомышленников, то вероятность утечек данных третьим лицам почти отсутствует. Фотографии ваших детей попадут только на компьютеры близких. Анекдоты вы будете травить только со своими друзьями. Ваш заказ увидит только продавец. Деловые бумаги разойдутся только партнерам. Над проектами работают только единомышленники.
Общение ответственное и конструктивное. Ответственное, потому что люди заботятся о своей репутации. Конструктивное, потому что никто не хочет поддерживать бесполезные данные, размещая их на своём компьютере.
Рассмотрим поближе устройство Пандора.
Данные четырех уровней
1. Мир – самые очевидные сущностиДанные, понятные подросткам до 12 лет в любой точке планеты.
Объекты: Человек. Сообщество. Страна. Город. Улица. Адрес. Язык. Слово. Вещь. Статья. Файл. Мнение.
Главное окно Pandora
2. Дело – продуктивная и хозяйственная деятельность
Данные, понятные подросткам любой национальности до 18 лет.
Объекты: Товар. Услуга. Работник. Клиент. Склад. Заказ. Сделка. Платеж.
3. Регион – записи регионального значения
Данные, понятные социально-адаптированным гражданам конкретного региона.
Объекты:
Ресурс (месторождение).
Закон – акт, разработанный и утвержденный сообществом.
Проект (социальный). Например, проект нового детского сада.
Постановление (принятое сообществом на основании голосования).
Взнос – платеж в поддержку проекта; если платеж на общие социальные цели, то это налог, если на не утвержденный постановлением проект, то это краудфандинг.
Расход – платеж реализующий проект. Например, оплата за кирпич.
Нарушение - признанный факт социального нарушения.
Наказание – меры, принятые сообществам для компенсации нарушения.
Региональными данными могут быть данные города, района, области или страны.
4. Пандора – данные и сервисы, служащие для работы сети Пандора.
Объекты: Параметр. Ключ. Подпись. Узел. Патч. Событие. Хранилище.
Сервисы
Авторизация – это активация ключа пользователя паролем. После авторизации доступны функции подписи и шифрования.
Слушание – запуск программы на прием входящих соединений.
Охота – запуск программы на циклический опрос узлов сети Пандора в поисках новых данных, на которые подписан авторизованный пользователь, а также для раздачи своих новых данных, которые могли за это время быть созданы на узле-охотнике. Обычно охота желательна, если узел был какое-то время отключен. Если же узел постоянно находился в режиме слушания, то об изменениях данных рассылаются уведомления. Рассылка уведомлений происходит в рамках очередной охоты сразу же при возникновении новой записи, или через заданные интервалы времени – в случае возникновения порции новых данных.
Поиск – одинарный опрос узлов в поисках конкретного типа записи. Например поиск мирового объекта «Человек» по имени и фамилии. При поиске, в отличие от охоты, задается большая глубина опроса сетевого дерева по доверенным веткам.
Идентификация записей (объектов)
Каждая запись в Пандоре имеет уникальный составной хэш, именуемый «панхэш». Панхэш формируется из усеченных хэшей полей записи. Текстовые поля хэшируются md5, даты кодируются в 3 байта, при ссылке на другие записи Пандоры берется их панхэш (частично).
Например, панхэш человека выглядит следующей последовательностью:
[type/lang:FirstName/LastName/BirthDate/BirthCity/FatherFN/MotherFN]
Панхэш может записываться в человеко читаемом виде:
[person/ru:Линус/Торвальдс/28.12.1969/Хельсинки/Нильс/Анна]
Панхэш человека кодируется по следующей формуле:
FLDCAM, 6/10/3/3/2/2 = 16+6+4 = 22+4 = 26 байт + 2 байта (тип и язык)
или примерный вид в 16-ричной кодировке:
[0108: e6fb7d1b01dc ebb27cf540a56f05fd98 d343e3 5de465 f547 72fd]
Здесь:
01 – тип записи «персона»
08 – русский язык
e6fb7d1b01dc, ebb27cf540a56f05fd98, f547 и 72fd – усеченный md5 от «Линус» и «Торвальдс», «Нильс» и «Анна»
d343e3 – закодированная в 3 байта дата
5de465 – усеченный панхэш записи город "Хельсинки" на русском языке.
Некоторые поля могут быть пропущены (пустые, т.е. не заполненные), в этом случае составные хеши заполняются нулями. Например, если заданы только имя, фамилия и дата рождения (FLD=19 байт), то панхэш будет выглядеть примерно так:
[0108 e6fb7d1b01dc ebb27cf540a56f05fd98 d343e3 000000 0000 0000]
концевые нули можно не указывать:
[0108 e6fb7d1b01dc ebb27cf540a56f05fd98 d343e3]
Сокращенный панхэш в человеко читаемом виде может выглядеть так:
[персона:Линус/Торвальдс]
Даже если в сети одна и та же запись была введена дважды (трижды и т.д.), её панхэш будет абсолютно одинаковым, и такая запись будет идентифицироваться как одна и та же.
Неполные записи (панхэши которых имеют нулевые пропуски) могут соотносится с более полными (у которых панхэши имеют меньше пропусков). Такое соотношение называется подобие, и настраивается дополнительно.
В Пандоре базовые типы записей (как правило, это мировые записи, такие как «человек», «сообщество» и т.п.) описываются с нуля. Остальные типы записей порождаются от базовых (в основном это деловые и региональные записи).
Дочерние записи, порожденные от других типов (например, «сотрудник» от «персона») имеют удлиненный панхэш относительно базового типа, удлиненный на добавленные поля. Кроме того, порожденные записи не содержат в себе данные родительский полей. Родительские данные хранятся в записи базового типа, а в потомке хранится только ссылка на панхэш родителя, плюс хэши дополнительных полей. Например, если вы заводите сотрудника «Иван Иванов, менеджер», то создаются две записи: персона Иван Иванов и сотрудник с панхэшем Ивана Иванова и дополнительное поле – должность. Панхэш сотрудника будет представлять собой панхэш персоны, плюс хэш поля «должность». Панхэш сотрудника может выглядеть так:
[сотрудник:Иван/Иванов/////менеджер]
Записи представлены в Пандоре в виде объектов. К дочерним объектам применимы все методы родителя. Например, если ищется человек «Иван Иванов», то он будет найден, даже если вводился только на деловом уровне в виде сотрудника. С другой стороны, при начале трудовой деятельности не придется вводить данные человека, если они существуют на мировом уровне.
Такая иерархия позволяет: 1) вводить данные только один раз, 2) экономить дисковое пространство, 3) иметь сквозную единую идентификацию объектов, 4) применять методы родительских классов.
Пандора вычисляет бинарные (байтовые) панхэши, и в своей работе оперирует ими при идентификации и поиске объектов.
Возникновение записей
Существует всего два способа, какими запись попадает в вашу Пандору:
1) вы сами ввели запись;
2) запись пришла к вам по сети.
Каждая запись помечается панхэшем создателя.
Запись, однажды введенная, обладающая своим уникальным панхэшем и помеченная панхэшем создателя, начинает своё путешествие в сети.
Поддержка записей
Если вы ввели запись, она автоматически помечается как «поддерживаемая». До тех пор, пока вы держите включенной пометку «поддерживаю», ваша Пандора будет хранить эту запись в базе.
Поддержка чем-то напоминает «лайк» в социальной сети. Но когда вы ставите «лайк», вы ничем по сути не помогаете записи. В Пандоре поддержка имеет физическую суть.
Например, когда вы смотрите фотографию друга, и она вам нравится - вы нажимаете «поддерживаю». С этих пор фотография задерживается в вашей базе. Ваши общие друзья смогут загрузить эту фотографию с Пандоры друга, или с вашего компьютера.
После загрузки чужие записи хранятся некоторое заданное время (например, для типа «персона» по умолчанию задано 3 дня), после чего записи, если им не была оказана поддержка или доверие автоматически удаляются с вашего узла.
Также вы можете настроить автоподдержку, т.е. автоматическое включение флага «поддерживаю» для записей по определенному условию. Например, вы можете указать, что всегда поддерживаете статьи Ивана Иванова, или анкеты своих друзей.
Доверенные записи
Доверие - это цифровое подписывание записи.
Например, если вы подписали анкету друга, вы гарантируете, что этот человек настоящий. Когда вы подписываете статью, вы подтверждаете истинность сведений, которые в ней содержатся. Когда вы оказываете «доверие» договору с вписанным своим именем, вы фактически принимаете этот договор.
Система доверия позволяет установить достоверность данных в Пандоре. Это одна из ключевых функций в работе сети.
Ваши друзья, близкие, партнеры, единомышленники, увидев подпись, понимают, что это проверенные данные. Пользуйтесь доверием ответственно. Оказывая доверие сомнительным данным, вы можете подмочить свою репутацию.
Оказанное доверие не обязывает вас хранит саму запись, но всего лишь подпись этой записи. Тем не менее, по умолчанию Пандора настроена хранить доверенные записи также как и поддерживаемые.
Публичные записи
Пометка на записи «публичная», делает запись всенародной. Публиковаться могут общеупотребительные данные, например, анкеты исторических деятелей, или энциклопедические статьи.
Если запись помечена как «публичная» и уходит в сеть, то её скорее всего будет уже не сделать обратно приватной. Это не баг Пандоры – такова природа сети.
Но даже если запись опубликована, то она будет жить в сети пока получает поддержку, и/или ей оказано доверие.
Неинтересные записи, без поддержки и доверия быстро «угасают». В Пандоре происходит настоящая борьба записей за поддержку и доверие.
Вы можете публиковать как свои записи, так и чужие. Но публикация чужих записей без согласия создателя является дурным тоном.
Изменение записей
Вы можете изменить свою запись или чужую. В любом случае при изменении записи создается "патч", которые распространяется среди заинтересованных узлов. Может получиться так, что первоначальная запись создана одним человеком, а затем несколько других внесли изменения. Участники Пандоры могут поддерживать патчи, оказывать им доверие и публиковать, т.е. патчи обладают всеми свойствами записи.
Так, в Пандору заложена возможность совместной разработки записей любого типа, начиная от энциклопедической статьи, и заканчивая региональным постановлением.
Мнения
Каждая запись может быть прокомментирована и оценена участниками Пандоры. Для этого создается специальная запись – мнение. Мнение содержит панхэш комментируемого объекта, панхэш создателя мнения, оценку от -127..+128 (или 0, если нейтрально), текст комментария (или пусто, если только оценка) и время создания мнения.
Мнение может комментировать другое мнение. Так образуются ветки дискуссии. Если мнение состоит только из оценки, то оно прибавляет, или убавляет рейтинг записи, к которой относится, но не отображается в ветке. Если мнение содержит еще и текст, то кроме влияния на рейтинг записи, оно еще отображается в ветке дискуссии.
Слушание
Обычно Пандора при запуске сама входит в режим слушания. Ручное включение и выключение режима слушания доступно командой Пандора-Слушать. В режиме слушания внизу в статусной строке высветится ваш IP-адрес.
При этом IP-адрес может быть всегда одинаковым (статическим), а может меняться время от времени (быть динамическим).
Если вы обладаете статическим IP-адресом, то можете сообщить друзьям свой IP-адрес, чтобы они добавили его в свой список узлов. Кроме того, если вы обладатель статического адреса, то ваша Пандора будет также выполнять функцию трекера для ваших друзей, коллег, клиентов, единомышленников и т. д., в зависимости от той настройки, которую вы пожелаете.
Если у вас динамический адрес, то сообщать его друзьям смысла нет. Динамические адреса могут быть определены только через общих друзей, обладающих статическими узлами.
Когда ваша Пандора находится в режиме слушания, другие пользователи могут подключаться к вам, считывать и записывать данные на которые у них есть разрешения.
Сразу после установки Пандоры заданы минимальные разрешения, которые со временем вы можете расширить для своих друзей и других доверенных групп.
Добавление узлов
В списке Пандора-Узлы добавьте узел, IP-адрес который вам удалось узнать. Достаточно указать только IP-адрес, другие поля будут заполнены автоматически при обмене данными.
Не беспокойтесь, что вам постоянно придется вручную вводить адреса. В основном таблица узлов будет пополняться автоматически при обмене данными с другими узлами. При этом узлы также являются записями, которые распространяются по цепочкам доверия.
Охота
Узел Пандоры перебирает известные узлы, и этим самым как бы выходит на охоту. При этом охотник ищет слушающие узлы. Если «охотник» нашел «слушателя», он подключатся к нему, и начинается обмен данными. Обычно, узел Пандоры находится и в режиме слушания и в режиме охоты одновременно.
Хотя соединение всегда инициирует охотник, сразу после подключения различие между охотником и слушателем стираются, обмен данными идёт в обе стороны. При этом каждый узел выставляет свои запросы, а другой узел должен ответить на эти запросы.
Соединение или разрывается сразу после обмена данными, или остаётся подключенным, если было запрошено живое общение (чат, звонок или игра).
Пандора в режиме охоты циклически опрашивает только те узлы, на которые вы подписаны.
Подписки
Подписки определяют данные какого типа необходимо запрашивать у заданных сообществ, людей или узлов. Например, вы можете указать, чтобы ваша Пандора запрашивала новые фотографии группы «Мои друзья», или новые товары у заданной компании.
Сообщения и звонки
Кроме обмена записями Пандора поддерживает обмен сообщениями, голосовой разговор, видео звонок и игры.
При открытии окна разговора Пандора подключается к узлу, если не была подключена до этого, после чего можно отправлять мгновенные сообщения и запустить аудио или видео поток. Кроме того можно поиграть, например в «Морской бой» или «Шахматы».
Схема работы узла - циркуляция данных
При каждом подключении создается сокет. Сокеты создаются как слушателем, так и охотником. На каждое соединение запускается свой обработчик. Все установленные соединения регистрируются в списке активных узлов.
Обработка данных соединения
Обмен данными происходит асинхронно. Каждый узел отправляет запросы и блоки данных в одной очереди, а принимает ответы и данные в другом цикле. Пакеты со звуком и видео при отправке помечаются с большим приоритетом, а на приеме обрабатываются в первую очередь, эти медиа пакеты не требуют подтверждения. Напротив, записи передаются в запросах, и требуют подтверждения о приеме.
Техническая реализация
При построении Пандоры выбирались кросс платформенные, популярные, ясные и хорошо документированные компоненты.
Вот текущий список: ruby, gtk, sqlite, openssl, gstreamer.
Установка программы
1. Установите git в Ubuntu:
sudo apt-get install git
(в Windows установите "Git-x.x.x...exe" отсюда:
http://code.google.com/p/msysgit/downloads/list)
2. Создайте пустой каталог "Pandora", оставаясь в нем скачайте Pandora используя git:
mkdir /home/user/Pandora
cd /home/user/Pandora
git clone https://github.com/Novator/Pandora.git
3. Сделайте скрипт Pandora.sh запускамым (только для Ubuntu):
chmod +x ./pandora.sh
4. Установите дополнительные пакеты для Ubuntu:
sudo ./pandora.sh --init
(в Windows вы можете распаковать архив отсюда:
https://github.com/Novator/RubyFull/raw/master/rubyfull.exe)
5. Запуск Pandora в Ubuntu:
./pandora.sh
(в Windows запускайте bat-файл pandora.bat)
Стойте же!
Описанный выше функционал еще не работает!
Несколько лет назад я сел писать свободную бухгалтерию. Неоднократно я менял название и концепцию системы. В итоге пришел к тому, что описано в этой статье. Код пишу урывками, в свободное время. Работы еще очень много, а реальная жизнь засасывает и постоянно отвлекает от программирования... с каждым днем все больше и больше. Испугавшись, что я так и не успею реализовать проект, решил опубликовать хотя бы то, что есть. Хотя бы озвучить идею.
Возможно, мне удастся довести Пандору до какого-либо рабочего состояния. Но возможно, упавшее знамя придется подхватить более молодым.
Другие подобные системы
Пандора не первая и не единственная социальная пиринговая сеть.
Существует несколько интересных проектов:
http://p2pframework.com/?page_id=9&lang=en
http://gitorious.org/social-p2p/
http://blogs.cs.st-andrews.ac.uk/peerbook/
http://www.st-andrews.ac.uk/news/archive/2010/title,53046,en.php
Но все они ограничены функцией социальной сети. Пандора же призвана быть универсальной системой, для общения, бизнеса и управления обществом.
Возможное будущее
Основная идея Пандоры в том, чтобы не общество определялось государством, а государство формировалось обществом.
Я как бы задался вопросом: «Почему мы, граждане, бежим за чиновниками? Глядим в рот чиновникам, подстраиваемся под них, и ждем от них решений наших проблем? Почему бы чиновникам не бежать за нами?» Спасение утопающих – дело рук самих утопающих.
У общества должен быть инструмент, пользуясь которым, граждане смогут создавать проекты, совместно дорабатывать их и оказывать им доверие.
Решения должны приниматься авторитетными гражданами, специалистами в своих отраслях, которым общество оказало доверие.
Государственные службы из ленивого, ненасытного и карательного органа должны превратиться в немых исполнителей народной воли.
Мы занимаемся похожим проектом, только на более глубоком уровне. С онтологиями и логическим выводом. Если интересно, давайте скооперируемся.
ОтветитьУдалитьСейчас, как раз, думаю над p2p инфраструктурой.
Я тоже самое хотел предложить. :) У меня уже несколько месяцев дело должно завершится прототипом, но всё никак не получается.
ОтветитьУдалитьНо p2p у меня только в планах на обсуждение.
Давайте попробуем пообщаться?
gazdovsky.evgeny - мой скайп
ОтветитьУдалитьтут несколько тезисов:
https://docs.google.com/document/d/1DrlUT30L1qeRcyjTxGi3Zu5IPUpI4ia3Uu7YHoDYMGE/edit
https://docs.google.com/document/d/1YNS620KgRENI6pCWtUqSwBVFj-opR2nsqLst7xFp6vI/edit#heading=h.ifjpeqxzbyqh
можно оставлять комментарии на полях
Рад, что я не один на этой планете! :)
ОтветитьУдалитьНо у меня достаточно авторитарный стиль созидания.
Думаю, мы сможем положительно влиять друг на друга показывая прототипы и делясь детальными концепциями по работе p2p-системы.
Обещаю публично сообщать о своих успехах, если таковые будут.
Лично пообщаться со мной можно в фейсбуке или вконтакте (robux), скайпом я сейчас не пользуюсь.
Концепция p2p она одна -) все уже придумано и реализовано в виде протоколов и их реализаций, но хочется воспользоваться готовой инфраструктурой. Смотрю в сторону i2p.
ОтветитьУдалитьЯсно. Жаль. Значит будем пилить по отдельности, повторяя ошибки друг друга. :)
ОтветитьУдалитьЭто ответ на ваш комметарий, на мою заметку :)
ОтветитьУдалить>Не всё то популярно, что в браузере. :)
>Браузер, по моему, – это тупиковый путь.
Как мне кажется, заставить пользователя установить приложение сложнее чем аддон. Но даже не в этом дело, а в том что приложение будет служить для того же что и браузер - получать информацию из сети -- оно будет конкурировать с браузером за внимание пользователя.
И тут возникает проблема, так как у большинства людей браузер - главное приложение на десктопе, оно дает больше свободы, понятно что победит браузер. Ведь пользователь не откажется от документов в гугл докс, поиска гугл и фейсбука. Приложение - будет удел гиков и любителей анонимности.
Выход - тесная интеграция с браузером: аддон или веб-интерфейс поднятый на localhost.
И нельзя забывать смартфоны и планшеты.
Хотел бы поучаствовать в разработке, но моих способностей наверно недостаточно.
Welcome! мы именно так себе и представляем. Узел сети может быть как и локальным (на localhost) так и где-нибудь и в сети не суть важно. А интерфейсом будет браузер.
УдалитьПро сложность установки согласен. Но дело в том, что браузером нельзя многое сделать. В том числе то, от чего зависит удобство пользователя. Когда этот брузер достигнет "высот" приложений? А пользоваться приложением я планирую начать в ближайшее время. ;)
УдалитьВообще, это направление неизвестно сколько времени будет оставаться гиковским. :) Сколько лет контекстному вебу, который до сих пор не взлетел.
Ну и также Wellcome! :) Но по другому адресу: http://obcom.ws/
Этот комментарий был удален автором.
ОтветитьУдалитьПри запуске просто мелькает окошко консоли и всё. Cистема-Windows 7.
ОтветитьУдалить