Алгоритм Base64 на Kotlin
Не так давно у меня была одна интересная задача на работе. Нужно было переводить массив байт в Base64 строку для отправки на сервер, но было одно НО - проект на Kotlin-Multiplatfrom. Это означает, что общий код нужно писать только на Kotlin. Делать expect нативных реализаций для Android и iOS - тупая идея, подумал я. И нашел реализацию алгоритма...
Думаете экономите память, храня данные в переменных типа byte или short? Ха-ха!
Сижу я значит, разбираюсь в коде алгоритма Base64, пытаясь понять что за магические манипуляции с битами происходят. Замечаю очень странный момент: Прежде, чем выполнять какие-либо операции, типа сдвигов и всего такого, все байты кастуются в Int. Черт возьми! Что за фигня еще??? Они только что превратили 8 бит в 32.
Почему Java использует int в...
Остановитесь!!! Вам не нужны Repository
Есть такое понятие, как Anemic Domain Model, ака Бледная/Анемичная доманная модель. Оно может быть знакомо вам, если вы пробовали применять в своих проектах такой принцип, как DDD(Domain Driven Design).
Луковая архитектура, Clean architecture - эти подходы базируются на идее использовать домен в качестве ядра приложения и следовать пятому принц...
CoroutineExceptionHandler - зло
Часто вижу статьи с заголовком наподобие “Exception handling with coroutines made easy”. Дейстрительно easy, только нездорово, бестолково.
val handler = CoroutineExceptionHandler { _, exception ->
println("CoroutineExceptionHandler got $exception")
}
GlobalScope.launch(handler) {
throw AssertionError()
}
Тут корутина выбрасывает un...
Коллизии HashCode
Представьте, вы пишите мессенжер или почтовый клинт. Вам придется работать с кучей повторяющихся строковых значений. Например в чате - какой-то влюбленный Вася может спамить десятки аналогичных признаний в любви своей даме сердца Насте. Но мы то знаем, что все Насти шлю** Наверняка мы захотим как-то кэшировать эти сообщения. Для этого подойдет H...