company_banner
  • Как мы научились делить видео на сцены с помощью хитрой математики

      За 10 лет существования ivi мы собрали базу из 90000 видео разной длины, размера и качества. Каждую неделю появляются сотни новых. У нас есть гигабайты метаданных, которые полезны для рекомендаций, упрощают навигацию по сервису и настройку рекламы. Но извлекать информацию непосредственно из видео мы начали только два года назад.

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

      image
      Читать дальше →
    • Как мы рекомендуем новинки каталога в онлайн-кинотеатре ivi (+ код на Python)

        В блоге онлайн-кинотеатра ivi накопилось достаточно статей про архитектуру рекомендательной системы Hydra. Однако рекомендации — это не только внешний API, но и алгоритмы, которые живут «под капотом» и реализуют достаточно сложную бизнес-логику.

        В этой статье я расскажу о проблеме «холодного старта» контента. Если вам интересно узнать, как мы рекомендуем контент, который недавно добавился в каталог и не успел набрать фидбэк от пользователей — добро пожаловать под кат.


        Статья будет содержать воспроизводимый пример кода на языке Python с использованием Keras.
        Читать дальше →
      • Спасти программиста Вову: как прошла HighLoad++ для стенда ivi

          7-8 ноября на территории Школы управления СКОЛКОВО состоялась крупнейшая профессиональная конференция для разработчиков высоконагруженных систем — HighLoad++. В этом году она прошла в счастливый 13-й раз. Онлайн-кинотеатр ivi и HighLoad++ — давние партнёры, а наш CTO eross входит в программный комитет, задача которого выбрать самые актуальные и интересные доклады среди всех присылаемых на отбор.



          Читать дальше →
        • Компас команды

            Привет! Меня зовут Маша, я Scrum Master в ivi. Работаю с командами биллинга и веб-разработки и помогаю ребятам организовывать рабочие процессы так, чтобы не только эффективно достигать целей, которые ставит бизнес, но и получать удовольствие от того, что ты делаешь. В своих статьях хочу делиться опытом, как настраивать свою собственную работу и работу команд, если вы Scrum Master или Team Lead. А в этой статье давайте поговорим о важности культуры обратной связи.

            Фидбэк от других участников команды является компасом, по которому каждый определяет, куда двигаться дальше. Согласно Патрику Ленсиони, один из пяти пороков команды — нетребовательность друг к другу. Этот порок достаточно сложно «вылечить». Но при этом он может оказаться губительным.


            Читать дальше →
          • Привет, Хабр! Меня зовут Александр Дружков, сейчас я работаю заместителем технического директора ivi, но помню наш сервис маленьким сайтом, который бесплатно показывал интересные фильмы в промежутках между рекламой. Я расскажу, как нам удалось проделать путь до сервиса на 50 миллионов пользователей, какие технологии и решения нам помогли, с какими трудностями сталкивалась наша команда и как менялись наши задачи.
            Подробности – под катом
          • Внедрение Airflow для управления Spark-джобами в ivi: надежды и костыли

              Задача деплоя моделей машинного обучения в продакшн — это всегда боль и страдания, потому что очень некомфортно вылезать из уютного jupyter notebook в мир мониторинга и отказоустойчивости.

              Мы уже писали про первую итерацию рефакторинга рекомендательной системы онлайн-кинотеатра ivi. За прошедший год мы почти не дорабатывали архитектуру приложения (из глобального — только перезд с устаревших python 2.7 и python 3.4 на «свежий» python 3.6), зато добавили несколько новых ML моделей и сразу столкнулись с проблемой выкатывания новых алгоритмов в продакшн. В статье я расскажу про наш опыт внедрения такого инструмента управления потоками выполнения задач как Apache Airflow: почему у команды возникла эта необходимость, чем не устраивало существующее решение, какие костыли пришлось запилить по дороге и что из этого получилось.

              → Видео-версию доклада можно посмотреть на ютубе (начиная с 03:00:00) здесь.


              Читать дальше →
              • +34
              • 4,3k
              • 6
            • От UI-kit до дизайн-системы

                Опыт онлайн-кинотеатра Иви

                Когда в начале 2017 года мы впервые задумались о создании собственной системы доставки дизайна в код, об этом уже многие говорили и кто-то даже делал. Однако, об опыте построения кроссплатформенных дизайн-систем и по сей день мало что известно, а понятных и проверенных рецептов, описывающих технологии и способы подобной трансформации процесса имплементации дизайна в уже работающий продукт как не было, так и нет. Да и под «компонентами в коде» часто понимают очень разные вещи.


                Меж тем компания год от года удваивала штат — нужно было масштабировать отдел дизайна и оптимизировать процессы создания и передачи макетов в разработку. Умножаем всё это на «зоопарк» платформ, которые нужно поддерживать, и получаем подобие вавилонского столпотворения, которое просто не способно «нормально делать» и приносить доход. Развитие платформ часто шло параллельно, и один и тот же функционал мог выходить на разных платформах с лагом в несколько месяцев.
                Читать дальше →
              • Фасилитатор с дипломом

                  На случай, если вы не знаете, кто такой фасилиатор
                  Фасилитатор (англ. facilitator, от лат. facilis «лёгкий, удобный») — это человек, обеспечивающий успешную групповую коммуникацию (wiki)

                  TL;DR: с сентября 2018 года стартует магистерская программа, созданная ivi совместно с МАИ — «Управление процессом разработки ПО».


                  На сегодняшний день IT – одна из самых быстроразвивающихся и востребованных отраслей с постоянно меняющимся ландшафтом. Спрос на рынке труда в данном направлении уже давно превышает предложение, и наряду с этим, молодым специалистам зачастую сложно адаптироваться в реалиях современных компаний имея за спиной хорошее академическое образование. Получается, что сегодня самое эффективное IT-образование должно качественно балансировать между академической частью и опытом практических компаний с реальными успешными кейсами. Только это гарантирует быструю адаптацию и эффективность молодого специалиста на рынке. Надоело писать код? Хочешь, чтобы это делали другие? Добро пожаловать под кат.
                  Читать дальше →
                  • +13
                  • 3,7k
                  • 1
                • Персональные рекомендации в ivi: Hydra

                    В онлайн-кинотеатре ivi десятки тысяч единиц контента и задача «выбрать, что посмотреть» становится нетривиальной.


                    О рекомендательной системе в ivi, которая занимается подбором контента на основе пользовательских интересов (внутреннее название — Hydra) мы писали тут и тут. Прошло уже много времени и код проекта значительно изменился: оффлайн часть переехала на Spark, онлайн часть адаптировалась к высоким нагрузкам, Hydra начала использовать другую рекомендательную модель — все эти изменения будут освещены в статье.
                    Читать дальше →
                    • +12
                    • 4,4k
                    • 6
                  • Авиахакатон

                      6-8 апреля на территории Московского авиационного института прошел хакатон, организованный IT-центром МАИ, на котором были представлены задачи от IT-компаний и представителей авиационной индустрии.

                      Онлайн-кинотеатр ivi выступил партнёром хакатона: предоставил набор данных о контенте, а также осуществил менторскую поддержку команд. Финальные презентации оценивало независимое жюри, в которое вошли представители it-центра МАИ. Немного подробностей под катом.
                      Читать дальше →
                    • «Мамкин архитектор». Часть 1: Взлеты и падения программной инженерии

                        Доброго времени суток, уважаемые читатели Хабра. Представляю вашему вниманию цикл статей «Мамкин архитектор». Этот цикл статей вдохновлен книгой Эрика Эванса «Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем». В нем я постараюсь отразить личное мнение относительно построения гибких архитектур. Попутно объясню, как это пригодится менеджерам и поможет разработчикам укрепить основные понятия.

                        image

                        В этой статье речь пойдет о «творческом подъеме», «творческом спаде» и о покерном понятии «тильт». Последнее отлично отражает состояние разработчика в тех или иных состояниях предметной модели в разрезе программной архитектуры. Опус пригодится:

                        1. Менеджерам, решающим вопросы от разработчиков вроде «давайте все закопаем и переделаем».
                        2. Прикладным разработчикам, которым будет интересно заглянуть за броню инкапсуляции тщательно выстроенной (или хаусе) предметной модели в концептуальном ее виде.
                        3. Архитекторам или дизайнерам системы будет интересен мой опыт внедрения, поддержки и удержания предметной модели в концептуальных контурах.
                        Читать дальше →
                        • +13
                        • 10,7k
                        • 9
                      • Google leanback — забота большого брата

                          Добрый день, читатели Хабра. Хотел бы поделиться своим опытом разработки приложения для Android TV на примере DetailsFragment.


                          Есть официальные примеры тут и официальная документация тут. Что сподвигло меня выразить свое мнение? Это то, что официальные примеры не отвечают современным требованиям к разработке, например, модульности и расширяемости. Иногда создается некая двойственность при использовании того или иного механизма. Рассмотрим более подробно DetailsFragment.

                          Для того чтобы начать разрабатывать ваше приложение для платформы android, на мой взгляд, вам следует принять 2 основные истины:

                          • Плохая идея отходить от официальных рекомендаций и разрабатывать кастомизированное приложение. Гугл позаботился о том, чтобы сделать это было крайне сложно.
                          • Single Activity Architecture также не совсем подходит, это чревато утечками памяти, связанной с внутренними реализации библиотеки leanback.
                          Читать дальше →
                        • Как мы в ivi переписывали etl: Flink+Kafka+ClickHouse

                            Год назад мы решили переделать схему сбора данных в приложении и данных о действиях клиентов. Старая система работала исправно, но с каждым разом было всё сложнее и опаснее вносить туда изменения.



                            В этой статье я расскажу, какие технологии мы стали использовать для сбора и агрегации данных в новом проекте.
                            Читать дальше →
                          • Подключаем оплату через Apple Pay на сайте

                              Сейчас, в том числе и у нас на сайте, и в приложениях ivi, есть явная тенденция роста аудитории на мобильных устройствах. Также растет и доля покупок, совершаемых в интернете с мобильных устройств. В отличие от десктопа, помимо традиционных вариантов оплаты, доступны системы мобильных платежей, например Apple Pay, Android Pay, Samsung Pay. Эти системы можно использовать не только для оплаты в терминалах, принимающих банковские карты, но и для оплаты в приложениях и на веб-сайтах.


                              Внедрение мобильных платежей мы начали с веб-версии ivi и выбрали мобильный сайт и систему Apple Pay.
                              Читать дальше →
                            • Как мы делали приложение под Windows 10 с Fluent Design (UWP/C#)

                                Мы в ivi давно собирались обновить наше приложение под Windows 10 (которое для ПК и планшетов). Мы хотели сделать его эдаким «уютным» уголком для отдыха. И поэтому анонсированная недавно Microsoft-ом концепция fluent design пришлась нам очень кстати.

                                Но я не буду здесь рассказывать про стандартные компоненты, предлагаем Microsoft-ом для fluent design-а (Acrylic, Reveal, Connected-анимации и др.), хотя мы их, конечно, используем тоже. С ними всё просто и понятно — бери документацию и пользуйся. 

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

                                image

                                Идея в том, что мы используем depth и motion из fluent design system. Центральный элемент как бы слегка приподнимается надо всеми остальными. Это достигается за счёт анимации его размера и тени во время скролла. 
                                Читать дальше →
                              • Бот добра для Slack

                                  В этой статье я хочу рассказать о нашем боте для релизов. У нас много очень разных проектов, начиная от микросервисов backend(a), заканчивая приложением для win 10.

                                  Все хотят что-то выкатывать на прод, и нужно каким-то образом менеджерить этот процесс, не допуская одновременных релизов критических частей системы. Также необходимо иметь подробный лог всех всех релизов, чтобы в случае чего иметь возможность восстановить последовательность событий и найти релиз, который привел к неблагоприятным последствиям.

                                  Все началось вот с такого крика души:

                                  "Количество разработчиков растет, компания развивается и процесс выгрузки становится все сложнее и запутаннее. Очереди на «добро» скапливаются. Разработчик должен следить нет ли у кого вмерженной и невыгруженной задачи, хотя б на одном из сервисов перед ним и ждать когда, блокировка снимется. Если он еще не получил «добро», то периодически пинать добродавателей, т.к. сообщения с просьбой добра теряются в чатике. А выгрузиться хочется быстрее, потому, что если ты не выгрузишься сегодня, например, то завтра уже кто-то другой может вмержиться и не посмотреть, что предыдущий тег не выгружен => выгрузить незаметно для себя два — и все сломается. Это все превращается в маленький кошмар."
                                  Читать дальше →
                                • Декораторы и рефлексия в TypeScript: от новичка до эксперта (ч.3)

                                  • Перевод

                                  Эта статья — третья часть серии:



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


                                  В этой статье мы расскажем про:


                                  • Последний оставшийся тип декораторов — декоратор параметра
                                  • Реализацию фабрики декораторов
                                  • Реализацию конфигурируемых декораторов
                                  Читать дальше →
                                  • +8
                                  • 9,5k
                                  • 1
                                • Декораторы и рефлексия в TypeScript: от новичка до эксперта (ч.2)

                                  • Перевод

                                  Эта статья — вторая часть серии:



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


                                  Мы также узнали, как реализовать декоратор метода и ответили на основные вопросы про то, как декораторы работают в TypeScript:


                                  • Как они вызываются?
                                  • Кто передает в них аргументы?
                                  • Где объявлена функция __decorate?

                                  В этой статье мы познакомимся с двумя новыми типами декораторов: декоратором свойства (PropertyDecorator) и декоратором класса (ClassDecorator).

                                  Читать дальше →
                                  • +14
                                  • 13,2k
                                  • 5
                                • Декораторы и рефлексия в TypeScript: от новичка до эксперта (ч.1)

                                  • Перевод


                                  От переводчика: TypeScript — довольно молодой и активно развивающийся язык. К сожалению, в русскоязычной части Интернета о нем довольно мало информации, что не способствует его популярности.

                                  Многие возможности, которые сейчас реализованы в ES6, значительно раньше появились именно в TypeScript. Более того, некоторые возможности и предложенные стандарты ES7 также имеют экспериментальную реализацию в этом языке. Об одной из них, появившейся сравнительно недавно — декораторах — и пойдет речь.

                                  Предлагаю вашему вниманию перевод статьи (а точнее, цикла статей) о декораторах в TypeScript под авторством Remo H.Jansen

                                  Читать дальше →
                                  • +11
                                  • 46k
                                  • 5
                                • Разделяем интерфейсы для юнит-тестирования

                                    По блогу нашей компании может создаться впечатление, что мы занимаемся только data mining'ом и сетями. Поэтому я, как представитель девелоперского цеха, не смог отказать себе в удовольствии написать статью про то, как круто организовано unit-тестирование и разделение кода на модули у нас во фронтенде.


                                    Читать дальше →

                                  Самое читаемое