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

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

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

Выступление основателя Badoo Андрея Андреева на LeWeb 2011

Время на прочтение 1 мин
Количество просмотров 8.3K
Пожалуй, это первое за несколько лет публичное выступление основателя Badoo, известного также по проектам SpyLog, Begun и Mamba. Символично, что Андреев вышел на основную сцену LeWeb 2011 сразу после Эрика Шмидта, председателя Google.

Андреев рассказал о том, что Badoo получает более $100 миллионов дохода в год, начинает экспансию на рынок США, а также делает ставку на мобильное приложение, которое позволяет встречаться с людьми, находящимися поблизости.

Всего голосов 49: ↑42 и ↓7 +35
Комментарии 39

Run, config, run: как мы ускорили деплой конфигов в Badoo

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

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

На мой взгляд, есть и другая сторона работы с конфигами, которая заслуживает внимания, — развёртывание (деплой). За свою карьеру я видел довольно много способов деплоя конфигов и уверен, что каждый может узнать об этом что-то новое.

Несколько лет назад я работал над системой, которая позволила нам ускорить процесс деплоя конфигов на 1000+ серверов с минуты до нескольких секунд. 

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

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

К порядку: правила создания конвейеров обработки данных

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

К 2020 году вы не могли не заметить, что миром правят данные. И, как только речь заходит о работе с ощутимыми объёмами, появляется необходимость в сложном многоэтапном конвейере обработки данных

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

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

Я поделюсь несколькими простыми правилами, которые помогают нам в работе с преобразованием данных и, надеюсь, помогут и вам. 

Читать далее
Всего голосов 36: ↑35 и ↓1 +34
Комментарии 6

Reaktive — мультиплатформенная библиотека для реактивного Kotlin

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


Многие сегодня любят реактивное программирование. В нём масса плюсов: и отсутствие так называемого "callback hell", и встроенный механизм обработки ошибок, и функциональный стиль программирования, который уменьшает вероятность багов. Значительно проще писать многопоточный код и легче управлять потоками данных (объединять, разделять и преобразовывать).

Для многих языков программирования существует своя реактивная библиотека: RxJava для JVM, RxJS — для JavaScript, RxSwift — для iOS, Rx.NET и т. д.

Но что мы имеем для Kotlin? Было бы логично предположить, что RxKotlin. И, действительно, такая библиотека существует, но это всего лишь набор расширений (extensions) для RxJava2, так называемый «сахар».

А в идеале хотелось бы иметь решение, соответствующее следующим критериям:

  • мультиплатформенность — чтобы иметь возможность писать мультиплатформенные библиотеки с использованием реактивного программирования и распространять их внутри компании;
  • Null safety — система типов Kotlin защищает нас от «ошибки на миллиард долларов», так что значения null должны быть допустимы (например, Observable<String?>);
  • ковариантность и контравариантность — ещё одна очень полезная особенность Kotlin, дающая возможность, например, безопасно привести тип Observable<String> к Observable<CharSequence>.

Мы в Badoo решили не ждать у моря погоды и сделали такую библиотеку. Как вы уже могли догадаться, назвали мы её Reaktive и выложили на GitHub.

В этой статье мы подробнее рассмотрим ожидания от реактивного программирования на Kotlin и увидим, насколько им соответствуют возможности Reaktive.
Читать дальше →
Всего голосов 36: ↑35 и ↓1 +34
Комментарии 13

Как встроить С-библиотеку в Swift-фреймворк

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


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

Для примера мы возьмём внешнюю C-библиотеку libgif и встроим её в наш Swift-фреймворк GifSwift. Если вы хотите сразу увидеть результат, полностью проект можно посмотреть здесь.
Читать дальше →
Всего голосов 34: ↑34 и ↓0 +34
Комментарии 0

Производительность PHP-бэкенда. Видео с Badoo PHP Meetup #3

Время на прочтение 2 мин
Количество просмотров 9K
Привет! Готовы материалы с Badoo PHP Meetup #3, традиционной неформальной встречи сообщества. Напомню, в этот раз мы обсуждали проблемы производительности бэкенда на PHP и их решение в разных компаниях.  



Тема нашла моментальный отклик среди почти 200 гостей — на каждом перерыве спикеров окружала толпа с вопросами. Опытом делились Александр Малащицкий из Superjob, Павел Мурзаков pmurzakov из Badoo и Антон Шабовта zloyusr из Onliner, а к панельной дискуссии также присоединились Семён Катаев из Avito и Михаил Буйлов из Mamba.

Все материалы — под катом, полезного просмотра!
Всего голосов 33: ↑33 и ↓0 +33
Комментарии 6

Система частиц в Core Animation. Рождественская история

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


Всем привет!

Рождество давно прошло, но после него у нас осталась занимательная история о том, как при помощи нечасто используемой возможности Core Animation можно создать пользователям праздничное настроение. Делюсь переводом статьи моего лондонского коллеги Алексиса.

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

Я родился и вырос в Испании, на Тенерифе — солнечном острове посреди Атлантического океана недалеко от побережья Африки. И, поверьте мне, Рождество на Тенерифе сильно отличается от Рождества в Лондоне, где я встречал его последние два года (с тех пор как начал работать в Badoo).

Одним из преимуществ жизни в Лондоне для меня стало созерцание снежинок. Здесь я увидел их впервые в жизни, это было просто невероятно!

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

Так уж случилось, что мне поручили одну необычную задачу со следующим описанием:
Всего голосов 35: ↑34 и ↓1 +33
Комментарии 3

Android-митап в офисе Badoo 17 июня

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


Привет! 17 июня в нашем офисе пройдет первый (для нас) Android-митап. С докладами будут выступать разработчики из Avito, Яндекса, Одноклассников, из Badoo – я, Аркадий Гамза. Начало – в 12:00. Описание докладов – под катом.

Читать дальше →
Всего голосов 37: ↑35 и ↓2 +33
Комментарии 4

Agile API — возможно ли?

Время на прочтение 11 мин
Количество просмотров 13K
Множество статей и книг посвящено тому, как правильно проектировать API, но едва ли кто-то затрагивал тему постоянно меняющихся (гибких) API. Динамично развивающаяся компания зачастую выпускает по несколько релизов в неделю, а иногда и в день. При этом для добавления новых функций необходимо постоянно вносить изменения в существующее API. В этой статье мы расскажем о том, как мы в Badoo решаем эту задачу, какие подходы и идеи мы используем в своей работе.

Для начала я должен немного подробнее рассказать о Badoo, чтобы вы понимали, кто работает с нашим API и почему оно так часто меняется.

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

Видео докладов Badoo с конференции Highload 2014

Время на прочтение 2 мин
Количество просмотров 20K
Осенью мы выступали с докладами на одной из лучших технических конференций Highload 2014 и сейчас с удовольствием делимся с вами видео докладов. Вы можете задавать вопросы в комменариях и наши спикеры и остальные эксперты обязательно на них ответят.

1. «Sharding — patterns & antipatterns».
Доклад Алексея Рыбака (Badoo) и Константина kostja Осипова (Mail.ru).



Еще 5 отличных докладов
Всего голосов 41: ↑37 и ↓4 +33
Комментарии 13

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

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

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

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

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

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


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

Как нанимать, увольнять и возвращать из менеджмента в разработку: видео с Badoo Techleads Meetup #5

Время на прочтение 2 мин
Количество просмотров 5K
На последней встрече сообщества IT-руководителей мы поставили перед спикерами непростую задачу — говорить не только про успехи, но и про проблемы руководителей в IT. В итоге получился честный разговор про ситуации, с которыми однажды столкнется каждый: подбор сотрудников, увольнения, сложные кадровые перестановки. 



Спасибо спикерам, которые откровенно рассказали, что не все получается с первого раза и многие решения имеют две стороны. И гостям, которые, кажется, могли задавать вопросы бесконечно.

Видео и презентации — под катом. Приятного просмотра!
Всего голосов 36: ↑34 и ↓2 +32
Комментарии 0

Миграция базы данных с InnoDB на MyRocks

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


Зоджи-Ла, Индия


Привет, Хабр! Меня зовут Олег Ефимов, я работаю в Badoo в команде «Платформа», занимаюсь задачами хранения фотографий, интерфейсами сервисов и много чем ещё.


Мне часто приходится слышать, что в том, что касается серверных технологий, Badoo – довольно консервативная компания. Отчасти это так, но на самом деле мы используем много молодых языков программирования, новых инструментов и технологий. Одна из них – RocksDB, на основе которой Facebook создал MySQL storage engine – MyRocks. Пост о том, как Facebook осуществлял миграцию одной из своих баз данных с InnoDB на MyRocks, мне и захотелось для вас перевести.

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

Обходим ограничения в Calabash-Android с UIAutomator

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

enter image description here


Appium и Calabash — одни из самых популярных фреймворков для автоматизации тестирования Android-приложений. У каждого, конечно, есть свои преимущества и недостатки. Их основные ограничения:


  • Calabash: может управлять только пользовательским интерфейсом, который является частью тестового приложения, в частности, нет поддержки тестирования уведомлений;


  • Appium: не может вызывать backdoor-методы в приложениях наподобие Calabash (эти методы очень полезны для настройки состояния тестируемого приложения).

Мы в Badoo пользовались Calabash для автоматизации тестирования, когда Appium только начинал развиваться. Это очень стабильный инструмент, и он до сих пор работает быстрее Appium, так что мы не собираемся мигрировать. Но чтобы автоматизировать такое многофункциональное приложение, как Badoo, нам пришлось обойти ограничение Calabash на работу только с интерфейсом тестового приложения.


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


В этой статье я расскажу, как мы решили возникшую проблему с помощью добавления в Calabash поддержки UIAutomator2. Если вы слишком нетерпеливы, то скажу по секрету, что в конце есть ссылка на готовый к использованию Ruby Gem.

Читать дальше →
Всего голосов 34: ↑33 и ↓1 +32
Комментарии 2

Worldwide-биллинг Badoo глазами QA

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

Привет, Хабр! Вот уже больше четырех лет я занимаюсь ручным и автоматизированным тестированием биллинговых систем Badoo. А биллинг Badoo — один из самых развитых (и сложных) в мире, и тестировать его — чаще всего интересная и неординарная задача. Сегодня я хочу вам рассказать, почему эти системы такие интересные и могучие, чему я научился за все эти годы и почему тестировать биллинг — это не (очень) страшно. И заодно поделюсь с вами очередной партией интересных историй (да, я это дело очень люблю). Большинство вещей будет применимо не только к нашему конкретному случаю, но и к любой другой сложной платежной системе (и не только платежной, если честно).

Что же такое наш биллинг? Это система обработки платежей в социальной сети, в которой более 330 миллионов зарегистрированных пользователей. Мы принимаем платежи во всех странах мира, поддерживаем свыше тридцати активных платежных методов (а за все время их было имплементировано около ста) и обрабатываем порядка 1500 запросов в секунду. Биллинг Badoo является самостоятельным выделенным сервисом, работающим с десятком разных клиентов (разные платформы, разные приложения). Достаточно любопытная база для развития тестирования, не так ли?
Читать дальше →
Всего голосов 34: ↑33 и ↓1 +32
Комментарии 10

Видео докладов с DevOps Meetup про Docker

Время на прочтение 1 мин
Количество просмотров 16K
Недавно в офисе Badoo проходил DevOps Meetup про Docker и контейнерную виртуализацию. Делимся с вами видео докладов.

1. «Docker в Badoo: от восторгов к внедрению».
Антон banuchka Турецкий, Раудсепп Илья, Badoo.



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

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

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

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


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



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

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

О чём говорили на Google I/O 2019: Android 10, AR-приложения и многое другое

Время на прочтение 9 мин
Количество просмотров 8.4K
В этой статье я расскажу о своих впечатлениях от конференции Google I/O 2019, на которой мы с коллегами побывали на днях (и даже “засветились” с нашим приложением в одной из презентаций). Она поможет вам проникнуться атмосферой и, возможно, побудит посмотреть несколько докладов, выложенных на  канале Google Developers.


Разработчики Badoo на Google I/O 2019

День 0. Предисловие


Чтобы попасть на конференцию, нужно выиграть в лотерее, которая стартует в феврале на сайте Google I/O (обычно об этом становится известно из новостей). Но победа не предусматривает получение билета, а лишь даёт возможность выкупить его за 1150 долларов. Есть и другие программы, которые позволяют получить билет с большой скидкой или бесплатно, например Code Jam. Студенты и работники вузов могут купить билет значительно дешевле — за 375 долларов.

Перед конференцией IT-компании устраивали вечеринки для участников. Я узнал о них из чата в Telegram, в котором собралось более 150 русскоговорящих пользователей. Обычно в подобные чаты можно попасть по приглашениям из профильных Android-сообществ в Telegram. Такие вечеринки — хорошая возможность познакомиться с другими участниками конференции в неформальной обстановке. Например, мы встретили там организатора Mobius и команду разработчиков, которые делают приложение для авиапутешественников App in the Air.

Конференция проходила под лозунгом «No parking». Google организовала бесплатные автобусы от и до самых популярных отелей в окрестностях, а также выделила промокоды на сервис такси Lyft (американский конкурент Uber).

Из Badoo нас было пять разработчиков. Поехали все, кто выиграл возможность купить билет. Доклады шли в шесть—десять потоков, и часто мы разделялись, чтобы охватить больше интересных тем.
Читать дальше →
Всего голосов 35: ↑33 и ↓2 +31
Комментарии 9

Swift 4.1: почему Apple переименовала flatMap в compactMap

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

Меня зовут Александр Зимин, я iOS-разработчик в Badoo. Это перевод статьи моего коллеги Швиба, в которой он рассказал, что из себя представляла функция flatMap в Swift и почему одну из её перегрузок переименовали в compactMap. Статья полезна как для понимания процессов, происходящих в репозитории Swift и его эволюции, так и для общего развития.



В функциональном программировании есть чёткое определение того, что должна представлять собой функция flatMap. Метод flatMap берёт список и преобразующую функцию (которая для каждого преобразования ожидает получить ноль или больше значений), применяет её к каждому элементу списка и создаёт единый (flattened) список. Такое поведение отличается от простой функции map, которая применяет преобразование к каждому значению и для каждого преобразования ожидает получить только одно значение.
Читать дальше →
Всего голосов 31: ↑31 и ↓0 +31
Комментарии 6

Вредные советы: как превратить автоматизацию UI-тестов в кошмар

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


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


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

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


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


Итак, поехали.

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