#полезное
😵💫 lets-plot — мультиплатформенная библиотека для построения графиков и диаграмм, написанная на Kotlin и Python
—
Графики, созданные с помощью lets-plot можно встраивать в JVM (Swing, JavaFX) и Kotlin/JS-приложения.
Гитхаб
👉 Новости 👉 База вопросов
—
pip install lets-plotГрафики, созданные с помощью lets-plot можно встраивать в JVM (Swing, JavaFX) и Kotlin/JS-приложения.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #docker
🤔 Есть ли ограничения на количество контейнеров, которые можно запустить в Docker?
B Docker нет явного ограничения на количество контейнеров. Ограничения зависят от аппаратных ресурсов, таких как обьем памяти и количество процессорных ядер.
👉 Новости 👉 База вопросов
B Docker нет явного ограничения на количество контейнеров. Ограничения зависят от аппаратных ресурсов, таких как обьем памяти и количество процессорных ядер.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
👨💻 github-workflows-kt — инструмент на Kotlin для создания рабочих процессов GitHub Actions
github-workflows-kt поможет писать типобезопасный код на Kotlin для организации надежных рабочих процессов, планирования GitHub Actions и т.д.
Гитхаб
Доки
👉 Новости 👉 База вопросов
github-workflows-kt поможет писать типобезопасный код на Kotlin для организации надежных рабочих процессов, планирования GitHub Actions и т.д.
Гитхаб
Доки
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Chucker — удобный инструмент для отладки сетевых запросов в Android-приложениях. Этот форк проекта Chuck работает как перехватчик OkHttp, фиксируя все HTTP-взаимодействия и предоставляя понятный интерфейс для их анализа.
Инструмент имеет встроенный UI с возможностью просмотра заголовков, тел запросов/ответов и даже изображений. Для релизных сборок есть no-op версия, которая полностью исключает его из конечного APK. Также проект поддерживает кастомизацию: можно скрывать чувствительные данные в заголовках, настраивать период хранения логов и добавлять декодеры для бинарных форматов.
Гитхаб
👉 Новости 👉 База вопросов
Инструмент имеет встроенный UI с возможностью просмотра заголовков, тел запросов/ответов и даже изображений. Для релизных сборок есть no-op версия, которая полностью исключает его из конечного APK. Также проект поддерживает кастомизацию: можно скрывать чувствительные данные в заголовках, настраивать период хранения логов и добавлять декодеры для бинарных форматов.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Jooby — лаконичный веб-фреймворк для Java и Kotlin. Этот проект предлагает минималистичный подход к созданию API — без лишних абстракций, но с поддержкой популярных серверов вроде Jetty и Netty. Инструмент универсален: один и тот же код работает как в традиционных Java-приложениях, так и в Kotlin-проектах.
Фреймворк сохраняет совместимость с существующими решениями, позволяя подключать модули для GraphQL, WebSocket или авторизации. При этом стартовый шаблон умещается в несколько строк — достаточно вызвать
Гитхаб
👉 Новости 👉 База вопросов
Фреймворк сохраняет совместимость с существующими решениями, позволяя подключать модули для GraphQL, WebSocket или авторизации. При этом стартовый шаблон умещается в несколько строк — достаточно вызвать
runApp и описать роуты. Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #docker
🤔 Что такое Docker Compose?
Docker Compose - это инструмент для управления многоконтейнерными приложениями. С помощью простого YAML-файла (
👉 Новости 👉 База вопросов
Docker Compose - это инструмент для управления многоконтейнерными приложениями. С помощью простого YAML-файла (
docker-compose. yml ) можно настроить и запустить несколько контейнеров, определяя их сервисы, сети и тома.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 Как подружить LifecycleOwner и Decompose
Некоторые API в Jetpack библиотеках принимают в качестве параметра LifecycleOwner, например, так сделано в CameraX. Однако если в вашем проекте используется Decompose, и вы используете LocalLifecycleOwner для получения текущего значения в Composable функции, то жизненный цикл будет работать некорректно: он будет соответствовать жизненному циклу Activity или Fragment, так как Decompose нигде не переопределяет этот CompositionLocal и использует собственный жизненный цикл из библиотеки Essenty.
Чтобы исправить эту проблему, необходимо сконвертировать LifecycleOwner из Decompose в его аналог из Jetpack. Однако из коробки пока что такого адаптера нет, и придётся написать его самостоятельно, по аналогии с конвертацией ЖЦ в Essenty.
В версии Decompose 3.4.0 эта проблема будет решаться проще: появится JetpackComponentContext, как отдельная зависимость, и можно будет сразу получить нужный lifecycle прямо из компонента.
Поэтому будьте внимательны при использовании CompositionLocal для работы с жизненным циклом, если навигация в проекте построена на Decompose.
👉 Новости 👉 База вопросов
Некоторые API в Jetpack библиотеках принимают в качестве параметра LifecycleOwner, например, так сделано в CameraX. Однако если в вашем проекте используется Decompose, и вы используете LocalLifecycleOwner для получения текущего значения в Composable функции, то жизненный цикл будет работать некорректно: он будет соответствовать жизненному циклу Activity или Fragment, так как Decompose нигде не переопределяет этот CompositionLocal и использует собственный жизненный цикл из библиотеки Essenty.
Чтобы исправить эту проблему, необходимо сконвертировать LifecycleOwner из Decompose в его аналог из Jetpack. Однако из коробки пока что такого адаптера нет, и придётся написать его самостоятельно, по аналогии с конвертацией ЖЦ в Essenty.
В версии Decompose 3.4.0 эта проблема будет решаться проще: появится JetpackComponentContext, как отдельная зависимость, и можно будет сразу получить нужный lifecycle прямо из компонента.
Поэтому будьте внимательны при использовании CompositionLocal для работы с жизненным циклом, если навигация в проекте построена на Decompose.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
🛞 Как встроить SwiftUI в Compose Multiplatform
Обычно я стараюсь избегать использования кастомных CompositionLocal в Compose, так как это добавляет неявные зависимости, и если не предоставить значение, приложение упадёт в рантайме. Я придерживаюсь подхода, в котором CompositionLocal можно использовать только тогда, когда значение действительно может быть полезно любой Composable-функции в дереве. Яркий пример — тема приложения.
И при работе с Compose Multiplatform я подсмотрел классное применение этого механизма для встраивания SwiftUI вьюшек в Composable функции.
1⃣ В сорсете iosMain создаём CompositionLocal и интерфейс NativeViewFactory.
2⃣ На стороне Swift реализуем этот интерфейс и передаём его в функцию создания UIViewController.
3⃣ В этой функции пробрасываем фабрику через CompositionLocalProvider.
4⃣ Далее в любом месте поддерева в iosMain можно получить доступ к этой нативной вьюшке.
Посмотреть пример приложения для сканирования QR-кодов с этим подходом можно в репозитории, который я подготовил для лекции в онлайн-университете.
👉 Новости 👉 База вопросов
Обычно я стараюсь избегать использования кастомных CompositionLocal в Compose, так как это добавляет неявные зависимости, и если не предоставить значение, приложение упадёт в рантайме. Я придерживаюсь подхода, в котором CompositionLocal можно использовать только тогда, когда значение действительно может быть полезно любой Composable-функции в дереве. Яркий пример — тема приложения.
И при работе с Compose Multiplatform я подсмотрел классное применение этого механизма для встраивания SwiftUI вьюшек в Composable функции.
Посмотреть пример приложения для сканирования QR-кодов с этим подходом можно в репозитории, который я подготовил для лекции в онлайн-университете.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
🥄 Sandwich — удобная обработка API-ответов в Kotlin. Библиотека упрощает работу с сетевыми запросами, предлагая унифицированный подход к обработке успешных ответов, ошибок и исключений. Вместо создания собственных обёрток вроде Resource или Result, разработчики могут использовать готовые компоненты с функциональными операторами.
Инструмент имеет встроенную поддержку корутин и возможность глобальной обработки ошибок через механизм операторов. Например, можно автоматически обновлять токен доступа при получении кода 401 или логировать все исключения в едином месте.
Гитхаб
👉 Новости 👉 База вопросов
Инструмент имеет встроенную поддержку корутин и возможность глобальной обработки ошибок через механизм операторов. Например, можно автоматически обновлять токен доступа при получении кода 401 или логировать все исключения в едином месте.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #docker
🤔 Можно ли потерять данные, если контейнер существует?
Пока контейнер существует, данные не теряются. Потеря данных может произойти только при удалении контейнера, если данные не были сохранены в постоянном хранилище.
👉 Новости 👉 База вопросов
Пока контейнер существует, данные не теряются. Потеря данных может произойти только при удалении контейнера, если данные не были сохранены в постоянном хранилище.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
😵💫 Jimmer — революционный ORM для JVM (Java/Kotlin), переосмысливающий работу с данными. Этот инструмент позволяет оперировать не отдельными сущностями, а целыми графами объектов любой сложности, как при чтении, так и при сохранении.
Инструмент имеет встроенную поддержку DTO с кодогенерацией, самостоятельного устранения проблемы N+1 запросов и работы с рекурсивными структурами. ORM автоматически оптимизирует SQL-запросы, убирает лишние JOIN'ы и поддерживает многоуровневое кеширование. Проект предлагает удобные DSL для запросов, интеграцию с GraphQL и работает через APT/KSP, что обеспечивает безопасность типов на этапе компиляции.
Гитхаб
👉 Новости 👉 База вопросов
Инструмент имеет встроенную поддержку DTO с кодогенерацией, самостоятельного устранения проблемы N+1 запросов и работы с рекурсивными структурами. ORM автоматически оптимизирует SQL-запросы, убирает лишние JOIN'ы и поддерживает многоуровневое кеширование. Проект предлагает удобные DSL для запросов, интеграцию с GraphQL и работает через APT/KSP, что обеспечивает безопасность типов на этапе компиляции.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
😎 Генерация сетевых моделей
Сейчас AI используют везде, где только можно и довольно часто можно встретить в опросах, что AI применяют для преобразования JSON в сетевые модели для взаимодействия с API бэкенда. Однако эту задачу довольно легко решает OpenAPI Generator, при условии, что бэкендеры сделали нормальную документацию, конечно
Использование автогенерации моделей по спеке OpenAPI даёт сразу несколько преимуществ:
🟠 Вы не тратите время на написание бойлерплейт кода
🟠 Исключаете человеческий фактор, например, можно случайно забыть сделать поле nullable или наоборот
🟠 Всегда поддерживаете API-сущности в актуальном состоянии, так как спецификация OpenAPI напрямую связана с кодом бэкенда (ну, почти )
При этом благодаря Mustache шаблонам можно реализовать очень гибкое решение:
🔴 Использовать любую библиотеку для сериализации
🔴 Сразу маппить данные в нужные типы, например, в Instant из kotlinx-datetime
🔴 Поддерживать полиморфную сериализацию, когда ответы от API могут сильно различаться
🔴 И даже генерировать не только модели, но и код для взаимодействия с HTTP-клиентом, например, с Ktor
👉 Новости 👉 База вопросов
Сейчас AI используют везде, где только можно и довольно часто можно встретить в опросах, что AI применяют для преобразования JSON в сетевые модели для взаимодействия с API бэкенда. Однако эту задачу довольно легко решает OpenAPI Generator, при условии, что бэкендеры сделали нормальную документацию, конечно
Использование автогенерации моделей по спеке OpenAPI даёт сразу несколько преимуществ:
При этом благодаря Mustache шаблонам можно реализовать очень гибкое решение:
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Первые примеры для Live Notification Bar в Samsung One UI 7
С примерами вида Код - Визуал
Анимации, работают из коробки. Live Notification и Now Bar уже доступны для кастомизации
👉 Новости 👉 База вопросов
С примерами вида Код - Визуал
Анимации, работают из коробки. Live Notification и Now Bar уже доступны для кастомизации
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #docker
🤔 Как удалить все остановленные контейнеры и неиспользуемые сети в Docker?
Для удаления всех остановленных контейнеров и неиспользуемых сетей используется команда
👉 Новости 👉 База вопросов
Для удаления всех остановленных контейнеров и неиспользуемых сетей используется команда
docker system prune . Она также удаляет неиспользуемые образы и кэш.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Шпаргалка по flow операторам
Внутри примеры кода с пояснением для:
🟠
🟠
🟠
🟠
🟠
🟠
🟠
🟠
👉 Новости 👉 База вопросов
Внутри примеры кода с пояснением для:
map, filter, take(n)reduce, fold, runningReduce/scan, transformFlatMapConcat, FlatMapMerge, FlatMapLatestflowOn, buffer, conflate, collectLatestzip, combine, mergecatch, onCompletion, retryWhenonEach, debounce(timeoutMillis), distinctUntilChangedPlease open Telegram to view this post
VIEW IN TELEGRAM
#полезное
❤️🔥 strikt — библиотека Kotlin для работы с assertion
Strikt — это библиотека Kotlin для работы с assertion в тестах;
предназначена для использования с такими компонентами как JUnit, Minutest, Spek или KotlinTest.
Strikt опирается на свободный стиль утверждений, похожий на AssertJ, но не использует сложную иерархию классов для построения утверждений.
GitHub
Доки
👉 Новости 👉 База вопросов
dependencies {
testImplementation("io.strikt:strikt-core:<version>")
}Strikt — это библиотека Kotlin для работы с assertion в тестах;
предназначена для использования с такими компонентами как JUnit, Minutest, Spek или KotlinTest.
Strikt опирается на свободный стиль утверждений, похожий на AssertJ, но не использует сложную иерархию классов для построения утверждений.
GitHub
Доки
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#полезное
👋 Landscapist — высокооптимизированная библиотека Kotlin для загрузки изображений
Landscapist обеспечивает загрузку и отрисовку изображений с помощью 3 компонентов: Glide, Coil и Fresco.
Landscapist поддерживает отслеживание состояний загрузки изображений.
Библиотека также предоставляет разные удобные анимации, включая кроссфейды, трансформации размытия и многие другие.
А ещё Landscapist позволяет гибко управлять загрузкой изображений с помощью массы плагинов
GitHub
Доки
👉 Новости 👉 База вопросов
Landscapist обеспечивает загрузку и отрисовку изображений с помощью 3 компонентов: Glide, Coil и Fresco.
Landscapist поддерживает отслеживание состояний загрузки изображений.
Библиотека также предоставляет разные удобные анимации, включая кроссфейды, трансформации размытия и многие другие.
А ещё Landscapist позволяет гибко управлять загрузкой изображений с помощью массы плагинов
GitHub
Доки
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#Собес #docker
🤔 Как удалить Docker-контейнер?
Чтобы удалить Docker-контейнер, используйте команду
👉 Новости 👉 База вопросов
Чтобы удалить Docker-контейнер, используйте команду
docker rm c указанием ID или имени контейнера. Пример: docker rm mycontainer удаляет контейнер с именем mycontainer .Please open Telegram to view this post
VIEW IN TELEGRAM