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.

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.