Advanced WWDC 2017 Guide

I would like to share my thoughts on the WWDC developers conference. This post should be helpful not only for those who have simply heard about this event, but also for those who have already had a chance to watch some of the sessions. There is a lot of material,…

Behind the scenes with importing Adobe After Effects animation into Badoo iOS app

We’ve updated the front façade of our app, rethinking everything along the way. Changes have affected the iOS app, and indeed all platforms. We have made everything new and we have called this project - Re-think.

Integrating React Native in an existing application

As I promised at the end of my previous article, “Writing an Android component for React Native”, here is the second approach for React Native and native Android code to live together (not) in peace and harmony and not blow apart.

Do MVC like it's 1979

In 1979 Trygve Reenskaug came up with MVC — a general solution to the problem of giving users control over the information they see from a device. The original tiny document caused an enormous amount of interest, and eventually, many companies and individuals came up with their own understanding and implementations of…

Testers are from Mars and Developers are from Venus!

Although the title of this article is hugely inspired from John Gray’s original work, it essentially denotes a similar relationship between two different entities and them complementing each other to be successful. By means of this post I would like to share my thoughts about the role and responsibility of…

Reactive selfies with Camera2 API on Android - Part 1

I will show an example of Camera2 API usage, which at present has been poorly documented and studied by the community. We’ll be using RXJava2 to tame this API. The second version of this popular library came out relatively recently, and not many examples are available.

The painless way to collect statistics from a web-site

We know that analytics allows you to assess how effectively any web-site operates, to improve how it operates, and therefore to raise the level of sales and to improve user interaction with the site. But what do you do if the standard monitoring tools are inadequate?

Write an Android component for React Native

React Native has been the buzzword for a while now, but it has recently caught our attention. The main concerns that occurred to us were the size of the existing codebase (let’s say, sizeable), our highly customised classes to fit our needs and easiness of integration. I decided to test…

A small but extremely useful patch for Selenium

Around six months ago, the number of tests and tasks grew to the point where our little Selenium farm was struggling with the number of requests from new Firefox or Chrome sessions at peak times.

Leads, go home – and take your reports with you!

Hello! I am Rafael, and I am workaholic. I have been recovering for some time now, and I want to share my findings with you today. I’ve been a programmer for as long as I remember. It all started in my youth as a hobby I loved and then, in…

Everything you wanted to know about Git but weren't nerdy enough to ask

If you are unfamiliar with Git, some background may help introduce the relevant terminology before reading one of the many Git tutorials online.

WebRTC - Making a peer-to-peer game using JavaScript

As a rule, when people talk about WebRTC, they mean the organisation of audio and video connections, but this technology can also be used for other interesting things as well. I decided to try to make a peer-to-peer game and to share my experience in creating it.

How to become an iOS Developer

Becoming iOS Developer was surprisingly easy for me. However, it was the biggest change in my life which caused a chain of fantastic improvements in my quality of life. I decided it is time to figure out if I got lucky, or if it is truly an easy profession to…

How to teach a web app to speak 100 languages - the specifics of localisation

A key characteristic of online services these days is that they are accessed by users from all over the world speaking a multitude of languages. If you are developing this kind of service and want people worldwide to be able to use it then you’ll need your product translated and…

What do a mobile QA and an octopus have in common?

It’s early morning, you are the mobile QA. You get ready for your day, and make yourself a strong coffee. You are about to test a couple of new features for your app, and you need to pick up some devices to check the new functionality. What devices should you…

Breaking the limitation of Calabash-Android!

We have been using Calabash for automated testing at Badoo since before Appium existed. The stability of Calabash is great and it’s still faster compared to Appium, so we don’t want to migrate. But, to automate a feature-rich application like Badoo, we had to overcome the ‘only application UI’ limitation…

How we test interaction with Facebook

We have various ways of verifying users. Some of these are pretty standard, such as verification using a phone number. There is also a more unusual method - verification by photograph. But the simplest and quickest way is verification via using social networks.

How to Dockerise Calabash-Android on Mac OS

One of our goal is to make it super easy for developers to run these tests in one command without going through the pain of setting up a test-scripting environment (Installing JDK, Android SDK, Ruby, and praying that nothing else has been added since the documentation was written).

Learning from mistakes in the organisation of quality control

Three years ago, I started attending various IT conferences and giving talks about the processes and techniques we use for quality control. And naturally, after each talk, I spoke with people in the audience and took an interest in how they were doing things.

Emoji?! No, never heard of it

Emoji have been part of our life for some time now. But sending and displaying emoji is not a simple matter for a cross-platform application. The problem is that emoji sent from mobile applications are not always displayed correctly on the web.

Masking Bitmaps

In this article, I would like to analyse the tools available for Android developers which can be used to complete such tasks — and choose the most efficient of them.

Top 3 Badoo Android AMA

Our Android team just had their first Ask Me Anything (AMA), it was great! So we’re sharing our top 3 Android question and answers from Dima, Erik, Guillermo, Rich and Yaroslav.

Windows Phone - an experimental platform

In this article I will tell you the story of our team - how our Windows Phone (WP) team became an experimental platform, the problems that we faced and how we solved them.

Segregating Android Phone Models between Docker Containers

We wanted to move our Android device tests to a Linux host: it’s cheaper hardware, and we find that our Mac Mini build machines tend to fumble Android USB connections, making phones mysteriously vanish in the middle of a test run. We mostly use Docker containers to manage our Linux…

Shake Detector for Android with RxJava

It all began when I had the task of undoing a user action in the app when the device was shaken. The main problem was how to know that a shake had occurred. After a couple of minutes of searching, it became clear that one should subscribe to accelerometer events…

Collection and Analysis of Daemon Logs at Badoo

At Badoo the monitoring division is responsible for keeping track of and sorting out problems with daemons. Our staff use Zabbix and scripts to check that the service has launched and is responding to requests. Additionally, the department examines statistics for daemons and the scripts that work with them, looking…

Crazy Agile API

There are lots of articles and books on how to properly design APIs, but only few of them cover the case of a constantly changing API. In fast moving companies, releasing many features per week/day and changing the API is often a necessity. This article will explain how we’ve handled…

Pardon My French - Introducing Chateau

Being a social networking platform, providing a great chat experience is at the core of what we do at Badoo. However, the meaning of “a great chat experience” is constantly evolving, and the major chat applications keep adding new features to stay competitive and enhance user experience.

Our Bounty Program at Badoo

Many IT companies now have their own bounty programs (i.e. programs that root out vulnerabilities), and Badoo is no exception.

iOS Architecture Patterns

Feeling weird while doing MVC in iOS? Have doubts about switching to MVVM? Heard about VIPER, but not sure if it worth it? Keep reading to find the answers to questions above.

How Badoo saved one million dollars switching to PHP7

We did it! Hundreds of our application servers are now running on PHP7 and doing just fine. By all accounts, ours is only the second project of this scale (after Etsy) to switch to PHP7.

Winium - Now for Windows Phone

There are no convenient open source automated testing tools for Windows Phone and Windows. The existing tools are proprietary, have limitations and suggest their own approach that would differ from conventional standards like Selenium WebDriver. In this post we will present Selenium compatible open source tools for Windows Phone automation….

Create a plugin for Google Protocol Buffer

Google’s Protocol Buffer is a library to encode and decode messages in a binary format optimised to be compact and portable between different platforms.

Winium.Desktop - Selenium for Windows-based Desktop Applications

Hi there. My name is Gleb, and I do test automation in 2GIS. Over a year ago I published an article about one of our tools Cruciatus. We use it to test user interface for Windows-based desktop applications.

Mobile App Testing - Tips and Tricks

Our new article is in fact a list of tips and tricks. These tips will help beginners to progress faster while more experienced users will be able to streamline what they know. The article will also be useful for developers, product and project managers, and for anyone who would like…

Badoo Coding Challenge - Finalists and Winners

Thank you to everyone who took part in the Badoo Coding Challenge. We are very happy to announce the names of our finalists and winners below. We will be in contact with all finalists and winners via email very soon.

How we made Chatto

Our chat was old, having evolved over the years into a massive view controller with weird fixes that nobody could understand. It was difficult to add new types of messages and new bugs were easily introduced. So we decided to rewrite it from scratch on Swift and make it open…

Badoo Coding Challenge

Welcome to our first edition of the Badoo Coding Challenge! Below, you will find all the relevant information about the challenge. We hope participants will enjoy solving the problems as much as we enjoyed designing them.

Parallel Calabash Testing on iOS

We want our users to have the same experience of Badoo on mobile regardless of which platform they run, so we have a battery of 450 Cucumber tests and growing that we run against all platforms: Android, iOS, and mobile web (we’re working to add Windows). These 450 tests take…

Batch updates for UITableView and UICollectionView

Apple did a tremendous job in giving developers such powerful building blocks as UITableView and UICollectionView. It’s even possible to claim that iOS wouldn’t have been such a success without these general purpose views. But unfortunately when it comes time to update these views in a batch fashion, it appears…

clang-format as a guard for Objective-C code style

This article is about the experience of Badoo’s iOS team in making sure Objective-C code is compliant with the code style used. Importance of the code style The primary goal of all coding conventions is to unify code as much as possible and eliminate personality. It’s like handwriting, nobody cares…

Click to git rebase

When we talk about automating the development and testing process, it might sound like it’s a very ambitious affair, and indeed it is. But if you break it into pieces, then individual fragments of the whole picture become visible. This process of fragmentation is highly important in two situations: when…

Let's build: Freehand Drawing in iOS - Part 3

This the third and final tutorial in which we build Freehand Drawing for iOS. In this part we’ll improve how the stroke looks and feels.

First Badoo Summer Internship Program

For the first time ever, Badoo has taken on an intern over the summer. We see it as an act of giving back, supporting young students in gaining relevant work experience and skills, while enjoying the pace of working for a big company. This internship program is our contribution to…

JaCoCo coverage in Cucumber on Android

In an ideal world, all requirements would be specified clearly, comprehensive tests would be derived from those requirements, and the whole of the application would be tested. In practice, we’re only human.

Cross Platform Mobile Test Automation and Continuous Delivery

Badoo develops multiple products with native applications on all major mobile platforms - Android, iOS, Mobile Web (HTML5) and Windows. Our most popular product, called Badoo, has 250M+ registered users worldwide.

Let's build: Freehand Drawing in iOS - Part 2

This the second in a series of tutorials in which we build Freehand Drawing for iOS. In this part we’ll add undo functionality and the ability to draw dots.

Let's build: Freehand Drawing in iOS - Part 1

This post will be the first of a series in which we follow the development of a specific feature. We want to add to the great quantity of existing tutorials on the internet by sharing practical knowledge directly from our engineering team.

Testing Android notifications in Calabash

It’s generally understood that Calabash can only operate controls that are part of the application it’s testing, but this limitation is particularly annoying with status bar notifications.

Better Memory Dumps on Android

This is a follow-up on the previous article about Deobfuscating HPROF memory dumps. Reading that article isn’t a requirement, some knowledge of the HPROF file format is useful.

Is it easy to teach a robot to pass a programming test?

This article will teach you how to write a test-passing robot and will stretch your brain a bit regarding probabilistic theory, as we explore why, in the face of the tasks’ apparent complexity, an automatic brute force attack quickly arrives at a solution. Warning: half the article is maths. #Introduction…

Code coverage at Badoo

This article was written over a year ago and since then code coverage estimation has continued to evolve. However the basic approach described in this article has become the standard, which has allowed us to almost double the number of tests without much hassle. Now there are almost 50,000 tests…

Code signing and distributing - Swift

At Badoo we’re slowly adopting the new programming language Apple introduced last year: Swift. Even though we don’t plan to write Swift-only apps for now, we do want to write isolated modules and learn while we deliver on our products.

iOS Code Injection

Code injection is a powerful tool to modify compiled applications at run-time. It’s possible to do in iOS and it can help in many situations. It’s not such a widespread technique so I want to talk about it and give some tips on how to use it.

Using regular expressions to hack our way towards AMDfication

Badoo’s MobileWeb project started in early 2012. Due to the initial pace of development, coding conventions and modularisation weren’t given priority. Most of the ‘modules’ lived inside a global object. As the project grew it became difficult to maintain and bugs became harder to track down. So after much internal…

Can you center a grid of images using only CSS?

In this article I’d like to discuss a UI problem I was faced with in the past, which I still have no elegant solution for. It seems completely reasonable for this problem to have a simple CSS solution, yet I have not been able to discover one so far. I…

Calabash Android - Unleash the power of Query

Calabash provides query method to get views/elements from screen. But query can do more than this. In this post, I’ll go through a few operations we can perform using the query method invocation option. This can be used for a range of tasks from updating simple views to calling system…

Deobfuscating HPROF memory dumps

According to Crittercism 1, the second most common crash reported in Android apps is java.lang.OutOfMemoryError, so it stands to reason that analyzing these crashes should be one of the top priorities for any Android developer. If you are analyzing memory dumps from a debug build or if you are not…

Building a maintainable bi-directional cross platform protocol

Today I gave a talk along side Pavel Dovbush at (#jsconfeu) about our experiences building a cross platform api abstraction based on protobuf.

Android Handler Memory Leaks

Android uses Java as a platform for development. This helps us with many low level issues including memory management, platform type dependencies, and so on. However we still sometimes get crashes with OutOfMemory. So where’s the garbage collector?

A page control with style

When we set up to design the new Hot or Not version, our designers and developers came up with a really nice way to hint users that the photos they scroll horizontally, can be seen as a grid.

Migrating to PHP 5.5 and Unit Tests

Four years have passed since our migration from PHP 4.4 to PHP 5.3 at Badoo. It is high time to upgrade to a newer PHP, PHP 5.5. We’ve had many reasons to upgrade, apart from a number of new features, PHP 5.5 has greatly increased performance.

Localising into 46 languages

Localisation done right will earn your app loyal users in new countries. Done badly, it becomes a nagging pain like half the apps on my computer trying to correct the spelling of localisation to localization. The purpose of localisation is not only to make your app available in other languages,…

The technology of billing - how we do it at Badoo

There are many ways to monetize your project, but all of them have one thing in common – the transfer of money from the user to a company account. In this article we will discuss how this process works at Badoo.

5 Advanced Javascript and Web Debugging Techniques You Should Know About

In this article we will discuss 5 advanced techniques which web developers can use to reduce the time they spend debugging and squash challenging bugs by using new tools available to us and taking advantage of the new features offered by debuggers.

JSConfEU 2013

A few of us here at Badoo were lucky enough to travel to Berlin in October for JSConfEU. It was a fantastic conference, the quality of the talks was incredibly high covering topics from the future of JavaScript, to why sometimes you need to draw animals. There were so many…

Type Checking in JavaScript

Here at Badoo we write a lot of JavaScript, our mobile web app contains about 60,000 lines of the stuff, and maintaining that much code can be challenging. One of the trickier aspects of working with a client side JavaScript application of this scale is avoiding exceptions. In this post…

AIDA - Badoo's journey into Continuous Integration

It’s hardly news to anyone that product development and testing involves a lot of boring routine work, which can lead to human error. To avoid complications stemming from this, we use AIDA.

Scaling beyond one developer

Yesterday I gave a talk to the London iPhone Developer Group (#lidg) about the lessons we’ve learnt in the iOS team at Badoo as we’ve scaled the development team.

Fixed Headers in Mobile Webapps

Note: This techniques in this article are now out of date due to various changes to iOS Safari and Chrome becoming the default WebView for Android.