Connect with us

Разработка

КиноTinder, или как спасти человечество от муки выбора фильмов

Владимир Бондаренко из компании Mauris рассказал нам о тернистом пути еще одного своего проекта – рекомендательного сервиса для кино.

Mauris

Опубликовано

/

     
     

Как известно, соорудить из интересной задумки хорошо работающее, удобное и понятное приложение под силу далеко не каждому. Собственно, поэтому наш путь от идеи до ее реализации занял несколько лет.

Наверняка каждому известно чувство “хочу посмотреть то, не знаю, что, и никто мне не поможет”. Мысль о создании киносервиса посещала нас неоднократно. Но в 2013 году, когда трудовые будни хотелось скрасить хорошей подборкой фильмов на вечер, в очередной раз стало понятно: не все то нравится, чему ставят высокие оценки. Ни рейтинг «Имхонет», ни КиноПоиск и IMDB не смогли помочь в поиске подходящих фильмов. Киноленты с высоким рейтингом были либо просмотрены ранее, либо не интересны, что, собственно, ставило в ступор. А фильмы со средним рейтингом было трудно оценить и отобрать.

Во-первых, комментарии и рецензии делились на два полноценных лагеря: за и против. Во-вторых, сам процесс подбора фильмов занимал достаточно много времени (ведь каждый год только в Голливуде выпускают больше 800 фильмов и сериалов), и в большинстве случаев времени на просмотр киноленты просто не оставалось.

Так и пришла мысль создать сайт со специальным алгоритмом, целью которого является:

А) отображение ТОПа классных фильмов под интересы конкретного пользователя, базируясь на оценках ранее понравившихся фильмов;

В) предоставить возможность ранжирования рекомендаций фильмов, учитывая дополнительные параметры.

Однако приступив к работе, мы сразу же столкнулись с рядом проблем. То, что удобно разработчику, не всегда комфортно для пользователя: программирование заняло всего 2 дня, а превращение в понятный для пользователя сервис – больше года.

Проблема 1. Разработка удобного и понятного интерфейса для пользователя

Запуская сайт мы столкнулись с тем, что от пользователя требовалось воспроизвести в памяти просмотренные киноленты. Когда ресурс требовал ввести в поисковую строку 10 любимых фильмов, половина пользователей впадала в ступор: они просто не могли их вспомнить.

Решение: быстрый хотфикс с постоянно обновляемой подборкой фильмов с лучшим рейтингом – хорошая подсказка для забывчивых.

Проблема 2. Функция «просмотр фильма с другом» не сработала

На FB или ВК выбиралась страница пользователя, и по ней делался перекрестный анализ – какие фильмы не смотрели ни вы, ни он. Сервис хорошо подбирал фильмы в одиночном режиме, но при перекрестном анализе возникала проблема: система выдавала фильмы, которые в большинстве случаев не были интересны обоим пользователям. В итоге комбинацией из двух списков не пользовался практически никто.

Решение: отключили функцию, решив оставить ее доработку до лучших времен, когда сервис будет иметь постоянную аудиторию.

Взлет и падение

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

Весь back-end был написан на php, а в качестве БД использовалась MySQL. Для исправления ситуации требовалось максимально ускорить ресурс – то есть:

  • оптимизировать запросы в БД;
  • изменить алгоритм;
  • изменить  конфигурацию сервера;
  • дать возможность использовать частично предварительно сгенерированные данные (batch process) и кеши данных.

…к чему мы и приступили.

Проделанную нами работу можно разделить на несколько этапов:

1 этап. Сайт был мультиязычным: имел русскую и английскую локализации. Нам пришлось внедрить memcached – систему кэширования, в которой был заложен перевод контента, а также интерфейса. В итоге, все страницы стали отображаться вдвое быстрее – за счет выгрузки из оперативной памяти и устранения запросов в БД на перевод интерфейса.

2 этап. Объединил несколько операций:

  • изменение алгоритма получения данных;
  • разбивка сложных запросов на подзапросы;
  • применение табличных индексов;
  • оптимизация обработки строк (если просто соединить таблицы между собой через JOIN, не факт, что БД выберет оптимальный вариант работы сама);
  • использование memory-таблиц. Чтобы из автоматического JOIN-a таблиц использовать ручное соединение, мы сделали ряд простых запросов – они получали те же данные, но в определенном порядке. Это уменьшило количество обрабатываемых данных.

После этого мы занялись переводом индивидуального рейтинга фильма из обычной таблицы в memory (расположенную в оперативной памяти) – в результате получили хороший прирост.

Схема оптимизации была такой: после каждых трех оцененных фильмов происходит пересчет – данные генерируются очень часто, и у нас нет необходимости их хранить. Даже если база обнулится или что-то случится с сервером, мы просто заново сгенерируем для пользователя эти данные (по большей мере, они являются служебными).

Также мы применили ручное партицирование БД: сделали разбиение – оценки фильмов определенных групп посетителей сохранялись в разных таблицах – то есть мы горизонтально разбивали оценки по n-ому количеству таблиц в зависимости от растущей базы пользователей. Размер каждой таблицы был ограничен 1 миллионом записей: это позволяло выполнять sql-запросы с необходимой нам скоростью.

3 этап. Оптимизация сервера. На тот момент мы использовали VPS, ресурсы которого были ограничены, но после конфигурирования результат не заставил себя ждать. Мы увеличили количество одновременных подключений к БД и запросов на сервер.

4 этап. Мы запустили пересчет оценок. После первых дней работы сервиса стало ясно, что динамический подсчет рейтинга фильма замедляет время загрузки страницы: мониторились сотни записей и по ним выводились средние оценки. Написанный нами новый скрипт каждые сутки в 2 часа ночи запускал обновление данных по рейтингам, за счет чего время загрузки страницы сократилось.

Выполнение этих работ заняло несколько дней. В итоге, все закончилось хорошо: после перезапуска сайта все заработало.

Кстати, когда сервер упал, над нами начали сильно подшучивать: на форуме закрытого сообщества Лепрозорий пользователи оставляли в комментариях анимированный гиф-лоадер. Но они не понимали, что отправляя огромное количество этих гифок грузили сервер еще сильнее: у нас был один веб-сервер, который обрабатывал статическую и динамическую информацию. На форуме кеширование фото в комментариях отсутствовало. Люди использовали ссылку, и каждый раз, когда кто-то открывал наш форум и запрашивал 10 таких гифок – шло 10 запросов на сервер, что грузило его еще больше.

Смена концепции

Но веб-сервис – это не только вопросы разработки и техподдержки. Появилась проблема резкого падения числа пользователей. Картина была такова: пользователь заходил на сайт, проводил 2-3 часа за оценкой фильмов и исчезал. В лучшем случае возвращался еще несколько раз. Это дало нам повод задуматься о том, что в таком формате сервис себя исчерпал.

ДУБЛЬ №2

Сервис должен был стать более понятным по формату и мотивировать пользователя к последующим посещениям. Для этого надо было:

  • оптимизировать путь пользователя при работе с сервисом (ввести обучение);
  • разработать алгоритм по «удержанию» и привлечению пользователя.

Мы начали работу, параллельно выполняя заказы клиентов – а их было очень много. Прошло несколько месяцев, затем еще и еще, и спустя 2 года мы осознали: заказов становится только больше, мы работаем на пике. Если не реализовать наш проект сейчас, этого не случится никогда.

В итоге, в декабре 2016 года, мы вновь перезапустили сервис, преобразовав его формат.

Мы видели, что перспектива развития проекта на мобильном устройстве значительно выше:

  • есть возможность напомнить о себе с помощью push-уведомлений;
  • список фильмов всегда в кармане пользователя;
  • мобильный продукт вполне успешно способен отучить посетителя напрягать память (по аналогии с Тиндер) и спокойно «вести» его.

СЛОЖНОСТИ

  • Интерфейс. Как совместить свайпы влево и вправо с большим количеством функций приложения (смотрел, не смотрел, хочу посмотреть и т.д.)? Вариант «хочу смотреть – свайп вправо, не хочу – влево», а внизу «оценка» не оправдал надежд: плей-тест показывал, что люди просто не понимают, чего от них хотят. От бездумных свайпов и оценок наугад алгоритм начинал работать хуже.

Решение пришло тогда, когда мы этого вовсе не ожидали. Устроив выездные корпоративные каникулы с катанием на лыжах в австрийских Альпах, мы, 3 киномана, подключив дизайнера и бутылку приличного виски, нашли решение.

Концепт стал чуть сложнее, но возможность совершить ошибку была сведена к минимуму. Свайп вправо – пользователь видит, что фильм посмотрен, и ему предлагают поставить оценку по десятибалльной шкале. Свайп влево – фильм не был просмотрен ранее, поэтому нужно выбрать один из 3 пунктов («не хочу смотреть», «хочу посмотреть», «не определился»). Мы пожертвовали удобством интерфейса ради того, чтобы процент непонимания механики свелся к нулю. В итоге, пользователь стал понимать, что и зачем он делает, более осознанно принимать решения, после чего алгоритм выдавал ему подходящие фильмы.

Первая подборка для оценки состояла из фильмов с высокими баллами топовых рейтингов – и при этом большинство из них люди просто не смотрели. После 3 свайпов «не смотрел» они разочаровывались и повально закрывали приложение. Вначале для решения проблемы просто поставили фильтры (стали показывать фильмы последних 10 лет), но это не помогло.

Проблему пришлось решать вручную: собрались командой разработчиков и за один вечер сформировали перечень из 52 фильмов, которые видело большинство. Именно их пользователи оценивают в первой выдаче.

Подборка была составлена из фильмов разных жанров, чтобы по их истечению у человека сформировалась разнородная картина, и приложение могло направить его в любое русло, в зависимости от предпочтений. После этого количество пользователей, «прошедших» первые 5 фильмов, составило 95%.

Что в итоге?

Мы запустили приложение, провели бета-тестирование, собрали фидбек, внедрили ряд доработок и сейчас выпустили обновленную версию, которая уже доступна в Google Play и App Store. С iOS версией все оказалось сложнее – нам пришлось пережить 5 проверок от придирчивых модераторов: сотрудники компании Apple тщательно тестируют каждое приложение на всех iOS гаджетах. Они смогли отловить баг при запуске iPhone приложения на iPad, который состоял в том, что при свайпе карточка не уходила, ее нужно было вести пальцем до конца экрана. Основная часть проблем была юридического характера, а именно связана с авторским правом на постеры, которые используются в приложении. Нам пришлось потратить много времени на составление обращения к правообладателям, подбор постеров с определенным типом лицензии, а также разработку механизма, который помогает быстро исключить фильм в случае запроса от правообладателя.

В обновленной версии пользователей ожидает множество фич:

  1. Ежедневные подборки фильмов на разнообразные тематики – отличная альтернатива свайпанью и получению рекомендаций. Мы ожидаем, что это мотивирует людей чаще пользоваться приложением.
  2. Расширенный профиль со статистикой по своим оценкам и определением любимых жанров, а также система достижений пользователя. Также теперь в выдачу можно добавить сериалы.
  3. Поиск фильма: можно сразу найти кино и добавить его в список «хочу посмотреть» или оценить просмотренные ранее фильмы. Добавлена функция «поделиться фильмом с другом» (ссылка, при переходе по которой открывается страница фильма).
  4. PRO-режим – возможность получить полный доступ к фильмам (в рекомендациях представлены скрытые фильмы) и увидеть расширенную статистику по своим оценкам.

В ближайших планах:

  • выпустить обновление с фильтрацией фильмов по актеру;
  • добавить возможность комментировать фильмы и сериалы;
  • создать ленту, в которой можно будет следить за обновлениями и оценками друзей.

Качайте в App Store и Google Play, ставьте оценки, оставляйте отзывы. Будем признательны за любую обратную связь о проделанной нами работе!

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
Click to comment

You must be logged in to post a comment Login

Leave a Reply

Кроссплатформенная разработка

Google выпустил последнюю превью-версию Flutter

На Google Developer Days China была объявлена финальная девелоперская версия Flutter.

AppTractor

Опубликовано

/

Автор:

Судя по всему, Flutter Release Preview 2  – последняя версия перед выпуском стабильной версии Flutter 1.0, которая должна выйти в этом году.

Это уже шестая итерация почти за полтора года – первый анонс Flutter состоялся на Google I/O в мае 2017 года, а первая бета вышла в феврале.

В Flutter Release Preview 2 – поддержка фонового выполнения задач, уменьшение размера приложений до 30%, «pixel-perfect» приложения для iOS и расширенная поддержка этой системы.

Как говорит Google, на Flutter уже есть приложения Alibaba (Android, iOS), Tencent Now (Android, iOS) и Google Ads (Android, iOS).

 

 

Комментарии
Продолжить чтение

Новости

Интересные материалы: 19.09

У нас сегодня инструменты, уроки, курсы и исследования.

AppTractor

Опубликовано

/

Автор:

Весь день мы собираем лучшие материалы о разработке и маркетинге технологий, стартапов, мобильных приложений и игр для iOS и Android из самых разных источников:

Комментарии
Продолжить чтение

Исследования

Новый отчет Developer Economics «Состояние нации разработчиков»

Компания SlashData опубликовала новый отчет из серии Developer Economics «Состояние нации разработчиков» за второй квартал 2018 года.

AppTractor

Опубликовано

/

Автор:

Это обобщенные данные опроса, который проходил весной, и на который ответило более 20,000 человек.

Ключевые выводы:

  • Data science и машинное обучение станут наиболее востребованными навыками в следующем году – 45% разработчиков хотят получить опыт в этих областях.
  • 33% разработчиков хотят изучать UI-дизайн, 25% – облачную разработку. Интерес к изучению других языков программирования меньше. Похоже, что разработчики хотят дополнять свои навыки, а не улучшать.
  • DevOps все более распространен – каждый восьмой в опросе работал над проектами из этой сферы.
  • У 40% есть интерес к роботам, но только 9% разработчиков работает над реальными проектами.
  • JavaScript остается самым популярным языком программирования:

  • Разработчики игр стали зарабатывать больше. Если в первой половине 2017 года только 29% опрошенных получали более 100 долларов в месяц от своих игр, то сейчас таких 48%.
  • Игровая разработка смещается в веб – в 2017 году 38% разработчиков игр работали для веба, а сейчас их 43%, в то время как доля смартфонов, планшетов и десктопов снизилась.

Весь отчет вы можете скачать по ссылке: http://sdata.me/DE2Q18DD.

Комментарии
Продолжить чтение

Новости

У Humble Book Bundle книги по разработке игр

В Humble Book Bundle новая распродажа – на этой неделе книги по разработке игр.

AppTractor

Опубликовано

/

Автор:

За 1 доллар вы можете получить руководства по Blender и SFML, учебник  по игровой физике, можете узнать основы Unreal Engine 4 и разработки игр на C++.

Заплатив 8 долларов вы получите еще 9 книг – про AI, OpenGL, VR, Unity, игровой дизайн.

Последний шаг – 15 долларов и еще 11 книг. Тут есть руководства по Vulkan, Godot, Swift, углубленные учебники по C++, Unity, Unreal.

 

Комментарии
Продолжить чтение

Реклама

Наша рассылка

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Вакансии

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.