Недавно на Хабре зашла речь о протоколе Gemini и других возможных альтернативах современному перегруженному Web. Один из участников высказал мысль, что раз для отображения Web-страницы нужен текст, картинки, шрифты и стили, то нужно передавать всё это в едином файле и в бинарном виде, а не собирать по кусочкам. И тут я подумал: а ведь есть формат, в котором всё перечисленное уже предусмотрено. Это PDF, который к тому же с 2008 года является открытым стандартом. Причём программы-просмотрщики для него гораздо менее требовательны к ресурсам, чем современные броузеры. И более того, уже сейчас поисковики умеют индексировать PDFы!
В общем, для чисто контентных сайтов типа моей личной страницы xxxxpro.ru или typologies.ru это могло бы стать отличным решением. Более того, как выяснилось, в PDFах также могут быть и формы, что даёт возможность сделать и базовую интерактивность типа формы обратной связи или комментариев. И такие страницы будет удобно сохранять к себе на компьютер!
Главный минус такого подхода — это непривычность для пользователя. Кроме того, не знаю, можно ли сделать в PDFе фиксированное меню сбоку или сверху, которое оставалось бы всегда доступным (аналог position: sticky в CSS), а также чтобы документ не разбивался на страницы, как книжка, а показывался единым потоком до конца текущего раздела.

Был в Сети сегодня, 00:29
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Сейчас специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb.
- Перово, Москва, Россия
- me@4xpro.ru
- x4_pro
- XXXXPro
Новости сайта в Telegram
t.me/4x_proИдеи и размышления
В этом разделе я публикую те идеи, которые могут сделать жизнь лучше, но которые не могу реализовать сам (чаще всего из-за нехватки ресурсов). Буду рад, если они пригодятся кому-либо еще.
Вычислительные облигации

Пришла в голову мысль, что если уж неразумная часть человечества готова активно жечь ресурсы на майнинг криптовалют, то нужно сделать такую, добыча которой делалась бы с полезными вычислениями. Точнее, это должны быть некие «облигации на вычислительную мощность», если так можно выразиться. То есть сначала некто, у кого есть есть потребность в определённом количестве вычислительной мощности (назовём его эмитент) создаёт токен-запрос на выполнение определённого объёма нужных ему вычислений, причём в этот токен сразу закладывается программа для их выполнения и проверки корректности. Далее любой участник сети, который готов предоставить свои мощности, может взяться за эти вычисления. После их выполнения токен-облигация превращается в единицу криптовалюты, которой можно либо расплачиваться с другими участниками сети (на тех же принципах, что работают те же bitcoinы), либо предъявить эмитенту для обмена на живые деньги, после чего эмитент сможет эту «облигацию» погасить.
Причём поиск и передача вычислительных заданий должна быть автоматизирована. Ближайшие аналоги из того, что есть сейчас — это платформа распределённых вычислений BIONC и платформа облачного гейминга drova. (Только в первой — участие добровольное за идею участия в прогрессе человечества), то есть просто в фоне висит приложение и что-то считает/выполняет, беря столько процессорного времени, сколько разрешено в настройках.
К сожалению, не знаю, можно ли такое сделать на смарт-контрактах Etherium, или же потребуется полностью своя инфраструктура. К тому же возникают вопросы корректности вычислений и их безопасности, чтобы не превратить такую сеть в гигантский ботнет.
Причём поиск и передача вычислительных заданий должна быть автоматизирована. Ближайшие аналоги из того, что есть сейчас — это платформа распределённых вычислений BIONC и платформа облачного гейминга drova. (Только в первой — участие добровольное за идею участия в прогрессе человечества), то есть просто в фоне висит приложение и что-то считает/выполняет, беря столько процессорного времени, сколько разрешено в настройках.
К сожалению, не знаю, можно ли такое сделать на смарт-контрактах Etherium, или же потребуется полностью своя инфраструктура. К тому же возникают вопросы корректности вычислений и их безопасности, чтобы не превратить такую сеть в гигантский ботнет.
Подмножество HTML+CSS для приложений

Сейчас всё чаще и для desktop и для мобильных появляются приложения, основанные на Web-технологиях. То есть по сути, представляют набор HTML+JavaScript, запускаемых во встроенном броузере. У этого подхода немало плюсов (дешевизна разработки, кроссплатформенность), но есть недостаток: потребление ресурсов существенно выше, чем у native-приложений. Во многом потому, что современный броузер — сам по себе очень технически сложный продукт (на Хабре видел даже точку зрения, что операционную систему написать проще, чем броузер).
Но с другой стороны, для приложений в большинстве случаев все возможности броузера и не нужны. Например, всякие WebGL, CSS animations, transformations и т.п. Возникла мысль, что есть смысл стандартизировать некое подмножество HTML+CSS, которое наиболее востребовано именно в типичных приложениях, и сделать лекговесную, быструю и экономную по памяти версию броузера, из которой убрано всё лишнее (а также всякие quirks mode, работа с невалидным HTML-кодом и т.п.) специально для использования именно в приложениях.
Но с другой стороны, для приложений в большинстве случаев все возможности броузера и не нужны. Например, всякие WebGL, CSS animations, transformations и т.п. Возникла мысль, что есть смысл стандартизировать некое подмножество HTML+CSS, которое наиболее востребовано именно в типичных приложениях, и сделать лекговесную, быструю и экономную по памяти версию броузера, из которой убрано всё лишнее (а также всякие quirks mode, работа с невалидным HTML-кодом и т.п.) специально для использования именно в приложениях.
Диагностика с помощью мобильника

Случайно наткнулся на статью про то, как болезнь Альцгеймера диагностировали с помощью акселерометра. И возникла мысль: а ведь можно сделать мобильное приложение, которое будет работать аналогичным образом. То есть распознавать такие отклонения в походке по встроенному в мобильник акселерометру (возможно, с обработкой нейросетью) и предупреждать, если появятся опасные признаки.
Политические координаты: альтернативная система

Пару раз проходил в ВК приложение с тестом на политические взгляды, которое выдаёт результат в системе координат из двух осей: левый/правый, авторитарный/антиавторитарный. Подробнее эта система координат описана здесь: https://vk.com/@polmemes-kak-rabotaut-politicheskie-koordinaty.
Такая система хороша для характеристики различных партий, режимов и движений, но, на мой взгляд, не полностью отражает то, что лежит в основе выбора отдельной личности. Наблюдая за околополитической руганью на разных площадках Интернета (в первую очередь, в ЖЖ и на Дзене), я пришёл к выводу, что для этой цели подошла бы другая система координат: Справедливость/Семья в качестве вертикальной оси и Желание предсказуемости/Вера в себя по горизонтальной.
Дихотомия Справедливость/Семья проявляется в ситуациях наподобие такой: «Ваш близкий родственник (в идеале — сын или дочь), будучи слегка выпившим, сел за руль и совершил наезд на пешехода с нанесением ему тяжёлых травм. Существует возможность помочь ему уйти от ответственности, дав крупную сумму в качестве взятки.» Соответственно, те, кому ближе Справедливость, в такой ситуации откажутся, те, кому ближе Семья — согласятся. Второй пример выбора в сторону Справедливости — это знаменитая фраза, приписываемая Сталину — «я солдат на фельдмаршалов не меняю», сказанная по поводу возможного обмена его сына, попавшего в плен, на фельдмаршала Паулюса.
Вторая ось характеризует то, верит ли человек в себя и готов рисковать в жизни ради крупных выигрышей (а также идти ради них на конкуренцию с другими) или предпочитает жить в условиях меньших свобод и возможностей, но бо́льших социальных гарантий. Оценить это можно по тому, насколько близка такая метафора: «Птица на дереве не боится, что ветка сломается, потому что она доверяет не ветке, а своим собственным крыльям.»
Если взглянуть на данные координаты с точки зрения типологий личности, то Семья/Справедливость будет коррелировать с менталитетами Переслегина: интелям и буржуа ближе всего Справедливость, варварам — Семья, аристократы — где-то посередине. А Желание предсказуемости/Вера в себя — с диагональю системы DISC: типу C ближе всего левая позиция («Желание предсказуемости»), типу D — правая («Вера в себя»).
P.S. Если у кого есть идеи, как дать название полюсам горизонтальной дихотомии из одного слова, пишите в комментарии.
Такая система хороша для характеристики различных партий, режимов и движений, но, на мой взгляд, не полностью отражает то, что лежит в основе выбора отдельной личности. Наблюдая за околополитической руганью на разных площадках Интернета (в первую очередь, в ЖЖ и на Дзене), я пришёл к выводу, что для этой цели подошла бы другая система координат: Справедливость/Семья в качестве вертикальной оси и Желание предсказуемости/Вера в себя по горизонтальной.
Дихотомия Справедливость/Семья проявляется в ситуациях наподобие такой: «Ваш близкий родственник (в идеале — сын или дочь), будучи слегка выпившим, сел за руль и совершил наезд на пешехода с нанесением ему тяжёлых травм. Существует возможность помочь ему уйти от ответственности, дав крупную сумму в качестве взятки.» Соответственно, те, кому ближе Справедливость, в такой ситуации откажутся, те, кому ближе Семья — согласятся. Второй пример выбора в сторону Справедливости — это знаменитая фраза, приписываемая Сталину — «я солдат на фельдмаршалов не меняю», сказанная по поводу возможного обмена его сына, попавшего в плен, на фельдмаршала Паулюса.
Вторая ось характеризует то, верит ли человек в себя и готов рисковать в жизни ради крупных выигрышей (а также идти ради них на конкуренцию с другими) или предпочитает жить в условиях меньших свобод и возможностей, но бо́льших социальных гарантий. Оценить это можно по тому, насколько близка такая метафора: «Птица на дереве не боится, что ветка сломается, потому что она доверяет не ветке, а своим собственным крыльям.»
Если взглянуть на данные координаты с точки зрения типологий личности, то Семья/Справедливость будет коррелировать с менталитетами Переслегина: интелям и буржуа ближе всего Справедливость, варварам — Семья, аристократы — где-то посередине. А Желание предсказуемости/Вера в себя — с диагональю системы DISC: типу C ближе всего левая позиция («Желание предсказуемости»), типу D — правая («Вера в себя»).
P.S. Если у кого есть идеи, как дать название полюсам горизонтальной дихотомии из одного слова, пишите в комментарии.
Использование blockchain для оценки доверия сайту

Давно интересуюсь вопросами доверия в Интернете, и пришла в голову мысль, что тут могла бы пригодиться blockchain-технология для создания отзывов и оценок. В результате придумал алгоритм, который выглядит так (если расписать с помощью традиционных для криптографии персонажей Алиса, Боб и Чарли): Читать далее…
Смартфон в роли ноутбука

Не раз видел информацию о том, что продажи стационарных компьютеров и ноутбуков всё падают и падают под влиянием смартфонов, и задался вопросом: а можно ли ноутбук заменить смартфоном полностью. Плюсы такого решения очевидны: все нужные файлы всегда с собой, нет проблем с синхронизацией между разными устройствами, полностью бесшумная работа, экономия электроэнергии.
Впервые задумался об этом еще в 2012 году, когда только когда купил свой самый первый смартфон на Android. Было интересно, можно ли телефоном заменить ноутбук хотя бы для базовых задач типа просмотра сайтов, видео и набора текстов для блога. На большее тогда производительности не хватало.
Решил попробовать: подключил клавиатуру и мышь через USB hub и внешний монитор через mini HDMI-разъём. Результаты совершенно не порадовали: телефон на внешний разъем выдавал то же разрешение, что и на основном экране (854x480, которое на FullHD-экране получалось непропорционально растянутым и размазанным), раскладку клавиатуры получилось переключать только с помощью стороннего приложения и то по какому-то неудобному сочетанию клавиш. Из-за всего этого я идею забросил быстро и использовал мобильник только как вспомогательное устройство.
На последующих смартфонах разъёма mini HDMI уже не было, поэтому больше к таким экспериментам я не возвращался. Вместо этого задумывался о покупке компьютера в форм-факторе HDMI stick, но слишком уж не устраивало соотношение производительность/цена.
Но недавно узнал, что с появлением в телефонах поддержки USB 3.1 с разъемами Type C к ним стало возможно подключать хабы, в которых есть не только разъёмы USB, но и HDMI и даже RJ-45 (разъем для Ethernet), что вновь даёт возможность вернуться к идее «смартфон как замена ноутбука везде, где есть соответствующий хаб».
Так что единственное, что на мой взгляд, сейчас мешает такому использованию — это интерфейс мобильных приложений. У сенсорных экранов большая плотность пикселей на дюйм, поэтому элементы управления и шрифты имеют большой размер. При подключении к внешнему монитору это становится главным неудобством: информации на экране умещается гораздо меньше, чем на настоящем ноутбуке. Кроме того, в мобильных приложениях отсутствует такое явление, как горячие клавиши.
На мой взгляд, это можно легко преодолеть, если разработчики приложений начнут учитывать такую возможность и делать приложения с двойным интерфейсом: один вариант, с крупными кнопками — для обычного смартфонного режима, второй с мелкими элементами — для работы в режиме подключения к хабу. Вопрос только в том, насколько быстро такой режим использования смартфона станет массовым, чтобы разработчики прислушались к запросу таких пользователей.
Впервые задумался об этом еще в 2012 году, когда только когда купил свой самый первый смартфон на Android. Было интересно, можно ли телефоном заменить ноутбук хотя бы для базовых задач типа просмотра сайтов, видео и набора текстов для блога. На большее тогда производительности не хватало.
Решил попробовать: подключил клавиатуру и мышь через USB hub и внешний монитор через mini HDMI-разъём. Результаты совершенно не порадовали: телефон на внешний разъем выдавал то же разрешение, что и на основном экране (854x480, которое на FullHD-экране получалось непропорционально растянутым и размазанным), раскладку клавиатуры получилось переключать только с помощью стороннего приложения и то по какому-то неудобному сочетанию клавиш. Из-за всего этого я идею забросил быстро и использовал мобильник только как вспомогательное устройство.
На последующих смартфонах разъёма mini HDMI уже не было, поэтому больше к таким экспериментам я не возвращался. Вместо этого задумывался о покупке компьютера в форм-факторе HDMI stick, но слишком уж не устраивало соотношение производительность/цена.
Но недавно узнал, что с появлением в телефонах поддержки USB 3.1 с разъемами Type C к ним стало возможно подключать хабы, в которых есть не только разъёмы USB, но и HDMI и даже RJ-45 (разъем для Ethernet), что вновь даёт возможность вернуться к идее «смартфон как замена ноутбука везде, где есть соответствующий хаб».
Так что единственное, что на мой взгляд, сейчас мешает такому использованию — это интерфейс мобильных приложений. У сенсорных экранов большая плотность пикселей на дюйм, поэтому элементы управления и шрифты имеют большой размер. При подключении к внешнему монитору это становится главным неудобством: информации на экране умещается гораздо меньше, чем на настоящем ноутбуке. Кроме того, в мобильных приложениях отсутствует такое явление, как горячие клавиши.
На мой взгляд, это можно легко преодолеть, если разработчики приложений начнут учитывать такую возможность и делать приложения с двойным интерфейсом: один вариант, с крупными кнопками — для обычного смартфонного режима, второй с мелкими элементами — для работы в режиме подключения к хабу. Вопрос только в том, насколько быстро такой режим использования смартфона станет массовым, чтобы разработчики прислушались к запросу таких пользователей.
Площадка для IT-квестов

Несколько раз находил и проходил в Интернете различные IT-квесты, и мне это очень нравилось. Но увы, сейчас они разбросаны по различным сайтам, и найти их достаточно непросто. Возникла мысль,что можно сделать площадку для таких квестов, аналогичную сайту CodinGame, на котором проводятся соревнования по созданию AI-ботов для игр. И конечно же, на этой площадке можно будет предусмотреть возможность профилей с рейтингами, а также возможность создавать новые квесты силами самих участникам сообщества. Более того, такую площадку можно даже монетизировать за счет работодателей, которые ищут IT-специалистов, например, путём платного размщения вакансий или проведения спонсируемых конкурсов, как это иногда делается на CodinGame.
Есть, правда, несколько технических сложностей. В первую очередь, обеспечить запуск всех нужных для каждого квеста сервисов. Например, в одном из квестов, которые я проходил, был нужен Web-сервер на нестандарном порту, REDIS и MongoDB, в другом — интерператор Python. С другой — защиту как от вандализма, когда действия одного пользователя приводят к невозможности прохождения квеста другими участниками,так и от использования площадки для атак на внешние ресурсы. Но, полагаю, это вполне решаемо.
Есть, правда, несколько технических сложностей. В первую очередь, обеспечить запуск всех нужных для каждого квеста сервисов. Например, в одном из квестов, которые я проходил, был нужен Web-сервер на нестандарном порту, REDIS и MongoDB, в другом — интерператор Python. С другой — защиту как от вандализма, когда действия одного пользователя приводят к невозможности прохождения квеста другими участниками,так и от использования площадки для атак на внешние ресурсы. Но, полагаю, это вполне решаемо.
Алгоритм расчёта социального доверия

Наверное, каждый, получая запрос в друзья в социальной сети от незнакомого человека, задавался вопросом, а кто это вообще и что от него ожидать. Нормальный ли это человек, желающий пообщаться, тролль, просто неадекват или очередная попытка продать что-то? Большие социальные сети, такие как VKontakte или Facebook, пытаются решить эту проблему, показывая список общих друзей. Но этого явно недостаточно: кто-то из друзей добавляет всех подряд, кто-то добавился к вам в друзья много лет назад, но вы с ним давно не общались и уже толком не помните кто это. Или же общих друзей и вовсе нет. Возникает необходимость в какой-то дополнительной оценке незнакомца, причем такой, чтобы ее можно было посчитать алгоритмически.
Но что же может быть исходными данными для такого алгоритма? Для начала рассмотрим первый уровень социального графа — тех людей, с которыми мы когда-либо взаимодействовали в Сети непосредственно. Среди них есть те, с кем мы с кем мы общаемся интенсивно, кому уделяем больше времени, и те, о ком даже вспоминаем изредка. Очевидно, что в большинстве случаев уровень доверия у первых выше. Но измерить время общения напрямую — задача сложная, кроме того, еще будет влиять скорость чтения и скорость печати. Гораздо проще измерять результаты взаимодействия: подсчитать количество лайков, репостов, комментариев, личных сообщений — иными словами, социальных взаимодействий. Очевидно, что разные взаимодействия будут иметь разный «вес»: полноценный комментарий ценнее простого лайка. Ориентировочно значения коэффициентов такие: лайк — 1, личное сообщение — 1, репост без комментария — 2, репост с комментарием — 3, написание комментария к сообщению — 5, отправка записи на стену — 6, добавление в друзья — 15, нахождение в одной группе — 1. Также можно ввести еще отрицательный коэффициент за бан, но это немного усложит расчеты. При этом считаются только взаимодействия с нашей стороны, чтобы сделать рейтинг устойчивым к накрутке. Теперь, просуммируем вес взаимодействий по каждому пользователю (обозначим это как Ni) и общий вес всех наших взаимодействий (Ns) и рассчитаем коэффициент доверия как их отношение:
T0,i=Ni/Ns
Перейдем теперь ко второму уровню социального графа. На нем находятся все те, с кем взаимодействовали пользователи первого уровня (но для избежаний зацикливания исключим из их числа тех, для кого уже известны коэффициенты доверия, то есть себя и других пользователей 1-ого уровня), проще говоря — «друзья друзей». Для каждого пользователя первого уровня мы можем посчитать их коэффициенты доверия по отношению к пользователям второго уровня по той форумле, которая была описана на предыдущем шаге (обозначим их как Ti,j, где i — i-ый пользователь из первого уровня, j — j-ый пользователь второго уровня, а нулевой пользователь — мы сами). Очевидно, что наше доверие «другу друга» должно определяться двумя составляющими — тем, насколько ему доверят «друг» с первого уровня, и тем, насколько мы доверяем «другу». С точки зрения математики это можно записать как произведение соответствующих коэффициентов доверия. Но часто бывает так, что с одним пользователем второго уровня взаимодействовало несколько человек из тех, с кем взаимодействуем мы. В этом случае нужно просто просуммировать получившиеся произведения коэффициентов доверия. В итоге получаем следующую формулу (суммирование ведется по i):
T0,j=∑T0,i*Ti,j
Зная коэффициенты доверия к пользователям второго уровня социального графа, можно аналогичным образом рассчитывать коэффициенты для последующих уровней. Делать это потребуется до того момента, пока не доберемся до уровня, на котором находится тот незнакомец, уровень доверия к которому необходимо рассчитать. Если предположить, что «теория семи рукопожатий» верна, то получится, что таких уровней будет не более семи.
За счет того, что мы считаем только взаимодействия, инициированные самим пользователем, алгоритм является устойчивым к накруткам до тех пор, пока верно предположение, что большинство людей в нашем окружении первого-второго уровней не взаимодействуют с деструктивными аккаунтами (боты, спаммеры) активнее, чем с нормальными людьми. Кроме того, следует учитывать, что некоторые виды взаимодействий (в первую очередь комментарии) могут не означать доверие в привычном смысле этого слова. Например, можно писать множество комментариев тому, кто по тем или иным причинам вызывает бурное неприятие.
Главная сложность в реализации этого алгоритма для больших социальных сетей (Одноклассники, ВК, Facebook) заключается в том, что нет готовых методов, которые позволили бы быстро получить количество взаимодействий. Чтобы подсчитать количество лайков, репостов и т.п., нужно просканировать всю соцсеть, что с учетом ограничений на количество запросов по API в единицу времени, будет очень долгой операцией. А часть информации — количество личных сообщений или факт внесения в черный список — и вовсе останется недоступной.
Но существуют так же и децентрализованные соцсети, основанные на open source-решениях и расширяемых протоколах, например, Diaspora или Mastodon. В них эту проблему можно решить гораздо горзадо проще: модифицировать программное обеспечение таким образом, чтобы подсчитывались все исходящие взаимодействия, а потом добавить в протокол либо выдачу их количества (показателя Ni), либо самого доверия вместе с профилем пользователя или с списком его друзей. Более того, на мой взгляд, реализация такого алгоритма может дать дополнительное преимущество таким соцсетям и стать одним из факторов, который развернет Интернет обратно в сторону децентрализации.
Но что же может быть исходными данными для такого алгоритма? Для начала рассмотрим первый уровень социального графа — тех людей, с которыми мы когда-либо взаимодействовали в Сети непосредственно. Среди них есть те, с кем мы с кем мы общаемся интенсивно, кому уделяем больше времени, и те, о ком даже вспоминаем изредка. Очевидно, что в большинстве случаев уровень доверия у первых выше. Но измерить время общения напрямую — задача сложная, кроме того, еще будет влиять скорость чтения и скорость печати. Гораздо проще измерять результаты взаимодействия: подсчитать количество лайков, репостов, комментариев, личных сообщений — иными словами, социальных взаимодействий. Очевидно, что разные взаимодействия будут иметь разный «вес»: полноценный комментарий ценнее простого лайка. Ориентировочно значения коэффициентов такие: лайк — 1, личное сообщение — 1, репост без комментария — 2, репост с комментарием — 3, написание комментария к сообщению — 5, отправка записи на стену — 6, добавление в друзья — 15, нахождение в одной группе — 1. Также можно ввести еще отрицательный коэффициент за бан, но это немного усложит расчеты. При этом считаются только взаимодействия с нашей стороны, чтобы сделать рейтинг устойчивым к накрутке. Теперь, просуммируем вес взаимодействий по каждому пользователю (обозначим это как Ni) и общий вес всех наших взаимодействий (Ns) и рассчитаем коэффициент доверия как их отношение:
T0,i=Ni/Ns
Перейдем теперь ко второму уровню социального графа. На нем находятся все те, с кем взаимодействовали пользователи первого уровня (но для избежаний зацикливания исключим из их числа тех, для кого уже известны коэффициенты доверия, то есть себя и других пользователей 1-ого уровня), проще говоря — «друзья друзей». Для каждого пользователя первого уровня мы можем посчитать их коэффициенты доверия по отношению к пользователям второго уровня по той форумле, которая была описана на предыдущем шаге (обозначим их как Ti,j, где i — i-ый пользователь из первого уровня, j — j-ый пользователь второго уровня, а нулевой пользователь — мы сами). Очевидно, что наше доверие «другу друга» должно определяться двумя составляющими — тем, насколько ему доверят «друг» с первого уровня, и тем, насколько мы доверяем «другу». С точки зрения математики это можно записать как произведение соответствующих коэффициентов доверия. Но часто бывает так, что с одним пользователем второго уровня взаимодействовало несколько человек из тех, с кем взаимодействуем мы. В этом случае нужно просто просуммировать получившиеся произведения коэффициентов доверия. В итоге получаем следующую формулу (суммирование ведется по i):
T0,j=∑T0,i*Ti,j
Зная коэффициенты доверия к пользователям второго уровня социального графа, можно аналогичным образом рассчитывать коэффициенты для последующих уровней. Делать это потребуется до того момента, пока не доберемся до уровня, на котором находится тот незнакомец, уровень доверия к которому необходимо рассчитать. Если предположить, что «теория семи рукопожатий» верна, то получится, что таких уровней будет не более семи.
За счет того, что мы считаем только взаимодействия, инициированные самим пользователем, алгоритм является устойчивым к накруткам до тех пор, пока верно предположение, что большинство людей в нашем окружении первого-второго уровней не взаимодействуют с деструктивными аккаунтами (боты, спаммеры) активнее, чем с нормальными людьми. Кроме того, следует учитывать, что некоторые виды взаимодействий (в первую очередь комментарии) могут не означать доверие в привычном смысле этого слова. Например, можно писать множество комментариев тому, кто по тем или иным причинам вызывает бурное неприятие.
Главная сложность в реализации этого алгоритма для больших социальных сетей (Одноклассники, ВК, Facebook) заключается в том, что нет готовых методов, которые позволили бы быстро получить количество взаимодействий. Чтобы подсчитать количество лайков, репостов и т.п., нужно просканировать всю соцсеть, что с учетом ограничений на количество запросов по API в единицу времени, будет очень долгой операцией. А часть информации — количество личных сообщений или факт внесения в черный список — и вовсе останется недоступной.
Но существуют так же и децентрализованные соцсети, основанные на open source-решениях и расширяемых протоколах, например, Diaspora или Mastodon. В них эту проблему можно решить гораздо горзадо проще: модифицировать программное обеспечение таким образом, чтобы подсчитывались все исходящие взаимодействия, а потом добавить в протокол либо выдачу их количества (показателя Ni), либо самого доверия вместе с профилем пользователя или с списком его друзей. Более того, на мой взгляд, реализация такого алгоритма может дать дополнительное преимущество таким соцсетям и стать одним из факторов, который развернет Интернет обратно в сторону децентрализации.
Инфохаб

Давно задавался вопросом, что придет на смену социальным сетям, и, кажется, нашел на него ответ. На смену социальным сетям в их нынешнем виде придет то, что я назвал инфохабом — некая площадка, которая позволяет собрать в одно место все важные для человека информационные потоки и управлять ими. Базовые функции — те же, что и в социальных сетях, но есть несколько принципиальных отличий:
- наличие переключаемых статусов с разграничением доступа (во многом аналогично тому, как это было в ICQ в свое время), например «готов общаться» — доступ открыт всем, «работаю» — доступ только набору контактов по работе, остальным приходит автоответ, что пользователь сейчас не доступен, ждите, «отдыхаю» — доступ имеет только другой набор контактов, и т.д. Статусы пользователь может создавать сам.
- возможность собирать информацию из множества источников. Как минимум, в инфохаб должны быть встроены клиенты к уже существующим соцсетям + RSS-клиент (еще одна вещь, которой мне крайне не хватает ВКонтакте). Причем видимые источники тоже зависят от выставленного статуса, так, например, при переключении статуса в «работаю» становятся недоступными ленты, помеченные как развлекательные.
- возможность пометить материал для того, чтобы прочитать/посмотреть позже (сейчас она, к сожалению, есть только в YouTube), причем в идеале еще с возможностью задать приоритет (сейчас мне этого очень не хватает ВК).
- разделение лайков как выражения одобрения, согласия и т.п. и оценки полезности материала.
- наличие возможности выкладывать больше количество своих материалов, которые не будут «уезжать» со временем (аналог Заметок, которые были ВК, кажется, до 2012 года).
- более развитые блоговые возможности (что у FB, что у ВК с этим весьма печально).
- Web-приложение, которое будет работать в режиме децентрализованной социальной сети, так, что каждый сможет держать свой инфохаб на собственном сервере с полным контролем над ним
- мобильное приложение, которое, по сути дела, будет мульти-клиентом для социальных сетей (аналогично тому, как как QIP и Pidgin являются мульти-клиентами для мессенджеров первого поколения). К сожалению, в этом случае непонятно, как реализовать функции хранения собственных материалов из пункта 5.