Недостатки Kotlin и способы их обойти
- Стандартная библиотека и языковые фичи подталкивают к злоупотреблению работой с nullable, из-за чего код становится плохо читаемым
- Использование nullable в качестве возвращаемого значения – не очень выразительно, так как сложно понять, что в конкретном случае означает null
- Отсутствие union-типов ведет к переусложненному коду
- Операции над коллекциями задизайнены так, что очень легко копировать всю коллекцию без реальной необходимости
- Стандартная библиотека и языковые фичи подталкивают к злоупотреблению работой с nullable, из-за чего код становится плохо читаемым
- Использование nullable в качестве возвращаемого значения – не очень выразительно, так как сложно понять, что в конкретном случае означает null
- Отсутствие union-типов ведет к переусложненному коду
- Операции над коллекциями задизайнены так, что очень легко копировать всю коллекцию без реальной необходимости
This media is not supported in your browser
VIEW IN TELEGRAM
Wolfia – сервис, который позволяет пошарить эмулятор с запущенным приложением
Заливаете в облако apk, он запускается на эмуляторе, ссылку на который можно пошарить коллегам. Удобно, чтобы быстро поделиться с кем-то результатом своей работы.
Заливаете в облако apk, он запускается на эмуляторе, ссылку на который можно пошарить коллегам. Удобно, чтобы быстро поделиться с кем-то результатом своей работы.
Релиз kotlinx-serialization 1.4.0
- Поддержка последней версии Kotlin 1.7.10
- Интеграция с библиотекой Okio для прямой работы с IO
- Поддержка сериализации inline классов вышла из экспериментального режима
- Улучшены сообщения об ошибках благодаря доработкам сабклассов SerializationException
- Переезд документации с GitHub на сайт Kotlin
- Поддержка последней версии Kotlin 1.7.10
- Интеграция с библиотекой Okio для прямой работы с IO
- Поддержка сериализации inline классов вышла из экспериментального режима
- Улучшены сообщения об ошибках благодаря доработкам сабклассов SerializationException
- Переезд документации с GitHub на сайт Kotlin
GitHub
Release 1.4.0 · Kotlin/kotlinx.serialization
This release contains all features and bugfixes from 1.4.0-RC plus some bugfixes on its own (see below).
Kotlin 1.7.10 is used as a default.
Bugfixes
Fixed decoding of huge JSON data for okio stre...
Kotlin 1.7.10 is used as a default.
Bugfixes
Fixed decoding of huge JSON data for okio stre...
Иерархия модулей в приложении Headhunter
- Четкие правила по классификации модулей упрощают жизнь в многомодульном проекте
- Имена модулей должны быть такими, чтобы было понятно, что делает модуль и где лежит его код
- Ограничения на количество зависимостей у модуля позволяют держать под контролем время сборки
- У HH три типа модулей: app-модули, feature-модули, core-модули
- Введенные правила для каждого из типов модулей позволяют растить иерархию вширь, а не вглубь
- Четкие правила по классификации модулей упрощают жизнь в многомодульном проекте
- Имена модулей должны быть такими, чтобы было понятно, что делает модуль и где лежит его код
- Ограничения на количество зависимостей у модуля позволяют держать под контролем время сборки
- У HH три типа модулей: app-модули, feature-модули, core-модули
- Введенные правила для каждого из типов модулей позволяют растить иерархию вширь, а не вглубь
Charty – библиотека для создания графиков для Compose
- Поддерживается много видов гистограмм, круговых диаграмм и линейных графиков
- Есть семпловое приложение, в котором можно поиграться со всеми графиками
- Поддерживается много видов гистограмм, круговых диаграмм и линейных графиков
- Есть семпловое приложение, в котором можно поиграться со всеми графиками
DivKit — в опенсорсе
Ребята из Яндекса опубликовали на гитхабе новый фреймворк DivKit, который ускоряет разработку приложений. Его особенности:
- DivKit позволяет интегрировать подход Server-Driven UI на уровне отдельных элементов
- Изменения UI могут раскатываться с сервера на все версии приложения одновременно
- Кроссплатформенность: пишем один код для Android, iOS и веба.
Ребята из Яндекса опубликовали на гитхабе новый фреймворк DivKit, который ускоряет разработку приложений. Его особенности:
- DivKit позволяет интегрировать подход Server-Driven UI на уровне отдельных элементов
- Изменения UI могут раскатываться с сервера на все версии приложения одновременно
- Кроссплатформенность: пишем один код для Android, iOS и веба.
Как расчитываются размеры Layout’ов в зависимости от их родительских элементов
- При реализации кастомного Layout вы получаете доступ к measurables, списку элементов для измерения, и constraints, списку ограничений, накладываемых родительскими элементами
- К constraints относятся ограничения не только родительских view, но и различных modifiers
- BoxWithConstraints – особенный вид Layout, в котором композиция элементов происходит уже на этапе measure/layout
- При реализации кастомного Layout вы получаете доступ к measurables, списку элементов для измерения, и constraints, списку ограничений, накладываемых родительскими элементами
- К constraints относятся ограничения не только родительских view, но и различных modifiers
- BoxWithConstraints – особенный вид Layout, в котором композиция элементов происходит уже на этапе measure/layout
Accompanist – что это за библиотеки и какая у них судьба
- Сейчас Accompanist включает в себя Pager, FlowLayouts, Navigation Transitions, Swipe Refresh и другие компоненты
- Основная цель Accompanist – тестировать пользу от фичей, пока не готовых к добавлению в Jetpack
- Эти фичи нельзя включать напрямую в AndroidX, так как использовать экспериментальный API между модулями запрещено
- 30% приложений, использующих Compose, используют и Accompanist
- Сейчас Accompanist включает в себя Pager, FlowLayouts, Navigation Transitions, Swipe Refresh и другие компоненты
- Основная цель Accompanist – тестировать пользу от фичей, пока не готовых к добавлению в Jetpack
- Эти фичи нельзя включать напрямую в AndroidX, так как использовать экспериментальный API между модулями запрещено
- 30% приложений, использующих Compose, используют и Accompanist
Medium
Jetpack Compose Accompanist — An FAQ.
Accompanist is a group of libraries that aim to supplement Jetpack Compose with features that are commonly required by developers but not…
Официальный гайд по архитектуре offline-first приложений
Основные требования к offline-first приложению: оставаться раьотоспособным без сетевого соединения, всегда показывать локальные данные, не дожидаясь ответа сервера, запрашивать обновления сервера с учетом ограничений сети и батареи. В гайде даются советы, как:
- Организовать слой данных с двумя репозиториями – для локального хранения и работы с удаленными данными
- Построить операции чтения и записи данных
- Обрабатывать ошибки
- Решать конфликты при синхронизации
Основные требования к offline-first приложению: оставаться раьотоспособным без сетевого соединения, всегда показывать локальные данные, не дожидаясь ответа сервера, запрашивать обновления сервера с учетом ограничений сети и батареи. В гайде даются советы, как:
- Организовать слой данных с двумя репозиториями – для локального хранения и работы с удаленными данными
- Построить операции чтения и записи данных
- Обрабатывать ошибки
- Решать конфликты при синхронизации
onBackPressed() deprecated
Начиная с Android 13, метод onBackPressed() депрекейтится. Причина в том, что обработка перехода назад переводится на ahead-of-time модель.
Начиная с Android 13, метод onBackPressed() депрекейтится. Причина в том, что обработка перехода назад переводится на ahead-of-time модель.
This media is not supported in your browser
VIEW IN TELEGRAM
v9 – библиотека для работы с векторными изображениями
- v9 позволяет динамически ресайзить Path-объекты, сохраняя изначальные размеры некоторых из их частей
- Аналогичным образом работают 9-patch bitmaps
- Автор библиотеки – Romain Guy, ключевой разработчик Compose и Android
- v9 позволяет динамически ресайзить Path-объекты, сохраняя изначальные размеры некоторых из их частей
- Аналогичным образом работают 9-patch bitmaps
- Автор библиотеки – Romain Guy, ключевой разработчик Compose и Android
Cross device SDK Developer Preview
Cross device SDK – это набор API для разработки приложений, которые работают сразу на нескольких типах устройств. Оно помогает со следующими задачами:
- Найти девайсы рядом с текущим и соединиться с ними
- Пошарить стейт между приложениями на разных устройствах
- Запустить приложение на второстепенном устройстве без запуска его на основном
- Начать выполнять задачу на одном устройстве и продолжить на другом
📹Детальное видео
📝Документация
Cross device SDK – это набор API для разработки приложений, которые работают сразу на нескольких типах устройств. Оно помогает со следующими задачами:
- Найти девайсы рядом с текущим и соединиться с ними
- Пошарить стейт между приложениями на разных устройствах
- Запустить приложение на второстепенном устройстве без запуска его на основном
- Начать выполнять задачу на одном устройстве и продолжить на другом
📹Детальное видео
📝Документация
Как писать плагины для Danger CI
- Danger – это система для автоматизации сообщений во время автоматического code review. По сути, она умеет брать output любых анализаторов кода и превращать его в понятные сообщения в GitHub PR.
- Автор статьи подключает ktlint к Danger и на его примере показывает, как решить такую задачу и для других проверок.
- Danger – это система для автоматизации сообщений во время автоматического code review. По сути, она умеет брать output любых анализаторов кода и превращать его в понятные сообщения в GitHub PR.
- Автор статьи подключает ktlint к Danger и на его примере показывает, как решить такую задачу и для других проверок.
Онлайн-книга про алгоритмы
Большая коллекция статей про различные виды алгоритмов, структур данных и связанных с этим областей знаний.
Большая коллекция статей про различные виды алгоритмов, структур данных и связанных с этим областей знаний.
Как избежать бойлерплейта при работе с Use Cases
Одна из основных проблем чистой архитектуры и юзкейсов в частности состоит в том, что в ряде случаев они становятся просто бесполезными прослойками над репозиторием. Автор разбирает плюсы и минусы четырех подходов к их организации.
Оптимальный способ их организации – функциональные юзкейсы с функциональными интерфейсами.
Одна из основных проблем чистой архитектуры и юзкейсов в частности состоит в том, что в ряде случаев они становятся просто бесполезными прослойками над репозиторием. Автор разбирает плюсы и минусы четырех подходов к их организации.
Оптимальный способ их организации – функциональные юзкейсы с функциональными интерфейсами.
Серия статей про MVI на стейт-машине
В серии статей разбирается, как реализовать MVI архитектуру без втаскивания в проект лишних зависимостей.
1️⃣ Основные идеи
2️⃣ Обвязка
3️⃣ Многомодульность и мультиплатформа
💻 Код на GitHub
В серии статей разбирается, как реализовать MVI архитектуру без втаскивания в проект лишних зависимостей.
1️⃣ Основные идеи
2️⃣ Обвязка
3️⃣ Многомодульность и мультиплатформа
💻 Код на GitHub
Pokedex – пример современного Android приложения
Pokedex – MVVM приложение, которое использует все последние архитектурные рекомендации Google. Технический стек:
💉Hilt
🔀Coroutines
🌊Flow
📦Room
🎨Material Design
💻KSP
Pokedex – MVVM приложение, которое использует все последние архитектурные рекомендации Google. Технический стек:
💉Hilt
🔀Coroutines
🌊Flow
📦Room
🎨Material Design
💻KSP