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

Kotlin *

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

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

Система сбора распределенной телеметрии на Cassandra и Kotlin Spring

Блог компании OTUS NoSQL *Big Data *Kotlin *Умный дом

Сердцем любого backend являются данные. Существует два сценария использования данных. В одном из них данные изменяются редко, но при этом активно используются в сыром или агрегированном виде и применяются для целей аналитики в реальном времени (такие системы принято называть OLAP). В других системах важно обеспечить сохранение с высокой скоростью большого количество неструктурированных или полуструктурированных объектов, поступающих от устройств Интернета вещей, из источников произвольных событий, наблюдений за активностью пользователя (такие системы называются OLTP - Online Transaction Processing, ориентированные на большое количество транзакций с минимальной задержкой обработки). Для таких систем важно обеспечить надежность хранения данных, поддержку распределенного хранения на нескольких серверах и/или дата-центрах и сохранение консистентности распределенного хранилища.

При этом сами объекты могут отличаться от привычной реляционной модели данных и представляться, например, в виде json-документов с произвольной схемой, объектов с полями со множественными значениями или графов. Разумеется это приводит к необходимости изучения новых подходов к поиску и добавлению данных, использованию специальных драйверов. Но что если соединить распределенное надежное хранилище и синтаксис запросов, близкий к SQL? В этой статье мы познакомимся с проектом Apache Cassandra и обсудим на примере разработки API на Kotlin для сбора телеметрии с датчиков, расположенных по всему миру (с поддержкой отказоустойчивости и управляемой репликации между дата-центрами).

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

Новости

Асинхронные моки. Создаем и тестируем telegram-бот на Kotlin

Блог компании OTUS Тестирование IT-систем *Программирование *Kotlin *

Любая асинхронность повышает уровень тревожности при разработке автоматических тестов. Особенно в ситуации, когда нужно выполнить проверку корректности работы системы, основанной на графе состояний со взаимодействием с внешним API через Flow. Примером такой системы может быть Telegram-бот, построенный на диалоге с внешним пользователем. В этой статье мы с вами создадим простой бот на Kotlin (с поддержкой многоязычности) и последовательно разберем возможные способы использования асинхронных моков и тестов для Flow с использованием библиотеки mockk и типобезопасной библиотеки для взаимодействия с API Telegram на Kotlin.

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

Сила @RawQuery. Сокращаем код DAO на 90%

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

Вы когда-нибудь задумывались над тем что ваши Dao это сплошной повторяющийся код и выглядит это все как ночной кошмар? Тогда я знаю решение вашей проблемы.

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

Дайджест недели (мобильная разработка) – #3

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

Продолжаю эксперимент с рубрикой дайджестов на Хабре. На этот раз, собрал наиболее полезные и популярные материалы для мобильщиков за 2 недели.

Android 🤖

• Знакомьтесь: библиотека TiRecycler
• Custom Canvas Animations in Jetpack Compose
• Special Google I/O 2022 Edition
• Scan code without camera permissions
• Do you use Kotlin’s most powerful tool?
• VK при поддержке Минцифры запустила бета-версию российского магазина приложений
• Многомодульный BDSM: стоит ли внедрять Gradle модули и какие типы модулей бывают?
• Some Best Practices for Android App Architecture
• 15 Best Android Libraries for 2022
• Strategies for managing Gradle dependencies
• Запросы в сеть с Clean Architecture и MVVM. Boilerplate ч. 2
• Как и зачем собирать Android приложение в docker контейнере
• Как работает UI в Android. Не все так сложно
• Chrome на Android сломал чужие MitM-сертификаты, но это можно исправить
• Toying with Kotlin's context receivers
• Deep dive into Android ANR | OkCredit
• Take Part in the New UI Preview for Your JetBrains IDE
• A cleaner way to interact between Composable and ViewModel in Jetpack Compose
• Speeding up Kotlin Multiplatform
• Jetpack Compose Clean Architecture with Rorty App
• 5 Awesome Jetpack Compose Custom Progress Indicator Designs
• Detect Swipe Direction on Jetpack Compose to trigger BottomSheetScaffold
• Spot your UI jank using CPU profiler in Android Studio
• Как рефакторинг помогает улучшить производительность разработчиков и повысить качество приложений
• Using MotionLayout in Compose
• SOLID – это не правила, а гайдлайны
• Measure and improve performance with Macrobenchmark
• The Suspend & Inline Mystery | Kotlin Tips 2022 - YouTube
• Full Guide to Testing Android Applications in 2022
• Compose Navigation in 3 Minutes
• Jetpack Compose under the hood: Touch Events

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

Loom: зачем?

Блог компании Usetech Высокая производительность *Java *Scala *Kotlin *
Из песочницы

Недавно, 6 мая этого года, в OpenJDK вошёл JEP 425, который добавит к Java 19 в качестве превью-фичи Виртуальные треды.

Пожалуй, этот JEP — самое большое изменение семантики языка после появления Дженериков. Его масштабы трудно оценить. Для начала попробуем прикинуть, как оно может отразиться на нашей зарплате.

Читать далее
Всего голосов 22: ↑8 и ↓14 -6
Просмотры 5K
Комментарии 17

Тестирование интеграции Kotlin веб сервиса на Spring Boot с базой данных

Тестирование IT-систем *Java *Kotlin *

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

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

Темный путь

Блог компании OTUS Программирование *Swift *Kotlin *
Перевод

За последние несколько месяцев я попробовал два новых языка. Swift и Kotlin. Они имеют ряд общих черт. Действительно, сходство настолько разительное, что я задаюсь вопросом, не является ли это новой тенденцией в нашей лингвистической текучке. Если да, то это темный путь.

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

Kotlin Multiplatform Mobile — совместное управление состоянием пользовательского интерфейса

Блог компании OTUS Разработка под iOS *Kotlin *
Перевод

В своей предыдущей статье я рассказал о том, почему считаю, что мы можем значительно улучшить управление UI State (состояние пользовательского интерфейса) между View (представление) и ViewModel (модель представления) в Android, используя архитектуру Model-View-Intent (модель-представление-намерение) (MVI) с помощью Finite State Machine (машина с конечным числом состояний. конечный автомат) (FSM).

В этой статье я подскажу вам шаги, необходимые для модернизации этого решения до уровня Kotlin Multiplatform Mobile (KMM), где можно воспользоваться общим исходным кодом, содержащим MVI+FSM, так что обе платформы — Android и iOS — могут унаследовать его преимущества, отвечая только за платформозависимые реализации: UI/UX.

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

Дайджест недели (мобильная разработка) – #2

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

Главным событием этой недели было Google I/O, на которой представили некоторые нововведения, зарелизили ряд новых версий библиотек и инструментов. Из интересного: вышла вторая Beta Android 13, запустили сервис Google Play SDK Index, представили Flutter 3, выложили исходники приложения Now in Android. Все ссылки в дайджесте.

Дайджест и другие полезные материалы для мобильных разработчиков доступны в моем тг-канале Mobile Native, присоединяйтесь.

Android 🤖

• 13 Things to know for Android developers at Google I/O!
• Google Play SDK Index
• Что нового в инструментах Android-разработки
• Что нового в Jetpack Compose (Beta 1.2)
• Now in Android - a new, open source, real-world sample app
• Вышла вторая Beta Android 13
• Android Lint. Подборка
• Fragula – swipe-to-dismiss extension for navigation component library for Android
• Письмо счастья: как мы разделили наши сборки для AppGallery и Google Play
• Compose performance
• Jetpack DragAndDrop Released 1.0.0
• Here's a productivity hack to save tens of engineering hours* when working with Jetpack Compose!
• Android Studio Chipmunk Released
• Understand Proguard Generated Files and Manually De-obfuscate Stacktrace
• Build a Custom IntelliJ Code Inspection Plugin
• How To Use Android’s Proto DataStore With Kotlin Support
• The Guide To Your First Annotation Processor with KSP (And Becoming A Kotlin Artist)
• Airbnb uses Jetpack Compose to empower devs to do their best work

iOS 🍏

• Apple отключила оплату в App Store со счёта мобильного у «Мегафона», Yota и Tele2
• Write Beautiful Code With Swift Result Builder
• Modeling errors in Swift
• A flexible way to handle and alert errors in SwiftUI
• How do we use SwiftUI in the Medium iOS application
• Заполнители типа в Swift: что это такое и когда их следует использовать
• On iOS applications architecture
• 5 актуальных расширений Xcode для оптимизации разработки
• 10 Tips and Tricks for Swift Developers
• How to Read Websites in SwiftUI — Data Scraping in iOS
• Swift: A few tips for improving code quality
• SSL/Certificate Pinning — iOS 14.0 Never easy before
• Clean Architecture: iOS App
• Creating hex-based colors in UIKit, AppKit and SwiftUI
• Core Data Relationship in Swift 5— made simple
• Building a document scanner in SwiftUI
• Bottom Sheet, shall we drop the formalities?
• Introduction to Dependency Injection with Needle - The Uber Way
• SwiftUI Still Isn’t Production-Ready

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

Посчитать запросы spring data jpa + hibernate на 1 rest запрос

Java *SQL *Kotlin *
Tutorial

Началось все с желания посчитать, сколько запросов в БД улетает на каждый rest запрос при использовании spring data jpa + hibernate.

Гугл выдал интересное видео про xrebel, но так же сообщил, что xrebel платный.
Дальнейший поиск привел к статье Counting Queries per Request with Hibernate and Spring.

Её и взял за основу для своего счетчика. Какого-то ещё примера не нашел, поэтому решил оставить эту заметку

Читать далее
Всего голосов 5: ↑1 и ↓4 -3
Просмотры 1.8K
Комментарии 10

Прыжок горбатой лошади или как мы обновляем наши системы

Блог компании Lamoda Программирование *Apache *Kotlin *

Привет! Меня зовут Евгений Сальников и я тимлид одной из команд Outbound, которая входит в департамент Business Process Automation в Lamoda. В нашем направлении мы отвечаем за сервисы доставки.

Эта статья написана по мотивам реальной задачи по обновлению нашей большой системы, а именно — переход с очень старой версии Apache Camel на актуальную. Я не расскажу чего-то особо нового, но если у вас уже есть Apache Camel и вам «только спросить», как с ним управляться — милости просим.

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

Механизмы сериализации в Java и Kotlin

Блог компании Usetech Программирование *Java *Kotlin *

В этой статье Илья Гершман, ведущий разработчик Юзтех, рассматривает понятия сериализации и десериализации в сравнении между двумя языками программирования — Java и Kotlin.

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

Пишем приложение на JetBrains Exposed

Программирование *Kotlin *

При всём разнообразии фреймворков для работы с базой данной, стоящих и постоянно развивающихся не так уж и много. И если про Hibernate знают все, а про JOOQ знают очень многие, то слабая популярность Exposed скорее связана с его ориентацией на Kotlin. Если Вы только-только пришли в Kotlin из Java, Вам архитектурные подходы, заложенные в Exposed (переполнение лямбдами и функциями-замыканиями, к примеру) могут показаться дичью, но пугаться не стоит: чем дальше Вы будете осваивать Kotlin, тем привычнее для Вас будут конструкции Exposed.

Какое-то время назад здесь уже была статья про Exposed, от компании Otus, но с тех пор прошло больше года и многие практики пользования фреймворком нужно освежить - даже пока я писал эту статью, многое поменялось!

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

Android Studio. Kotlin. Подключение Google календаря через Content Provider

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

Подробно с демонстрацией своего кода рассказываю о том, как я реализовал в своем приложении на Kotlin добавление, редактирование, удаление и чтение событий из Google календаря при помощи Content Provider. Описываю "грабли", на которые наступал, не найдя в сети помощи и поддержки в тяжелое для себя время...

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

Дайджест недели (мобильная разработка) – #1

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

Привет, Хабр! Каждую неделю, в своем телеграм-канале Mobile Native, я публикую дайджест с интересными и полезными материалами (новости, статьи, инструменты, библиотеки и т.д.) для мобильных разработчиков. Решил попробовать публиковать эту рубрику и на Хабре. Посмотрим, что из этого получится.

Android 🤖

• Dependency Inversion Principle: How Google Developers write code
• Как мы используем фича-флаги в мобильном приложении QIWI Кошелек
• Google запускает бесплатный курс Android Basics with Compose
• Опубликована программа Google I/O
• The first developer preview of Privacy Sandbox on Android
• Google Play запретил разработчикам загружать и обновлять платные приложения в России
• Learn Dagger 2 to Hilt for Android Easily in under 10 Minutes
• Jetpack Compose Dropdown
• S.O.L.I.D Principles (Examples in Kotlin)
• Kotlin-inline, crossline, noinline function and reified: Everything you need to know(Android) — Part 1
• 7 things to keep in mind while building jetpack composable’s.
• Architecture MAD Skills series wrap up
• Топ вопросов работодателю от Android-разработчика
• Isolate Koin Within an Android Module
• Kotlin, обрабатываем исключения в корутинах правильно
• The curious case of crashing Workers
• Material Components Android 1.6.0 Released
• Конвергенция в многомодульном приложении
• Passive Views: keep your UI code simple and stupid
• CI-CD: Firebase App Distribution with Fastlane on Android
• Creating reliable tests for Android notifications

iOS 🍏

• I replaced my native iOS app with a cross platform web app and no-one noticed
• Measuring app performance in Swift
• Types of memory in swift
• Improve Performance in Your iOS Applications — Part 1
• Swift 5.7: Unwrapping Optionals Gets an Improvement
• Clarifying criteria & new timing extension for App Store Improvements process
• Тест-ревью: как прошли два года написания unit-тестов
• Is It Possible to Have a Half-modal View in SwiftUI?
• Swift visitor design pattern
• Two Ways to Unit Test Notification Center in Swift
• Send Events from SwiftUI to UIKit and Vice Versa
• AsyncThrowingStream and AsyncStream explained with code examples
• AttributedString’s Codable format and what it has to do with Unicode
• SwiftUI Supporting External Screens
• Flow Navigation With SwiftUI (Revisited)
• Делаем патч для Pods библиотеки
• Как нативно визуализировать голос в iOS
• 6 Tips to improve Coding of Swift

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

Kotlin, обрабатываем исключения в корутинах правильно

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

Возможно вы думаете обработка таких исключений происходит как обычно в Kotlin/Java коде. К сожалению, при использовании вложенных корутин, все может работать не так как ожидается.

В этой статье я попробую показать ситуации, в которых требуется осторожность и расскажу про лучшие практики в обработке ошибок.

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

Как мы используем фича-флаги в мобильном приложении QIWI Кошелек

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

Привет, Хабр! 

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

Внедрение Trunk-Based Development и Feature Flags

В процессе работы над большими приложениями, в которых много фич и над которыми трудится большая команда разработчиков, часто приходится сталкиваться с такой проблемой как конфигурация приложения помощью фича-флагов. Мы в QIWI столкнулись с этим два года назад, когда в QIWI Кошельке было создано несколько feature-команд. Выяснилось, что разрабатывать новые фичи с помощью стандартных feature-веток не так удобно, потому что когда над одним проектом работает несколько feature-команд, ветки становятся достаточно объёмными. Потом смержить их в мастер становится довольно непростой задачей, появляются постоянные конфликты. 

Поэтому мы решили перейти на Trunk-Based Development (TBD). TBD предлагает работать в небольших ветках и, желательно, чтобы они как можно быстрее были влиты основную ветку. Для этого, конечно же, реализацию нового функционала нужно оформлять небольшими пулл-реквестами, чтобы они быстро проходили ревью и были влиты в основную ветку. Это, в свою очередь, создает другую проблему — когда в главной ветке может появиться код, который ещё не готов к релизу, но при этом нам нужно как-то релизить с этим кодом приложение. Мы же релизы выпускаем достаточно часто. И для этого TBD предлагает пользоваться такими подходами, как Branch by Abstraction (BBA) и Feature Flags (FF).

BBA позволяет выделить какой-либо функционал в отдельную абстракцию. Для этого создается интерфейс, который описывает контракт для работы с этим функционалом. Сразу же можно создать его текущую реализацию, просто скопировав код, который сейчас в продакшене. Также создается другая реализация (уже с новым функционалом) и с ней уже начинается работа. То есть обычно первый пулл-реквест при работе с фичей — это выделение кода, создается две реализации, эти изменения вливаются в главную ветку и далее продолжаем работать уже над новой реализацией. При этом в проекте (в продакшене) используется всё ещё старая реализация, пока мы не закончим работать над фичей.

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

Как использовать Kotlin Multiplatform ViewModel в SwiftUI и Jetpack Compose

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

Мы в IceRock Development уже много лет пользуемся подходом MVVM, а последние 4 года наши ViewModel расположены в общем коде, за счет использования нашей библиотеки moko-mvvm. В последний год мы активно переходим на использование Jetpack Compose и SwiftUI для построения UI в наших проектах. И это потребовало улучшения MOKO MVVM, чтобы разработчикам на обеих платформах было удобно работать с таким подходом.

30 апреля 2022 вышла новая версия MOKO MVVM - 0.13.0. В этой версии появилась полноценная поддержка Jetpack Compose и SwiftUI. Разберем на примере как можно использовать ViewModel из общего кода с данными фреймворками.

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

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

Отменяем операции правильно на примере корутин

Блог компании Delivery Club Tech Разработка мобильных приложений *Разработка под Android *Kotlin *Управление разработкой *

Всем привет! Меня зовут Павел, я Android-разработчик в Delivery Club. Моя команда разрабатывает функциональность доставки продуктов из магазинов. Я расскажу о подходе к написанию кода, подразумевающем, что любые долгие операции могут быть отменены. На примере корутин рассмотрим сферы применения такого подхода.

Читать далее
Всего голосов 21: ↑19 и ↓2 +17
Просмотры 4.7K
Комментарии 7

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