Как стать автором
Обновить
42.97
Рейтинг

Kotlin *

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

Сначала показывать
  • Новые
  • Лучшие
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

Подключение SignalR для Android на Kotlin

Разработка под Android *Kotlin *
Из песочницы

SignalR предоставляет один из самых простых и быстрых способов создания приложений реального времени на веб, настольных и мобильных платформах. Изначально Signal был создан Microsoft для приложений .Net. Рассмотрим, как можно реализовать данный механизм в мобильном приложении под андроид.

Читать далее
Всего голосов 4: ↑4 и ↓0 +4
Просмотры 304
Комментарии 0

Мой рецепт MVI

Разработка под Android *Kotlin *
Из песочницы

Как известно, MVI строится на основе трех компонентов - модели, намерения (действия) и состояния экрана. Логика приложения диктуется пользователем, например, он хочет загрузить картинку в высоком разрешении, и различными внешними эффектами (далее - side-effects), например, внезапной потерей соединения.

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

Читать далее
Всего голосов 7: ↑5 и ↓2 +3
Просмотры 694
Комментарии 1

Правильная валидация в Android

Разработка под Android *Kotlin *
Из песочницы

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

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 1.4K
Комментарии 0

Jetpack Microbenchmark — тестируем производительность кода

Блог компании FUNCORP Разработка мобильных приложений *Разработка под Android *Тестирование мобильных приложений *Kotlin *

В мобильной разработке периодически возникают ситуации, когда нужно оценить время выполнения кода. Помимо теоретических подходов (например, Big O), которые позволяют отсеять очевидно неудачные решения, существуют бенчмарки для тестирования кода и поиска более мелких отличий. 

В этой статье расскажу, как устроена и работает библиотека Microbenchmark от Google, а также покажу примеры использования. С ней можно не только оценить производительность, но и решить спорные ситуации на код-ревью.

Читать далее
Всего голосов 43: ↑42 и ↓1 +41
Просмотры 2.5K
Комментарии 0

Обработка русского языка на Java

Поисковые технологии *Программирование *Java *Kotlin *Natural Language Processing *
Tutorial

Рассказ пойдет об одной новой, общедоступной Java/Kotlin библиотеке, для работы с русским языком. Она позволяет получить исходные формы + морфологическую информацию для большинства слов русского языка. Статья предназначена для тех, кто создает ботов, обрабатывает сообщения и занимается поиском. Для справки, ключевое отличие лемматизации от стеммизации (урезания до нормализованной формы) состоит в том, что лемма удовлятворяет правилам языка, например для слова "яблоками" леммой будет "яблоко", а не просто урезанный корень. Лемма может быть и более сложной, например для слова люди, начальная форма – человек. В этой статье мы рассмотрим способ быстрого извлечения такой информации из морфологического словаря.

Запустить процесс
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 4.3K
Комментарии 12

Kotlin Native. Работаем с новой моделью памяти

Разработка под iOS *Разработка мобильных приложений *Разработка под Android *Kotlin *
Tutorial

Всем доброго дня! С вами Анна Жаркова, ведущий мобильный разработчик компании Usetech. Продолжаем рассматривать способы многопоточный работы в Kotlin Native. В предыдущих статьях мы уже рассмотрели существующие способы работы с многопоточностью с корутинами и без, и что делать с имеющимися болями. Теперь поговорим о новой модели управления памятью, которая появилась совсем недавно.

31 августа компания JetBrains представили превью новой модели управления памятью в Kotlin Native. Основной упор команда разработчиков сделала на безопасность шаринга между потоками, устранение утечек памяти и освобождение нас от использования специальных аннотаций. Также доработка коснулась Coroutines, и теперь можно без опаски переключаться между контекстами корутин без заморозки. Обновления подхватили и Ktor:  

Итак, что же нового появится в версии Kotlin 1.6.0-M1-139: 
1. Заявлено, что мы можем убрать все freeze() блоки (в том числе и во всех фоновых Worker), и переключаться между контекстами и потоками без каких-либо проблем. 

2.Использование AtomicReference или FreezableAtomicReference не приводит к утечкам памяти.

3.При работе с глобальными константами не нужно теперь использовать SharedImmutable.

4.При работе с Worker.execute producer больше не требует возвращать изолированный подграф объектов. 

Однако есть и нюансы:

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 3.8K
Комментарии 0

Как мы обновляли мобильное приложение для официантов: выбор стека и тест трех версий. Кто победил?

Блог компании r_keeper Разработка мобильных приложений *Разработка под Android *Kotlin *Flutter *

Привет! Меня зовут Сергей Арсёнов, я руковожу мобильной разработкой в компании r_keeper. Хочу рассказать, как мы обновляли мобильное b2b-приложение для официантов и почему выбрали для него не совсем классический стек — Kotlin Multiplatform Mobile + UI на Flutter.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 2.8K
Комментарии 33

Kotlin Null-Safety vs ClassLoader

Ненормальное программирование *Java *Компиляторы *Отладка *Kotlin *

Недавно я проходил собеседование и одним из вопросов, стал такой загадочный экземпляр:
"А какое главное преимущество системы типов Kotlin перед Java"?

Честно говоря, выделить какое преимущество считалось главным, оказалось неразрешимой для меня задачей: Nothing, отсутсвие Wildcard и First-Class Functions вместо Java-костыля с Functional Interface (имеется ввиду 8я версия Java) не заняли первых мест в личном топе интервьюера, который мне предложили угадать.

Оказалось что главное в Kotlin - возможность обьявить Nullable Type и Null Safety подход (Замечу, что по моему опыту собственные или библиотечные Optional или Maybe решают эту проблему, и пишутся за 10 минут на Java 7. А еще есть аннотации Nullable, позволяющие проверять поля в сompile-time. Короче, есть много способов заставить делать Null проверки в plain Java. Ну да ладно).

Но речь пойдет не о странных вопросах, связанных со вкусовыми предпочтениями интервьюеров относительно синтаксического сахара.
Дело в том, что Null Safety в Kotlin можно сломать, притом не выходя из под его безопасного купола в суровый дикий мир Java и Null-Referrences.

Как?

Long story short: ClassLoader ведет себя интересным образом при попытке загрузить статические поля классов рекурсивно ссылающиеся на классы друг-друга.

Под катом примеры кода и подробное объяснение того, как он обманывает проверки на Nullable. Я искренне надеюсь что специфические знания Java/Kotlin для статьи не нужны - я объясню все детали на ходу, и уложу расследование в 10 минут.

Начнем.
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 2.4K
Комментарии 7

Простой Ripple эффект своими руками для Android

Разработка под Android *Kotlin *
Tutorial

Любой Android разработчик работал с кнопками, поэтому видел ripple эффект и всю его красоту.

Иногда хочется реализовать что-нибудь кастомное нежели стандартные вещи, которые уже предоставляются компонентами Material Design.

Поэтому я решил написать наследник AppCompatImageView и сделать для него свой ripple эффект с минимальным количеством кода.

Сразу выкладываю код:

Читать далее
Всего голосов 5: ↑3 и ↓2 +1
Просмотры 2.5K
Комментарии 11

Kotlin Native. Работаем с потоками с корутинами и без. Ч2

Разработка под iOS *Разработка мобильных приложений *Разработка под Android *Kotlin *
Tutorial

Всем доброго дня! С вами Анна Жаркова, ведущий мобильный разработчик компании Usetech. Продолжаем рассматривать способы многопоточный работы в Kotlin Native.

В предыдущей части мы посмотрели некоторые нюансы работы с корутинами, как работать с Worker и AtomicReference.

Еще одним возможным API для работы с многопоточностью является DetachedObjectGraph.

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Просмотры 2K
Комментарии 0

Kotlin Native. Работаем с потоками с корутинами и без. Ч1

Разработка под iOS *Разработка мобильных приложений *Разработка под Android *Kotlin *
Tutorial

Всем доброго дня! С вами Анна Жаркова, ведущий мобильный разработчик компании Usetech. Совсем недавно компания JetBrains выпустила preview новой модели управления памятью. Это отличный повод сделать подробный ее разбор на практике, а также сравнить с моделью, используемой в KMM в текущих версиях. Но для начала неплохо было бы поговорить о тех возможностях работы в Kotlin Native, которые мы на практике не используем.

Если вы уже знакомы с тем, как работать с корутинами в Kotlin/Native и/или читали предыдущие статьи 1 и 2 автора, то пролистайте немного вниз. Материал может немного повторяться.

Когда мы работаем с Kotlin и Kotlin Multiplatform, то самым и простым удобным способом для настройки работы с многопоточностью в приложении являются Kotlin Coroutines. Наша задача сводится к настройке скоупов CoroutineScope для запуска корутин и suspend функций в основном потоке и фоновом. Т.к. в разных платформенных версиях языка Kotlin этот механизм реализуется по-разному, то необходимо кастомизировать получение контекста корутин с помощью expect/actual:

Читать далее
Всего голосов 7: ↑6 и ↓1 +5
Просмотры 2.5K
Комментарии 0

Последняя статья об упрощении recycler view

Разработка под Android *Kotlin *
Из песочницы

За всё время существования Recycler View регулярно выходят статьи, рассказывающие о новых путях упрощения работы с этим элементом. Они появляются так часто, что порой удивляешься тому, откуда у людей столько фантазии, чтоб придумывать всё новые и новые способы работы со списками. А потом открываешь статью и удивляешься второй раз, ведь способ-то вовсе и не новый, а что-то подобное уже было в нескольких предыдущих статьях. Так к чему это я?

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

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 903
Комментарии 0

Пагинация и DiffUtils в RecyclerView c BRVAH

Разработка под Android *Kotlin *

Это продолжение цикла статей про упрощение разработки адаптеров для RecyclerView.

Часть 1

В этой части рассмотрю следующие реализации потребностей отображения списков:

·       Загрузка изображения из сети, с использованием Glide

·       Пагинация (подгрузка списка)

·       Удаление элемента

·       Удаление и использование встроенного diffUtils

Читать далее
Рейтинг 0
Просмотры 516
Комментарии 2

Как добавить независимый Dagger Сomponent в иерархию SubComponnet-ов Hilt используя подход «component dependencies»?

Разработка мобильных приложений *Разработка под Android *Kotlin *

Hilt базируется на подходе Subcomponents и описание этих компонентов скрыто от нас, поэтому мы не можем добавить зависимость на внешний компонент используя подход Component Dependencies. Как это обойти описано в статье.

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 503
Комментарии 0

Многопоточность и Kotlin в Яндекс.Картах: как не допустить падения новых фич на iOS

Блог компании Яндекс Совершенный код *Разработка под iOS *Разработка мобильных приложений *Kotlin *


Привет! Меня зовут Женя Васильев, я делаю Яндекс.Карты под Android. А с появлением у нас Kotlin Multiplatform — так уж получилось, ещё и под iOS.

Kotlin Multiplatform позволяет писать код, который будет одинаково работать на iOS и Android. По крайней мере, должен одинаково работать. И в случае с простыми фичами правда работает. Но если вы, как и я, впервые реализовываете в мультиплатформе сложную фичу с многопоточностью, на iOS вас будут ждать креши в рантайме и утечки.

В статье я расскажу и покажу на примерах, с какими проблемами я столкнулся при написании многопоточного кода на Kotlin Multiplatform, как эти проблемы решать, как лучше организовывать потоки данных в многопоточной среде и что ещё нужно делать, чтобы написанное на Kotlin не падало на iOS. Увы, писать код «как обычно» не получится.
Читать дальше →
Всего голосов 29: ↑27 и ↓2 +25
Просмотры 5.8K
Комментарии 9

Упрощаю разработку адаптеров для RecyclerView c BRVAH. Часть 1

Разработка под Android *Kotlin *
Tutorial

Я действующий разработчик приложений под платформу Android. Хочу поделиться крутой библиотекой, облегчающей разработку адаптеров для RecyclerView, и описать ее использование. RecyclerView – это View элемент в Android для отображения списков, и редкое современное приложение обходится без него. Стоковая реализация адаптеров и вьюхолдеров очень громоздкая и пугающая, особенно для новичков. Благо существует библиотека BaseRecyclerViewAdapterHelper облегчающая разработку этих компонентов. В 100% проектов, которые я разрабатывал – я подключал её, и все коллеги достойно оценивали это деяние.

Цель BaseRecyclerViewAdapterHelper – упростить работу с отображением списков в Android. Чтобы понять, как можно облегчить работу с RecyclerView, рассмотрим базовые потребности отображения списков и базовые потребности элементов списка

Читать далее
Рейтинг 0
Просмотры 1K
Комментарии 5

Дикая природа Gradle Task: руководство по выживанию

Блог компании Yota Groovy & Grails *Разработка под Android *Kotlin *Gradle *
Tutorial

Приветствую, Gradle-адепт! В статье тебя ждёт авторский тур по Gradle Task. В маршрут включено хождение по граблям, изучение секретных практик buildscript-тасок, проведение раскопок по deprecated API, а ближе к концу зарядимся силой Custom Gradle Task, попрактикуемся в строительстве билд-кеша и узнаем, кто такой Worker API.

Читать далее
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 3K
Комментарии 1

Энциклопедия интеропа: Kotlin-Swift-Interopedia

Блог компании HeadHunter Разработка под iOS *Разработка под Android *Swift *Kotlin *

Как и множество других компаний, мы в hh.ru с интересом приглядываемся к Kotlin Mobile Multiplatform. Особенно нас заинтересовал вопрос, связанный с удобством работы iOS-разработчиков с общим SDK. Наши iOS-инженеры пишут на Swift, поэтому нам важно было убедиться: то публичное API, которое мы сформируем, будет выглядеть на Swift так же удобно и классно, как и в Kotlin. Мы провели объёмный ресёрч, в рамках которого подготовили специальный репозиторий "Kotlin-Swift-Interopedia", которым и хотим поделиться с сообществом.

На портале документации KMM можно найти страницу, посвящённую интеропу между Kotlin и Swift. Но в ней не рассматриваются все возможные конструкции языка Kotlin-а, поэтому даже после чтения документации оставалось множество вопросов.

Как поведут себя abstract-классы? Что будет с sealed-интерфейсами? Удобно ли мне будет работать с лямбдами в качестве аргументов функций? Enum-ы превратятся в Swift-овые enum-ы?

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

Относительно недавно на Хабре анонсировали специальный инструмент, который может немного улучшить опыт iOS-разработчиков — плагин moko-kswift от компании IceRock. Но даже с его помощью не все боли могут быть исправлены прямо сейчас.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 1.6K
Комментарии 0

Безопасная приостановка в Android View. Прощайте обработчики, поприветствуем корутины

Разработка под Android *Kotlin *
Перевод

Приостановки и ожидания на Android, а так же длительные операции — это всегда больно. Однако, команда JetBrains предоставила нам отличное решение в виде Kotlin Coroutines. Давайте посмотрим, как сделать ожидание безопасным и красивым способом!

Читать далее
Рейтинг 0
Просмотры 3.5K
Комментарии 2

Вклад авторов