--- title: Рекомендации на Twitch lang: ru tags: Blog, Software, Programming, Streaming --- # Twitch и моя система рекомендаций ## Введение Мне нравятся стримы: [не только вести](https://www.twitch.tv/AlexWayfer), но и смотреть. В основном пользуюсь Twitch: платформа не идеальная, но для меня подходящая и, пожалуй, самая популярная в Европе. Столкнулся для себя с проблемой: иногда хочется кого-то/что-то смотреть, с кем-то общаться (не всегда это стример, часто это участники адекватного чата), пока занимаюсь своими делами, но из каналов, на которые подписан, все оффлайн (или онлайн что-то неинтересное). Я не знаю, насколько подобная проблема популярна, потому как я давно приучил себя отписываться (и не подписываться) на мало значимое, мало интересное, мало полезное. К тому же, человек я непростой, и примерно только с 5–10% людей нахожу общий язык (оценка без статистики, можете не верить). Например, когда у меня был ВК, я чистил там друзей с сотни до 15, и паблики примрено так же. На Twitch есть рекомендованные каналы. Сначала я их заметил в меню слева (красным), потом на странице подписок (зелёным). ![](https://i.imgur.com/sGWwhzm.jpg) Списки разворачиваются, но там не более 10 каналов. Мне не очень понятен алгоритм рекомендаций, наверняка там куча факторов, но, как мы выяснили с друзьями, влияет даже то, что твои друзья смотрят прямо сейчас. Но что самое ужасное: я не мог найти кнопку "Скрыть". Меня (как можно было понять по одному из абзацев выше, если вдруг плохо знаете) бесят очень многие люди, по всяким мелочам: вера в богов, в карму, неадекватные правила ("не матерись", но стример матерится; "не советуй", но стример прислушивается к советам), гомофобия, просто тупость. Ну и некоторые игры или виды деятельности не нравятся, вроде просмотра мультфильмов-сериалов. ## Решение В итоге я захотел сделать свою систему рекоммендаций (яжпрограммист), при чём абстрактную: сначала для Twitch (мне нужнее всего), потом может для Twitter, чего-то ещё, где есть подписки/друзья. Причин несколько: 1. Скрыть наконец шлак (мнение субъективно) и отображать более релеватные для меня сущности. 2. Отображать более 10 рекомендаций, которые, очевидно, часто могут быть неточными. 3. Попробовать себя в алгоримтах рекомендаций, насколько плохо или хорошо получится относительно существующих встроенных на площадках. ## Развитие Я сделал основную функциональность в виде Ruby gem (подключаемой библиотеки (куска кода)). Да, я люблю Ruby. Я, честно, пробовал изначально сделать на [Crystal](https://crystal-lang.org/): язык не новый для меня, но для развития в нём (не всё же вокруг на Ruby писать), и я ожидал больших нагрузок на систему (прикидывал требования алгоритма: подписки подписок, друзья друзей, и так далее), но мне не понравилось мета-программирование (макросы) в Crystal, ну и с БД там туго. Можно было потерпеть, смириться, обойти, но всё же я решил попробовать сделать на Ruby и забить (пока что) на ресурсы компьютеров (серверов). Дальше нужно делать сайт (я же веб-разработчик, и нужен user-friendly интерфейс), но для проверки работоспособности и личного ускоренного использования я сделал CLI инструмент. Всё работало неплохо, но были замечания, новые задачи (связанные с языком стрима, scoring, прочим). ## Поворот №1 Первое событие, которое порушило как минимум вторую причину разработки своей системы — я обнаружил [страницу с (вроде) неограниченным количеством рекомендуемых каналов](https://www.twitch.tv/directory/all). Первые 10 совпадают с рекоменадциями из вышеупомянутых блоков, но есть и другие десятки. После этого разработка приостановилась, ведь я стал пользоваться этой страницей, и даже проблема невозможности скрытия немного нивелировалась (неограниченным?) количеством каналов. Но всё же нерелевантные каналы мешали, раздражали, тратили время и внимание. И я решил возобновить разработку своей системы. ## Отклонение Но параллельно я решил попробовать сделать расширение для Chrome! Я давно хочу поделать какие-нибудь полезные для себя расширения, но вроде всегда нахожу удовлетворяющие существующие. Мой друг [Саша](https://satont.js.org/), как оказалось, делал подобное расширение, но немного для другой задачи: ему не нужны были рекомендации, но тоже хотелось скрыть мусор из панели слева. И его расширение лишь скрывало конкретные каналы. Я решил применить подобный подход, но на обнаруженную недавно страницу со всеми рекомендуемыми каналами. И раз уж это расширение — можно оформить его, сделать open-source, стримить процесс разработки. Накидал задач (план разработки), таких как "внесение причины", "срок скрытия", "синхронизация через облако", подготовился, и… ## Поворот №2 …решил перед стримом сделать небольшой research (который стоит делать перед проработкой идеи вообще, пожалуй). И первые ссылки из выдачи Google показали мне кнопку (пункт контекстного меню), которую я хочу, но не видел и не подозревал о её существовании! ![](https://i.imgur.com/8VM5WUO.png) Она действительно существует. Не везде, где вы видите каналы, а именно на странице со всеми рекомендациями. То есть, те же рекомендации, но в виде блока на странице подписок или в постоянном боковом меню вообще, не имеют подобных кнопок. Я считаю это огромной UX ошибкой со стороны Twitch. Даже обнаружился [целый раздел в личных настройках с управлением скрытых рекомендаций категорий, каналов и видео (WTF?)](https://www.twitch.tv/settings/recommendations): ![](https://i.imgur.com/WxnlWnH.png) ## Итог Я воспользовался этой функцией и вполне доволен результатом: теперь 2 причины из 3 для создания собственной системы рекомендаций погашены. Я всё ещё не считаю рекоменадции Twitch шикарными, и мне всё ещё интересно попробовать сделать (доделать) свою систему и померяться "умом", хотя и будучи со стороны клиента, обладающего значительной меньшей информацией о пользователях и их активности. Но и расширение можно сделать: можно взять идею Саши (кнопки в тех местах рекомендаций, где их сейчас нет) и привязать к ней запросы скрытия из рекомендаций, которые делает Twitch на полной странице. Данная функциональность значительно проще ранее задуманной, но и немного уступает: нет причин, автоматических сроков. Зато с синхронизацией! Если что и выйдет путного — то опубликую в [своём Twitter](https://twitter.com/AlexWayfer), пожалуй.