Sign in

Love being creative to solve some problems with an simple and elegant ways

Over the years I’m faced here and there with posts and articles dedicated to useful extensions or utils. “Top 5 useful Kotlin extensions”, “Top 10 super Kotlin utils”, “Top 20 neat extensions”, “Top 100 of the most needed things”. You can find a lot of articles all over the internet: here, there, this, that, here and here too.

I don’t want to go over each and put some comments on what is provided. Instead, I like the effort that library authors are putting into making our lives easier. And it’s our call what experience to adopt. …

Or three big surprises, I’ve discovered while I just tried to use them

When working on Android applications, from time to time you face surprise situations. SDK behavior ambiguity, lack of important and easy functionality, false hopes on optimizations, which you encountered in other places. And that’s fine. A lot of people working on Android SDK and JetPack libraries, which means that a lot of bugs can arise and a lot of things may be inconsistent because we all think differently.

That’s better for me because I have a basis for my small articles :) But on a serious note, today I wanted to talk about one of those moments when your expectations…

Or lessons I learn every year

Hi. The new year is coming and it is a great time to recap things that we learned and achieved during this year. I thought what could I write this time. And in 2020 we started to work remotely. We started to share our knowledge with colleagues through our internal chats, instead of just verbally showing some fun and tricky things. This allowed me to gather three of my personal findings and share them with you! I decided to share some interesting and fun stuff that I’ve learned from working with a Kotlin in 2020.

Small synopsis.

Controlling the size and sometimes aspect ratio

In the previous story, I wrote about the Uploading animation for sending image messages and how we have built it. Today I decided to write about the images themselves. How can we show them inside the message history?

Well … ImageView. The article is over!

But hold on for a while, I will try to show, that it is not so simple. Well, it is not hard, to be honest, but still, it is not just an ImageView, but also some small calculation around to look the size of it fits to what you are showing to the user.

Measure it


Some time ago I worked on a new feature: sending images in the app’s internal chat. The feature itself was big and included multiple things, but actually, initially, there was no design for uploading animation with the ability to cancel the upload. When I moved to this part I decided that Images Needs Their Uploading Animations, so let’s give them that. :)

Or how to live for several specific users

This is the story of how I started to work on a small library that was used within the company for implementing the same feature in different domains. Let’s name it Address Book. Address Book was meant to be a separate module, since the simplicity of its definition and easiness of its isolation. But more than that, since we had different products placed in different repositories, we needed to place Address Book in the third repo to be able to use it in both domains.

So was it. The separate isolated library with its own approaches, tests (no), and a…

How to reduce the number of recreations

There are different Architecture approaches in Android. The ways you can structure your code and organize the project. In each approach, there are tonnes of variations of how things can be provided/organized/transferred or shown. Moreover, from time to time you may mix different approaches and result in a half-blood architecture that is fitted for your needs, for your team, for your way of work.

One of the examples of such thing is to unite different observable fields in View Model into the one observable model, which is a state, so your MVVM will go more in the direction of MVI

With custom written migration manager

I think many of you have been in this situation. You have an application that uses some Database, and in the upcoming release, it is needed to add/change/remove some column for instance. What do we do usually here? We create a migration for the database. Either we do that manually or we use one of the libraries for the databases in which already some migration mechanism may be presented.

But let’s assume the next situation. You have a user object that you store in shared preferences. This object stored as a string in a JSON format. Everything works fine. However…

How to make PM’s dream come true

Recently I received an interesting wish from my PM. He asked me: “If I will change one of the translations, will we need to release a new version of the app?”. I said that yes because we need to rebuild everything. And he said: “It would nice to have the possibility to not release every time when a translation is changed by PM”.

By the way, we use Transifex for shared strings between iOS and Android. And we have a couple of translators for constructing Arabic strings based on the original English version. So the desire was justified. …

Even if you don’t want to change a job

Small note: this article is not about how you can manipulate with your boss to raise your salary because “every company wants me, here is offer, raise my salary now”; and this article not about how you can make fun of other companies going to their interviews and teaching them how to live. This article is about you, and how you can improve yourself.

I love to take an interview. From both sides. In this post, I will try to explain, why.

It helps your knowledges to be fresh

Memory is an interesting thing. We tend to forget everything we learned if we will not refresh knowledge…

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