company_banner
  • 16 марта Вadoo PHP Meetup: тесты и качество кода. Регистрация открыта


      UPD. Добавили еще мест! Будет тесновато, но переживем.

      Всем привет!


      Меня зовут Владимир Янц, я активно занимаюсь развитием инфраструктуры тестирования кода в Badoo. С PHP у нас давние и крепкие отношения, и мы с коллегами всячески поддерживаем сообщество.


      Нас все спрашивали: “Когда же уже, когда?” — и вот оно.


      16 марта приглашаем на весенний Badoo PHP Meetup!


      Вторую встречу мы решили посвятить автотестам для PHP-разработчика. Тема будет интересна всем PHP-кам, которые самостоятельно тестируют свой код, и хотят максимально улучшить его качество. Опытным автотестировщикам тоже должно быть полезно, так что welcome!


      Обещаем только реальные кейсы из практики (как пишут автотесты), дискуссию о важном (о качестве кода, естественно) и живое обсуждение каждого доклада. Времени пообщаться у нас целый день (суббота) и даже вечер — желающих захватим с собой на afterparty.


      Первый доклад в 12:00. Событие бесплатное, только пожалуйста, не забудьте зарегистрироваться здесь и дождаться подтверждения.


      Читать дальше →
      • +28
      • 2,9k
      • 8
    • Реализуем UI в iOS: улучшаем, ускоряем, масштабируем

      • Перевод


      Привет! Меня зовут Азат Зулькарняев, я занимаюсь разработкой iOS-приложений в компании Badoo. При создании мобильных приложений большая часть времени уходит на разработку UI, и оптимизация этого процесса всегда является актуальной темой в среде разработчиков. Мой коллега Алексис Сантос написал статью о том, с какими проблемами мы столкнулись и как двигались в сторону их разрешения при работе над этой задачей. Я решил поделиться с вами переводом. Также рекомендую посмотреть запись недавнего доклада Игоря Савельева на Mobius 2018.

      Несколько месяцев назад я наткнулся на очень интересный документальный сериал от Netflix — «Абстракция: Искусство дизайна». В нём подробно рассматривается работа дизайнеров из разных сфер: архитектура, графический дизайн, мода и т. д. Нетрудно заметить определённое сходство их работы с деятельностью iOS-разработчиков, занимающихся реализацией пользовательских интерфейсов. В частности, ведя работу над крупным проектом, дизайнеры стараются разбить её на множество мелких задач по принципу «разделяй и властвуй» и получают возможность собрать все элементы воедино на более позднем этапе.
      Читать дальше →
      • +42
      • 4,2k
      • 1
    • io_submit: альтернатива epoll, о которой вы никогда не слышали

      • Перевод


      Недавно внимание автора привлекла статья на LWN о новом интерфейсе ядра для опроса (polling). В ней обсуждается новый механизм опроса в Linux AIO API (интерфейс для асинхронной работы с файлами), который добавили в ядро версии 4.18. Идея довольно интересная: автор патча предлагает использовать Linux AIO API для работы с сетью.

      Но постойте! Ведь Linux AIO был создан для работы с асинхронным вводом-выводом с диска / на диск! Файлы на диске — это не то же самое, что сетевые соединения. Возможно ли вообще использовать Linux AIO API для работы с сетью?

      Оказывается, да, возможно! В этой статье объясняется, как использовать сильные стороны Linux AIO API для создания более быстрых и лучших сетевых серверов.

      Но давайте начнём с разъяснения, что представляет собой Linux AIO.
      Читать дальше →
    • Анимации в iOS-приложениях, рождённые на сервере



        Полгода назад мы представили одну из самых впечатляющих функций Badoo — прямые трансляции. Среди прочего она позволяет пользователям выразить благодарность любимым стримерам в виде подарков. Мы хотели сделать эти подарки максимально яркими и привлекательными, поэтому решили их оживить — другими словами, анимировать. А чтобы было ещё интереснее, мы планировали обновлять подарки и анимации каждые несколько недель.

        iOS-инженеры наверняка догадались, о каких объёмах работы идёт речь: чтобы удалять старые и добавлять новые анимации, необходимо совершить множество действий с клиентской стороны. Для этого в каждом релизе должны быть задействованы Android- и iOS-команды, а вкупе со временем, необходимым на одобрение обновления в App Store, это означает, что запуск каждого релиза с обновлёнными анимациями может занять несколько дней. Однако нам удалось решить эту проблему, и сейчас я расскажу как.

        Архитектура решения


        К тому времени мы уже умели экспортировать анимации Adobe After Effects (далее — AAE) в понятный нашему iOS-приложению формат при помощи библиотеки Lottie. В этот раз мы пошли чуть дальше: решили хранить все актуальные анимации на сервере и скачивать их по мере необходимости.
        Читать дальше →
        • +40
        • 4,5k
        • 2
      • Courier: миграция Dropbox на gRPC

        • Перевод


        Примечание переводчика


        Большинство современных программных продуктов не являются монолитными, а состоят из множества частей, которые взаимодействуют друг с другом. При таком положении дел необходимо, чтобы общение взаимодействующих частей системы происходило на одном языке (притом что сами эти части могут быть написаны на разных языках программирования и выполняться на разных машинах). Упростить решение этой задачи помогает gRPC — open-source-фреймворк от Google, выпущенный в 2015 году. Он решает сразу ряд проблем, позволяя:

        • использовать язык Protocol Buffers для описания взаимодействия сервисов;
        • генерировать программный код на основании описанного протокола для 11 разных языков как для клиентской части, так и для серверной;
        • реализовать авторизацию между взаимодействующими компонентами;
        • использовать как синхронное, так и асинхронное взаимодействие.

        gRPC показался мне довольно интересным фреймворком, и мне было интересно узнать про реальный опыт компании Dropbox по построению системы на его основе. В статье есть масса деталей, связанных с использованием шифрования, построением надёжной, наблюдаемой и производительной системы, процессом миграции со старого RPC-решения на новое.

        Дисклеймер
        Оригинальная статья не содержит описания gRPC, и некоторые моменты могут показаться вам непонятными. Если вы не знакомы с gRPC или другими подобными фреймворками (например, Apache Thrift), рекомендую предварительно ознакомиться с основными идеями (достаточно будет прочитать две небольшие статьи с официального сайта: «What is gRPC?» и «gRPC Concepts»).

        Спасибо Алексею Иванову aka SaveTheRbtz за написание оригинальной статьи и помощь с переводом трудных мест.
        Читать дальше →
      • Liveprof покажет, когда и почему менялась производительность вашего PHP-приложения



          Привет, Хабр! Меня зовут Тимур Шагиахметов, я PHP-разработчик в Badoo.

          Производительность приложения — один из важнейших критериев качества работы программиста. В вопросах оптимизации PHP-приложений помощником является профайлер.

          Недавно мы рассказывали о том, какими инструментами пользуемся для профилирования. Напомню: одним из инструментов для анализа производительности, когда непонятно, какие части кода повлияли больше всего на увеличение времени формирования ответа, является XHProf. Это расширение для PHP, которое позволяет профилировать код на боевом сервере и впоследствии  улучшать его.

          Но хотелось бы ещё иметь историю изменения производительности, чтобы можно было отследить, что и когда повлияло на её ухудшение, не так ли? Для этого около года назад мы разработали Liveprof — инструмент для автоматического профилирования всех запросов с интерфейсом для анализа изменения производительности приложения.

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

          В этой статье я расскажу о деталях реализации и особенностях использования этого инструмента.
          Читать дальше →
          • +84
          • 9,8k
          • 6
        • Xcode 10.2, macOS Mojave 10.14.4, iOS 12.1 и другие бета-версии



            Вышли новые беты Xcode, macOS Mojave и iOS — и вот основные моменты, которые я усвоил.

            Swift 5 для Xcode 10.2 beta


            Swift


            Прежде всего, последняя бета-версия Xcode идет в комплекте с новой версией Swift:

            Apple Swift 5.0 (swiftlang-1001.0.45.7 clang-1001.0.37.7)
            Target: x86_64-apple-darwin18.2.0
            ABI version: 0.6


            Начнем с самых волнующих новостей:
            Приложения на Swift больше не включают в себя DLL для стандартной библиотеки Swift и оверлеи Swift SDK в версиях для устройств на iOS 12.2, watchOS 5.2 и tvOS 12.2. В результате Swift-приложения уменьшаются в размере при развертывании для тестирования в TestFlight или при сжатии архива для дистрибутива.
            ABI наконец-то станет стабильным, и это отличные новости. На мой взгляд, сегодня это одна из ключевых проблем Swift — не из-за побочных эффектов, а из-за невыполненных обещаний. Некоторые мои знакомые даже переписывают расширения для Apple Watch на Objective-C, чтобы уменьшить размер бинарного файла (примерно с 15 Мб до 1 Мб). Узнать больше о состоянии ABI можно по ссылкам: Информационная панель Swift ABI и Манифест стабильности Swift ABI.
            Читать дальше →
            • +48
            • 6,9k
            • 4
          • Как встроить С-библиотеку в Swift-фреймворк

            • Перевод


            В 2014 году был представлен Swift, новый язык для разработки приложений экосистемы Apple. Новинка принесла не только новые возможности и функции, но и проблемы — тем, кто хотел пользоваться старыми добрыми C-библиотеками. В этой статье я рассмотрю одну из них — бандлинг C-библиотеки в Swift-фреймворк. Существует несколько способов её решения; в данном случае я объясню, как сделать это при помощи clang explicit-модулей.

            Для примера мы возьмём внешнюю C-библиотеку libgif и встроим её в наш Swift-фреймворк GifSwift. Если вы хотите сразу увидеть результат, полностью проект можно посмотреть здесь.
            Читать дальше →
          • Покрываем A/B-тесты UI-тестами. Как не запутаться в собственном коде

              Привет, Хабр!

              Меня зовут Виталий Котов, я работаю в компании Badoo и бо́льшую часть времени занимаюсь вопросами автоматизации тестирования. Решением одного такого вопроса я и хочу поделиться в этой статье.

              Речь пойдёт о том, как мы организовали процесс работы UI-тестов с A/B-тестами, коих у нас немало. Я расскажу о том, с какими проблемами мы столкнулись и к какому флоу пришли в итоге. Добро пожаловать под кат!


              Читать дальше →
              • +41
              • 7,2k
              • 2
            • RoadRunner: PHP не создан, чтобы умирать, или Golang спешит на помощь

              • Перевод


              Привет, Хабр! Мы в Badoo активно работаем над производительностью PHP, поскольку у нас достаточно большая система на этом языке и вопрос производительности — это вопрос экономии денег. Более десяти лет назад мы создали для этого PHP-FPM, который сначала представлял собой набор патчей для PHP, а позже вошёл в официальную поставку.

              За последние годы PHP сильно продвинулся вперёд: улучшился сборщик мусора, повысился уровень стабильности — сегодня на PHP можно без особых проблем писать демоны и долгоживущие скрипты. Это позволило Spiral Scout пойти дальше: RoadRunner, в отличие от PHP-FPM, не очищает память между запросами, что даёт дополнительный выигрыш в производительности (хотя этот подход и  усложняет процесс разработки). Мы сейчас экспериментируем с этим инструментом, но у нас пока нет результатов, которыми можно было бы поделиться. Чтобы ждать их было веселее, публикуем перевод анонса RoadRunner от Spiral Scout.

              Подход из статьи нам близок: при решении своих задач мы тоже чаще всего используем связку PHP и Go, получая преимущества от обоих языков и не отказываясь от одного в пользу другого.

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

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