company_banner
  • Исследуем RxJava 2 для Android

    • Перевод

    enter image description here


    Меня зовут Аркадий, я Android-разработчик в Badoo. В последнее время в нашем блоге много постов про Go, PHP, JS, QA, и я решил разбавить их темами по мобильной разработке. Как раз занимался портированием одного Android-проекта с RxJava 1 на RxJava 2 и читал всё, что можно найти на эту тему в интернете. В частности, доклад Джейка Вортона с конференции GOTO Copenhagen 2016. Мне показалось, что это достойный кандидат на перевод – думаю, многие Android-разработчики задумываются о переходе на RxJava 2, и им интересно, что изменилось по сравнению с первой версией.


    Джейк сделал достаточно объёмное введение о реактивном программировании, так что знание RxJava 1 не требуется для понимания статьи. Доклад был подготовлен, когда RxJava2 ещё только готовилась к выпуску (на текущий момент уже выпущена версия 2.1.0).

    Читать дальше →
    • +40
    • 117k
    • 5
  • Маленький, но очень полезный патч в Selenium

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


      Примерно полгода назад тестов и задач стало столько, что наша маленькая ферма с Selenium в час пик стала буквально «захлебываться» от запросов на новую сессию Firefox или Chrome. Выглядело это примерно так: на Selenium grid образуется очередь из сессий, которые ждут свободный браузер. Пользователи продолжают запускать автотесты, и эта очередь продолжает расти, но браузеры заняты старыми задачами и сессии «отваливаются» с таймаутом.


      дай ноду

      Читать дальше →
      • +40
      • 15,2k
      • 9
    • Как Badoo набирает разработчиков

        image

        Привет! Меня зовут Аркадий, я тимлид в компании Badoo. Сегодня я расскажу вам о том, как за одни выходные мы сделали предложение о работе восьми мобильным разработчикам. И снова приглашу вас поучаствовать в нашем рекрутинговом мероприятии, по итогам которого лучших Android- и iOS-разработчиков мы заберём работать в лондонский офис Badoo.
        Читать дальше →
      • PHP-фреймворк Badoo

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

          Что было


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

          С архитектурной точки зрения это выглядело так: были объекты страниц, наследуемые от целой иерархии базовых классов, отвечающих за инициализацию окружения, сессии, пользователя и т.п. Каждая страница сама решала, когда, как и что ей выводить, делать редирект и т.п. В иерархии базовых классов было собрано много вспомогательных функций для инициализации и генерации стандартных блоков страниц, проверки пользователей, показа промежуточных промо-страниц и т.п. Со временем большинство из них было переопределено наследниками до неузнаваемости, что в разы усложнило и понимание того, как работает сайт, и саму поддержку кода.
          Читать дальше →
        • Tarantool User Group Meetup в Москве

            В следующую субботу, 19 июля, проведем в офисе Badoo встречу пользователей Tarantool.

            СТРАНИЦА МЕРОПРИЯТИЯ НА MEETUP.COM

            Константин Осипов (Mail.ru) расскажет о Tarantool 1.6, новой версии сервера, в которой были пересмотрены многие технические решения и сделана удобная, безопасная и по-прежнему высокопроизводительная СУБД.
            Tarantool — это, в первую очередь, lock-free база данных, обрабатывающая все транзакции последовательно в одном потоке. Tarantool 1.6 — это и ещё полноценный Lua Application Server с поддержкой кооперативной многозадачности, неблокирующего ввода-вывода, стандартных пакетов Lua и пакетов, созданных специально для Tarantool.

            Антон Поваров (Badoo) выступит с докладом«Tarantool в Badoo: хранение истории посещений».
            Каждый день на badoo.com пользователи просматривают порядка 100 миллионов профилей других юзеров. Мы храним счетчики и полную историю посещений за последние 90 дней, с некоторой агрегацией — это около 5 миллиардов ивентов.
            Читать дальше →
          • Знакомство с системой деплоя и сопровождения серверов xCAT

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

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

              Любому инженеру, управляющему парком серверов Badoo – самой популярной сети знакомств в интернете, не хочется даже вспоминать о том, что когда-то приходилось править вручную конфигурации DHCP-сервера, собирать образы для сетевой PXE-загрузки… Мы хотим рассказать вам, где и как в нашей компании успешно используется программное решение xCAT.
              Читать дальше →
              • +39
              • 15,7k
              • 9
            • Строим систему реактивных компонентов с помощью Kotlin

              • Перевод


              Всем привет! Меня зовут Анатолий Варивончик, я Android-разработчик Badoo. Сегодня я поделюсь с вами переводом второй части статьи моего коллеги Zsolt Kocsi о реализации MVI, которую мы ежедневно используем в процессе разработки. Первая часть здесь.

              Чего мы хотим и как мы это сделаем


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

              Каждая Feature отслеживаема — есть возможность подписаться на изменения её состояния и получать уведомления об этом. При этом Feature можно подписать на источник ввода. И в этом есть смысл, ведь с включением Rx в кодовую базу у нас и так появилось множество наблюдаемых объектов и подписок на самых разных уровнях.

              Именно в связи с увеличением количества реактивных компонентов пришло время поразмышлять о том, что мы имеем и можно ли сделать систему ещё лучше.
              Читать дальше →
              • +38
              • 7,6k
              • 2
            • Как подружиться с UIKit


                Привет, Хабр! Меня зовут Богдан, в Badoo я работаю в мобильной команде iOS-разработчиком. Мы достаточно редко рассказываем что-либо о нашей мобильной разработке, хотя статьи – один из лучших способов документировать хорошие практики. Эта статья статья расскажет о нескольких полезных подходах которые мы используем в нашей работе.


                Уже на протяжении нескольких лет iOS-сообщество сражается с UIKit. Кто-то придумывает сложные способы «погребения» внутренностей UIKit под слоями абстракций в своих выдуманных архитектурах, другие команды переписывают его, теша своё эго, но оставляя за собой дикое количество кода, который нужно поддерживать.

                Читать дальше →
                • +38
                • 15,3k
                • 5
              • Делаем работу нашего гейм-дизайнера в Unity удобнее и приятнее

                • Tutorial
                    Добрый день, Хабр. В эфире снова я, Илья Кудинов, QA-инженер компании Badoo. В свободное от основной работы время я занимаюсь разработкой игрушек на Unity 3D и решил в качестве эксперимента написать статью об одной из проблем, с которой столкнулась наша команда. Я являюсь основным разработчиком, и наш гейм-дизайнер в «гробу видал» копание в моем коде с какой бы то ни было целью (разделение труда — одно из величайших достижений цивилизации), значит, моя обязанность — предоставить ему все необходимые рычаги управления и настройки геймплея в виде удобных визуальных интерфейсов. Благо Unity сам по себе имеет достаточно удобные (кхе-кхе) готовые интерфейсы и ряд методов их расширения. И сегодня я расскажу вам о некоторых приемах, которые делают жизнь нашего гейм-дизайнера проще и удобнее, а мне позволяют не биться головой о клавиатуру после каждого его запроса. Надеюсь, они смогут помочь каким-нибудь начинающим командам или тем, кто просто упустил эти моменты при изучении Unity.

                    Сразу скажу, что наша команда все еще активно учится и развивается, хоть мы уже и выпустили дебютную игру. И если «дедлайны не горят», то я предпочитаю разбираться в каких-то вещах сам, а не обращаться к экспертам и различным best practices. Поэтому что-то из рассказанного мною может оказаться не оптимальным или банальным. Буду очень рад, если в таких случаях вы подскажете мне более удобные решения в комментариях и личных сообщениях. Ну и в целом информация здесь скорее базового уровня.
                Читать дальше →
              • Видео докладов с DevConf 2016

                  17-го июня в инновационном центре “Сколково” прошла очередная ежегодная конференция DevConf, а Badoo в очередной раз снимали видео выступлений. Программа была богата на именитых спикеров и интересные доклады, поэтому сделать подборку из самых «вкусных» выступлений было крайне сложно. Но мы, как минимум, постарались…

                  Познавательного вам просмотра!

                  «Развитие ветки PHP-7», Дмитрий Стогов, Zend Technologies




                  Читать дальше →
                • Как получить оффер в день собеседования и не ждать сто лет

                    enter image description here


                    UPD: По итогам мероприятия мы сделали 8 предложений о работе: 5 – iOS-разработчикам, 3 – Android-разработчикам.


                    Привет, Хабр! Я Богдан, разработчик в iOS-команде Badoo в Лондоне. Прочитав заголовок, вы можете подумать, что в Badoo совсем с ума сошли публиковать посты на такие темы. Но пост вполне для Хабра. Мы сейчас очень активно расширяем iOS- и Android-команды и ищем разработчиков по всему миру. Естественно, Москву обойти стороной просто не можем (наш второй офис здесь). Мы хотим провести достаточно необычное мероприятие, чтобы после него обзавестись новыми коллегами.


                    Мы (мобильные команды Badoo) решили приехать на несколько дней в Москву и провести небольшую встречу, после которой несколько разработчиков (iOS и Android) получат предложения о работе у нас (в Лондоне). Чтобы не затягивать эту самую встречу, мы сделали онлайн-тест (он не суперсложный, а скорее чтобы понять ваш уровень и упростить и ускорить личные встречи).

                    Читать дальше →
                  • Конференция Velocity London от O'Reilly: обзор и слайды


                      Velocity — это конференция, которая посвящена распределённым системам. Её организует издательство O'Reilly, и она проходит трижды в год: один раз в Калифорнии, один раз в Нью-Йорке и один раз в Европе (причём город меняется каждый год).


                      В 2018 году конференция была в Лондоне с 30 октября по 2 ноября. Главный офис Badoo находится там же, так что у нас с коллегами было сразу два повода съездить на Velocity.


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


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

                      Читать дальше →
                    • 19 мая приглашаем на Badoo Techleads Meetup #3



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

                        19 мая приглашаем на третий Badoo Techleads Meetup для лидов, руководителей отделов и СТО.

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

                        Регистрация здесь. Обратите внимание, что нужно подождать подтверждения участия. Количество мест в нашем кафе ограничено, и надеемся на ваше понимание! Мы также сделаем онлайн-трансляцию.

                        Адрес: Цветной бульвар, 2 (м.Трубная)
                        Начало докладов в 11:30
                        Трансляция будет на нашем YouTube-канале и в группах VK и FB. Записи опубликуем там же и на Хабре.

                        Программа


                        Читать дальше →
                      • Обзор лучших европейских и не только QA-конференций этого года


                          Привет, Хабр! Меня зовут Влад Романенко. Я работаю инженером по тестированию в Badoo, в команде iOS.

                          Любите заводить новые знакомства, обмениваться знаниями и опытом и быть в тренде? Тогда предлагаю вам внести в свой календарь пару—тройку предстоящих мероприятий.

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

                          В моём списке уже около 20 конференций. Среди них Международный день ГИС в Белорусском государственном университете, Конференция для пользователей и разработчиков ГИС с открытым исходным кодом в Москве и множество конференций по тестированию (например, эта и эта).

                          Я заметил, что многие тестировщики и QA-инженеры почему-то избегают конференций. И напрасно. С одной стороны, есть вы со своими вопросами к сообществу, с другой — есть сообщество, которому интересен ваш опыт. И почему бы эти две стороны не объединить? Именно поэтому я решил поделиться своим мнением относительно предстоящих мероприятий и вдохновить вас на их посещение.
                          Читать дальше →
                          • +36
                          • 8,4k
                          • 7
                        • Масштабируем разработку: от стартапа до сотни инженеров

                            Многие другие крупные IT-компании, начиналась со стартапа, и Badoo не исключение. За последние годы компания прошла путь от нескольких десятков инженеров до нескольких сотен. Николай Крапивный был на передовой на большей части этого пути и принимал решения: что лучше делать, а что не делать, как справляться с проблемами. Его доклад на TeamLead Conf был посвящен этому опыту и картине мира, которая в результате сформировалась.

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



                            Рассказ состоит и трех частей. Первая — про коммуникации, про то, как они меняются с ростом компании. Вторая часть о том, как с увеличением количества инженеров в команде попытаться сохранить скорость разработки. И третья часть — от том, почему Badoo живет на два офиса, и как при этом справиться с проблемой общения.
                            Читать дальше →
                          • Docker: гибкая сеть без NAT на все случаи жизни

                              image

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

                              Так дело обстояло и в моем случае. Хочу заметить, что многие задачи, которые приходится делать, я делаю по принципу keep it simple. То есть почти всегда, если для решения задачи можно использовать простые инструменты и шаги, я выберу этот путь. Я понимаю, что простой или сложный шаг или инструмент — оценка субъективная, но т.к. работаем мы в команде, то вот такие критерии могут подходить при выборе инструментов:

                              • используется ли инструмент в инфраструктуре?
                              • если требуется что-то новое, то нельзя ли использовать то, что уже есть?
                              • насколько сильно обслуживание (обновление, перезапуск) сервиса будет отличаться от остальных сервисов?
                              • <...>

                              В этой статье речь пойдет о сетевом аспекте Docker. Расскажу обо всем по порядку, но хочу заметить, что на этот раз я не буду говорить «мы используем сеть хоста, всячески избегая применения NAT».
                              Читать дальше →
                            • Выступление основателя Badoo Андрея Андреева на LeWeb 2011

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

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

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



                                  Многие сегодня любят реактивное программирование. В нём масса плюсов: и отсутствие так называемого "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.
                                  Читать дальше →
                                • Как встроить С-библиотеку в Swift-фреймворк

                                  • Перевод


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

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


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

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

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