Обновить
50.21

Kotlin *

Статически типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

KMP vs Flutter vs React Native

Время на прочтение4 мин
Количество просмотров16K

Сейчас существует широкий спектр кроссплатформенных технологий, среди которых Flutter, React Native и, конечно же, Kotlin Multiplatform Mobile (KMP). Какую технологию стоит выбрать и почему именно ее? Давайте попробуем разобраться!

Читать далее

Android Studio. Kotlin. Сохранение файла в общедоступной папке Download

Время на прочтение6 мин
Количество просмотров20K

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

Виной всей этой сложности - множество факторов. Языковой барьер: русский - английский, Kotlin - Java. Различия в способах копирования в разных версиях Android. Разобраться было не просто. В итоге - пишу этот гайд, чтобы облегчить жизнь тем, кто пойдет за мной следом...

Читать далее

RecyclerView Adapter in Android, сделай быстрее и проще

Время на прочтение8 мин
Количество просмотров8.8K

Здравствуйте дорогие хабрчане. Это статья основана на статье https://blog.iamsuleiman.com/recyclerview-adapter-android-made-fast-easy/#clicklistener написанной в 2017 году на Java. А статью которую вы читаете, уже на Kotlin.

Каждый раз, когда мы думаем о создании RecyclerView, нас пугает объем кода, который должен войти в адаптер. Кроме того, если у этого адаптера много ViewHolder-ов, то спаси нас Бог!

Конечно, все мы знакомы с шаблонным кодом RecyclerView.Adapter. Но писать один и тот же код снова и снова — пустая трата времени.

Наверняка должен быть лучший способ?

Поздоровайтесь с FastAdapter!

Читать далее

Управление мультиваркой Redmond. Горячее ферментирование

Время на прочтение3 мин
Количество просмотров16K

Будучи поклонником здорового питания, увлёкся методом приготовления пищи с помощью горячего ферментирования. Смысл приготовления - щадящее нагревание в диапазонах 40-80 градусов в течение нескольких часов. Похоже на процесс "томления" из народных традиций. Для разных продуктов существуют свои температурные диапазоны работы естественных ферментов – природных катализаторов, которые преобразуют плохоперевариваемые вещества в пище в легкоусвояемые. Для приготовления нужно поддерживать температуру с нужной точностью и очередностью.

Вот один из способов

О дебаге Kotlin-корутин

Время на прочтение5 мин
Количество просмотров6.7K

Привет, Хабр. Хочу поделиться своим решением одной из проблем использования корутин в Kotlin.

Корутины в Kotlin - одна из значимых фич языка, которая позволяет писать асинхронных код в синхронном стиле. Корутины прекрасны во всём, до тех пор пока не возникает необходимость их дебажить.

Читать далее

Как тестировать gradle-плагины

Время на прочтение4 мин
Количество просмотров3.9K

Когда я писал свой первый gradle-плагин, я проверял его работоспособность следующим образом:

1. Опубликовал версию n в plugins.gradle.org
2. Проверил опубликованный плагин вручную на тестовом проекте
3. Нашел ошибку/доработал, увеличил версию n=n+1, затем снова пункт 1

Такой вот PDD (Publish Driven Development). Сегодня поговорим о том, как писать эффективные тесты на собственные gradle плагины.

Читать далее

Проектируем приложение с Redis в качестве хранилища данных. Что? Зачем?

Время на прочтение7 мин
Количество просмотров17K

Всем привет!. Многие знают что такое Redis, а если вы не знаете, то официальный сайт может ввести вас в курс дела. Большинство знают Redis как кэш и иногда как очередь сообщений. Но что если немножко сойти с ума и попытаться спроектировать целое приложение, используя в качестве хранилища данных только лишь Redis? Какие задачи можно решить с использованием Redis'а?

В этой статье мы и попытаемся ответить на эти вопросы.

Не переключайтесь.

Читать далее

Kotlin Multiplatform. Работаем с асинхронностью на стороне iOS. Publishers, async/await

Время на прочтение6 мин
Количество просмотров7K

Всем доброго времени суток! С вами Анна Жаркова, ведущий разработчик компании Usetech. Продолжаем говорить про Kotlin Multiplatform и работу с асинхронными функциями. В этой статье мы будем рассматривать, как можно удобно подключать Kotlin общий код на стороне iOS, используя возможности Swift. А именно, как работать с Combine Publishers и новым async/await.

* Примеры кода доступны в полной версии статьи, и к сожалению, не доступны в предпросмотре

Концепция Kotlin Multiplatform позволяет нам сделать код максимально общим, т.е вынести практически все в общую часть.

Если на стороне common, мы оперируем корутинами и suspend функциями, то на стороне iOS проекта нативного благодаря поддержке interop Kotlin/Obj-C с версии Kotlin 1.4 suspend функции преобразуются в функции с completion handler.

Далее мы можем в этом блоке либо вызвать вывод данных, либо выполнение какого-то следующего метода. Все стандартно и просто.

Однако, не все любят простой синтаксис completion handler. А еще мы прекрасно знаем, что если ими злоупотреблять, можно легко попасть в ситуацию callback hell и потерять читабельность и чистоту кода.

Также не стоит забывать, что в зависимости от поставленной задачи у нас могут быть не только обобщаемые методы. Код платформенных проектов у нас может быть не идентичен, поэтому нельзя исключать логики сугубо нативной, вызовы которой мы можем сочетать с вызовами логики из общего модуля. Что вполне логично. Поэтому вполне нормально, что мы решим применить здесь доступные подходы конкретной платформы.

Попробуем сделать наш Kotlin код совместимым с Combine Publishers. Для этого превратим вызов нашей suspend функции в AnyPublisher с использованием Future Deferred и Promise.

Читать далее

Делаем работу с Koin проще

Время на прочтение6 мин
Количество просмотров6.2K

Всем привет! Меня зовут Базикалов Илья, я являюсь Андроид разработчиком в компании Broniboy. В нашем клиентском приложении мы используем библиотеку Koin для внедрения зависимостей. В своей статье я хочу вам показать, с какими проблемами мы столкнулись при работе с данной библиотекой и каким образом их решили (хоть и не полностью).

Читать далее

В выгодных рамках. Как ЭКОНС позволяет каждому оператору оценить свой вклад в прибыль компании

Время на прочтение5 мин
Количество просмотров5.9K

Привет, Хабр! На связи Александр Попко и Игнат Старшов, и сегодня мы расскажем про наш продукт ЭКОНС – систему визуализации, которая приносит СИБУРу миллиарды рублей в год.

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

Во-вторых, экономический эффект. Он тоже сильно зависит от выбранного инженерами и оператором нужного технологического режима. И вот здесь иногда сталкиваются две точки зрения, ведь оператор обычно мыслит в тоннах, а менеджер — сразу в рублях.

Поэтому мы создали конструктор под названием ЭКОНС. Если вкратце, то он помогает оператору наглядно (и что важно — в реальном времени) оценивать, как выбранный им режим технологического процесса прямо сейчас влияет на экономическую эффективность.

Общий экономический эффект от внедрения ЭКОНС на наших предприятиях —  уже около 2,7 млрд рублей. В статье рассказываем, как устроен продукт.

Читать далее

Масштабируем Jetpack Compose Navigation

Время на прочтение6 мин
Количество просмотров9K

В одном из моих личных проектов я решил использовать Jetpack Compose в качестве основной технологии. Это означало, что моё приложение будет иметь одну Activity, а вся навигация будет выполняться с помощью Compose. Когда я начал планировать проект, библиотеки Compose Navigation ещё не было, как не было и способа внедрить ViewModel в Composable без использования компонентов Activity, Fragment или View. 

Но примерно за полгода до публикации этой статьи появилась библиотека Jetpack Compose Navigation, и Dagger-Hilt стал поддерживать Compose. Сегодня я расскажу о моём пути: поделюсь видением проблемы масштабируемости навигации на примерах Google и предложу её возможное решение.

Читать далее

Пишем бесплатный Gerber-вьювер с открытым исходным кодом под Android с нуля

Время на прочтение6 мин
Количество просмотров7.8K

Привет, Хабр! Меня зовут Сергей Велеско, я Android разработчик в настоящее время и инженер-конструктор печатных плат в прошлой жизни. В этой статье я расскажу, как мне удалось применить знания, полученные в прошлой профессии, и написать простое Android приложение для просмотра Gerber-файлов.

Поехали!

Android App Bundles. Как уменьшить размер вашего приложения?

Время на прочтение7 мин
Количество просмотров10K

Привет, Хабр! Сегодня расскажу, что такое Android App Bundles, как их использовать в реальном проекте и на сколько нам удалось уменьшить размер приложения, не прикладывая очень больших усилий.

Читать далее

Ближайшие события

Умный дом своими руками на ESP8266 + Kotlin + React

Время на прочтение13 мин
Количество просмотров31K

Всем привет! Я решил написать про свой опыт построения умного дома. Тема конечно достаточно избита и статей последнее время про нее много. Но, это же и хорошо, значит люди занимаются, делают.

Сразу оговорюсь, что мой кейс достаточно специфический, цели и задачи всей затеи тоже не вполне классические (спойлер: изучить Kotlin и React для работы), поэтому эта статья – для разработчиков, гиков и просто увлеченных людей.

Читать далее

Этапы работы Jetpack Compose

Время на прочтение9 мин
Количество просмотров15K

Как и большинство UI-фреймворков, Compose рендерит кадр в несколько различных этапов. В системе Android View есть 3 этапа: Measure, Layout и Drawing. Compose очень похож, но имеет важный дополнительный этап Composition в начале.

1. Composition: какой UI показывать. Compose запускает composable-функции и создает описание вашего UI 

2. Layout: где размещать UI. Этот шаг состоит из двух: измерение и размещение (measurement и placement). Элементы верстки измеряют и помещают самих себя и все дочерние элементы в 2D-координатах.

3. Drawing: как рендерить. UI-элементы отрисовываются в Canvas, обычно на экране устройства.

Читать далее

Flutter по сравнению с Kotlin в 2021 году: Что лучше для разработки кросс-платформенных приложений?

Время на прочтение17 мин
Количество просмотров26K

Кроссплатформенная разработка находится на подъеме, и вы можете задаться вопросом, почему. Как можно предположить из названия, она позволяет запускать приложения на нескольких платформах — будь то iOS или Android — и помогает бизнесу привлечь больше клиентов, а значит, заработать больше денег. Неудивительно, что акцент постепенно, но неуклонно смещается в сторону кроссплатформенной разработки, и новые технологии появляются все чаще и чаще.

Просуществовав некоторое время, этот тип разработки выявил двух лидеров: React Native и Flutter. Почему же мы хотим рассказать вам о Flutter в сравнении с Kotlin, а не о Flutter и React Native? Что такое Kotlin, и может ли он на самом деле представлять угрозу популярности Flutter? Что такое Kotlin Multiplatform (Мультиплатформа), и в чем преимущества обеих технологий? Давайте узнаем.

Читать далее

Создание и тестирование неблокирующих веб-приложений с помощью Spring WebFlux, Kotlin и Coroutines

Время на прочтение14 мин
Количество просмотров11K

Когда поступает HTTP-запрос, «обычное» веб-приложение сопоставляет запрос с конкретным потоком из пула потоков. Этот назначенный поток остается с запросом до тех пор, пока ответ не будет возвращен в сокет запроса. Попутно нам может потребоваться получить данные из некоторой веб-службы или базы данных, прочитать или записать в файл или выполнить другие вызовы ввода-вывода, во время которых поток блокируется и должен ждать, пока не получит ответ. Для приложений с высокой частотой запросов пул потоков может в какой-то момент исчерпаться, и тогда новые запросы больше не будут обрабатываться.

Здесь нам может помочь реактивное программирование. Вместо того, чтобы иметь большой пул потоков и модель «поток на запрос», реактивное приложение имеет только один поток на каждое ядро ​​ЦП, которое продолжает работать, и если оно попадает в операцию ввода-вывода, оно разгружает эту операцию и работает над чем-то еще до тех пор, пока IO завершено. Мы говорим, что такое приложение неблокирующее. 

Подход появился, когда группа компаний объединилась в инициативе Reactive Streams, чтобы определить ключевые принципы и четыре интерфейса JVM. После этого они практически каждый пошли своим путем, чтобы создать реактивную библиотеку на основе этих соглашений. Одна из этих библиотек, Project Reactor, является основой, на которой Spring построил свою реактивную веб-платформу Spring WebFlux. 

Этот реактивный стек позволяет нам создавать неблокирующие веб-приложения в структуре, которая выглядит знакомой с точки зрения классов, методов и аннотаций, если вы работали с Spring MVC, но фактическая реализация методов может быть с довольно сложной кривой обучения. 

Читать далее

Создаем нативный образ при помощи Spring Boot

Время на прочтение10 мин
Количество просмотров6.4K

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

Бессерверные вычисления – это модель выполнения вычислений в облаке, при которой облачный провайдер предоставляет машинные ресурсы по требованию и берет на себя всю работу с серверами, на что его уполномочивает клиент. При бессерверных вычислениях ресурсы не содержатся в энергозависимой памяти; напротив, вычисления выполняются краткими всплесками, после которых результаты сбрасываются в долговременное хранилище. Когда приложение не используется, никаких ресурсов на него не выделяется.

По Википедии

Читать далее

Семь основных моментов из дорожной карты Kotlin осень 2021 года

Время на прочтение5 мин
Количество просмотров5.6K

Kotlin создан для воплощения идей в код. Мы стараемся устранить все препятствия, стоящие на пути ваших идей, и сделать чтение и написание Kotlin простым и увлекательным. Чтобы сделать это возможным, нам нужна очень сложная инженерная система, состоящая из многих частей: синтаксис языка, фронтенд и бэкенд компилятора, IDE, инструменты сборки, библиотеки и все остальные инструменты. Чтобы поддерживать и развивать все эти компоненты, в нашей команде трудится около 110 человек. Все они одновременно работают над различными проектами и задачами.

Если вы хотите быть в курсе всех этих проектов, можете ознакомиться с публичной дорожной картой Kotlin. Мы только что обновили ее, чтобы отразить наши планы на Kotlin 1.7.0 и далее! Если вы хотите получить краткий обзор происходящего, не вдаваясь в подробности, то можете ознакомиться с сутью того, над чем мы работаем, в этом посте блога, где описаны семь наиболее заметных моментов.

Для тех, кто не хочет читать, мы подготовили видеоролик с этими основными моментами!

Читать далее

Навигация на Jetpack Compose by Google

Время на прочтение5 мин
Количество просмотров24K

Всем привет, в данной статья покажу как организовать навигацию в Android приложении при использовании в своём проекте только compose UI. Методики навигации применены из официального источника от Google.

Расскажу как передавать объекты и примитивные данные между состояниями экранов, как советует google и свой метод, который мне подошёл как наиболее оптимальный и менее затратный.

Читать далее