October 09, 2016

Pulsing sequence generator

Imagine you need to generate "pulsing" sequence of numbers, which should continuously repeat while going up and down between needed values, like this: 5-6-7-8-9-10-9-8-7-6-5-6-7...
Purposes of such sequence may be different, but anyway, we want to have universal solution even for this simple problem. Algorithm is simple too...

Генерация пульсирующей последовательности

Иногда нужно сгенерировать "пульсирующую" последовательность целых чисел, которая повторялась бы циклически, поднимаясь-спускаясь в рамках заданных значений, как бы ступеньки: 5-6-7-8-9-10-9-8-7-6-5-6-7...
Назначение такой последовательности может быть разным. Как всегда, нам хочется иметь универсальное решение даже для такой простой задачи. Алгоритм простой...

March 21, 2016

Unity и разрешения в Android 6

Я столкнулся с проблемой появления на старте игры диалогов, запрашивающих пользователя о получении разрешений.

Должен сказать, что я выполняю экспорт проекта под Android и собираю его вручную. Я добавил несколько библиотек, которые используют кое-какие разрешения с уровнем безопасности "dangerous". Я также добавил их в AndroidManifest. Параметр targetSdk установлен в значение 23. Это значит, что мне нужно запрашивать разрешения во время выполнения.

Я удивился, когда увидел эти диалоги на старте. Я потратил много времени, пытаясь понять что происходит и какая библиотека выполняет эти запросы. Как оказалось, Unity умеет самостоятельно запрашивать разрешения начиная с версии 5.2.4.


Что ж, если вам нужно отключить этот функционал, то решение очень простое.

March 18, 2016

Unity and permissions in Android 6

I faced with a problem of appearing "ask-permissions" dialog at the starting up of my app.

At first I need to say that I've exported android project and built it manually. I've added few java-libs which use some permissions with protection level "dangerous". I've added them to AndroidManifest as well. My targetSdk parameter is 23. This means I have to ask for permissions at run-time.

I was wondered that "ask-permissions" dialog appeared at the beginning. I spent lot of time trying to understand what happens. As it turned out, Unity brought this behavior as default starting from version 5.2.4.


Well, if you want to disable this feature, solution is very simple.

March 09, 2016

Андроид статистика от 7 марта

Последняя статистика о версиях Андроида доступна на сайте developer.android.com как обычно. Мы можем видеть, как KitKat продолжает терять своих пользователей, и, с другой стороны, здесь уже заметен прогресс для Lollipop и Marshmallow. Это хорошая причина переключиться на minSdkVersion=19.

Я понял, что страница "Android Dashboards" нуждается в других типах данных в секции "Screen Sizes and Densities".

Android Dashboards - March 7th

Latest statistics about version of Android available on developer.android.com as usual. We can see KitKat keeps losing its users and from other side here is stable progress for Lollipop and Marshmallow. It's a very good reason to switch for minSdkVersion=19.

I've realized that page "Android Dashboards" needs another set of data in section "Screen Sizes and Densities".

March 08, 2016

Составной итератор. Java

Представьте, что у вас есть две коллекции объектов разного типа. Обе коллекции отсортированы по какому-то правилу. Вам нужно обойти обе коллекции, сохраняя порядок сортировки. Как, например, здесь:
Я хочу поделиться простой, но эффективной техникой использования интерфейсов Iterator и Iterable.

Composite Iterator. Java

Imagine you have two collections of different types of data. Both of them are sorted by any rule. You need to iterate over both of collections, saving the order they are sorted. Like this:
I want to share simple, but effective technique of using interfaces Iterator and Iterable.

March 01, 2016

Привет, мир!

Нашёл неплохой трюк, как сделать свой блог доступным на нескольких языках. Буду стараться публиковать статьи на нескольких языках одновременно.

Если такого рода публикации будут популярны, то я добавлю переводы для своих старых записей.

Посмотрим, что из этого получится. Следите за обновлениями, всем спасибо!

How to move object following sine curve in Unity?

Today I solved little task of moving objects following given direction. In my case it was sine curve.



February 25, 2016

Binary search tricks

Probably array is the most popular collection of data. Everyone have used, is using and will use it. If array is sorted, this means you can simplify your life while processing array. I want to share some simple, but effective trick with binary search algorithm.

Imagine you have sequence of N numbers which splits space for N + 1 segments. Two of them on the edges are infinite. For instance, this is fuzzy thermometer.


February 08, 2016

February 06, 2016

Android Dev Tips: How to replace Enum by int or String efficiently?

There's a good topic on developer.android.com about how to manage app's memory. I want to touch specific paragraph about enums:
Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.
Lot of developers don't want to follow this rule, saying this is inconvenient, hard to navigate through code, hard to debug, blah-blah-blah... 

Android guys want to help developers with this. They provided android.support.annotation package with lot of powerful annotations for Android Studio and Lint. I want to explain more about IntDef and StringDef. There two classes may help to replace enums efficiently for both: performance and convenience.

February 05, 2016

Android Dev Tips - How to get static Application Context from anywhere?

Everyone is facing with the problem of accessing Context instance from methods, which aren't logically linked with Activity or Service.

It may be needed for accessing independent resources, like strings or files from assets folder. Sometimes it may be inconvenient to initialize and keep additional variable with the static context.

There're lot of questions on StackOverflow about this. Today I want to share my experience of handling such kind of problems.


February 04, 2016

Android Dashboards - February 1st

Do you still care how to choose min SDK version? Last two years Google guys spent lot of efforts in order to make Android more fluent for vendors. The most popular devices now regularly receive firmware updates automatically. From the developer's point of view it's a fantastic! We don't need to care about dino-phones anymore.

You can see it by yourself from latest statistics from Google. Devices with API 19 and higher now cover more than 70% of market! This means we can use lot of modern features of Android KitKat, Lollipop and Marshmallow without tons of libraries and crutches.

You can find more details here.