Home

Алгоритм Base64 на Kotlin

Не так давно у меня была одна интересная задача на работе. Нужно было переводить массив байт в Base64 строку для отправки на сервер, но было одно НО - проект на Kotlin-Multiplatfrom. Это означает, что общий код нужно писать только на Kotlin. Делать expect нативных реализаций для Android и iOS - тупая идея, подумал я. И нашел реализацию алгоритма...

Read more

Думаете экономите память, храня данные в переменных типа byte или short? Ха-ха!

Сижу я значит, разбираюсь в коде алгоритма Base64, пытаясь понять что за магические манипуляции с битами происходят. Замечаю очень странный момент: Прежде, чем выполнять какие-либо операции, типа сдвигов и всего такого, все байты кастуются в Int. Черт возьми! Что за фигня еще??? Они только что превратили 8 бит в 32. Почему Java использует int в...

Read more

Остановитесь!!! Вам не нужны Repository

Есть такое понятие, как Anemic Domain Model, ака Бледная/Анемичная доманная модель. Оно может быть знакомо вам, если вы пробовали применять в своих проектах такой принцип, как DDD(Domain Driven Design). Луковая архитектура, Clean architecture - эти подходы базируются на идее использовать домен в качестве ядра приложения и следовать пятому принц...

Read more

CoroutineExceptionHandler - зло

Часто вижу статьи с заголовком наподобие “Exception handling with coroutines made easy”. Дейстрительно easy, только нездорово, бестолково. val handler = CoroutineExceptionHandler { _, exception -> println("CoroutineExceptionHandler got $exception") } GlobalScope.launch(handler) { throw AssertionError() } Тут корутина выбрасывает un...

Read more

Коллизии HashCode

Представьте, вы пишите мессенжер или почтовый клинт. Вам придется работать с кучей повторяющихся строковых значений. Например в чате - какой-то влюбленный Вася может спамить десятки аналогичных признаний в любви своей даме сердца Насте. Но мы то знаем, что все Насти шлю** Наверняка мы захотим как-то кэшировать эти сообщения. Для этого подойдет H...

Read more