company_banner
  • Персональные рекомендации в ivi: Hydra

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


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

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

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

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

          image

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

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

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


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

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

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

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



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

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


                Внедрение мобильных платежей мы начали с веб-версии ivi и выбрали мобильный сайт и систему Apple Pay.
                Читать дальше →
                • +19
                • 5,2k
                • 6
              • Как мы делали приложение под 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
                    • 7,8k
                    • 1
                  • Декораторы и рефлексия в TypeScript: от новичка до эксперта (ч.2)

                    • Перевод

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



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


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


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

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

                    Читать дальше →
                    • +14
                    • 11,3k
                    • 5
                  Самое читаемое