Как стать автором
Обновить

Компания Badoo временно не ведёт блог на Хабре

Сначала показывать

Открытая конференция PHP Russia Online

Время на прочтение5 мин
Количество просмотров4K
На единственной конференции по PHP в России должно было быть 22 доклада от разработчиков инструментов, которыми мы все пользуемся, и множество камерных событий. Больше половины наших спикеров должны были прилететь из разных стран, поэтому угроза переноса или отмены нависла над нами еще до официальных российских постановлений. А после всё пошло не так…

Но мы не отчаиваемся и планируем провести большую оффлайн-конференцию 14 сентября в Москве, а чтобы PHP-сообщество не скучало до осени, 13 мая пройдет онлайн-конференция PHP Russia Online и, благодаря поддержке компании Badoo, она стала бесплатной.



Мы решили поэкспериментировать с форматом: в программе конференции только зарубежные спикеры, а общение на конференции будет двуязычным (UPD: для всех докладов будет доступен поток с синхронным переводом на русский от Skyeng).

Для опытных разработчиков PHP Russia Online даст возможность услышать выступления и задать вопросы лидерам PHP-сообщества — всегда же лучше получать информацию из первых рук. А для тех, кто уже добился первых успехов в PHP-разработке, но еще не дорос до уровня middle, — заряд вдохновения и ориентиры, на что обращать внимание, куда развиваться.
Читать дальше →
Всего голосов 40: ↑40 и ↓0+40
Комментарии12

Как перестать беспокоиться и начать верить A/B-тестам

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

Мы в Badoo не доверяем ощущениям, зато верим цифрам. Суммарно у наших сервисов больше 500 миллионов пользователей, и свой фреймворк для тестирования мы написали довольно давно. За шесть лет через него прошло 2962 теста, и A/B-тестирование доказало свою важность, надёжность и результативность.



Но в этой статье я расскажу не о том, как работает наша система. На это не хватит одной статьи. Кроме того, многие вещи специфичны для нашей компании и не подойдут другим. Сегодня я расскажу об эволюции наших представлений об A/B-тестах: на какие грабли мы наступали в процессе и как проверяли корректность работы тестов. Это статья для тех, кто ещё не начал тестировать, но думает об этом, а также для тех, кто не уверен в своей системе тестов.
Читать дальше →
Всего голосов 47: ↑47 и ↓0+47
Комментарии6

QA — специалист по пожарной безопасности вашего проекта

Время на прочтение25 мин
Количество просмотров16K


На конференциях и в неформальных беседах на работе нет-нет да и возникает разговор о важности работы QA-инженера и его роли в проекте. Это может быть и робкий вопрос коллеги-программиста «А, может, выпустим без QA?», и объёмный доклад.


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

Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии8

21 апреля Live! Badoo Localization Meetup

Время на прочтение3 мин
Количество просмотров2.5K


Всем привет!

Я Алексей Тимин, отвечаю за техническую часть системы локализации в Badoo. У нас 150 000 фраз и текстов, переведённых на 52 языка для нескольких приложений. У каждого приложения свои особенности аудитории, определенный стиль общения с пользователем, версии для веба и мобильных платформ. 

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

Тема животрепещущая, так что мы предложили спикерам из Яндекса и Alconost поделиться своим опытом на первом Badoo Localization Meetup, который мы проведём в онлайн-формате. 

21 апреля в 19:30 по московскому времени приглашаем пообщаться разработчиков, тестировщиков и всех, кто выстраивает процессы локализации продукта. 

Мероприятие бесплатное, но регистрация обязательна
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии5

Чиним сериализацию объектов в Kotlin раз и навсегда

Время на прочтение7 мин
Количество просмотров6.5K


Недавно я наткнулся на статью о проблеме c Java-сериализацией объектов в Kotlin. Автор предложил решать её добавлением метода readResolve к каждому объекту, который наследуется от java.io.Serializable.


Этот способ выглядит абсолютно правильным, однако его поддержка может оказаться слишком проблематичной. С учетом того, что в нашем проекте эта проблема возникала только при использовании объектов внутри Bundle, мы решили использовать проверку через is для каждой ветки when-выражений в случае sealed классов.


Тем не менее, размышляя об этом, я никак не мог понять, почему Kotlin не генерирует readResolve в компиляторе, поддерживая singleton-свойства объектов. Мне казалось, что это работа для инструментов, а не для человека. Но раз Kotlin не добавляет эту функцию сам, мы можем ему помочь! Этим мы сейчас и займёмся.

Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии7

Strace в Linux: история, устройство и использование

Время на прочтение17 мин
Количество просмотров55K


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


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

Читать дальше →
Всего голосов 86: ↑86 и ↓0+86
Комментарии27

Дизайн-токены способны на большее: создаем единый источник информации о компонентах UI

Время на прочтение14 мин
Количество просмотров18K

Термином «дизайн-система» в IT давно никого не удивишь. Компании систематизируют дизайн продуктов, придумывая свои или используя чужие инструменты для управления стилями, паттернами и компонентами. 


Badoo не является исключением: с помощью нашей дизайн-системы Cosmos мы поддерживаем общие принципы дизайна для четырёх приложений, работающих на четырёх платформах. 


image


Одна из первых и основных вещей, с которой начинается работа по созданию дизайн-системы, — это токены (или переменные), которые определяют значения разных сущностей системы. 


Как это работает? Например, у вас есть приложение для двух платформ. Вместо того чтобы для каждой заново указывать в CSS-файле размер и стиль шрифтов, вы можете хранить эти значения в JSON-файле, который легко преобразуется в код для любой платформы. В дальнейшем этот файл можно использовать и в других проектах с другими кодовыми базами. 


Несмотря на потенциал дизайн-токенов, во многих компаниях их структура остаётся довольно простой, что сильно ограничивает возможности их применения. 


Я хочу поделиться адаптированным переводом статьи моего коллеги Кристиано Растелли (Cristiano Rastelli), который несколько лет развивает дизайн-систему Cosmos. На примере своего опыта он показывает, как работать с токенами более эффективно: добавлять метаданные и использовать их для описания свойств компонентов. 


Под катом — небольшой рассказ о том, как выглядят дизайн-токены в Badoo и почему они значительно упрощают процесс разработки.

Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии10

Dynamic Delivery в многомодульных проектах (часть 2)

Время на прочтение11 мин
Количество просмотров5.9K


Привет! Меня зовут Юрий Влад, я Android-разработчик в компании Badoo и занимаюсь внедрением Dynamic Features в наши проекты.


Я уже рассказывал, что такое Dynamic Delivery и какой у него API. В этой статье я подробнее опишу, как я использовал Dynamic Delivery в нашем приложении и почему интеграция оказалась такой лёгкой. В результате мне удалось уменьшить вес приложения на полмегабайта для 99% наших пользователей, превратив доступную для жителей определённого региона функцию в загружаемый модуль.

Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии0

Dynamic Delivery в многомодульных проектах (часть 1)

Время на прочтение9 мин
Количество просмотров8.3K


Привет! Меня зовут Юрий Влад, я Android-разработчик в компании Badoo и занимаюсь внедрением Dynamic Features в наши проекты.


Dynamic Delivery — технология, позволяющая устанавливать и удалять части приложения прямо во время работы для того, чтобы уменьшить место, занимаемое приложением. Если какие-то функции не используются, то зачем пользователю иметь их на устройстве?


В первой части статьи я подробнее расскажу о Dynamic Delivery и его API: как загружать и удалять модули. Во второй части — разберу на примере, как я использовал Dynamic Delivery в нашем приложении и получил экономию на размере приложения в полмегабайта.

Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии6

Избавляемся от рутины со своим плагином для PhpStorm

Время на прочтение10 мин
Количество просмотров12K
Привет, Хабр! Я тружусь в команде Антиспама, и, как и у большинства бэкенд-разработчиков Badoo, большая часть времени у меня уходит на работу с PHP-кодом.

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

Так появился плагин Badoo для PhpStorm, который мы сегодня активно используем. За несколько лет его возможности серьёзно расширились, мы его развиваем, и в этой статье я расскажу на примере наших кейсов, как адаптировать IDE под свои задачи и инструменты, и докажу, что это не так сложно, как кажется.


Читать дальше →
Всего голосов 66: ↑66 и ↓0+66
Комментарии12

Что делать с легаси. Материалы с Badoo PHP Meetup #4

Время на прочтение2 мин
Количество просмотров9K
Всем привет!

15 февраля в офисе Badoo прошла очередная встреча PHP-разработчиков, посвященная теме легаси. Целый день мы слушали рассказы об опыте крупных компаний, общались и делились болью.

Получилось рассмотреть проблему с нескольких сторон:

  • организация процессов разработки по избавлению от легаси;
  • тактика распила легаси-монолита на микросервисы;
  • способы организации API, которые позволяют держать под контролем рост устаревшего кода;
  • автоматические способы обнаружения «мёртвого» кода;
  • а еще попробовали поговорить как рефакторить легаси-код с помощью DDD подходов;

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


Всего голосов 32: ↑32 и ↓0+32
Комментарии3

Оффер в Лондон за один день: как его получить и чем заняться после переезда

Время на прочтение13 мин
Количество просмотров55K
Привет, Хабр!

На 2020 год у нас большие планы. Мы намерены активно развивать Badoo и Bumble, поэтому серьёзно расширяем техническую команду. И сегодня мы объявляем о масштабном найме PHP-разработчиков в наш лондонский офис. 

В 2017 году мы попробовали новый формат поиска — hiring event: привозим в Москву крутых разработчиков, за один день проводим собеседования и сразу же делаем оффер подходящим кандидатам. Все расходы на поездку в столицу, разумеется, берём на себя.

Формат хорошо себя зарекомендовал, и у нас снова открыто много позиций, поэтому мы объявляем новый PHP Hiring Event. 

Правила те же: покажи высокий результат в тесте до 1 марта, успешно пройди интервью 21 или 22 марта в Москве — и в тот же день получи оффер в лондонский офис Badoo. 

UPD: тест завершён, спасибо всем участникам! Мы уже известили финалистов и предупредили о том, что даты собеседования переносим на неопределенный срок ради комфорта и безопасности кандидатов.

UPD2: Несмотря на коронавирус, нам удалось провести интервью с участниками и пригласить четырех человек к нам в команду. Большое спасибо всем, кто прошел тест и участвовал в интервью! Этот hiring event не последний: следите за нашим блогом и вакансиями на нашем сайте.



Под катом я расскажу:

  • подробнее про тест;
  • какими проектами мы занимаемся: оптимизация фотографий, видеостриминг, machine learning для писем, переход на новые версии PHP и многое другое.

Если ты PHP-шник и хочешь переехать в Лондон, добро пожаловать под кат!

Читать дальше →
Всего голосов 73: ↑65 и ↓8+57
Комментарии280

Железо или оптимизация? Badoo, Авито и Мамба — о производительности PHP

Время на прочтение18 мин
Количество просмотров14K
Вопрос производительности PHP-кода для Badoo один из самых важных. От качества PHP-бэкенда напрямую зависят количество ресурсов, которые мы тратим на разработку и эксплуатацию, скорость работы сервиса и впечатление, которое он производит на пользователей.

Поэтому темой третьей встречи сообщества PHP-разработчиков в нашем офисе мы сделали производительность бэкенда и пригласили к обсуждению коллег из Авито и «Мамбы».



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

А 15 февраля приходите на следующий Badoo PHP Meetup: обсудим легаси.
Всего голосов 40: ↑40 и ↓0+40
Комментарии20

Бинарная совместимость Reaktive: как мы её обеспечиваем

Время на прочтение10 мин
Количество просмотров3.4K

Привет! Меня зовут Юрий Влад, я Android-разработчик в компании Badoo и принимаю участие в создании библиотеки Reaktive — Reactive Extensions на чистом Kotlin.


Любая библиотека должна по возможности соблюдать бинарную совместимость. Если разные версии библиотеки в зависимостях несовместимы, то результатом будут краши в рантайме. С такой проблемой мы можем столкнуться, например, при добавлении поддержки Reaktive в MVICore.



В этой статье я вкратце расскажу, что такое бинарная совместимость и каковы её особенности для Kotlin, а также о том, как её поддерживают в JetBrains, а теперь и в Badoo.

Читать дальше →
Всего голосов 31: ↑31 и ↓0+31
Комментарии0

15 февраля Badoo PHP Meetup #4. Легаси

Время на прочтение3 мин
Количество просмотров5.9K


Привет!

15 февраля, в субботу, приглашаем на очередную встречу сообщества PHP-разработчиков в офисе Badoo. 

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

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

Регистрация по ссылке, обязательная (важно: пишите свои данные кириллицей). Не забудьте дождаться подтверждения участия, оно придет дней за 10 до митапа. 

Первый доклад в 12:00. В программе пять докладов, практически не ограниченное свободное общение за кофе, викторина, розыгрыш билета на PHPRussia, а в качестве afterparty — очередная встреча сообщества BeerPHP Moscow
Читать дальше →
Всего голосов 46: ↑46 и ↓0+46
Комментарии2

Локализация приложений: как мы подружили перевод и разработку

Время на прочтение14 мин
Количество просмотров28K


Привет, Хабр! Я ведущий разработчик системы локализации в Badoo. Мы работаем с несколькими большими проектами: Badoo, Bumble, Lumen и Chappy. Сейчас в системе локализации у нас находятся 150 000 фраз и текстов, переведённых на 52 языка. При этом каждое из наших приложений имеет свою аудиторию, свои рынки, свой стиль общения с пользователями, версии для веба и для мобильных платформ.


В этой статье я расскажу, как мы выстроили процесс локализации, как подходим к контролю качества, как релизим переводы в зависимости от платформы, и главное — как мы добились того, что разработчики хорошо отзываются о нашей системе переводов. Это очень важный момент: над проектами трудятся более 300 разработчиков, работа которых должна быть комфортной. Разработчики не переводчики и не должны думать о переводах.


Статья написана по мотивам моего доклада на конференции Highload++ в ноябре.

Читать дальше →
Всего голосов 65: ↑63 и ↓2+61
Комментарии26

Роутинг для iOS: универсальная навигация без переписывания приложения

Время на прочтение9 мин
Количество просмотров11K
В любом приложении, состоящем более чем из одного экрана, существует необходимость реализовать навигацию между его компонентами. Казалось бы, это не должно быть проблемой, ведь в UIKit есть достаточно удобные компоненты-контейнеры вроде UINavigationController и UITabBarController, а также гибкие методы модального показа экранов: достаточно использовать нужную навигацию в нужное время.



Однако, как только в приложении появляется переход на какой-то экран по push-уведомлению или ссылке, всё становится несколько сложнее. Сразу появляется масса вопросов:

  • что делать с view-контроллером, который сейчас находится на экране?
  • как переключить контекст (например, активную вкладку в UITabBarController)?
  • есть ли в текущем стеке навигации нужный экран?
  • когда следует игнорировать навигацию?

Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии9

Две красные кнопки, паяльник и React: как мы делали движуху для IT-конференции

Время на прочтение12 мин
Количество просмотров8.6K

Badoo регулярно участвует со стендом в выставках IT-конференций. Поэтому каждый год мы с коллегами — инженерами и деврелами — придумываем, что бы такого айтишного сделать, чтобы не скучать в перерывах между докладами.


Меня зовут Иван, я frontend-разработчик. В этой статье вместе с коллегой и DIY-энтузиастом lilek Юрой Лилековым мы расскажем, как при помощи двух красных кнопок, одного микроконтроллера, кода на React и 250 слов на айти-тематику мы сделали игру «IT-угадайка» и собрали уютную тусовочку на Highload++ и Heisenbug.


Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии7

Preload в php 7.4: Composer и выбор файлов для предзагрузки

Время на прочтение9 мин
Количество просмотров12K
Мы в Badoo активно занимаемся переходом на PHP 7.4 и с большим энтузиазмом ждём возможности использовать новую функцию preload. Не так давно мы рассказывали о наших экспериментах с ней.

Судя по всему, сообщество взбудоражено не меньше, чем мы. Разработчики фреймворков активно обсуждают возможности внедрения прелоада (а некоторые уже сделали его поддержку). Теперь дошла очередь и до менеджера зависимостей Composer. 



Italo Baeza написал статью, в которой высказал своё мнение о том, как Composer должен работать с прелоадом. Я решил поделиться переводом этого текста, а заодно и переводом другой его статьи — о том, что ответили на предложение сами разработчики Composer, а также о новом инструменте, который облегчает работу с прелоадом.
Читать дальше →
Всего голосов 51: ↑51 и ↓0+51
Комментарии4

Тысяча и один UI-баг, или Как помочь разработчику избегать типовых ошибок в UI

Время на прочтение10 мин
Количество просмотров24K
Тестирование новых фич, казалось бы, очень творческий и интересный процесс. Но что делать, если ошибки в интерфейсах повторяются из фичи в фичу, а большая часть времени тратится на отлавливание мелких интерфейсных проблем? 



За четыре года работы в Badoo из более чем тысячи багов, которые я встретила, примерно 20% были связаны с UI и UX. Треть из них незначительны в масштабах продукта, но тем не менее требуют ресурсов на обработку, ведь они напрямую влияют на лояльность пользователя. Такие баги реально отловить только вручную. Плюс ко всему они часто встречаются только на определённых устройствах в определённых условиях.

Можно ли предотвратить эти баги ещё на этапе проектирования новой функциональности и избежать переработки интерфейсов после тестирования? Мой ответ — да! 

В этой статье на примерах из своего опыта я расскажу, как сделать процесс тестирования менее рутинным и перестать заводить одни и те же баги, покажу наиболее распространённые ошибки в разработке интерфейсов мобильных приложений на платформе Android и поясню, откуда они чаще всего берутся. Статья написана по мотивам моего доклада на конференции Heisenbug, видео можно посмотреть здесь.
Читать дальше →
Всего голосов 37: ↑36 и ↓1+35
Комментарии2