Pandora – это распределенная (p2p) информационная система, включающая в себя функции социальной сети (аналогично facebook или vkontakte), средства голосового и видео общения (skype), энциклопедии (wikipedia), обмена файлами (torrent), деловой системы (1C), электронного магазина (ebay), реестра законов и стандартов (Консультант+), совместной работы над проектами (git), а также систему голосования и рейтингов (democratia2.ru).
Пандора может использоваться для личного общения, ведения бизнеса, создания проектов и совместного управления обществом.
Зачем нам сети?
Компьютерные сети прочно вошли в нашу жизнь. И уходить не собираются. Перечислим цели, которым служат компьютерные сети.
Мы узнаём новое. Общаемся с близкими. Заключаем сделки. Участвуем в совместной разработке проектов. Управляем процессами.
В интернете много сервисов. Несмотря на кажущееся разнообразие, основные сервисы достаточно централизованы. 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 дня), после чего записи, если им не была оказана поддержка или доверие автоматически удаляются с вашего узла.
Также вы можете настроить автоподдержку, т.е. автоматическое включение флага «поддерживаю» для записей по определенному условию. Например, вы можете указать, что всегда поддерживаете статьи Ивана Иванова, или анкеты своих друзей.
Доверенные записи
Доверие — это цифровое подписывание записи.
Например, если вы подписали анкету друга, вы гарантируете, что этот человек настоящий. Когда вы подписываете статью, вы подтверждаете истинность сведений, которые в ней содержатся. Когда вы оказываете «доверие» договору с вписанным своим именем, вы фактически принимаете этот договор.
Система доверия позволяет установить достоверность данных в Пандоре. Это одна из ключевых функций в работе сети.
Ваши друзья, близкие, партнеры, единомышленники, увидев подпись, понимают, что это проверенные данные. Пользуйтесь доверием ответственно. Оказывая доверие сомнительным данным, вы можете подмочить свою репутацию.
Оказанное доверие не обязывает вас хранить саму запись, но всего лишь подпись этой записи. Тем не менее, по умолчанию Пандора настроена хранить доверенные записи также как и поддерживаемые.
Публичные записи
Пометка на записи «публичная», делает запись всенародной. Публиковаться могут общеупотребительные данные, например, анкеты исторических деятелей, или энциклопедические статьи.
Если запись помечена как «публичная» и уходит в сеть, то её скорее всего будет уже не сделать обратно приватной. Это не баг Пандоры – такова природа сети.
Но даже если запись опубликована, то она будет жить в сети пока получает поддержку, и/или ей оказано доверие.
Неинтересные записи, без поддержки и доверия быстро «угасают». В Пандоре происходит настоящая борьба записей за поддержку и доверие.
Вы можете публиковать как свои записи, так и чужие. Но публикация чужих записей без согласия создателя является дурным тоном.
Изменение записей
Вы можете изменить свою запись или чужую. В любом случае при изменении записи создается “патч“, которые распространяется среди заинтересованных узлов. Может получиться так, что первоначальная запись создана одним человеком, а затем несколько других внесли изменения. Участники Пандоры могут поддерживать патчи, оказывать им доверие и публиковать, т.е. патчи обладают всеми свойствами записи.
Так, в Пандору заложена возможность совместной разработки записей любого типа, начиная от энциклопедической статьи, и заканчивая региональным постановлением.
Связи
Связь – это запись, показывающее отношение между двумя записями; содержит следующие поля:
1) панхэш первой записи
2) панхэш второй записи
3) тип связи (1 байт)
На текущий момент зарезервированы следующие типы связей, код означает «первая запись имеет следующее отношение ко второй»:
0 – равно
1 – подобие (синоним)
2 – антипод (антоним)
3 – породил
4 – входит в состав
5 – следит за
6 – игнорирует
7..254 — другое
255 — неопределенная связь
Примеры связей:
[персона: Линус/Торвальдс] 0 [персона: Линус/Торвальдс/28.12.1969]
означает, что любой Линус Торвальдс скорее всего тот самый.
[слово: классное] 1 [слово: клёвое]
слова «классное» и «клёвое» очень похожи
[слово: горячее] 2 [слово: холодное]
«горячее» антоним слову «холодное»
[персона: Линус/Торвальдс] 3 [персона: Патриция/Торвальдс]
Линус родитель Патриции
[персона: Линус/Торвальдс] 4 [сообщество: Разработчики ядра Linux]
Линус входит в состав сообщества
[сообщество: Жильцы дома №98] 5 [проект: Строительство детсада №7]
Жильцы дома следят за разработкой проекта садика в их дворе
[персона: Геннадий/Редискин] 6 [статья:P2P социальная сеть Pandora]
Геннадий равнодушен к некоторой статье, и не хочет больше получать эту запись при обмене с любыми узлами.
Связи могут использоваться в различных случаях, таких как: определение состава сообщества, выявление синонимов, причинно-следственные связи, работа «охотника» и т.д. Связям, как и другим записям, также может быть оказана поддержка и доверие.
Мнения
Каждая запись может быть прокомментирована и оценена участниками Пандоры. Для этого создается специальная запись — мнение. Мнение содержит панхэш комментируемого объекта, панхэш создателя мнения, оценку от -127..+127 (или 0, если нейтрально), текст комментария (или пусто, если только оценка) и время создания мнения.
Мнение может комментировать другое мнение. Так образуются ветки дискуссии. Если мнение состоит только из оценки, то оно прибавляет, или убавляет рейтинг записи, к которой относится, но не отображается в ветке. Если мнение содержит еще и текст, то кроме влияния на рейтинг записи, оно еще отображается в ветке дискуссии.
Слушание
Обычно Пандора при запуске сама входит в режим слушания. Ручное включение и выключение режима слушания доступно командой Пандора-Слушать. В режиме слушания внизу в статусной строке высветится ваш IP-адрес.
При этом IP-адрес может быть всегда одинаковым (статическим), а может меняться время от времени (быть динамическим).
Если вы обладаете статическим IP-адресом, то можете сообщить друзьям свой IP-адрес, чтобы они добавили его в свой список узлов. Кроме того, если вы обладатель статического адреса, то ваша Пандора будет также выполнять функцию трекера для ваших друзей, коллег, клиентов, единомышленников и т. д., в зависимости от той настройки, которую вы пожелаете.
Если у вас динамический адрес, то сообщать его друзьям смысла нет. Динамические адреса могут быть определены только через общих друзей, обладающих статическими узлами.
Когда ваша Пандора находится в режиме слушания, другие пользователи могут подключаться к вам, считывать и записывать данные на которые у них есть разрешения.
Сразу после установки Пандоры заданы минимальные разрешения, которые со временем вы можете расширить для своих друзей и других доверенных групп.
Добавление узлов
В списке Пандора-Узлы добавьте узел, IP-адрес который вам удалось узнать. Достаточно указать только IP-адрес, другие поля будут заполнены автоматически при обмене данными.
Не беспокойтесь, что вам постоянно придется вручную вводить адреса. В основном таблица узлов будет пополняться автоматически при обмене данными с другими узлами. При этом узлы также являются записями, которые распространяются по цепочкам доверия.
Охота
Узел Пандоры перебирает известные узлы, и этим самым как бы выходит на охоту. При этом охотник ищет слушающие узлы. Если «охотник» нашел «слушателя», он подключатся к нему, и начинается обмен данными. Обычно, узел Пандоры находится и в режиме слушания и в режиме охоты одновременно.
Хотя соединение всегда инициирует охотник, сразу после подключения различие между охотником и слушателем стираются, обмен данными идёт в обе стороны. При этом каждый узел выставляет свои запросы, а другой узел должен ответить на эти запросы.
Соединение или разрывается сразу после обмена данными, или остаётся подключенным, если было запрошено живое общение (чат, звонок или игра).
Пандора в режиме охоты циклически опрашивает только те узлы, на которые вы подписаны.
Подписки
Подписки определяют данные какого типа необходимо запрашивать у заданных сообществ, людей или узлов. Например, вы можете указать, чтобы ваша Пандора запрашивала новые фотографии группы «Мои друзья», или новые товары у заданной компании.
Подписки также регулируются связями типа 5 («следит за»).
Рыбалка
Рыбалка – это механизм запроса охотником у слушателя соединения с третьим узлом в случае, когда охотник не может соединиться с запрашиваемым напрямую, например, в случае нахождения третьего узла за NAT.
В зависимости от того, находятся третий узел на связи, или нет, является сам охотник публичным слушателем или нет, рыбалка выглядит следующим образом.
Например, A запрашивает у слушателя B проброс на узел C.
— A запрашивает у B рыбалку узла C
— если C подключен к B, узел B сообщает узлу C что его ищет A
— если C отключен, но слушает, к нему подключается узел B
— если C отключен и не слушает, то B запрашивает A: будет ждать (10 мин макс) или периодически подключаться (каждую 1 мин)?
— если A ждет — он висячий рыбак
— если A периодически опрашивает — он прыгающий рыбак
— если C подключился к B, то B сообщает C, что на него идет рыбалка от A, далее одно из трёх:
— C подключается к узлу A напрямую
— начинается разговор между A и C через B, если еще A висит на B
— узел B даёт узлу C время на встречную висячую рыбалку узла A (10 минут), если A прыгающий
— если прыгающий A появился за это время, их соединяют, если нет — оба рыбака снимаются с рыбалки
— рыбаки снимаются с рыбалки также по таймауту (10 мин)
Дополнительно:
— на узле (B) задается максимальное число заявок на рыбалку, например 500
— кроме того задается максимальное число подключенных рыбаков, например 20
— в заявке на рыбалку может фигурировать не только узел, но и панхеш человека или ключа
— узел B может задавать ограничения на объем трафика в ед. времени или запретить медиа-обмен.
Сообщения и звонки
Кроме обмена записями Пандора поддерживает обмен сообщениями, голосовой разговор, видео звонок и игры.
При открытии окна разговора Пандора подключается к узлу, если не была подключена до этого, после чего можно отправлять мгновенные сообщения и запустить аудио или видео поток. Кроме того можно поиграть, например в «Морской бой» или «Шахматы».
Схема работы узла — циркуляция данных
При каждом подключении создается сокет. Сокеты создаются как слушателем, так и охотником. На каждое соединение запускается свой обработчик. Все установленные соединения регистрируются в списке активных узлов.
Обработка данных соединения
Обмен данными происходит асинхронно. Каждый узел отправляет запросы и блоки данных в одной очереди, а принимает ответы и данные в другом цикле. Пакеты со звуком и видео при отправке помечаются с большим приоритетом, а на приеме обрабатываются в первую очередь, эти медиа пакеты не требуют подтверждения. Напротив, записи передаются в запросах, и требуют подтверждения о приеме.
Техническая реализация
При построении Пандоры выбирались кросс платформенные, популярные, ясные и хорошо документированные компоненты.
Вот текущий список: ruby, gtk, sqlite, openssl, gstreamer.
Установка программы
1. Установите git в Ubuntu:
sudo apt-get install git
(в Windows установите «Git-x.x.x…exe» отсюда:
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 вы можете распаковать архив отсюда:
github.com/Novator/RubyFull/raw/master/rubyfull.exe)
5. Запуск Pandora в Ubuntu:
./pandora.sh
(в Windows запускайте bat-файл pandora.bat)
Стойте же!
Описанный выше функционал еще не работает!
Несколько лет назад я сел писать свободную бухгалтерию. Неоднократно я менял название и концепцию системы. В итоге пришел к тому, что описано в этой статье. Код пишу урывками, в свободное время. Работы еще очень много, а реальная жизнь засасывает и постоянно отвлекает от программирования… с каждым днем все больше и больше. Испугавшись, что я так и не успею реализовать проект, решил опубликовать хотя бы то, что есть. Хотя бы озвучить идею.
Возможно, мне удастся довести Пандору до какого-либо рабочего состояния. Но возможно, упавшее знамя придется подхватить более молодым.
Другие подобные системы
Пандора не первая и не единственная социальная пиринговая сеть.
Существует несколько интересных проектов:
p2pframework.com/?page_id=9&lang=en
gitorious.org/social-p2p/
blogs.cs.st-andrews.ac.uk/peerbook/
http://www.st-andrews.ac.uk/news/archive/2010/title,53046,en.php
Но все они ограничены функцией социальной сети. Пандора же призвана быть универсальной системой, для общения, бизнеса и управления обществом.
Возможное будущее
Основная идея Пандоры в том, чтобы не общество определялось государством, а государство формировалось обществом.
Я как бы задался вопросом: «Почему мы, граждане, бежим за чиновниками? Глядим в рот чиновникам, подстраиваемся под них, и ждем от них решений наших проблем? Почему бы чиновникам не бежать за нами?» Спасение утопающих – дело рук самих утопающих.
У общества должен быть инструмент, пользуясь которым, граждане смогут создавать проекты, совместно дорабатывать их и оказывать им доверие.
Решения должны приниматься авторитетными гражданами, специалистами в своих отраслях, которым общество оказало доверие.
Государственные службы из ленивого, ненасытного и карательного органа должны превратиться в немых исполнителей народной воли.
Продолжение следует.
01.01.2013 добавлены главы «Связи», «Рыбалка», исправлены мелкие опечатки.