Jul 17, 2019
A Custom LayoutManager Case: Bumble Beeline
Click to read the full post...
More from Badoo
It’s been a while since I first heard about crowdsourced testing platforms. It was a time when I had just started to be interested in QA, and when I was browsing Google one day, I found a forum, where a link to the site uTest.com was posted. After a brief…
Guide to mobile app autotesting tools
… for though it has many omissions and contains much that is apocryphal, or at least wildly inaccurate, it scores over the older, more pedestrian work in two important respects. First, it’s slightly cheaper; and secondly it has the words DON’T PANIC printed in large friendly letters on its cover.
Generating multi-brand multi-platform icons with Sketch and a Node.js script
Using a custom build script in Node JS, it is possible to manipulate a series of Sketch files, and then, using an internal Sketch tool, automatically export their assets, to generate multiple icon libraries, for multiple platforms and different brands, that support dynamic colourisation of the assets via design tokens…
Achieving State Of The Art Results In Natural Language Processing
Part 2: ELMo, BERT and MT-DNN
In my previous article I covered some of the fundamental concepts in NLP. This time, I will introduce ELMo, BERT and MT-DNN, architectures which leverage these concepts and have recently achieved some State Of The Art (SOTA) results on NLP tasks.
Embeddings from Language Models (ELMo)
An introduction to ELMo can be found in this…
Unidirectional data-flow and the Zen of black box components
This is the third part in a series of articles on Android architecture at Badoo. Here are links to the first two:
MVI beyond state reducers
Building a system of reactive components with Kotlin
Don’t stop at loose coupling
It’s pretty much generally recognised that loose coupling is better than tight coupling. If you are…
Hello! I’m Alexey Timin, a Senior Software Engineer at Bumble, in charge of localisation system development. Let me tell you more about our localisation system.
We work on two products: Badoo and Bumble and operate more than 150,000 phrases and texts, translated into more than 50 languages. Each project has…
The story of the lost commit: how to solve this mystery
It was already evening by the time the developer contacted me. The deadbeef commit patch had disappeared from the master branch.
They showed me the evidence: the output from two commands. The first one was:
git show deadbeef
This showed changes to the file: let’s call it Page.php. The canBeEdited…
What Google I/O 2019 addressed: Android 10, AR-applications and much more
In this article I’ll share my thoughts on Google I/O 2019 that my colleagues and I attended recently (and Badoo were even mentioned in one of the talks). During the three days, there were more than 150 talks, lots of choice as you can see, but I really wanted to…
Volcanic piglet, or do-it-yourself SQL
Collecting, storing and transforming data — these are the main tasks of a data engineer. In any one 24-hour period, Bumble Business Intelligence unit receives and processes over 30 billion events sent from clients’ devices or application servers.
Researching and interpreting all this data are not trivial tasks; sometimes it…
MVI in Kotlin Multiplatform — part 3 (3 of 3)
This is the concluding article in a series of three articles on MVI architectural pattern in Kotlin Multiplatform. In the previous two articles (part 1 and part 2) we reminded ourselves what MVI is, created the Kittens module for loading images of kittens, and integrated it into iOS and Android…
Xcode 10.2, macOS Mojave 10.14.4, iOS 12.1 and other betas
New betas are here and these are some of the most important things that I have learned about them.
Swift 5 for Xcode 10.2 beta
Firstly, the latest Xcode beta is bundled with the following Swift version:
Apple Swift version 5.0 (swiftlang-1001.0.45.7 clang-1001.0.37.7)
ABI version: 0.6
Let’s start with the most exciting news:
Scalable Jetpack Compose Navigation
For one of my recent personal projects, I decided to make Jetpack Compose a first-class citizen. For me, this meant that my app would use a single activity, and all the navigation would be performed using Compose.
When I originally started investigating the feasibility of this, Jetpack Compose Navigation did…
Part 1: Dynamic Delivery in multi-module projects at Bumble
Dynamic Delivery is a technology which allows you to install and delete parts of an application while the application is working, in order to reduce the space it occupied. If there are functions not being used, what is the point of a user having them on their device?
Mutation Testing in PHP: quality measurement for code coverage
How do you evaluate how good your tests are? Many people rely on the most popular score, the one everyone knows — code coverage. But this is a quantitative, rather than a qualitative metric. It shows how much of your code is covered by the tests, but not how well…
Bundling C library in Swift framework
In 2014 Apple introduced Swift, a new language for developing applications across its ecosystem. As well as offering various new possibilities and features, it also created some new challenges for those wanting to use good old C libraries. In this article, I will describe one common use case which you…
Universal links for Android and iOS
Sharing between platforms should always work
Mobile apps have given a huge amount of good things to the human race, but at the same time, they have broken the internet. Instead of easy-to-understand links to sites which can be copied and shared, now you have to tell people what app to use to access which content.
Image detection as a service
How we use deep learning and APIs to support our products
Across our two apps Badoo and Bumble, we have over millions registered users worldwide uploading millions of photos a day to our platform. These images provide us with a rich data set from which we derive a wealth of insights.
MVI beyond state reducers
This is the first part in a series of articles on Android architecture in Badoo. You can find the next one here:
Part II — Building a system of reactive components with Kotlin
Story time: problems of state
Your application has a state at any given time that determines its behaviour and what the user…
Continuous delivery for your Kotlin Multiplatform library
As part of the Bumble family— the parent company operating Badoo and Bumble apps — one of my main projects was involved in the team that created Reaktive library — Reaktive Extensions on pure Kotlin.
In the case of Kotlin Multiplatform I discovered that continuous integration and continuous delivery require…
Deep Neural Networks & Image Captioning
Part 1: Helping our users find love on Badoo
Badoo is the largest dating network in the world, with over millions users across 190 countries who upload over 10 million photos per day to our platform. These images provide us with a rich data set we can derive a wealth of insights from.
Our Data Science team use image…
From zero to Cosmos — Part #2
This is the story of how a small style guide that was first introduced under the radar, became so appreciated by both developers and designers that it made its way to become a complex unification project — a design system called Cosmos.
From zero to Cosmos — Part #1
The “Re-Think” project
Aspiring team lead?
Six tips on how to meet deadlines and develop your team
When I became a team lead for the first time, I started going to lots of conferences and reading deep books on team management. I was reading all about what I should be and how I should develop, but it was still not clear to me what exactly I should…
Intercepting and redefining modal presentation from a third-party framework
Some time ago, here at Badoo, we introduced a third-party library to cover our project needs. It was working well, except for one detail: it was presenting UI using iOS modal presentation (typical full screen view controller which is shown from the bottom of the screen), but according to our…
How to use Composite builds as a replacement of buildSrc in Gradle
Gradle buildSrc approach has become standard for implementing custom plugins, tasks and specifying common configurations (like dependencies list and versions) but has one major flaw — it invalidates a build cache when it is changed. On the other hand, Gradle also provides an alternative composite build approach that lacks this…
Covering A/B tests with UI tests:
How to avoid getting tangled up in your own code
My name is Vitaliy Kotov and I spend most of my time working on automated testing issues at Badoo. In this article, I tell you all about how we have organised the UI testing work with our numerous A/B tests, the problems we have had to deal with…
Latest news, articles and updates montly delivered to your inbox.