There is a lot of hype around ktor: numerous posts on Twitter, Medium, podcasts, and more on how everyone should jump into using it. Let’s take a step back and try to understand the big picture.

Software engineering is a game of tradeoffs: you win in one place but lose in others. So what’s the deal with ktor? There are clearly 2 tradeoffs made with the overall concept of ktor:

  1. Ktor is multiplatform: it strives to support different platforms such as JVM, JavaScript or Native
  2. Ktor is concise: it emphasises easy to write code

Do you feel the loophole in…


The room was dark and filled with a beam of light coming from a single window. The air, filled with the smell of old books, felt thick. Each step produced a small distant echo as Doug approached the only thing in the room — the desk and its occupant.

“What brings you down here?” said Xander breaking the silence.

“I’m looking for a record, a very old one” said Doug trying to hide his excitement. “How far do our records go?”

“Well, sometime around the middle of 21 century. Who are you looking for?”

“Let me take a look” said…


I don’t know how code review is implemented in Google for the changes (f0c7198 and 50307d9) that will be reviewed here. I also can’t see the issue tracker for the particular problem that was being fixed. But since I’m affected by this change, I can only make this a public thing and hope for the best. If you don’t like to discuss or know about problems, read no further.

Disclaimer: I am in no way attacking Google or its employees. Everything expressed below are my personal opinions.

How it started

Working closely with the ddmlib project, I’ve noticed that the test status reported…


In this post, I’ll introduce you to adam: a kotlin-based replacement for developer-to-android-device interaction.

Photo by Louis Hansel @shotsoflouis on Unsplash

Most of the current tools for interaction with ADB server use ddmlib: a Java-based library that is supposed to help tool developers.

The following diagram illustrates the flow of interaction:


If we’re talking about a laptop, then leaving it alone for a couple of years would do little damage: your battery will be dead, but you can quickly charge it. Unfortunately, it doesn’t work the same for a musical instrument such as a piano.

In August 2019, I found an old piano that seemed to be forgotten about. A bit of context here, my primary role at work is as a Principal Software Engineer (Keyword Software). I like to explore other topics in-depth with my hobbies. This piano restoration project is one of them.

Time spent

Duration (hours)

Tuning…


Hello. It’s currently 2019 and testing open source Android projects is extremely hard. The reason for this is the state of Android Emulator and it’s dependencies.

I am going to focus on the official Android Emulator images provided via the Android SDK

Before Android 26 we had:

  1. x86 images, provided your system supported hardware vm acceleration
  2. arm-based images. If your system didn’t support hardware acceleration then you could still run an emulator. Very-very slowly

By hardware acceleration I’m referring to the HAXM/Hypervisor.framework on MacOS, KVM on Linux and HAXM/WHPX on Windows

This status quo changed when Google stopped building arm…


Working with any build system is fun and games until you reach a point where almost every single person complains about the performance of builds. As with any problem, it requires tools in order to be solved.

Photo by Stephen Dawson on Unsplash

For the past week or so, I’ve tried to understand if it’s possible to get visibility into gradle builds without the help of Gradle Enterprise, a proprietary solution developed by Gradle.

Let me briefly explain gradle’s terminology and how the build works first:
Task is gradle’s minimal unit of execution (unless you use Worker API). Any task has a collection of tasks that it…


In this chapter, I’ll explain how Marathon test runner is implemented and what are the basic concepts that are used.

For the previous chapter see Chapter 1.

Helicopter view

Photo by Daniel Wallace on Unsplash

Marathon test runner is written in Kotlin with extensive use of coroutines. Test runner consists of several Gradle modules. The main execution logic can be visualised as the following diagram:


So you’ve scaled up your mobile infrastructure to support the ever-growing number of tests for your application, and you think everything will be fast, right?… Wrong! In the next several minutes I’ll teach you why scaling infrastructure doesn’t necessarily lead to faster test execution and how you can address this.

Marathon logo

The approaches and test runner described in this article have been battle tested by several companies and executed millions of UI tests. All the source code is available on GitHub. I humbly ask you to star, share and spread the word.

If you’re interested in scaling up your infrastructure, then…


A story of color correcting the TV that started with adjusting some settings with remote, then escalated to doing vector multiplications by hand and ended up with small modifications to the firmware of the TV. Read on if you’re interested in color and embedded Android Linux.

Mountains from my last trip to grab your attention

Quick intro to color correction

It doesn’t take much to produce color from any screen now, but it takes a lot to produce accurate colors. What does the term accurate colors actually mean?

There is an assumption that all humans perceive the color in the same way (or at least we’re targeting an average person) and the first quantifiable…

Anton Malinskiy

Software engineer & IT conference speaker; Landscape photographer + occasional portraits; Music teacher: piano guitar violin; Bike traveller, gymkhana

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store