Pull to refresh
57
0
Анна Жаркова @anioutka

Lead mobile developer в Usetech, Kotlin GDE

Send message

Room для Kotlin Multiplatform. Пробуем нативное решение

Level of difficultyMedium
Reading time6 min
Views7.4K

Всем привет! На связи Анна Жаркова, руководитель группы мобильной разработки в компании Usetech. В начале мая Google нас порадовали релизами нескольких библиотек для локальных хранилищ. Наконец, в приложения Kotlin Multiplatform можно полноценно использовать Room (версия 2.7.0-alpha01 и выше).
И сегодня мы опробуем работу с данной библиотекой на примере небольшого приложения Todo, написанного на KMP с использованием Compose Multiplatform.


Кроме Room, в проекте используется библиотека Lifecycle-viewmodel для KMP. И Koin для DI и гармонии.

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

ViewModel + Kotlin Multiplatform. Пробуем нативное решение

Level of difficultyMedium
Reading time9 min
Views9.6K


Всем привет! На связи Анна Жаркова, руководитель группы мобильной разработки в компании Usetech. Компания Google объявили о своем интересе к Koltin Multiplatform на прошлом Google I/O 2023. Следом был обозначен вектор развития имеющихся решений архитектурных библиотек Jetpack для поддержки KMP. Буквально считанные часы назад компания Google опубликовали ожидаемую многими новинку, а именно ViewModels из библиотеки Lifecycle с поддержкой API Kotlin Multiplatform. И сейчас мы с вами проверим, насколько это удобно, что уже готово, а что нужно доработать.

Для начала освежим, с чем же мы работали до ViewModels из Lifecycle.

Сами по себе ViewModel как часть паттерна MVVM применительно к кросс-платформенным решениям идея не новая. Многие давно использовали собственную реализацию, совмещая также с платформенными архитектурами.
Читать дальше →

По граблям, по граблям. Пишем отзывчивый интерактивный виджет IOS 17

Level of difficultyMedium
Reading time9 min
Views3.1K
image

Всем привет! На связи Анна Жаркова, руководитель группы мобильной разработки в компании Usetech. В 2023 году на WWDC Apple представили много нового и интересного API, среди которого были долгожданные интерактивные виджеты, реагирующие с помощью механизма AppIntent на нажатия и запускающие логику без переключения в основное приложение. Однако, как показывает практика, не все так просто и красиво, как Apple показывают на демонстрационных сессиях, а от беты до релиза что-то в API обязательно ломается или внезапно меняется.

Поэтому сегодня мы поговорим, как с помощью Widget Kit iOS 17 и AppIntent сделать виджет не только интерактивным, но и рабочим и отзывчивым в моменте, и обойти подводные камушки, оставленные разработчиками API. Рассматривать будем на примере самописного приложения для заметок TODO.



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

Помимо обработки событий из самого виджета в таких приложениях также важно синхронизировать состояние между таргетами без потерь и задержек. Данные (наши тудушки и их состояние) мы сохраняем локально. Для этого используем инструмент для хранения данных SwiftData. Данный фреймворк также был представлен на WWDC 2023, и при его использовании в разных таргетах можно встретить тоже много подводных камней.
Читать дальше →

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

Reading time6 min
Views6.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.

Читать далее

GraphQL в мобильной разработке

Reading time8 min
Views5.5K
Всем привет! С вами Анна Жаркова, ведущий разработчик компании Usetech. Сегодня стартует моя серия статей, посвященная работе с технологией GraphQL при разработке мобильных приложений. Если вы интересуетесь применением необычных технологий в мобильной разработке, давно подумывали совместить Android/iOS с GraphQL или попробовать что-то для себя новое, то эти статьи окажутся для вас полезными.

Всего будет три статьи в которых я покажу, как сделать простое мобильное приложение под Android и iOS, имитирующее простую социальную сеть с лентой постов, которые можно не только писать, но и редактировать и удалять, а также лайкать. Еще мы добавим регистрацию и авторизацию.
Читать дальше →

Kotlin Symbol Processing. Работаем с аннотациями по-новому

Reading time9 min
Views10K

Всем доброго дня! С вами Анна Жаркова, ведущий мобильный разработчик компании Usetech. В феврале 2021 года компания Google анонсировали экспериментальный релиз технологии Kotlin Symbol Processing (совместима с Kotlin с 1.4.30), как более эффективную альтернативу KAPT (Kotlin Annotation Processing Tool). Она сразу привлекла внимание многих разработчиков, помышляющих о внедрении аннотаций в мультиплатформенные проекты, несмотря на рекомендации создателей не использовать ее в продакте. В сентябре вышел первый стабильный релиз, и теперь она официальна готова к работе в боевых проектах. В этой статье предлагаю рассмотреть нюансы работы с KSP как в приложениях для Android, так и Kotlin Multiplatform.

Итак, начнем с назначения. Kotlin Symbol Processing предназначена для разработки легковесных плагинов компиляции Kotlin и процессоров аннотаций. Последние нас и интересуют. По сути аннотации нужны в приложении для того, чтобы упростить работу и избавить нас от лишнего кода. Например, когда нам нужно проанализировать код для определенной цели и затем сделать какие-то действия. Либо убрать лишнюю абстракцию из приложения. Гораздо привлекательнее выглядит добавить буквально 1 команду над конкретным объектом/методом/типов, и вместо того, чтобы писать тонны бойлерплейта для каждого случая, поручить это библиотеке, которая сделает все сама.

Давайте посмотрим, как работает в своей механике процессор аннотаций. Например, такой, как мы используем в Java коде.

Читать далее

Как мы сделали миграцию пользовательских данных с нативного приложения на Flutter

Reading time6 min
Views4.6K
Всем привет! Меня зовут Дмитрий Андриянов, я Flutter-разработчик в Surf.

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


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

Model-Widget-WidgetModel, или какой архитектурой пользуется Flutter-команда в Surf

Reading time9 min
Views9.5K

Привет, меня зовут Артём. Я руководитель Flutter-разработки в Surf и со-ведущий FlutterDev подкаста.


Flutter-отделу в Surf уже больше года. За это время мы сделали несколько проектов: от маленьких служебных, до полноценных е-коммерс и банкинга. Как минимум, многие из вас уже могли видеть приложение аптеки «Ригла». В статье я расскажу про недавно вышедший пакет mwwm — архитектуру, на которой построены все наши проекты.


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

Архитектурный шаблон MVI в Kotlin Multiplatform, часть 2

Reading time10 min
Views5.7K


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

Задача этого модуля — загружать ссылки на изображения из Сети и связывать бизнес-логику с пользовательским интерфейсом, представленным в виде Kotlin-интерфейса, который должен быть реализован нативно на каждой платформе. Именно этим мы и займёмся в этой статье.

Мы будем реализовывать специфичные для платформы части общего модуля и интегрировать их в iOS- и Android-приложения. Как и прежде, я предполагаю, что читатель уже имеет базовые знания о Kotlin Multiplatform, поэтому не буду рассказывать о конфигурациях проектов и других вещах, не связанных с MVI в Kotlin Multiplatform.

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

SwiftUI 2020. Что изменилось?

Reading time5 min
Views11K
Приветствую вас, жители Хабра и все интересующиеся разработкой под IOS. На связи Анна Жаркова, Senior iOS/Android разработчик компании Usetech
Сегодня мы поговорим о тех изменениях и новшествах, которые нам представляет Apple на WWDC 2020. А именно про доработанную и даже переработанную версию фреймворка SwiftUI.

Эта технология для декларативной разработки приложений была представлен в прошлом году на WWDC 2019. Если вы с ней еще не работали, то рекомендую заглянуть сюда

Итак. Apple и их инженеры внимательно весь этот год следили за обзорами, статьями, решениями и комментариями от разработчиков-энтузиастов. В конце видео «What's new in SwiftUI» они выражают благодарность всем неравнодушным за помощь.

Теперь SwiftUI позиционируется как полноценный инструмент для разработки под разные платформы (от watchOS до macOS):


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

STM32 и FreeRTOS. 2. Семафорим по-черному

Reading time7 min
Views68K
Часть первая, про потоки

В реальной жизни часто случается так, что некоторые события происходят с разной переодичностью (а могут и вообще не происходить). Скажем, заказ сока в «Макдональдсе», нажатие кнопки пользователем или заказ лыж в прокате. А наш могучий микроконтроллер должен все это обрабатывать. Но как это сделать наиболее удобно?

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

Как еще SETI думает искать внеземной разум

Reading time5 min
Views20K
image

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

Перед тем как мы начнем, я так же хочу отметить, что все написанное ниже лишь является моими собственными мыслями, и ни в коем случае не являются попыткой навязать свое мнение остальным. И пусть тебя, %username%, не смущает подобный топик на хабре, ибо всем нам интересен космос и все мы наслышаны о SETI — помните лихие 2000е когда мы ставили себе скринсейвер, который что-то там считал, и тем самым мы как бы вносили свой маленький вклад в одно большое дело?
Читать дальше →

Идея о книге с дополненной реальностью

Reading time1 min
Views32K

Добрый день


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

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

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

Если у кого хватит знаний и желания объединить эти технологии в одну буду только за, дарю идею для умелых рук.

Считаю идеи должны принадлежать всем.

LitRes.ru пытается «отжать» бизнес у авторов приложения «Читатель»

Reading time3 min
Views97K
imageПо следам новости "Google заблокировал приложение Moon+ Reader по жалобе LitRes".

Оказывается незадолго до описанных событий Литрес «влетел на бабки» и теперь усиленно ищет способы финансово на ком-нибудь отыграться. Суд взыскал с «ЛитРес» 1 млн рублей в пользу «Этногенеза».

Moon+ Reader было не единственным приложением, которое оказалось заблокировано по жалобе со стороны LitRes. Также в патовой ситуации оказались создатели программ CoolReader и «Читатель». С «Читателем» ситуация приняла и вовсе неожиданный оборот и теперь скорее напоминает банальный рейдерский захват. Litres отказывается отзывать жалобу на приложение, пока авторы его не превратят приложение в витрину Литреса или не передадут свою речевую технологию.

Процитирую из первых уст:
Текст открытого письма Егора Рябошлыка

LunarCraft или освоение недальних рубежей космоса Хабрасообществом

Reading time5 min
Views6.7K
<банальность> Недавно на хабре была статья habrahabr.ru/post/167391 </банальность> о хаброинициативе в области освоения космоса. Я поддался призыву “Поэтому сейчас предлагаю устроить «мозговой штурм»” © и делюсь своими соображениями по этому поводу.

Начну с названия — LunarCraft: предполагается, что проект русский поэтому луна, а не moon или selena (так же привет Гуглу [1]), Craft отсылает нас к minecraf — каким образом,
читайте под катом

Солнечные затмения с расстояния 36 тыс. км или почему мы об их космосе знаем больше чем о нашем

Reading time5 min
Views173K
Я выбирал заголовок для этого текста из двух вариантов, но потом решил объединить. Многие уже привыкли, что я пишу о Curiosity или, в крайнем случае, о каком-нибудь достижении NASA. Сегодня я отойду от традиции, и поговорим о наболевшем родном — о русском исследовательском космосе. Нет, я не о том, что воруют и ничего не летает. Наоборот, кое-что летает, даже есть чем гордиться, хоть и не так много как хотелось бы. Я о чертовски бестолковой и зачастую провальной работе отделов по связям с общественностью нашей космической науки.
image
Читать дальше →

Cуперкомпьютер за 1 млрд евро: симуляция мозга человека

Reading time3 min
Views226K


Еврокомиссия одобрила финансирование самого крупного и амбициозного проекта по симуляции человеческого мозга. Проект Human Brain Project объединит усилия европейских учёных на 2013-2023 гг и предварительно оценивается в 1,19 млрд евро.
Читать дальше →

Microsoft взяла на работу дизайнера, создавшего футуристический бренд

Reading time1 min
Views136K


Дизайнер Эндрю Ким (Andrew Kim) наделал много шуму летом 2012 года, когда создал свой вариант брендинга для Microsoft. Бренд The Next Microsoft основан на научной фантастике, футуристическом развитии человеческого вида и освоении космоса.

Несколько дней назад Эндрю Ким написал в своём блоге, что после шести месяцев переговоров компания Microsoft взяла его на работу, в подразделение Xbox. Эндрю приступит к работе после окончания учёбы в университете, летом 2013 года.
Читать дальше →

Искусственный разум – принципиальная схема

Reading time22 min
Views37K
image

В одном из предыдущих постов я доказывал, что создать искусственный разум (ИР) невозможно (здесь). Не отказываясь от прежнего мнения, хочу тем не менее рассмотреть вопрос о принципах работы того, что невозможно создать. По какому пути пойти человечеству, чтобы обмануть пускай не природу, но хотя бы самого себя – посчитать, что проблема создания ИР благополучно разрешена? На мой взгляд, по этому.
Оговорюсь, что все высказываемое ниже:
а) МНЕНИЕ,
б) мнение ЧАСТНОЕ,
в) частное мнение ДИЛЕТАНТА (специалиста в иной области, вышедшего на проблему ИР в ходе решения своих узкопрофессиональных задач).

О заставке: из мозга высовываются, наряду с механическими приспособлениями, не половые члены носорога, как вы могли подумать, а глаза улитки. Они символизируют сенсоры, которыми обладает ИР.
Читать дальше →
1
23 ...

Information

Rating
6,160-th
Location
Барнаул, Алтайский край, Россия
Works in
Date of birth
Registered
Activity

Specialization

Mobile Application Developer, Software Architect
Lead