Kotlin
2.17K subscribers
289 photos
128 videos
18 files
419 links
Подборки полезного материала по Kotlin. По всем вопросам @evgenycarter
Download Telegram
Создание WebView-контрола для Compose Desktop

В компании TeamDev мы занимаемся разработкой JxBrowser — коммерческой библиотеки, которая позволяет встраивать Chromium-движок в Java-приложения на десктопах. Ранее нами уже были реализованы контролы BrowserView для классических Java GUI-фреймворков: Swing, JavaFX и SWT. Теперь мы решили расширить поддержку и создать аналогичный компонент для Compose Multiplatform — для Desktop.

Что такое WebView внутри приложения

WebView — это UI-компонент, позволяющий приложению отображать и взаимодействовать с веб-контентом (вроде браузера внутри вашего приложения). Он отображает веб-страницы, обрабатывает JavaScript, куки и другие веб-взаимодействия — полностью в рамках жизненного цикла приложения.

Зачем Compose

Jetpack Compose быстро стал популярен среди Kotlin-разработчиков на Android. Compose Multiplatform расширяет этот подход на десктоп. Однако у Compose нет встроенного десктопного WebView — и мы увидели отличную возможность закрыть этот пробел.

Новая модель UI

Compose использует декларативный подход: UI описывается состоянием, вместо императивного обновления элементов. Компонент отображает текущее состояние, и изменения происходят автоматически по мере смены состояния.

Основная техническая задача: рендеринг

Chromium рендерит страницу в отдельном процессе, а затем результат — пиксели — нужно передать обратно Java/Kotlin для отображения внутри Compose. Мы решили это двумя способами:

1. Копирование пикселей — Chromium рендерит страницу, копирует пиксели в Java-буфер, и затем изображение рисуется в Compose Canvas.
2. Рендеринг на нативной поверхности — более производительно: Chromium отрисовывает контент напрямую на нативной поверхности, встроенной в Compose.

https://teamdev.com/jxbrowser/blog/building-web-view-for-compose/

✍️ @kotlin_lib
👍3
Разница между job.cancel() и scope.cancel() в Kotlin Coroutines

В Kotlin-корутинах часто путают отмену конкретного Job и всей области видимости (Scope). Разберёмся.

Что такое Job и Scope?

- Job - отдельная корутина, возвращается при launch или async.
- CoroutineScope - контейнер для корутин. В нём есть общий Job, управляющий жизненным циклом всех корутин внутри.

job.cancel()

Отменяет только одну корутину.


val scope = CoroutineScope(Dispatchers.Default)

val jobA = scope.launch { delay(5000) }
val jobB = scope.launch { delay(10000) }

jobA.cancel() // Отменится только jobA, jobB продолжит работу


Scope остаётся активным и можно запускать новые задачи.

scope.cancel()

Отменяет все корутины в области видимости и сам scope.


scope.cancel() // Все корутины в scope будут остановлены


После этого новые корутины запустить уже нельзя.

https://medium.com/proandroiddev/kotlin-coroutines-the-real-difference-between-job-cancel-and-scope-cancel-05e1d9dd5245

✍️ @kotlin_lib
👍5
👩‍💻 Пройди тест для Android-разработчиков и проверь свои знания, готов ли ты к обучению на курсе.

🦾 Ответишь — пройдешь на продвинутый курс "Android Developer. Professional " от OTUS.

За 5 месяцев обучения ты освоишь:
✔️ Проектирование архитектуры: Clean Architecture, MV*, многомодульные приложения и профессиональное использование DI.
✔️ Современный стек: Kotlin, Jetpack Compose, Coroutines/Flow, Dagger 2/Hilt, Gradle.
✔️ Разработку кросс-платформенных приложений с использованием Kotlin Multiplatform.
✔️ Глубокое понимание Android SDK: оптимизация, безопасность и производительность приложений.
✔️ Организацию инфраструктуры: CI/CD, Docker, линтеры, автоматизация сборки и мониторинг.
✔️ Написание надежных тестов: интеграционные, UI-тесты и работа с фреймворками.

👉 ПРОЙТИ ТЕСТ: https://vk.cc/cOz4d1

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Элегантная обработка ошибок в Kotlin: использование runCatching и Result

Обработка исключений — важный аспект написания надёжных приложений, однако традиционные блоки try/catch могут приводить к многословному и вложенному коду, который сложно читать и сопровождать. Kotlin предлагает более изящный подход с помощью функции runCatching и типа Result, которые позволяют обрабатывать исключения в функциональном стиле, сохраняя читаемость кода и предотвращая сбои.

В этой статье рассматривается, как эффективно использовать эти возможности для улучшения вашей стратегии обработки ошибок.

https://carrion.dev/en/posts/runcatching-result-pattern/

✍️ @kotlin_lib
👍4👎1
Media is too big
VIEW IN TELEGRAM
Making native SDKs Multiplatform at RevenueCat
Joop Korteweg

В быстро развивающейся экосистеме Kotlin Multiplatform одним из критических пробелов было отсутствие единого решения для покупок внутри приложения и подписок. До сегодняшнего дня. SDK RevenueCat для Kotlin Multiplatform позволяет написать код работы с подписками один раз и запускать его как на Android, так и на iOS. Но как мы это реализовали? У нас уже были нативные SDK для Android и iOS, и мы не хотели переписывать всю основную логику заново. В этом докладе мы расскажем о стратегиях, подводных камнях и уроках, которые мы извлекли из нашего подхода к переносу нативных SDK в Kotlin Multiplatform.

источник

✍️ @kotlin_lib
🔥2👍1💩1
⌨️ Kotlin: ключ к современным backend-решениям!

Курс «Kotlin Backend Developer. Professional» — всё, что нужно для создания гибких и производительных приложений.

Что вы освоите:

✔️ Работу с Kotlin Multiplatform для JS, JVM, Android, iOS.
✔️ Spring, Ktor, RabbitMQ, Kafka, Postgres.
✔️ Создание архитектуры: монолиты, микросервисы и бессерверные решения.
✔️ Реальные кейсы: разработка стартапа с нуля.

Почему выбирают нас?

✔️ Живые лекции от экспертов топовых компаний.
✔️ Диплом OTUS, который признают крупные работодатели.
✔️ Практика, которая готовит к сложным проектам.

🎫 Курс можно приобрести в рассрочку

➡️ Пройди вступительный тест и присоединяйся к группе: https://vk.cc/cOIuqU

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Освой Kotlin и Android за 60 часов

Этот обширный курс по Kotlin и Android проведёт вас от основ до продвинутых концепций с практическими заданиями. В ходе курса для начинающих научит вас создавать несколько реальных приложений, включая впечатляющий клон Uber, демонстрирующий профессиональные приёмы разработки.

Курс охватывает Firestore, SQLite, MVVM, Retrofit, Navigation Component, Jetpack Compose и многое другое.

https://www.youtube.com/watch?v=blKkRoZPxLc

✍️ @kotlin_lib
👍4🔥1🤯1
News-KMP-App

Приложение News KMP - это мультиплатформенный проект на Kotlin Compose, цель которого - обеспечить единообразный опыт чтения новостей на различных платформах, включая Android, iOS, Windows, macOS и Linux. В этом проекте используются мультиплатформенные возможности Kotlin для совместного использования кода и логики, а также Compose для пользовательского интерфейса, что обеспечивает бесшовную и естественную работу на каждой платформе.

https://github.com/Coding-Meet/News-KMP-App?tab=readme-ov-file

✍️ @kotlin_lib
👍2
👩‍💻 Хотите стать профи в Android-разработке и вывести свои навыки на новый уровень?

Онлайн-курс «Android Developer. Professional» от OTUS поможет вам освоить самые современные инструменты и фреймворки, такие как Kotlin, Dagger, RxJava и Kotlin coroutines, а также научит проектировать архитектуру приложения и оптимизировать код.

🦾 После обучения вы сможете разбираться в Android SDK, устранять баги, ускорять приложения, проектировать надежную архитектуру и работать с CI/CD.

🎁 Дарим промокод, который дает скидку на обучение - ANDROIDPRO8

➡️ Пройди вступительный тест и присоединяйся к группе: https://vk.cc/cOMqhT

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻Исследуем компиляцию Kotlin (native)

Недавно я разбирался с проблемой времени сборки в Kotlin/Native и подумал: «Хм, а что на самом деле делает задача linkReleaseFrameworkIosArm64? Почему она так долго выполняется?» Хотя я понимаю, как работает компиляция на Android, я вдруг осознал, что совершенно не разбираюсь в нативном мире.
Работает ли задача линковки только с моим кодом или ещё и с зависимостями? А что насчёт задачи compileKotlinIosArm64? Что именно она делает? Честно говоря… не знаю. Понятия не имею, но мне определённо хочется разобраться. И я воспользуюсь тобой 🫵, читатель, как мотивацией для исследования и написания этой статьи. Так что спасибо, что остаёшься рядом.

➡️ Читать далее

✍️ @kotlin_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👎1
📱System Design в мобильной разработке — это про архитектуру, которая выходит за рамки экранов и навигации.

Чтобы приложения масштабировались, выдерживали нагрузку и не ломались при росте — нужен системный подход.

Как выстроить его на практике? Подробно обсудим это на Podlodka Android Crew, 15-19 сентября.

В программе:

🧩 Бинарная совместимость: где с ней сталкиваются мобильные разработчики и какие ошибки чаще всего приводят к проблемам. (Абакар Магомедов, Альфа-Банк)

🏗️ Мобильный архитектор: какие решения он принимает и почему без этой роли сложно развивать сложные приложения. (Эдуард Некрутов, Blink)

⚙️ Dependency Injection в KMP: обзор фреймворков и разбор, как выбрать подходящее решение под проект. (Александр Власюк, РайффайзенБанк)

⚡️BDUI в Android: опыт от DivKit, Beduin и Duit. Как перестать хардкодить экраны и ускорить эксперименты, чтобы быстрее проверять гипотезы.

🔗 Подключайся — будет полезно

По промокоду для подписчиков скидка 500 р: android_crew_14_d9Uzfo
Когда Kotlin-объект перестаёт быть синглтоном

object в Kotlin - это стандартный способ объявления синглтона: единственного, глобально доступного экземпляра, который создаётся один раз на JVM.

На уровне языка это действительно гарантируется. Но в реальных проектах эта гарантия может быть нарушена - без ошибок компиляции и каких-либо заметных предупреждений.

Одна из распространённых причин - сериализация. Некоторые библиотеки во время десериализации создают новый экземпляр, нарушая равенство по ссылке и ломая общий разделяемый стейт.

В этой статье разбирается, когда Kotlin-синглтоны перестают быть настоящими синглтонами - и как этого избежать на практике.

https://proandroiddev.com/when-kotlin-object-stops-being-a-singleton-604a3354e4ec

✍️ @kotlin_lib
👍3
🚀 Подборка Telegram каналов для программистов

Системное администрирование, DevOps 📌

https://t.me/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/linux_odmin Linux: Системный администратор
https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux

1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://t.me/DevLab1C 1С:Предприятие 8
https://t.me/razrab_1C 1C Разработчик
https://t.me/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://t.me/rabota1C_rus Вакансии для программистов 1С

Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
https://t.me/pythonofff Python академия.
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python

Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах

GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
https://t.me/game_devv Все о разработке игр

Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов

БигДата, машинное обучение 📌
https://t.me/bigdata_1 Big Data, Machine Learning

Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
https://t.me/lifeproger Жизнь программиста. Авторский канал.

QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://t.me/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_2 Хакер Free

Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров

Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
https://t.me/matgeoru Математика | Геометрия | Логика

Excel лайфхак📌
https://t.me/Excel_lifehack

https://t.me/mir_teh Мир технологий (Technology World)

Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Как Android-разработчик в iOS погружался: мой опыт внедрения Kotlin Multiplatform

Продукт создавали нативно на каждую платформу, без пересечения кода.

В начале года у нас ушло несколько iOS-разработчиков, из-за чего замедлилась поставка новых функций на обеих платформах. Мы решили, что это повод внедрить наконец кроссплатформенную разработку и выровнять поставку фич на обеих платформах.

В этом материале расскажу, почему мы остановились на KMP, как погружались в iOS c опытом в Android и как прошло внедрение этого фреймворка. Спойлер: быстрее и проще, чем мы думали.

https://habr.com/ru/companies/ru_mts/articles/923366/

✍️ @kotlin_lib
👍1
Media is too big
VIEW IN TELEGRAM
Разбор кода: пиксельная погода на Kotlin

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

Сегодня под микроскоп попадает WeatherApp — приложение прогноза погоды с ретровизуалом. Арсений Носов, Android-разработчик в команде Алисы и Умных устройств, тщательно разбирает код и делится полезными советами по работе с ним.

Ссылка на код: https://github.com/ArkhamDm/WeatherApp

Readme кода на Kotlin: https://github.com/ArkhamDm/WeatherApp

✍️ @kotlin_lib
👍1
Model Context Protocol in Kotlin
Alexander Sysoev

MCP is an open protocol that standardizes how applications provide context to LLMs. We've created a Kotlin library that allows you to use this protocol and connect AI models to tooling, like IDEs. Now we will see how it works in practice.

https://www.youtube.com/watch?v=D3hCBrxJHLo

✍️ @kotlin_lib
👍5
Media is too big
VIEW IN TELEGRAM
Kotlin и Compose: многоплатформенные шаблоны для взаимодействия с iOS. Джон О'Рейли

В этом докладе я на реальных примерах расскажу о различных UI- и неUI-шаблонах, которые я применял за последние 5 лет при использовании KMP и CMP на iOS.

источник

✍️ @kotlin_lib
👍3
Media is too big
VIEW IN TELEGRAM
Как обойти множественное наследование в Kotlin и Java. Агрегация и композиция

Предположим нужно наследоваться от многих абстрактных классов в котлин или в джаве. Как можно решить эту задачу? Давайте посмотрим на агрегацию и композицию

источник

✍️ @kotlin_lib
👍3
🔥 Современная оркестрация Kotlin-приложениями

Приглашаем на открытый урок.

🗓 22 октября в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».

Уже прошла эпоха монолита, когда целые компании занимались разработкой одного необъятного приложения. Сейчас любая информационная система насыщена различными сервисами, а микросервисами уже никого не удивишь.
Обязательным атрибутом собеседований стал вопрос про Saga, хореографию и оркестрацию.
И именно эту тему мы разберем на вебинаре в применении к Kotlin-разработке.

Что будет на вебинаре:
- Обсудим как традиционные оркестраторы типа Airflow или Camunda, так новых игроков.
- На практической части вебинара мы разработаем простое приложение, управляемое оркестратором.

🔗 Ссылка на регистрацию: https://vk.cc/cQoC1D

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Media is too big
VIEW IN TELEGRAM
Dissecting Kotlin: Surveying the Latest Stable and Experimental
Huyen Tue Dao

As Kotlin evolves, not only do the features available to us as developers evolve, but so does our understanding of what idiomatic Kotlin is, how we can best leverage new and old features and the semantic and performance impacts of our implementation choices.

In this session, we will examine some of the features released over the last couple of years in Kotlin, dive into their implementations, explore where we may need them and how we might use them, and discuss how these features fit into the broader ideas and themes of Kotlin as a language.

источник

✍️ @kotlin_lib
👍1👎1