Как стать автором
Обновить
51
28
Анна Жаркова @anioutka

Lead mobile developer в Usetech, Kotlin GDE

Отправить сообщение

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

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 5.1K


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

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

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

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

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 2.5K
image

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

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



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

Помимо обработки событий из самого виджета в таких приложениях также важно синхронизировать состояние между таргетами без потерь и задержек. Данные (наши тудушки и их состояние) мы сохраняем локально. Для этого используем инструмент для хранения данных SwiftData. Данный фреймворк также был представлен на WWDC 2023, и при его использовании в разных таргетах можно встретить тоже много подводных камней.
Читать дальше →
Всего голосов 12: ↑11 и ↓1 +10
Комментарии 4

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

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

Всем доброго времени суток! С вами Анна Жаркова, ведущий разработчик компании 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.

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

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

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

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

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

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

Всем доброго дня! С вами Анна Жаркова, ведущий мобильный разработчик компании 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 коде.

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

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

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

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


Читать дальше →
Всего голосов 15: ↑13 и ↓2 +11
Комментарии 0

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

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

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


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


Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 13

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

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


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

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

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

Обновлённый пример проекта доступен на нашем GitHub.
Читать дальше →
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 9

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

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

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

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

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


Читать дальше →
Всего голосов 19: ↑18 и ↓1 +17
Комментарии 11

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

Время на прочтение 7 мин
Количество просмотров 65K
Часть первая, про потоки

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

Читать дальше →
Всего голосов 25: ↑24 и ↓1 +23
Комментарии 5

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

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

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

Перед тем как мы начнем, я так же хочу отметить, что все написанное ниже лишь является моими собственными мыслями, и ни в коем случае не являются попыткой навязать свое мнение остальным. И пусть тебя, %username%, не смущает подобный топик на хабре, ибо всем нам интересен космос и все мы наслышаны о SETI — помните лихие 2000е когда мы ставили себе скринсейвер, который что-то там считал, и тем самым мы как бы вносили свой маленький вклад в одно большое дело?
Читать дальше →
Всего голосов 74: ↑57 и ↓17 +40
Комментарии 62

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

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

Добрый день


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

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

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

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

Считаю идеи должны принадлежать всем.
Всего голосов 82: ↑62 и ↓20 +42
Комментарии 48

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

Время на прочтение 3 мин
Количество просмотров 97K
imageПо следам новости "Google заблокировал приложение Moon+ Reader по жалобе LitRes".

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

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

Процитирую из первых уст:
Текст открытого письма Егора Рябошлыка
Всего голосов 276: ↑271 и ↓5 +266
Комментарии 307

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

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

Начну с названия — LunarCraft: предполагается, что проект русский поэтому луна, а не moon или selena (так же привет Гуглу [1]), Craft отсылает нас к minecraf — каким образом,
читайте под катом
Всего голосов 15: ↑9 и ↓6 +3
Комментарии 10

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

Время на прочтение 5 мин
Количество просмотров 173K
Я выбирал заголовок для этого текста из двух вариантов, но потом решил объединить. Многие уже привыкли, что я пишу о Curiosity или, в крайнем случае, о каком-нибудь достижении NASA. Сегодня я отойду от традиции, и поговорим о наболевшем родном — о русском исследовательском космосе. Нет, я не о том, что воруют и ничего не летает. Наоборот, кое-что летает, даже есть чем гордиться, хоть и не так много как хотелось бы. Я о чертовски бестолковой и зачастую провальной работе отделов по связям с общественностью нашей космической науки.
image
Читать дальше →
Всего голосов 397: ↑394 и ↓3 +391
Комментарии 95

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

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


Еврокомиссия одобрила финансирование самого крупного и амбициозного проекта по симуляции человеческого мозга. Проект Human Brain Project объединит усилия европейских учёных на 2013-2023 гг и предварительно оценивается в 1,19 млрд евро.
Читать дальше →
Всего голосов 138: ↑128 и ↓10 +118
Комментарии 240

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

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


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

Несколько дней назад Эндрю Ким написал в своём блоге, что после шести месяцев переговоров компания Microsoft взяла его на работу, в подразделение Xbox. Эндрю приступит к работе после окончания учёбы в университете, летом 2013 года.
Читать дальше →
Всего голосов 160: ↑129 и ↓31 +98
Комментарии 90

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

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

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

О заставке: из мозга высовываются, наряду с механическими приспособлениями, не половые члены носорога, как вы могли подумать, а глаза улитки. Они символизируют сенсоры, которыми обладает ИР.
Читать дальше →
Всего голосов 34: ↑17 и ↓17 0
Комментарии 63

Я подарю вам телефон

Время на прочтение 3 мин
Количество просмотров 20K
На самом деле, я ничего не буду вам дарить.
Точнее, я просто подарю Вам пару идей. Воплощение оных я оставлю за вами, все права на нее оставляю вам. Все что хотелось бы только – это увидеть свой никнейм или имя где-нибудь в закоулках автора, но это не обязательно.

Предыстория


Я часто продумываю несколько вещей, которые я хотел бы увидеть и использовать на своем веку.
Я считаю данные идеи вполне собранными, удобными и, в чем-то, прекрасными.

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

И да, в любом случае – ОС не важна.
Читать дальше →
Всего голосов 55: ↑6 и ↓49 -43
Комментарии 49

Информация

В рейтинге
176-я
Откуда
Барнаул, Алтайский край, Россия
Работает в
Дата рождения
Зарегистрирована
Активность

Специализация

Mobile Application Developer, Software Architect
Lead