company_banner
  • Shake Detector для Android на RxJava



      Вступление


      Началось все с того, что была поставлена задача отменять последнее действие в приложении при встряхивании устройства. Но как понять, что случилось это самое встряхивание? Через пару минут изучения вопроса стало ясно, что надо подписываться на события от акселерометра и дальше пытаться как-то определить, что устройство встряхнули.
      Обнаружились и готовые решения. Все они были довольно похожи, но в чистом виде они меня не устраивали, и я написал собственный «велосипед». Это был класс, который подписывался на события от сенсора и менял свое состояние по мере их поступления. Потом пару раз я и мои коллеги подкручивали шестеренки этого велосипеда, и в результате он стал напоминать нечто из «Безумного Макса». Я пообещал, что, как выдастся свободное время, приведу это безобразие в порядок.

      И вот, читая недавно статьи по RxJava, я вспомнил про эту задачу. «Хм, — подумал я, — RxJava выглядит очень подходящим инструментом для такого рода проблем». Не откладывая в долгий ящик, взял и написал решение на RxJava. Результат меня поразил: вся логика заняла 8 (восемь!) строк! Я решил поделиться своим опытом с другим разработчикам. Так появилась на свет эта статья.

      Надеюсь, этот простой пример поможет принять решение тем, кто размышляет о применении RxJava в своих проектах.

      Статья ориентирована на читателей, имеющих базовый опыт разработки под Android. Исходный код готового приложения можно посмотреть на GitHub.

      Приступим!
      Читать дальше →
    • Учимся на ошибках в организации контроля качества

        Привет, Хабр! Меня зовут Илья Кудинов, и я работаю QA-инженером в компании Badoo. Три года назад я начал посещать различные IT-конференции и рассказывать о процессах и технологиях, применяемых нами при контроле качества. И конечно же, после каждого доклада я общался со слушателями, интересовался, как работают они. В этом деле меня всегда мотивировали отзывы вида «Раньше мы работали вот так, но, послушав твой доклад, мы увидели, как можно сделать лучше», а еще лучше — когда люди не копируют наши приемы, а придумывают что-то сами, иногда даже более интересные варианты. Таких историй у меня накопилось много, и я хочу поделиться с вами некоторыми из них (все имена и названия вымышлены, любые совпадения с реальными лицами являются случайностью). Может быть, что-то из этого поможет вам увидеть направление развития вашего собственного проекта — и это будет самой большой наградой для меня! Разумеется, буду рад после этого выслушать и ваши истории — в комментариях или личных сообщениях.
        Читать дальше →
        • +26
        • 24k
        • 9
      • Docker meetup в Badoo



          У нас отличная новость! 18-го июня проводим Docker meetup.

          Программа


          Антон Турецкий, Badoo

          «Docker в Badoo: ПМЖ или временная регистрация»


          Тезисы:
          — Реальная история из жизни о том, как мы внедряли Docker;
          — Хочешь чтобы все коллеги узнавали тебя? Займись внедрением Docker в своей компании!;
          — Собрать все шишки? Легко… или «Даунтайм, как неотъемлемая часть внедрения»;
          — Будь сильным и смелым, если уверен в перспективах и необходимости своего внедрения;
          — «Делать новое не ломая старого» – основная цель любого внедрения;
          — Чекпоинт, как инструмент промежуточной оценки результатов;
          — Как растут наши аппетиты или о новых инфраструктурных идеях;
          — Мы сделали это, значит это вполне осуществимо;
          — Самое сложное позади или какие приятные результаты вас ожидают, если все пошло правильно.
          Читать дальше →
        • Как мы разработали чат-фреймворк для Android приложения — Chateau

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



            Разумеется, Badoo не остается в стороне от этих тенденций. Мы постоянно совершенствуем свой чат и расширяем его функциональность, но возможности существующей кодовой базы и архитектуры едва успевают за требованиями современности. Некогда упорядоченный и хорошо протестированный код разрастается непредсказуемым образом, накапливая «технический долг». Анализируя пути решения этой проблемы, мы столкнулись с дилеммой, которая знакома любому разработчику: переписать код или сделать рефакторинг?
            Читать дальше →
            • +14
            • 10,2k
            • 4
          • Видео докладов с Весеннего Go митапа

              14 мая мы провели Весенний Go митап. А сегодня публикуем долгожданные видео выступлений.

              «Оптимизация программ на Go», Марко Кевац, Badoo



              Читать дальше →
              • +18
              • 6,9k
              • 1
            • Профилирование и оптимизация программ на Go

              • Tutorial

              Введение


              В этой статье я расскажу, как профилировать и оптимизировать приложения на языке Go с использованием встроенных и общих инструментов, доступных в ОС Linux.

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

              Я привел такое определение, чтобы сразу отсечь вопросы некорректной работы приложения. В этой статье мы не будем говорить о проблемах мультитредового программирования, о дата-рейсах (англ. data race), о поиске ошибок (англ. debugging). Для всего этого в Go есть свои утилиты и подходы, но оставим эту тему на будущее.



              Читать дальше →
            • Заметки о Percona Live 2016 CA

                Недавно я побывал на замечательной конференции Percona Live 2016 в Санта-Кларе. Хочется написать множество хвалебных слов организаторам и за отлично работающий Wi-Fi, и питание, и точное следование расписанию, и подготовку залов. Но все же статью я пишу не для туристического сайта, а для технического, потому просто расскажу о самых интересных докладах из тех, которые я посетил.

                На удивление для столь узкоориентированной конференции, спектр докладов не ограничился одним только MySQL, как это могло бы показаться, но охватывал в целом инструменты работы с данными. Место нашлось и Hadoop с экосистемой и колоночными базам данных, и облакам (куда сейчас без них).
                Читать дальше →
              • Весенний Go в Badoo


                  Спешим сообщить вам прекрасную новость – 14 мая в московском офисе компании Badoo пройдет весенний Go-митап.

                  Начинаем в 12:00. Приходите послушать интересные доклады и просто пообщаться!

                  Выступления будут сниматься на видео.

                  Программа


                  Марко Кевац, Badoo

                  «Оптимизация программ на Go»

                  Из доклада вы узнаете:
                  — про большинство утилит из арсенала Go, предназначенных для оптимизации производительности;
                  — как и когда их (утилиты) использовать, а также мы посмотрим как они устроены внутри;
                  — про применимость linux утилиты perf для оптимизации программ на Go.
                  Кроме того, устроим небольшой crash course, в рамках которого поэтапно соптимизируем несколько небольших программ на Go с использованием вышеперечисленных утилит.
                  Читать дальше →
                  • +25
                  • 8,7k
                  • 9
                • Эмодзи?! Нет, не слышал

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

                    Последние версии iOS и Android имеют поддержку более 1200 символов эмодзи, но «десктопный» рынок не может похвастаться такими успехами. Мы же в Badoo хотим и делаем все, чтобы пользователям было комфортно общаться на всех платформах, не имея никаких ограничений в переписке.
                    Далее я расскажу, каким способом мы добились 100% поддержки эмодзи для веба.
                    Читать дальше →
                  • PHP UK Conference 2016

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

                      PHP UK Conference проводится с 2006 года и изначально задумывалась как профильная конференция для местного PHP-сообщества, где разработчики могли бы делиться знаниями и узнавать из первых уст о об опыте профессионалов и последних достижениях в индустрии.
                      Читать дальше →
                    • Архитектурные паттерны в iOS

                        Введение в MVP, MVC, MVVM и VIPER. Что между ними общего и в чем разница.



                        Делаете все по MVC, а получается некрасиво? Сомневаетесь, переходить ли на MVVM? Слышали о VIPER, но не уверены, стоит ли оно того?

                        В этой статье я кратко рассмотрю некоторые популярные архитектурные паттерны в среде iOS и сравню их в теории и на практике. Больше информации вы найдете при переходе по ссылкам, указанным в тексте.
                        Читать дальше →
                      • Сбор и анализ логов демонов в Badoo

                          Введение


                          В Badoo несколько десятков «самописных» демонов. Большинство из них написаны на Си, остался один на С++ и пять или шесть на Go. Они работают примерно на сотне серверов в четырех дата-центрах.

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



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

                          Мы построили такую систему и спешим поделиться подробностями. Наверняка у кого-то из вас будет стоять похожая задача, и прочтение данной статьи убережет от ошибок, которые мы успели совершить.
                          Читать дальше →
                        • Видео докладов с Zabbix Moscow Meetup 2016

                            12 марта мы провели очередной Zabbix Meetup, в этот раз приуроченный к выходу версии Zabbix 3.0. А сегодня мы спешим поделиться видео докладов.

                            1. «Zabbix 3.0, что дальше?» Алексей alexvl Владышев, Zabbix.


                            Читать дальше →
                          • SoftMocks: наша замена runkit для PHP 7

                              Компания Badoo одной из первых перешла на PHP 7 — мы совсем недавно писали об этом. В той статье мы говорили об изменениях в инфраструктуре тестирования и обещали подробнее рассказать о разработанной нами замене для расширения runkit под названием SoftMocks.

                              SoftMocks


                              Идея у SoftMocks очень простая и отражена в названии: нужно реализовать аналог для runkit, максимально совместимый с ним по семантике, на чистом PHP. Soft здесь подчеркивает то, что он реализован не внутри ядра PHP, а поверх него, без использования Zend API и прочего hardcore. Тот факт, что он на чистом PHP, означает, что мы можем спокойно переходить на новую версию PHP и просто добавлять поддержку нового синтаксиса, а не переписывать расширения с новой версией Zend API и ловить миллионы багов из-за различных тонкостей в семантике.
                              Читать дальше →
                            • Bounty-программа в Badoo

                                image


                                Сегодня у многих IT-компаний есть собственные bounty-программы (или программы по поиску уязвимостей). Badoo — в их числе.

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

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

                                Мы хотим усилить интерес к ней, в том числе со стороны иностранных исследователей. Поэтому мы, во-первых, открыли страничку с нашей программой на крупнейшем портале исследователей hackerone.com, а во-вторых — увеличили суммы вознаграждений за найденные уязвимости! Теперь сумма вознаграждения, в зависимости от категории, начинается от £100 и может достигать £1000, сумма супер-премии составляет £2000 (а это более 200 000 рублей по текущему курсу!) и даже больше, если обнаруженная уязвимость представляет реальную угрозу для наших пользователей.

                                Читать дальше
                                • +20
                                • 11,3k
                                • 1
                              • Badoo перешли на PHP7 и сэкономили $1M

                                  Badoo перешли на PHP7 и сэкономили $1M

                                  Мы сделали это! Несколько сотен наших application-серверов переведены на PHP7 и прекрасно себя чувствуют. Насколько нам известно, это второй переход на PHP7 проекта такого масштаба (после Etsy). В процессе мы нашли несколько очень неприятных багов в системе кеширования байт-кода PHP7, но они исправлены. А теперь — ура! — благая весть для всего PHP-сообщества: PHP7 действительно готов к продакшену, стабилен, потребляет значительно меньше памяти и дает очень хороший прирост производительности. Ниже мы подробно расскажем, как мы перешли на PHP7, с какими трудностями столкнулись, как с ними боролись и какие результаты получили.
                                  Читать дальше →
                                • История создания Chatto

                                    Наш чат устарел: за несколько лет эволюции он превратился в громоздкий View Controller со странными исправлениями, в которых никто не мог разобраться. Стало трудно добавлять новые типы сообщений, зато с легкостью появлялись новые баги. Поэтому мы решили переписать чат на Swift с чистого листа и выложить его в open source.
                                    Мы начали работу над проектом, поставив перед собой две цели:
                                    • масштабируемая архитектура: нам нужна была возможность легко добавлять новые типы сообщений без ущерба для написанного ранее кода;
                                    • хорошая производительность: мы хотели обеспечить плавную загрузку и прокрутку сообщений.

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


                                    Читать дальше →
                                  • Zabbix Moscow Meetup 2016


                                      12 марта в московском офисе компании Badoo уже во второй раз проводим Zabbix Moscow Meetup.

                                      Основной повод собраться — релиз Zabbix 3.0.

                                      В программе: отличные доклады, вкусная еда и много интересного общения.

                                      Начало в 11-30

                                      Доклады будем снимать на видео.

                                      Алексей Владышев, Zabbix
                                      «Zabbix 3.0, что дальше?»


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

                                      Илья Аблеев, Badoo
                                      «От LLD к Super Discovery или как переложить мониторинг на девелопера»

                                      Читать дальше →
                                      • +11
                                      • 5,8k
                                      • 2
                                    • Как устроено сплит-тестирование в Badoo

                                        Если в Google ввести запрос «a b тестирование», то по теме выпадает довольно много статей, но в них больше теории и ориентированы они на менеджеров, а в качестве инструментов предлагаются готовые клиентские реализации, вроде Google Analytics. Также есть статья про очень простую серверную реализацию (в реалиях авторов, я думаю, этого вполне достаточно).

                                        Сегодня я расскажу о том, как это происходит у нас, в Badoo, при огромном количестве пользователей по всему миру.

                                        У нас был целый «зоопарк» инструментов для сплит-тестирования во главе с A/B фрэймворком, часть из которых разрабатывалась для других целей. Помимо прочих недостатков, все эти инструменты использовали примерно один и тот же способ для разделения пользователей на варианты — это хеширование ID пользователя плюс «соль». Такой подход нас не удовлетворял, и было принято решение разработать новую версию, в которой можно было бы избежать недостатков старых версий.
                                        Читать дальше →
                                      • Windows Phone как экспериментальная платформа

                                          Большинство IT-компаний не делают версии своих продуктов под Windows Phone, потому что доля мобильной операционной системы от Microsoft меньше, чем у iOS и Android. Тем не менее, это третья крупнейшая мобильная операционная система на рынке, и в Badoo Windows Phone приложение уже давно существует.

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

                                          Через пару месяцев было решено написать полностью новое приложение, забросив почти все старые наработки во многом потому, что код был далек от идеала, а на его поддержку тратилось очень много времени. Первым новым приложением для Windows Phone стал экспериментальный проект Badoo — Hot or Not. По концепции он очень похож на Badoo, но в нем гораздо меньше функционала и он несколько отличается. Всего за 3 месяца мы вдвоем сделали приложение Hot or Not с нуля в одной ветке Git-репозитория, которую в итоге замержили в Master. А приложение TeamCity было настроено так, что каждый коммит разработчика собирался как отдельное приложение, что позволяло мне, как тестировщику, видеть историю изменений клиента.

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

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