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

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

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

Как в Badoo генерируются изображения для «шаринга» в соцсетях

Время на прочтение11 мин
Количество просмотров19K
Социальные сети — важный источник трафика. Нам выгодно, когда пользователи делятся контентом, и мы даем им такую возможность — у нас есть несколько видов контента, которым можно поделиться:

  • свой профиль;
  • чужой профиль (если его владелец это разрешил);
  • свой рейтинг, отражающий популярность пользователя на сайте;
  • награды, полученные пользователем за свои действия или действия других пользователей.

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



Особенность бейджей состоит в том, что на них присутствуют фото самих пользователей, поэтому каждый видит и делится уникальными изображениями. В этой статье я расскажу, как мы генерируем такие изображения, с какими проблемами сталкивались и как их решали.
Читать дальше →
Всего голосов 35: ↑31 и ↓4+27
Комментарии22

Лекции Технопарка: мастер-класс Алексея Рыбака «Про то, что я бы хотел, чтобы мне рассказали, пока я учился»

Время на прочтение25 мин
Количество просмотров47K
Сегодня мы начинаем серию публикаций новых мастер-классов Технопарка. И первая из них — мастер-класс Алексея Рыбака на свободную тему, в котором он поделился со студентами соображениями о том, чем работа в реальной жизни отличается от учебы. Видео смотрите на нашем сайте, а адаптированную расшифровку — ниже.

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

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


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

Тестирование мобильных приложений: tips & tricks

Время на прочтение12 мин
Количество просмотров127K
Наша новая статья представляет собой список рекомендаций и советов. Из неё вы узнаете:

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

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

Как облегчить процесс тестирования?


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

2. Скриншоты, логи и видео — лучшие аргументы тестировщика!
К сожалению, с логами «общения» с сервером зачастую не всё так гладко, как с клиентскими логами. Обычно они добавляются скорее для удобства разработчика при отладке работы с сервером, чем для работы тестировщика.
Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии12

Эволюция сборки логов «облака» и сборщик логов в open source

Время на прочтение12 мин
Количество просмотров14K
Здравствуйте, меня зовут Юрий Насретдинов, я работаю старшим инженером в Badoo. За последние полтора года я сделал несколько докладов на тему того, как работает наше облако. Слайды и видео можно посмотреть тут и тут.

Сегодня настало время рассказать о ещё одной части этой системы — о сборщике логов, который мы вместе с этой статьей выкладываем в open-source. Основная часть логики нашего облака написана на языке Go, и эта подсистема не является исключением.
Исходные коды системы: github.com/badoo/thunder
В этой статье я расскажу вам о том, каким образом мы доставляем логи приложений в нашем облаке, которое мы называем просто «скриптовым фреймворком».

Логи приложений


Наши приложения, запускаемые в облаке, представляют из себя классы на PHP, которые в простейшей реализации имеют метод run() и получают на вход данные задания, например, число от 1 до N, где N — максимальное число экземпляров для этого класса. У каждого задания есть свой уникальный id, и конечной целью является доставка логов в какое-то централизованное хранилище, где можно будет легко найти логи как конкретного запуска, так и все логи класса сразу.
Читать дальше →
Всего голосов 34: ↑29 и ↓5+24
Комментарии13

Видео с LoveQA митапа

Время на прочтение1 мин
Количество просмотров9K
Спешим поделиться видео с нашего LoveQA митапа, который в этом году мы проводили на РИТ-Фестивале. Если у вас есть вопросы к докладчикам, то ждем их в комментариях. Мы обязательно ответим!

1. «Эволюция php code coverage в Badoo», Илья uyga Агеев, Head of Q/A department.




Читать дальше →
Всего голосов 20: ↑18 и ↓2+16
Комментарии2

Видео докладов с Zabbix Moscow Meetup

Время на прочтение1 мин
Количество просмотров20K
Недавно проводили в офисе Zabbix Meetup, который из-за количества участников (приехали ребята из Ярославля, Новосибирска, Уфы, Владивостока, Краснодара, Воронежа, Брянска, СПб и других городов) перерос в конференцию на весь день. И сегодня хотим поделиться с вами видео докладов.

1. «Zabbix: прошлое, настоящее и будущее», Алексей alexvl Владышев, Zabbix.





2. «Zabbix в Badoo или о чем не пишут в мануале», Илья ableev Аблеев, Badoo.

NEW: Наш Screens Controller для Zabbix.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+18
Комментарии2

Видео докладов с конференции «Российские интернет-технологии 2015»

Время на прочтение1 мин
Количество просмотров6.1K
Рады поделиться с вами видео докладов с конференции «РИТ++». Отдельным постом выложим видео и слайды с LoveQA митапа.

1.«Реалтайм статистика скорости работы нативных и веб-приложений у реальных пользователей», Павел dpp Довбуш (Badoo).
Рассказали как сделана статистика и аналитика скорости работы (UX) приложений Badoo (Web, Mobile-web, iOS, Android, Windows). Про общие концепции и примеры, что и как измерять. Про то, как собирать данные со 100% пользователей проекта и выдержать нагрузку.
А также о том, как из OpenSource решений собрать систему сбора и визуализации статистики для своего проекта.
Бонус: выложили наше «real user monitoring» решение Jinba в OpenSource.


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

Zabbix Moscow Meetup в Badoo

Время на прочтение2 мин
Количество просмотров9.3K
27 июня в московском офисе Badoo проводим Zabbix Moscow Meetup.
В программе: отличные доклады, чай-кофе-пицца, много общения. Начало в 11-30, подробное расписание выложим чуть позже.
Будем записывать доклады на видео.

Алексей Владышев, Zabbix
«Zabbix: прошлое, настоящее и будущее»


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

Илья Аблеев, Badoo
«Zabbix в Badoo или о чем не пишут в мануале»

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

Видео докладов с Golang Moscow

Время на прочтение1 мин
Количество просмотров13K
Готовы видео докладов с митапа Golang Moscow и мы с радостью с вами ими делимся.

1. «Go в Badoo»
Антон einstein_man Поваров




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

LoveQA митап на РИТ++

Время на прочтение1 мин
Количество просмотров3.2K
Всем привет! Через неделю, 22 мая, в рамках РИТ-Фестиваля, пройдет серия бесплатных митапов.

Хотим пригласить всех, кому интересно послушать про автоматизацию тестирования, на наш LoveQA Meetup.
Нам тоже было бы интересно пообщаться с коллегами из других компаний, ответить на вопросы и узнать, как устроено тестирование у вас.

Мы в Badoo собрали для вас 3 совершенно новых доклада, которые еще не звучали на других конференциях.

  • «Эволюция php code coverage в Badoo», Илья Агеев, Head of Q/A department.
  • «Внедрение Docker в процесс разработки демонов», Константин Карпов, Q/A engineer.
  • «Юнит-тесты: от общего к частному», Александр Свинцов, Q/A Team Lead

Где? Когда? А выступить можно?
Всего голосов 14: ↑14 и ↓0+14
Комментарии0

Видео докладов с MoscowJS Meetup

Время на прочтение1 мин
Количество просмотров12K
Недавно в офисе Badoo проходил юбилейный MoscowJS Meetup. Делимся с вами видео докладов.

1. «Специфика верстки мультиязычных веб-приложений»
Александр Тевосян, Badoo.




+ Выложили на GitHub нашу утилиту rtl-css специально к митапу: https://github.com/badoo/rtl-css
Читать дальше →
Всего голосов 22: ↑21 и ↓1+20
Комментарии6

Обзор докладов конференции QCon London 2015

Время на прочтение17 мин
Количество просмотров6.1K
Привет, меня зовут Макс Матюхин, я PHP-программист в компании Badoo. В прошлом месяце в Лондоне прошла очередная Международная конференция разработчиков QCon 2015. Я побывал на ней и теперь хочу поделиться с вами своими впечатлениями о мероприятии и рассказать о самых интересных, на мой взгляд, выступлениях. Из этой статьи вы узнаете чуть больше про архитектуру Uber, Spotify, CloudFlare, а также о том, как Google управляет своей инфраструктурой и многом другом.

Впервые QCon состоялась в 2007 году в Лондоне и Сан-Франциско. С тех пор она стабильно набирает популярность и расширяет географию, и в этом году она пройдет в 8 городах. Лондонская QCon проходит в самом сердце британской столицы, в двух шагах от Вестминстерского Аббатства. В разное время на QCon выступали такие известные личности, как Martin Fowler, Kent Beck, Erik Meijer, Steve Vinoski, Joe Armstrong, Rich Hickey и многие другие.
Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии0

Geo индекс для поиска новых знакомых или революционное открытие ученых из Австрии

Время на прочтение3 мин
Количество просмотров22K
Как вы знаете, Badoo — сервис для поиска новых людей. Кроме всего прочего, мы позволяем искать людей вокруг и в «игре» тоже показываем людей, которые находятся недалеко от вас. Эта часть «вокруг» очень и очень важна. Ведь молодому человеку из Новосибирска гораздо интереснее познакомиться с девушкой, которая живет в пяти минутах ходьбы от него, а не во Владивостоке.
Мы до сих пор не рассказывали публично о том, как мы это делаем. Но новое открытие австрийских ученых настолько нас обрадовало, что мы решились это сделать. Перейдем же к делу.
Badoo работает по всему миру и наш поиск работает абсолютно одинаково, вне зависимости от того, в какой точке земного шара вы находитесь. Как же эффективно искать людей вокруг среди всех 200+ миллионов пользователей?
Решение нетривиально, честно говоря. Нам нужен какой-то индекс, какой-то способ сразу же сузить область поиска. В случае с земным шаром, самым простым разбиением является сетка географических широт и долгот. Однако проблема с этой сеткой в ее неравномерности. Ячейка у северного полюса и ячейка у экватора имеют совсем разные формы. Такое несимметричное разбиение вносит большие проблемы, если мы хотим равномерно распределить нагрузку по поисковому кластеру.
Читать дальше →
Всего голосов 40: ↑33 и ↓7+26
Комментарии31

Процесс разработки и тестирования демонов

Время на прочтение7 мин
Количество просмотров19K
Сегодня мы поговорим о «низкоуровневых» кирпичиках нашего проекта — о демонах.
Определение из Википедии:
«де́мон — компьютерная программа в системах класса UNIX, запускаемая самой системой и работающая в фоновом режиме без прямого взаимодействия с пользователем».

Хоть это и не очевидно, но практически весь функционал сайта во многом зависит от работы этих программ. Игра в “Знакомства”, поиск новых лиц, центр внимания, обмен сообщениями, статусы, геолокация и многие другие вещи завязаны на тот или иной демон. Так что можно сказать, что они помогают людям по всему миру общаться и находить новые знакомства. Одновременно на сайте могут работать и взаимодействовать между собой несколько десятков демонов. Их корректное поведение является очень важной задачей, поэтому мы решили покрывать основной функционал демонов автотестами.

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

В качестве VCS у нас используется Git, для непрерывной интеграции — TeamCity, а в роли баг-трекера выступает JIRA. Для тестирования мы используем PHPUnit. Разработка демонов, как и остального сайта, ведется по принципу «фича ― ветка». Для того чтобы понять, что это, мы рассмотрим проекции нашего flow на Git и на JIRA.
Читать дальше →
Всего голосов 36: ↑32 и ↓4+28
Комментарии14

Перезапуск демона на PHP без потери соединений к нему

Время на прочтение13 мин
Количество просмотров19K
На различных конференциях мы неоднократно рассказывали про наше облако для CLI-скриптов (видеозапись доклада, слайды). Облако предназначено для того, чтобы запускать различные PHP-скрипты по расписанию или через API. Как правило, эти скрипты обрабатывают очереди, и нагрузка «размазывается» приблизительно по 100 серверам. Ранее мы акцентировали внимание на том, как реализована управляющая логика, которая отвечает за равномерное распределение нагрузки по такому количеству серверов и генерацию заданий по расписанию. Но, помимо этого, нам потребовалось написать демон, который был бы способен запускать наши PHP-скрипты в CLI и следить за статусом их исполнения.

Изначально он был написан на Си, как и все остальные демоны в нашей компании. Однако мы столкнулись с тем, что существенная часть процессорного времени (около 10%) тратилась, по сути, впустую: это запуск интерпретатора и загрузка «ядра» нашего фреймворка. Поэтому, чтобы иметь возможность инициализировать интерпретатор и наш фреймворк только один раз, было принято решение переписать демон на PHP. Мы назвали его Phprocksyd (по аналогии с Phproxyd — PHP Proxy Daemon, демоном на Си, который у нас был до этого). Он принимает запросы на запуск отдельных классов и делает fork() на каждый запрос, а также умеет сообщать о статусе исполнения каждого из запусков. Такая архитектура во многом похожа на модель веб-сервера Apache, когда вся инициализация делается один раз в «мастере» и «дети» занимаются уже именно обработкой запроса. В качестве дополнительной «плюшки» мы получаем возможность включить opcode cache в CLI, который будет правильно работать, поскольку все дети наследуют ту же область общей памяти, что и мастер-процесс. Чтобы уменьшить задержки при обработке запроса на запуск, можно делать fork() заранее (prefork-модель), но в нашем случае задержки на fork() составляют около 1 мс, что нас вполне устраивает.
Читать дальше →
Всего голосов 36: ↑33 и ↓3+30
Комментарии16

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

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

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



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

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

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

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



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

Задай вопрос эксперту и выиграй билет на Highload!

Время на прочтение2 мин
Количество просмотров6.1K
На этой неделе в Москве пройдет одна из лучших технологических конференций HighLoad 2014.
Мы хотим дать возможность «вскочить на уходящий поезд» тем, кто очень хотел попасть на конференцию, но не успел или не смог купить билет. Badoo дарит 2 билета на конференцию за самые хорошие вопросы к экспертам, которые вы оставите в комментариях.
Вопросы должны быть по теме, в которой разбираются эксперты, плюс они должны быть сложными и интересными.
В идеале вы рассказываете о какой-то сложности, с которой столкнулись в работе, как решали ее и почему не получилось + спрашиваете совет. Можно задавать любое количество вопросов.
Итоги подведем завтра, 30 октября, в 16-00.
  • Алексей Рыбак
    Глава разработки Badoo (Head of Engineering)
    Может проконсультировать по вопросам управления разработкой в крупном проекте, масштабирования и производительности, мониторинга, поддержки, BigData и Business Intelligence.
Все эксперты
Всего голосов 24: ↑17 и ↓7+10
Комментарии82

Борьба с утечками памяти в Android. Часть 1

Время на прочтение6 мин
Количество просмотров49K
Этой статьей мы открываем цикл статей на Хабре о нашей разработке под Android.
Согласно докладу компании Crittercism от 2012 года, OutOfMemoryError — вторая по распространенности причина «крашей» мобильных приложений.
Честно говоря, и в Badoo эта ошибка была в топе всех крашей (что неудивительно при том объеме фотографий, которые просматривают наши пользователи). Борьба с OutOfMemory — занятие кропотливое. Мы взяли в руки Allocation Tracker и начали играться с приложением. Наблюдая за данными зарезервированной памяти, мы выявили несколько сценариев, при которых выделение памяти росло с подозрительной стремительностью, забывая при этом уменьшаться. Вооружившись несколькими дампами памяти после этих сценариев, мы проанализировали их в MAT (http://www.eclipse.org/mat/).
Результат был занимательный и позволил нам в течение нескольких недель снизить количество крашей в разы. Что-то было специфично для нашего кода, но также выявились типичные проблемы, присущие большинству Android приложений.
Сегодня поговорим о конкретном случае утечки памяти. О нем многие знают, но часто закрывают на это глаза (а зря).
Читать дальше →
Всего голосов 59: ↑55 и ↓4+51
Комментарии18

PHP-фреймворк Badoo

Время на прочтение10 мин
Количество просмотров29K
Код нашего сайта повидал уже не одну версию PHP. Он неоднократно дополнялся, переписывался, модифицировался, рефакторился — в общем, жил и развивался своей жизнью. В это время в мире появлялись и исчезали новые best practice, подходы, фреймворки и тому подобные явления, облегчающие жизнь разработчику и готовые решить все основные проблемы, возникающие в процессе создания веб-сайтов.
В этой статье мы расскажем о нашем пути: как был организован код изначально, какие возникали проблемы и как появился текущий фреймворк.

Что было


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

С архитектурной точки зрения это выглядело так: были объекты страниц, наследуемые от целой иерархии базовых классов, отвечающих за инициализацию окружения, сессии, пользователя и т.п. Каждая страница сама решала, когда, как и что ей выводить, делать редирект и т.п. В иерархии базовых классов было собрано много вспомогательных функций для инициализации и генерации стандартных блоков страниц, проверки пользователей, показа промежуточных промо-страниц и т.п. Со временем большинство из них было переопределено наследниками до неузнаваемости, что в разы усложнило и понимание того, как работает сайт, и саму поддержку кода.
Читать дальше →
Всего голосов 73: ↑56 и ↓17+39
Комментарии39