Как стать автором
Поиск
Написать публикацию
Обновить
64.11

Kotlin *

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

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

Паттерн PageObject в Kotlin для UI-тестирования Android

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


Это перевод статьи ведущего Android & iOS разработчика Yahoo (Verizon Media) Брама Йе. Он рассказывает о внедрении паттерна PageObject в свои инструментальные тесты, который делает их более гибкими и легко модифицируемым в зависимости от изменений пользовательского интерфейса. Более того, по словам Брама, благодаря DSL в Kotlin, паттерн PageObject стал более содержательным и более читабельным в тест-кейсах.
Читать дальше →

Встраиваем геолокацию от Huawei в Android приложение

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

image


В предыдущих статьях мы создавали аккаунт разработчика для использования Huawei Mobile Services и подготавливали проект к их использованию. И использовали аналитику от Huawei вместо аналога от Google. В этой статье мы будем встраивать определение геолокации от Huawei.


Вот полный список статей из цикла:


  1. Создаём аккаунт разработчика, подключаем зависимости, подготавливаем код к внедрению. тык
  2. Встраиваем Huawei Analytics. тык
  3. Используем геолокацию от Huawei. ← вы тут
  4. Huawei maps. Используем вместо Google maps для AppGallery.
Читать дальше →

Compose. Jetpack Compose

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

Благодаря стремительному развитию мобильной индустрии каждые несколько лет мы наблюдаем появления новых технических решений, призванных усложнить упростить жизнь разработчикам. Некоторые из них, не сыскав популярности у пользователей, остаются лишь частью истории, другие – плотно укореняются в повседневной разработке, становясь в определенной области стандартом де-факто.

Пожалуй, главным трендом мобильной разработки за последние несколько лет стал декларативный UI. Такое решение уже давно успешно применяется в веб и кроссплатформенных решениях и, наконец, добралось и до нативной разработки. На iOS существует SwiftUI (представленный на WWDC 2019), а на Android – Jetpack Compose (представленный месяцем ранее на Google I/O 2019). И именно о последнем мы сегодня и поговорим.

Примечание: в данной статье мы не будем рассматривать поэтапное создание первого проекта на Compose, так как этот процесс прекрасно описан в других материалах. Моя цель – лишь рассказать о преимуществах и недостатках, которые дает android-разработчикам переход на Jetpack Compose, а решение использовать или нет всегда остаётся за вами.
Читать дальше →

Челлендж по разговорному ИИ на хакатоне Junction: создай чатбота или голосовой навык и выиграй 10 000 евро

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

Участников крупнейшего в Европе хакатона Junction, который пройдет в этом году 6-8 ноября, ждет челлендж по разговорным технологиям от ИТ-компании Just AI. Главный приз хакатона в €10000 или €1500 от Just AI может выиграть тот, кто предложит самое интересное и удобное диалоговое решение – чатбота или голосовой навык для мобильного приложения или умного устройства. Что нужно сделать? Хакнуть разговорный UX.

Принять участие в челлендже можно онлайн, либо присоединиться к офлайн-хабу в Санкт-Петербурге, который будет открыт на территории офиса Just AI.

Об участии в челлендже

Встраиваем аналитику от Huawei в Android приложение

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

image


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


Вот полный список статей из цикла:


  1. Создаём аккаунт разработчика, подключаем зависимости, подготавливаем код к внедрению. тык
  2. Встраиваем Huawei Analytics. ← вы тут
  3. Используем геолокацию от Huawei.
  4. Huawei maps. Используем вместо Google maps для AppGallery.
Читать дальше →

Голос в мобильном приложении: учимся вызывать экраны и заполнять формы без рук

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

Как быстро и бесшовно встроить голосовой интерфейс в ваше мобильное приложение? И как научить app-ассистента всему, что оно умеет? В прошлый раз мы взяли опенсорсное лайфстайл-приложение Habitica и показали, как добавить в него помощника и запилить базовый голосовой сценарий «из коробки» (уточнение прогноза погоды и времени).

Теперь перейдем к более продвинутому этапу -- научимся вызывать голосом определенные экраны, делать сложные запросы с NLU и form-filling с помощью голоса прямо внутри приложения.

Изучить туториал

Retrofit2 на Android используя Kotlin

Время на прочтение11 мин
Количество просмотров64K
Сегодня мы рассмотрим работу с Retrofit 2. Правды ради стоит отметить, что мы будем работать еще с 2 отдельными библиотеками, а именно Picasso и Spots-dialog.

Это статью я рекомендую к прочтению только для тех, кто еще не работал с Retrofit 2. Ведь в этой статье я буду описывать все максимально подробно, чтобы все поняли.

0. Создание проекта


Здесь все максимально просто, создаем новый проект в Android Studio, выбираем Empty Activity. Далее необходимо выбрать язык программирования, у нас это будет Kotlin.

1. Добавление зависимостей


Сейчас нам нужно добавить все необходимые библиотеки, поэтому мы заходим в build.gradle и добавляем следующие:

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    implementation 'com.squareup.picasso:picasso:2.71828'

    //noinspection GradleCompatible
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.github.d-max:spots-dialog:1.1@aar'
}

Как вы уже могли заметить здесь мы добавили все необходимые библиотеки, в том числе и Spots progress dialog. Более подробно вы можете ознакомится с этим здесь. После чего в build.gradle(Modul:app) мы должны вставить это:

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

Осталось лишь зайти в manifests и добавить разрешение на использование телефона
  <uses-permission android:name="android.permission.INTERNET"/>

Читать дальше →

Kotlin. Автоматизация тестирования (часть 1). Kotest: Начало

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

Kotest


Хочу поделиться опытом создания системы автоматизации функционального тестирования на языке на Kotlin.
Основой для создания / конфигурирования / запуска / контроля выполнения тестов — будет набирающий популярность молодой фреймворк Kotest (в прошлом Kotlin Test).
Проанализировав все популярные варианты для Kotlin — выяснилось, что есть всего два "нативных":



Либо бесконечное кол-во из Java мира: Junit4/5, TestNG, Cucumber JVM или другие BDD фреймворки.
Выбора пал на Kotest с бОльшим кол-вом "лайков" на GitHub, чем у Spek.


Руководств по автоматизации тестирования на Kotlin, особенно в сочетании с Kotest — немного.
Думаю, что написать цикл статей про Kotest, а также про организацию проекта авто-тестов, сборку, запуск и сопутствующие технологии — хорошая идея.


Все части руководства:


Читать дальше →

Знакомство с App Gallery. Создаем аккаунт разработчика

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


Что происходит, кто виноват и что делать


Недавно Google прекратил сотрудничество с Huawei. Это привело к тому, что Huawei на своих новых девайсах уже не может использовать сервисы Google (магазин приложений, геолокация, карты, пуши, аналитика etc), что для пользователя превращает девайс в кирпич. Если бы это не была китайская компания, то, скорее всего, на этом её бизнес, связанный с Android, просто бы прекратился. Но компания китайская, большая и они пошли по пути импортозамещения, в кратчайшие сроки реализовав функционал, аналогичный Google сервисам.


В этой серии статей мы хотим поделиться своим опытом использования Huawei Mobile Services в уже готовом приложении, использующем Google Mobile Services для аналитики (Firebase Analytics), карт и геолокации. Текста получилось довольно много и о сильно разных сервисах, засим статей будет несколько. Начнём мы с основ — регистрации аккаунта разработчика и базовых вещей в коде.


  1. Создаём аккаунт разработчика, подключаем зависимости, подготавливаем код к внедрению. ← вы тут
  2. Встраиваем Huawei Analytics. тык
  3. Используем геолокацию от Huawei.
  4. Huawei maps. Используем вместо Google maps для AppGallery.

Если вам интересно узнать технических подробностей, посмотреть код и узнать про подводные камни — добро пожаловать под кат!

Читать дальше →

Распознавание текста на картинке с помощью tesseract на Kotlin

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

Ни для кого не секрет, что Python прочно занял первенство в ML и Data Science. А что если посмотреть на другие языки и платформы? Насколько в них удобно делать аналогичные решения?


К примеру, распознавание текста на картинке.

Читать дальше →

Передовой опыт тестирования в Java

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


Чтобы покрытие кода было достаточным, а создание нового функционала и рефакторинг старого проходили без страха что-то сломать, тесты должны быть поддерживаемыми и легко читаемыми. В этой статье я расскажу о множестве приёмов написания юнит- и интеграционных тестов на Java, собранных мной за несколько лет. Я буду опираться на современные технологии: JUnit5, AssertJ, Testcontainers, а также не обойду вниманием Kotlin. Некоторые советы покажутся вам очевидными, другие могут идти вразрез с тем, что вы читали в книгах о разработке ПО и тестировании.
Читать дальше →

Как встроить голосового помощника в любое мобильное приложение. Разбираем на примере Habitica

Время на прочтение7 мин
Количество просмотров9.8K
Вам не кажется, что многие мобильные приложения стали бы куда удобнее, будь в них голосовое управление? Нет, речь не о том, чтобы вести беседы с банковским ассистентом в чате техподдержки. В основном было бы достаточно голосовой навигации по приложению или form-filling в режиме диалога.

На примере Habitica (опенсорсный app для закрепления привычек и достижения целей, написан на Kotlin) Виталя Горбачёв, архитектор решений в Just AI, показывает, как быстро и бесшовно встроить голосовой интерфейс в функционал любого приложения.


Читать дальше →

Архитектурный шаблон MVI в Kotlin Multiplatform. Часть 3: тестирование

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


Эта статья является заключительной в серии о применении архитектурного шаблона MVI в Kotlin Multiplatform. В предыдущих двух частях (часть 1 и часть 2) мы вспомнили, что такое MVI, создали общий модуль Kittens для загрузки изображений котиков и интегрировали его в iOS- и Android-приложения.

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

Обновлённый пример проекта доступен на нашем GitHub.

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

Как мы в 2020 году изобретали процесс разработки, отладки и доставки в прод изменений базы данных

Время на прочтение10 мин
Количество просмотров15K
На дворе 2020 год и фоновым шумом вы уже привыкли слышать: «Кубернетес — это ответ!», «Микросервисы!», «Сервис меш!», «Сесурити полиси!». Все вокруг бегут в светлое будущее.

Подходы в том, что касается баз данных, в нашей компании более консервативны, чем в прикладных приложениях. Крутится база данных у нас не в кубернетесе, а на железе или в виртуалке. Для изменений базы данных процессинга платежных сервисов у нас есть устоявшийся процесс, который включает в себя множество автоматических проверок, большое ревью и релиз с участием DBA. Количество проверок и привлекаемых людей в этом случае негативно влияет на time-to-market. С другой стороны, он отлажен и позволяет надежно вносить изменения в продакшен, минимизируя вероятность что-то сломать. А если что-то сломалось, то нужные люди уже включены в процесс починки. Этот подход делает работу основного сервиса компании стабильнее.

Большинство новых реляционных баз данных для микросервисов мы заводим на PostgreSQL. Отлаженный процесс для Oracle хоть и надёжный, но несет с собой избыточную сложность для маленьких БД. Тащить тяжёлые процессы из прошлого в светлое будущее никто не хочет. Проработкой процесса для светлого будущего заранее никто не занялся. В итоге получили отсутствие стандарта и разножопицу.



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

Опыт оптимизации вычислений через динамическую генерацию байт-кода JVM

Время на прочтение6 мин
Количество просмотров2.3K
В своем небольшом проекте по моделированию случайных величин я столкнулся с проблемой низкой производительности вычисления математических выражений, вводимых пользователем, и долго искал разные способы ее решения: попробовал написать интерпретатор на С++ в надежде, что он будет быстрым, сочинил свой байт-код. Наиболее удачной идеей оказалась генерация классов JVM и их загрузка во время выполнения.

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

KMath — это библиотека для математики и компьютерной алгебры, активно использующая контекстно-ориентированное программирование в Kotlin. В KMath разделены математические сущности (числа, векторы, матрицы) и операции над ними — они поставляются отдельным объектом, алгеброй, соответствующей типу операндов, Algebra<T>.

import scientifik.kmath.operations.*

ComplexField {
   (i pow 2) + Complex(1.0, 3.0)
}

Таким образом, после написания генератора байт-кода, с учетом оптимизаций JVM можно получить быстрые расчеты для любого математического объекта — достаточно определить операции над ними на Kotlin.
Читать дальше →

Алиса на Kotlin: превращаем код в Яндекс.Станцию

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

В июне Яндекс устроил онлайн-хакатон среди разработчиков голосовых навыков. Мы в Just AI как раз обновляли наш опенсорсный фреймворк на Kotlin, чтобы поддержать новые прикольные фичи Алисы. И нужно было придумать какой-то простенький пример для README…

О том, как пара сотен строк кода на Kotlin превратилась в Яндекс.Станцию
читайте в нашей новой статье

Композитная сборка как альтернатива buildSrc в Gradle

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


В Gradle — системе автоматической сборки — подход с buildSrc уже успел стать стандартом для реализации собственных плагинов и задач, а также создания общих конфигураций, например списков зависимостей и версий. Но у него есть существенный недостаток: при изменении buildSrc кеш сборки становится недействительным.


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

Читать дальше →

Трансформация Android-разработки с Jetpack Compose и Корутинами

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

Jetpack Compose — одна из наиболее обсуждаемых тем из серии видео про Android 11, заменивших собой Google IO. Многие ожидают от библиотеки, что она решит проблемы текущего UI-фреймворка Android, содержащего много легаси-кода и неоднозначных архитектурных решений. Другим не менее популярным фреймворком, о применении которого я расскажу в этой статье является Kotlin Coroutines, а конкретнее — входящий в него Flow API, который может помочь избежать оверинжиниринга при использовании RxJava.
Применение этих инструментов я покажу на примере небольшого приложения для контроля за употреблением кофе, написанного с использованием Jetpack Compose для UI и StateFlow как инструмента для управления состоянием. В нем также используется MVI-архитектура.


Читать дальше →

Сказ о том, как каскадное удаление в Realm долгий запуск победило

Время на прочтение11 мин
Количество просмотров5.9K
Все пользователи считают быстрый запуск и отзывчивый UI в мобильных приложениях само собой разумеющимся. Если приложение запускается долго, пользователь начинает грустить и злиться. Запросто можно подпортить клиентский опыт или вовсе потерять пользователя ещё до того, как он начал пользоваться приложением.

Однажды мы обнаружили, что приложение Додо Пицца запускается в среднем 3 секунды, а у некоторых «счастливчиков» 15-20 секунд.

Под катом история с хеппи эндом: про рост базы данных Realm, утечку памяти, то, как мы копили вложенные объекты, а после взяли себя в руки и всё починили.


Читать дальше →

Создание DSL для генерации изображений

Время на прочтение7 мин
Количество просмотров2K
Привет, Хабр! Считанные дни остаются до запуска нового курса от OTUS «Backend-разработка на Kotlin». В преддверии старта курса мы подготовили для вас перевод еще одного интересного материала.






Часто при решении задач, связанных с компьютерным зрением, недостаток данных становится большой проблемой. Это особенно актуально при работе с нейронными сетями.
Читать дальше →