From RxJava to Kotlin Flow: Backpressure Feb 6, 2020 Quick comparison between backpressure solutions in RxJava and Kotlin Flow ...
Diving deep into Android Dex bytecode Feb 2, 2020 Analyzing memory and performance of our code at the low-level. ...
From RxJava 2 to Kotlin Flow: Threading Jan 25, 2020 Comparing threading in RxJava 2 and Kotlin Flow ...
Change Theme Dynamically with Circular Reveal Animation on Android Jan 19, 2020 Introduction Dark theme on Android is on a hype at the moment. More and more apps add support for Dark theme over time allowing users to customize their phones, save battery and provide better accessibility. Though another trend which grows today is animated theme changes. First app I saw support of this was Telegram: Source After that in different modifications such feature started to appear in other apps, for example VK. ...
SQLite Triggers (+ Android Room) Jan 17, 2020 Introduction SQLite is one of the most used database. This is because it is used on almost all mobile devices in the world. As SQLite is very similar to SQL everyone already knows the basic concepts like querying, inserting, updating, deleting data; databases and tables; joining tables etc. But SQLite also has some advanced features and this article is about one of such called Trigger. If we try to speculate on the name “Trigger” we might say that probably something will be done when some changes are made to the database. ...
Decoding Handler and Looper in Android Dec 24, 2019 Introduction Handler and Looper are one of the main low-level Android OS things, which almost nobody uses directly (at least nowadays). But they are at the core, so many other high-level solutions are based on them. Therefore one should know what Handler and Looper are, what and how they are doing. In this article we’ll try to understand Handler and Looper in Android. What, how and why we might need them. ...
Operator fusion in RxJava 2 Nov 2, 2019 Introduction RxJava is a very powerful library, though it has some issues as well. Specifically performance and memory issues, which come from problems library tries to solve and how the solution is designed from technical perspective. In order to minimize overhead in RxJava there are a number of optimizations, which are called “operator fusion”. And we’ll talk about them in this article. But first let’s recap how RxJava reactive types work and what issues they have. ...
Random interview coding task retrospective Sep 27, 2019 Introduction It happens often that on interviews you’ve asked to perform some coding task. For unknown reason most of the times you’ve asked to write some code not in the IDE, but on piece of paper. I don’t like such tasks on an interview, because in real life one won’t write any kind of code on a paper. If you need to write something not in IDE you face issues like you can’t quickly change something or write new code in between the lines. ...
SiMMMMpLLLLeDateFormat Jul 21, 2019 Introduction Using SimpleDateFormat to format dates and times is a common thing (as Java 8 Time API is not that available on Android yet). Usually it looks like: val formatter = SimpleDateFormat("dd MMMM yyyy", Locale.ENGLISH) formatter.format(date) We can use different formats and locales with not only providing correct translations, but also some additional locale-specific formatting rules. One tricky thing about SimpleDateFormat formats is why we have M and L when they look identical? ...
3x3x3 Rubik’s cube world (GIF alert) Jul 7, 2019 Introduction I find Rubik’s cube an awesome puzzle. It has simple design, but quite difficult to solve (if you don’t know how to do that). At the same time it is possible to learn how to solve cube — there are a lot of algorithms for solving (for example Fridrich method describes quite a lot of them). These optimized algorithms made popular speedcubing — solving cube on time — with world record of less than 4 seconds. ...