Как стать автором
Обновить
150.91

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

Android, iOS, Windows Phone и прочие

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

Есть среди нас программисты?

Можете обновить модификацию Telegram: MDGram?

Мод очень полезный в плане дизайна, разработчики забросили дальнейшие обновления. Буду очень благодарен

Теги:
-4
Комментарии1

Как ускорить Android-разработку и избавиться от мучительно долгих запусков эмуляторов ради простого теста? 

Ответ — Robolectric — мощный инструмент для UI‑тестирования Android‑кода без эмулятора. 

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

В Android‑комьюнити у Robolectric неоднозначная репутация из‑за трудностей совместимости с другими библиотеками. Но…его почти бесценные возможности пробудили любопытство и желание копнуть глубже и осмыслить этот инструмент. 

Так и родилась статья «Мечтают ли андроиды о Robolectric? Разбираем фреймворк по косточкам» от Павла Нестеренко, нашего Android-разработчика.

Если вы устали ждать, пока эмулятор запустится, и хотите гонять юнит-тесты за секунды прямо в JVM, то рекомендуем статью к прочтению!

Теги:
0
Комментарии0

⚡️Вести с полей - Duit

Новый релиз - flutter_duit v3.6.0!

Что внутри:

⚙️ Новые виджеты: Offstage, AbsorbPointer, AnimatedCrossFade, AnimatedSlide, PhysicalModel, AnimatedPhysicalModel, CustomScrollView, SliverPadding, SliverFillRemaining, SliverToBoxAdapter, SliverFillViewport, SliverOpacity, SliverVisibility, SliverAnimatedOpacity, SliverSafeArea, SliverOffstage, SliverIgnorePointer, SliverList, SliverAppBar, FlexibleSpaceBar and SliverGrid (+21)

⚙️ Улучшен механизм передачи текущих значений анимации дочерним виджетам AnimatedBuilder

⚙️ Исправлен баг сепаратора в виджете ListView.separated, который не уничтожался правильно

⚙️ Значительно улучшено покрытие юнит-тестами критических участков кода (с 27% до 64%)

📖 Обновленная документация

Подробности о самом интересном:

⚡️Самое большое обновление виджетов! В этом важном релизе были добавлены сливеры - важная часть Flutter, без которой зачастую сложно реализовать высокоэффективные эффекты скролла.

🚀 Duit v4: производительность и простота. Анонсирую начало масштабных работ над мажорным обновлением проекта. Упрощение кодовой базы, решение проблем производительности, переосмысление дизайна DSL и надежная валидация входящих параметров - это лишь малая часть грядущего большого обновления!

Поддержать проект:
Кодом
Денежкой
TG канал DUIT

Теги:
0
Комментарии0

Что я узнал о создании социальной сети, три года работая над развитием такого проекта

Если у вас когда-нибудь возникнет желание запустить свою социальную сеть, то вот вам восемь фактов, о которых надо знать, прежде чем лезть в это дело.

Привет! Меня зовут Ник Дюба. Я бывший предприниматель и главный редактор соцсети ReLife. В этом посте расскажу о том, что я узнал за три года работы над развитием социальной сети.

Факт 1. Модерация в AppStore жёстко «футболят» русскоязычные приложения. Из-за них мы три раза двигали релиз, в итоге выкатили его с задержкой почти на 6 месяцев.

Факт 2. Параллельно с приложением лучше сразу запускать веб-версию. По итогу наш сайт с декабря 2023 по сегодняшний день привлек 80% органического трафика — за счет контент-маркетинга.

Факт 3. Наполнять соцсеть ботами — неизбежная мера. Мы создавали небольшое кол-во ботов (порядка 40) для повышения вовлеченности пользователей — писали от их имени статьи/посты, активничали в комментариях и так далее. Это была вынужденная мера, так как вовлеченность у органического трафика обычно на низком уровне: пользователь нашел нужную инфу, прочел статью/пост и ушёл. Даже не станет комментировать.

Проблему вовлеченности нам ещё удалось решить за счет «микроблога» — в этом разделе пользователи лучше взаимодействовали друг с другом и писали контента больше, чем в раздел со статьями.

Факт 4. Если вы регистрируете управляющую компанию в стране ЕС, а 80% вашей аудитории из России, то забудьте про деньги от рекламодателей, так как европейским компаниям ваш российский трафик нафиг не нужен, а с российскими вы работать не сможете.

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

Факт 6. Без комьюнити-менеджмента будете буксовать по метрикам вовлеченности. При чем комьюнити должны заниматься профессионалы. Для этого нужна отдельная команда. У нас этим занимались все, без какой либо стратегии. В итоге получалось так, как получалось — хреново.

Факт 7. Если вы знаете, что через 6 месяцев у вас закончатся ангельские инвестиции, начинайте искать инвестора под следующий раунд. Не тяните время. Мы протянули. В итоге остались без денег.

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

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

Считаю, что нам это удалось, так как даже сейчас основной органический трафик идет именно на эти статьи, а средний процент их дочитивания — порядка 80%.

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

Теги:
+1
Комментарии2

Процессор на RISC-V есть в Google Pixel 6. А когда в ноутбуках появится?

В 2024 году в продаже появились устройства с поддержкой векторного расширения RVV 1.0. RISE опубликовала гайд по оптимизации на RISC-V, провела адаптацию программных компонентов, запустила бонусную кампанию для разработчиков, портирующих на RISC-V. Canonical заявила, что с версии 25.10 ОС Ubuntu будут собирать под профиль RVA23. А Samsung продемонстрировала телевизор на RISC-V с Tizen.

Сейчас для RISC-V прорабатывают множество новых исследовательских идей и дальнейших расширений. Например, расширение формата команд до 48 и 64 бит, что в некоторых случаях поможет повысить эффективность архитектуры. За счет поддержки новых размеров констант, immediate-операндов и других нововведений в перспективе можно будет уменьшить размер кода. Развивается безопасность векторных расширений, а также расширенное профилирование для анализа сложных приложений, стеков и ПО.

Текущие наработки войдут в профиль RVA30, который, по всей видимости, станет следующим в развитии стандарта. На пути к этому большому обновлению увидит свет ABI для AOSP, а также платформы, определяющие дополнительные требования — например, в серверных сценариях.

Если выяснится, что в RVA23 не хватает каких-нибудь важных обязательных расширений, то придется выпускать новый major-профиль с ними раньше, чем хотелось бы. По пути к нему увидят свет и minor-профили: они содержат только опциональные расширения и не создают проблем с совместимостью.

На пятом митапе Российского Альянса RISC-V и YADRO эксперты в сфере RISC-V — Сергей Якушкин, Роман Хатько и Антон Афанасьев — обсудили успехи и перспективы RISC-V на рынке мобильных устройств в середине 2025 года.

Теги:
+3
Комментарии0

Часть 2: итоги недели разработки вайбкодинга с агентами

Прошлый пост тут

1️⃣ Текущий прогресс по xsoulspace.dev привел к тому, что обнаружил что есть закономерность какие именно модели хороши для использования в проектировании layout страницы (спойлер - не записал какие 🤦‍♂️ кажется использовал Claude 4.0 thinking + Gemini 2.5 Pro).

Что попробовал сделать : нарисовал простой wireframe image -> сконвертировал в ACSII art, и затем скормил LLM для более корректного восприятия layout.

Оказалось что так проще, но относительно (за счет убирания лишних элементов проще понять что где расположено), но с другой стороны LLM все так же тяжело воспринимать layout (если он чересчур кастомный).

2️⃣обновил все flutter библиотеки, last answer, word by word, budget app до flutter 3.8 - пользовался агентами в окошках. В некоторых случаях правил руками, но в большей части работал по принципу PDSA (Plan Do Study Act), где я разрабатывал план, а агент по нему шел, потому изучал результаты и т.д.
Вывод - нужно сильнее нарабатывать промпты.

3️⃣внезапно получил спам-рассылку-письмо с возможностью потестить on device API для того чтобы запускать модели. Чтобы потетстить решил запилить новое приложение для работы с промптами - действовал по принципу:

  1. Идея и этические принципы

  2. Палитра и дизайн система на основе идеи и принципов

  3. План работы

  4. Имплементация через агентов + доп ресерчи чтобы агенты понимали какую информацию брать.

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

Опыт: понял как создавать и работать с ролями (опишу в следующем посте про MVP), разобрался как запускать LLM на устройстве.
Недостатки: нужно более точно прописывать тех стак, особенно ключевые места, такие как - синхронизация данных, тип хранилища и т.д. И хорошо если изначально можно давать wireframes, или подгенеривать на основании дизайн системы.

Хотелось сделать нечто среднее между игрой и обычным интерфейсом, но пока не получилось.

4️⃣Создал детальный план и начал прорабатывать новую систему сохранения данных. Для меня это оказалось большой проблемой - потому что Hive, Isar на flutter перестали поддерживаться, а другие библиотеки неудобно использовать (где-то перешел на Sembast).

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

Поэтому решил объединить все идеи и написать одну библиотеку которая будет из коробки давать синхронизацию с гитом, github и папками. Так надеюсь удастся побороть проблему долговечности и надежности хранения данных.
Пока агенты имплементировали 4 этапа из 5 (основную логику провайдеров данных), и как итог - собрал отдельное тестовое приложение (todo), чтобы протестировать работу (отдельный скриншот), понять недостатки и как можно быстрее завершить библиотеку чтобы начать интеграцию во все проекты. Это важно, потому что при одновременной интеграции сразу будет понятно что работает, а что нет, и таким образом будет проще получать feedback и развивать библиотеку качественно.

Спасибо за ваше время и хорошего дня!

p.s.:

Бумаги которые claude нашел по теме и одновременно не по теме)

Теги:
0
Комментарии0

Нужно было объяснить зачем нужна роль для LLM и как ей пользоваться)

Можно представить что роль - это персонаж, у которого есть свои особые характеристики и свойства. То как мы пропишем персонажа влияет на то, как агент или llm будет себя вести (стиль ответа, его поведение, "характер"). В чатах обычно можно использовать с "act as [ROLE]"

Простое объяснение: https://www.youtube.com/shorts/rVlmbhwn0RM

Сложное объяснение: https://huggingface.co/learn/llm-course/chapter1/1

Теги:
0
Комментарии1

1500+ установок у нашего приложения в AppStore. 💪🏻

Примерно столько же и на Android.

90% - это органический трафик с ASO. Так мы получаем 20-30 установок в день бесплатно.

Что бы вы добавили в приложение, чтобы в него хотелось возвращаться? 🧐

Теги:
Всего голосов 2: ↑2 и ↓0+5
Комментарии0

Правда ли, что пользователи фанатеют по темному режиму? Проверяем в своем приложении

Много слышал о том, что темная тема ― это тренд и чуть ли не 100% пользователей на нее переедет.

Мы решили проверить, как обстоят дела с темной темой в нашем мобильном приложении системы управления проектами YouGile. Dark mode у нас просили еще с момента запуска мобильного приложения, темная тема входила в топ-10 запросов. Проверили ― оказалось, 40% регулярно использует dark mode. 

Так выглядит наше приложение YouGile в темной и светлой темах
Так выглядит наше приложение YouGile в темной и светлой темах

Похоже ли это на то, что светлая тема вообще не нужна? Видимо, нет. Пользователи из России предпочитают и то, и другое ― темную тему ставит 34% пользователей (данные 2023). Опрос Android Authority показывает, что dark mode предпочитает 81% респондентов, но опросу уже пять лет и выборка там менее 3 000 человек.

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

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

А вы на какой стороне?

Теги:
Рейтинг0
Комментарии12

Смотрите WWDC 2025 вместе с Surf и участвуйте в розыгрыше 🎧

Готовы к WWDC? Подключайтесь к нашей трансляции 9 июня в 20:00 по Москве. В прямом эфире мы вместе с сёрферами разберём главные анонсы и свежие решения Apple. Ожидается много интересного: от революционных обновлений iOS 26 и macOS 26 до новинок в мире ИИ-технологий от Apple.

Присоединяйтесь к нашему обсуждению. На стриме будут Head of Flutter Surf, Евгений Сатуров, и наши опытные iOS-разработчики — Кирилл и Антон. Они поделятся своим экспертным мнением о свежих решениях Apple. Будем активно общаться в чате, делиться впечатлениями и мнениями о презентации.

А чтобы было еще интереснее смотреть, мы разыграем на трансляции AirPods 4. Все подробности об этом здесь: https://surftech.timepad.ru/event/3397366/

Подключайтесь к стримам 9 июня. Запись сохраним:

  • VK Видео: vk.cc/cMuWI5

  • YouTube: vk.cc/cMuWJL

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

внезапно пришла идея - кажется витает в воздухе новый путь установки пакетов и вообще библиотек в приложения.

Начну как всегда из далека:
В последнее время, так как вместо человека теперь LLM чаще всего обращается к сайтам и приложениям, становится популярно добавлять специально написанные для llm страницы (как раньше sitemap, только теперь md файлы)

Это даже стало правилом для MCP серверов - например Cline добавляет только те MCP сервера, которые LLM может поставить в one shot или имеют llm-install.md файл.

По сути, кажется это становится файлом установки для llm - то есть, llm, следуя инструкциям этого файла ставит и конфигурирует MCP сервер на компьютере (прям как раньше, люди скачивали и устанавливали на windows).

Уязвимостей тут может быть много (потому что промпт может быть corrupt), но если следить за процессом и обязательно проверять команды исполнения - why not?

А теперь - представляете что можно сделать это для любого пакета и любого языка?

То есть, есть библиотека например для интеграции авторизации. Вместо того, чтобы разворачивать её вручную, автор библиотеки может написать llm-install и агент, имея контекст проекта в котором он работает, может целиком его развернуть!🙌
Креды например строго хранить в отдельном фале, не давать доступ (например использовать cursorignore etc..) и такие пакеты можно интегрировать как клиенту и бекенду!

И тоже самое можно применить и для удаления! И таким образом весь процесс интгерации станет больше как лего plug & play 🤩

Game changer?:)

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Huawei Watch 5 — первые часы на новой операционной системе HarmonyOS NEXT. Поддержки Android здесь нет: ни библиотек, ни инструментов, ни привычного ядра. Всё пришлось делать заново — и мы сделали. Теперь 2ГИС показывает маршруты прямо на часах Huawei Watch 5: от прогулки по району до поездки на метро.

Слева — навигация по пешеходному маршруту. Справа — подсказки по маршруту общественного транспорта
Слева — навигация по пешеходному маршруту. Справа — подсказки по маршруту общественного транспорта

Мы написали 2ГИС Компаньон с нуля на arkTS — это компилируемый диалект TypeScript, разработанный при участии Huawei. Забудьте про Java, JS, HTML и CSS — он заменил сразу несколько языков, которые раньше требовались для разработки на старых часах.

Работали параллельно с разработкой самой ОС, прошивок, IDE (DevEco Studio) и фреймворков. Всё было в бете — мы тестировали одними из первых. Stack Overflow и блоги молчали, а ИИ-помощники разводили руками. Так бывает, когда заходишь в проект на новом стеке. К счастью, команда Huawei были на связи. Мы давали обратную связь, задавали вопросы, а они быстро реагировали и помогали решать технические сложности. Вместе мы прошли путь от «ничего не работает» до полноценной навигации прямо на запястье.

Подробнее о том, что теперь умеет приложение на новых часах — в «Доставили».

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

Опыт использования Claude для написания готового приложения

Ну вот и я сподобился - написал приложение полностью на Claude.

Приложение на SwiftUI, не enterprise, но достаточно сложное, из категории Favorite.

Начал на Claude Sonnet 3.7, потом вышел 4, закончил на нем.

Всего 1156 строк кода и без ошибок!

Естественно было несколько итераций. Причём практически все - это уточнение промта.

Кода он наворотил много, по мне так можно было и проще. Но он уж развернулся по полной - структуры, классы, вью, перечисления, состояния, published, state и т.д. и т.п.

Как оно там внутри вертится крутится даже не смотрел. Главное - работает и этого достаточно.

В общем, впечатлён. Не ожидал. Предполагал, что будут ошибки, заторы, что придётся с ними разбираться. Ан нет, все зашло без глюков, с первого раза.

Теги:
Всего голосов 8: ↑1 и ↓7-4
Комментарии15

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

Летняя школа Surf: учим IT-профессиям на практике

>> Подробности и регистрация <<

Мы запускаем интенсивы в формате школы — онлайн-занятия, которые помогут разобраться, что такое работа в IT и с чего начать. Погрузиться вместе в IТ-профессии: мобильную и фронтенд-разработку, бизнес-анализ и тестирование ПО.

Для кого: для студентов, джунов и всех, кто хочет в IT, но не знает, с какой стороны подступиться

Зачем: чтобы получить крепкую базу по востребованным направлениям. Говорим про разработку, тестирование, бизнес-анализ — и, да, немного про AI тоже. Тем, кто проявит себя, предложим продолжить обучение уже внутри команды Surf.

Чему именно будем обучать:

QA — разберёмся, как искать баги и помогать делать продукты лучше.

BA — научим превращать идеи заказчика в понятные задачи для команды.

Разработка Android, iOS, Flutter (один код — несколько платформ), Frontend.

Можно приходить слушать все занятия и потом выбрать направление, которое откликнется.

Что ещё:

  • Никакой духоты и формальностей, объясняем по-человечески.

  • Примеры — с реальных проектов Surf.

  • Поощряем нейроэнтузиазм: покажем, как AI может помочь, и дадим применить это в заданиях.

  • Если нужно — оформим как учебную или производственную практику, с документами поможем.

Расписание, подробности и форма заявки — на сайте школы.

Если у тебя остались вопросы про школу, пиши нам на Хабре или в Telegram.

Теги:
Рейтинг0
Комментарии0

Магазину приложений RuStore исполнилось три года. Количество установок этого приложения на устройствах пользователей превысило 100 млн.

25 мая 2022 года VK при поддержке Минцифры запустила открытое бета‑тестирование отечественного магазина мобильных приложений для Android под названием RuStore.

В начале февраля 2023 года RuStore объявил о завершении этапа бета‑тестирования магазина приложений. Также создатели платформы перевели интерфейс консоли разработчика на английский язык для удобства иностранных издателей и партнёров.

В декабре 2024 года месячная аудитория магазина приложений RuStore составила 50 млн пользователей старше 12 лет по всей России, согласно исследованию Mediascope. Аудитория Xiaomi Mi Store составила 19 млн, Samsung Galaxy Store — 14 млн, HUAWEI AppGallery — 10 млн, рассказали Хабру в пресс‑службе RuStore. А в Минцифры заявили, что RuStore от VK обошёл по числу пользователей в России App Store от Apple.

В VK добавили, что в каталоге RuStore уже более 50 тысяч приложений, доступных на ОС Android, Harmony OS и «Аврора», от разработчиков из 40 стран мира. Также вышли версии RuStore для электронных книг и умных телевизоров, для проекторов, Hi‑Fi‑аудиоплееров, игровых консолей, кассовых терминалов, умных часов.

Теги:
Всего голосов 6: ↑2 и ↓40
Комментарии9

Почему мы разлюбили Isar

Isar — это NoSQL база данных, которую когда-то разработали создатели Hive. Про все плюсы этой БД мы уже писали. Однако однажды нашей Flutter-команде достался проект, который заставил их в корне изменить отношение к Isar и отказаться от этой технологии раз и навсегда.

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

Но специфика приложения накладывала на нас и вполне себе конкретные технические требования: оно должно было бесперебойно работать в офлайне — поля всё-таки бывают далековато от вышек мобильных операторов. Для реализации офлайн-режима как раз и был выбран Isar — это решение казалось удобным.

Как же мы ошибались! Так как у приложения был офлайн-режим, на старте оно загружало большие объемы данных, среди которых, например, было гигантского видео. И это создавало проблемы. В приложении добавлялись новые справочники, но документации на миграцию в Isar не было. К тому же на Android 32-ой архитектуры в базе вылезли баги.

Как исправить эти нюансы, мы не поняли. Писали письма разработчикам Isar, смотрели, что пишут об этом в сообществах. Но в итоге махнули рукой: решили всё переписать на SQL. Выбрали Drift, так как уже имели опыт работы с ним. Взяли уже готовый интерфейс и добавили его в приложение. Вскоре поняли, что Drift отвечает нашим запросам. Isar же использовать в проектах больше не планируем.

Кстати, этот проект в целом оказался судьбоносным для нашей команды Flutter. Какие еще уроки они вынесли после работы над приложением — в отдельной статье.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Google I/O 2025: два вечера главных анонсов вместе с Surf

20 и 21 мая — подключайся к нашим стримам по Google I/O. Будем вместе следить за анонсами новинок, делиться первыми впечатлениями и обсуждать всё самое интересное из мира технологий и разработки в прямом эфире.

Смотрим и комментируем:

  • 20 мая (вторник)
    → 20:00 — Google Keynote: все главные анонсы и будущее технологий от Google.

  • 21 мая (среда)
    → 20:00 — What’s new in Android development tools: новинки для Android-разработчиков.
    → 21:00 — What’s new in Flutter: свежие обновления для Flutter-сообщества.

Время указано по Москве. Позже добавим сюда наших спикеров и персональные ссылки на трансляции.

Залетай на эфиры в нашу группу ВКонтакте, чтобы обсудить новинки и пообщаться с разработчиками. Запись сохраним.

Теги:
Рейтинг0
Комментарии0

В прошлом году усиленно начал пользоваться AI (LLM) тулами и словил жуткую волну грусти-печали после 5-6 месяцев использования. Для меня самым сложным стало не то, что код в целом может писать LLM, а осознание того, то в общем-то это и не так важно. Гораздо важнее появился абстрактный вопрос зачем его вообще писать если завтра всё может поменяться настолько быстро что глазом не моргнешь.

Погрустив и поболев буквально и походив по книжным магазинам наткнулся на интересную книгу - The Art of Excellent Products: Enchanting Customers with Premium Brand Experiences by Riccardo Illy. И эта книга попала настолько, что понял как разрешить (на текущий момент), моральную дилемму с AI кодом, когда ты сам не пишешь код, а его пишет AI - через этические принципы.

На мой взгляд этические принципы дают три возможности:

  1. Ограничения или фокус - зафиксировав принципы, можно фокусироваться только на том, что действительно важно и отбрасывать / deprioritize то, что не согласуется с этими принципами.

  2. Гибкость при принятии решений - зная ограничения и имея этический фокус, можно при необходимости быстрее принимать ответственные решения, но при этом не жертвовать тем, что этически важно для компании / продукта.

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

Поэтому с начала года я начал думать над принципами / ценностями / values и пытаться понять, какие подходят - и почему.

вышел из digital чтобы написать ручками в блокнотике:)
вышел из digital чтобы написать ручками в блокнотике:)

Для себя выделил три группы (пока что):
- Приложения, игры и персональные принципы.

Например для приложений пока пришел к такому списку:

  • Удобство

  • Простота

  • Безопасность

  • Долговечность

  • Полезность

Для игр (так как это хобби, немного другие принципы):

  • Полезность

  • Творчество

  • Развлечение

  • Вызов

На текущий момент (май), 5 месяц тестирования - и могу честно сказать что стало гораздо проще фокусироваться на проблеме и решении чем раньше. Уверен что с развитием AI многое ещё изменится - но как будто это может стать мостиком для работы с ним с морально - этической стороны (особенно когда нужно торговаться / выбирать между быстрее - качественнее).

Ещё завел телеграм канал - https://t.me/devethics, в который стал собирать ценности / принципы которые внезапно стал открывать у других людей и компаний (продуктовых, электронных) и т.д.. Пока назвал этика разработчика:)

Надеюсь что пост чем нибудь вдохновит и окажется полезным :-)

Пожалуйста делитесь своими мыслями в комментариях:-) это поможет сделать эту статью видимой для других и будет здоровской поддержкой и мотивацией:-) 

Спасибо за ваше время и хорошего дня!

Антон

p.s.: надеюсь теги проставил правильно:)

Теги:
Всего голосов 4: ↑0 и ↓4-4
Комментарии6

Как работать с реактивным кодом в iOS на примере Combine

Пожалуй, каждый iOS-разработчик видел в требованиях вакансий «знание фреймворков RxSwift, RxCocoa». Эти инструменты основаны на концепции реактивного программирования.

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

Мы в Surf долгое время избегали «реактивщины» в приложениях. Во-первых, это лишние зависимости. Во-вторых, подобные библиотеки несут в себе не только преимущества, но и проблемы с дебагом, сложностью поддержки кода и так далее.

Однако с выходом Combine и SwiftUI, мы решили начать внедрять реактивный подход в наши приложения. Благо, теперь не нужны сторонние решения: хватит того, что предоставляет Apple. Давайте посмотрим, как можно работать с реактивным кодом.

Главные элементы Combine, с которыми происходит работа:

1) Publisher — издатель

Протокол, указывающий, что тип может передавать последовательность значений со временем. Publisher предоставляет данные только подписчику (Subscriber) и делает это, когда данные становятся доступны. Без подписки Publisher не активен.

Publisher описывается двумя ассоциированными типами: <Output, Failure>

  • Output — тип выдаваемых значений

  • Failure — тип возможной ошибки. Если ошибок быть не может, используется Never.

2) Subscriber — подписчик

Отвечает за запрос и получение данных от издателя, а также за обработку ошибок.
Имеет типы <Input, Failure>:

  • Input — тип входных данных

  • Failure — тип ошибки

Subscriber сам инициирует запрос и управляет объёмом поступающих данных. Основные способы обработки:

  • sink(receiveCompletion:receiveValue:)Принимает два замыкания: первое вызывается при завершении (успешно или с ошибкой); второе — при получении значений.

  • assign(to:on:)Присваивает полученные значения свойству объекта по keyPath.

3) Operators — операторы

Методы, преобразующие данные и потоки. Операторы — это промежуточное звено между издателем и подписчиком. С их помощью строятся цепочки обработки, трансформации и фильтрации данных.

4) Subjects — субъекты

Особый вид Publisher. Объекты, реализующие этот протокол, могут отправлять значения подписчикам через метод .send(_).

Subjects полезны для интеграции императивного кода: позволяют вручную вставлять значения в поток.

Управление подпиской

Publisher продолжает отправку до завершения или ошибки. Если подписка больше не нужна, её можно отменить с помощью метода cancel(). Все подписчики реализуют протокол Cancellable.

Пример использования Combine с URLSession

var cancellable = Set<AnyCancellable>()

func sendURLRequest(_ urlRequest: URLRequest) {
	URLSession.shared.dataTaskPublisher(for: urlRequest) // 1
    	.map(\.data) // 2
    	.decode(type: LocationModel.self, decoder: JSONDecoder()) // 3
    	.mapError { $0.toServerError() ?? .unidentifiedError } // 4
    	.receive(on: DispatchQueue.main) // 5
    	.sink { completion in // 6
        	print("finished stream with: \(completion)")
    	} receiveValue: { value in
        	print("receive value: \(value)")
    	}
    	.store(in: &cancellable) // 7
}

Что происходит:

  1. Создание Publisher — оборачивает загрузку данных по URL.

  2. map(.data) — извлекает Data из ответа.

  3. decode — преобразует Data в модель LocationModel.

  4. mapError — конвертирует ошибку в нужный формат.

  5. receive(on:) — переключает поток на нужную очередь.

  6. sink — обрабатывает завершение и полученные данные.

  7. store(in:) — сохраняет подписку, чтобы поток не завершился сразу.

Такой подход делает код более читаемым, управляемым и реактивным.

Больше про iOS-разработку — в нашем Telegram-канале Surf Mobile Team. Кейсы, лучшие практики, новости индустрии, анонсы наших мероприятий и вакансий.

Присоединяйтесь!

Теги:
Рейтинг0
Комментарии1

⚡️Вести с полей - Duit

Новый релиз flutter_duit v3.5.0!

Что внутри:

⚙️ Новые виджеты: AnimatedAlign, AnimatedRotation, AnimatedPadding, AnimatedPositioned, AnimatedScale

⚙️ Фикс работы колбека окончания анимации для implicitly animated widgets

⚙️ Добавлены отсуствующие свойства атрибутов для виджета ElevatedButton

⚙️ Добавлена обработка свойств TextDecoration при парсинге TextStyle

⚙️ Передача свойства body для виджета Scaffold теперь осуществляется через свойство child json-схемы, а не через атрибуты виджета

⚙️ Исправление ряда багов в DSL-пакетах

Подробности о самом интересном:

🔧 В рамках релиза удалось исправить ряд проблем с DSL, где отсутствовали реализации некоторых виджетов (например AnimatedSize в duit_go)

🛠 Улучшена стабильность фреймворка, увеличено покрытие важных участков кода тестами

Поддержать проект:
- Кодом
- Денежкой
- TG канал DUIT

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

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