home.social

#мобильная_разработка — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #мобильная_разработка, aggregated by home.social.

  1. Книга: «System Design. Проектирование мобильных систем. Подготовка к сложному интервью»

    Привет, Хаброжители! Что вас ждет на интервью по проектированию мобильных систем (MSD)? Что делать, если вас попросят разработать новый YouTube или телеграм? Практическое руководство MSD превращает сложные собеседования в предсказуемый процесс. Вы получаете 5-шаговую схему эффективного прохождения интервью и разбор 7 реальных кейсов (лента новостей, мессенджер, YouTube, Google Drive, трейдинговая платформа и др.), позволяющих проектировать архитектуру клиента, API, офлайн-режим, кэширование и масштабируемость. Здесь вы найдете готовые шаблоны, trade-off’ы и шпаргалки — всё, чтобы уверенно проходить интервью в топ-компаниях и расти от мидла до стафф+.

    habr.com/ru/companies/piter/ar

    #system_design #сюй #мобильная_разработка #вебразработка #котлин #kotlin

  2. iPad как инструмент разработчика в эпоху агентного программирования

    Ещё несколько лет назад разговоры об iPad как полноценном инструменте разработчика воспринимались скептически. Машинка для Netflix, блокнот для набросков, планшет для презентаций — но только не рабочая среда для написания и деплоя кода. У этого скептицизма были основания: iPadOS долго не имела нормальной многозадачности, инструментов для работы с серверами почти не существовало, а необходимость постоянно переключаться между приложениями делала любой серьёзный рабочий процесс мучительным. Сегодня картина изменилась кардинально, и сразу по двум причинам, которые усиливают друг друга.

    habr.com/ru/articles/1039526/

    #iPad #iPadOS #SSH #Git #DevOps #iOS_разработка #агентный_ИИ #Claude_Code #мобильная_разработка #Stage_Manager

  3. iPad как инструмент разработчика в эпоху агентного программирования

    Ещё несколько лет назад разговоры об iPad как полноценном инструменте разработчика воспринимались скептически. Машинка для Netflix, блокнот для набросков, планшет для презентаций — но только не рабочая среда для написания и деплоя кода. У этого скептицизма были основания: iPadOS долго не имела нормальной многозадачности, инструментов для работы с серверами почти не существовало, а необходимость постоянно переключаться между приложениями делала любой серьёзный рабочий процесс мучительным. Сегодня картина изменилась кардинально, и сразу по двум причинам, которые усиливают друг друга.

    habr.com/ru/articles/1039526/

    #iPad #iPadOS #SSH #Git #DevOps #iOS_разработка #агентный_ИИ #Claude_Code #мобильная_разработка #Stage_Manager

  4. iPad как инструмент разработчика в эпоху агентного программирования

    Ещё несколько лет назад разговоры об iPad как полноценном инструменте разработчика воспринимались скептически. Машинка для Netflix, блокнот для набросков, планшет для презентаций — но только не рабочая среда для написания и деплоя кода. У этого скептицизма были основания: iPadOS долго не имела нормальной многозадачности, инструментов для работы с серверами почти не существовало, а необходимость постоянно переключаться между приложениями делала любой серьёзный рабочий процесс мучительным. Сегодня картина изменилась кардинально, и сразу по двум причинам, которые усиливают друг друга.

    habr.com/ru/articles/1039526/

    #iPad #iPadOS #SSH #Git #DevOps #iOS_разработка #агентный_ИИ #Claude_Code #мобильная_разработка #Stage_Manager

  5. iPad как инструмент разработчика в эпоху агентного программирования

    Ещё несколько лет назад разговоры об iPad как полноценном инструменте разработчика воспринимались скептически. Машинка для Netflix, блокнот для набросков, планшет для презентаций — но только не рабочая среда для написания и деплоя кода. У этого скептицизма были основания: iPadOS долго не имела нормальной многозадачности, инструментов для работы с серверами почти не существовало, а необходимость постоянно переключаться между приложениями делала любой серьёзный рабочий процесс мучительным. Сегодня картина изменилась кардинально, и сразу по двум причинам, которые усиливают друг друга.

    habr.com/ru/articles/1039526/

    #iPad #iPadOS #SSH #Git #DevOps #iOS_разработка #агентный_ИИ #Claude_Code #мобильная_разработка #Stage_Manager

  6. Про BDUI грабли на примере простого опросника, который не так прост, как кажется

    Однажды у нас появилась задача, которая (на первый взгляд) выглядела очень простой: сделать опросник в приложении. На макетах всего лишь пара экранов, несколько вопросов, кнопка «Далее». Всё красиво, не сухо, с картинками у вариантов ответа и нормальной подачей, а не в формате «Заполните обязательные поля» Судя по макету всё просто: сверстать флоу и отправить все ответы одним POST в конце. Самый короткий путь — зашить вопросы, переходы и тексты на клиенте. Делов на пару дней — сделал и забыл. Но если опросник перестаёт быть одноразовой анкетой, а становится частью живого продукта, начинается веселье: сегодня нужно поменять текст, завтра - картинку, потом - порядок вопросов, потом - ветвление, потом - похожий сценарий для другой группы пользователей. Каждая правка текста, картинки, порядка вопросов или маршрута снова уезжает в релизный цикл web, iOS и Android. А синхронизировать такие изменения между тремя платформами намного сложнее, чем кажется на старте. По некоторым косвенным признакам мы понимали, что с этой анкетой всё будет именно так, поэтому в качестве альтернативы мы выбрали путь backend-driven UI, когда клиент показывает поддерживаемые типы экранов, а backend управляет сценарием: текстами, изображениями, порядком шагов, переходами и состоянием прохождения. Ниже расскажу почему мы пошли в backend-driven подход, где он действительно помог, а где показал явные ограничения и мог выбить нас из сроков.

    habr.com/ru/companies/alfa/art

    #bdui #мобильная_разработка #системный_анализ #backendразработка

  7. Переезд с XML на Jetpack Compose на проде: базовые классы, архитектура, сложности и готовые решения

    Меня зовут Родион, и я уже около 2,5 лет работаю в VK Android-разработчиком в крупном многомодульном проекте с сотнями экранов и довольно большой аудиторией. Когда я попал на проект, стек был классическим и проверенным: XML-вёрстка, навигация через Cicerone, Dagger 2 для DI, Coroutines и Flow для асинхронщины, а в качестве архитектурного паттерна — MVVM. Рано или поздно любая растущая кодовая база упирается в потолок своих архитектурных решений. У нас этот момент настал, когда количество экранов выросло до нескольких сотен и команда начала тратить больше времени на борьбу с неконсистентным состоянием UI. Классическая связка XML + ViewBinding + MVVM работала, но с каждым новым экраном мы всё острее чувствовали её ограничения: разрозненные StateFlow, дублирование кода во фрагментах, сложность переиспользования компонентов. Нужно было что-то менять — пересмотреть сам подход к построению UI. Так мы начали миграцию на Jetpack Compose (который на момент начала перехода уже был стабильным и самодостаточным). Полтора года спустя, пройдя через рефакторинг базовых классов, переход с MVVM на MVI и постепенную замену содержимого всех фрагментов, мы получили стек, на котором разработка ускорилась, а баги, связанные с состоянием экрана, практически исчезли. Полный переход на Jetpack Compose мы разделили на три больших этапа: - переписываем содержимое всех фрагментов на ComposeView; - переходим с Dagger2 на Koin; - меняем навигацию с Cicerone на Compose-навигацию. О втором и третьем этапах кратко расскажу ниже — в главе стратегии перехода, а на первом этапе остановлюсь подробнее. В этой статье не будет разбора плюсов и минусов Jetpack Compose, скорее она будет полезна тем, кто уже знаком с технологией, хочет её использовать, но боится нести в проект. Я расскажу, как мы шаг за шагом выполняли первый этап, и к чему в итоге пришли.

    habr.com/ru/companies/vk/artic

    #android #jetpackcompose #мобильная_разработка #архитекура_приложений #kotlin #mvvm #mvi

  8. [Перевод] Flutter 3.44 Конец эпохи CocoaPods и начало расцвета Swift Package Manager

    Экосистема Flutter совершила один из самых значительных скачков вперед. С выходом Flutter 3.44 команда официально сделала Swift Package Manager (SwiftPM) менеджером зависимостей по умолчанию для iOS и macOS, ознаменовав начало конца эпохи CocoaPods. Но это еще не все. Этот релиз также знаменует собой серьезный архитектурный сдвиг в том, как поставляются виджеты Material и Cupertino. Давайте углубимся в детали.

    habr.com/ru/articles/1036834/

    #flutter #dart #android #ios #material #cupertino #мобильная_разработка #кроссплатформенность #кроссплатформенное_программирование #кроссплатформенная_разработка

  9. [Перевод] Flutter 3.44 Конец эпохи CocoaPods и начало расцвета Swift Package Manager

    Экосистема Flutter совершила один из самых значительных скачков вперед. С выходом Flutter 3.44 команда официально сделала Swift Package Manager (SwiftPM) менеджером зависимостей по умолчанию для iOS и macOS, ознаменовав начало конца эпохи CocoaPods. Но это еще не все. Этот релиз также знаменует собой серьезный архитектурный сдвиг в том, как поставляются виджеты Material и Cupertino. Давайте углубимся в детали.

    habr.com/ru/articles/1036834/

    #flutter #dart #android #ios #material #cupertino #мобильная_разработка #кроссплатформенность #кроссплатформенное_программирование #кроссплатформенная_разработка

  10. [Перевод] Flutter 3.44 Конец эпохи CocoaPods и начало расцвета Swift Package Manager

    Экосистема Flutter совершила один из самых значительных скачков вперед. С выходом Flutter 3.44 команда официально сделала Swift Package Manager (SwiftPM) менеджером зависимостей по умолчанию для iOS и macOS, ознаменовав начало конца эпохи CocoaPods. Но это еще не все. Этот релиз также знаменует собой серьезный архитектурный сдвиг в том, как поставляются виджеты Material и Cupertino. Давайте углубимся в детали.

    habr.com/ru/articles/1036834/

    #flutter #dart #android #ios #material #cupertino #мобильная_разработка #кроссплатформенность #кроссплатформенное_программирование #кроссплатформенная_разработка

  11. [Перевод] Flutter 3.44 Конец эпохи CocoaPods и начало расцвета Swift Package Manager

    Экосистема Flutter совершила один из самых значительных скачков вперед. С выходом Flutter 3.44 команда официально сделала Swift Package Manager (SwiftPM) менеджером зависимостей по умолчанию для iOS и macOS, ознаменовав начало конца эпохи CocoaPods. Но это еще не все. Этот релиз также знаменует собой серьезный архитектурный сдвиг в том, как поставляются виджеты Material и Cupertino. Давайте углубимся в детали.

    habr.com/ru/articles/1036834/

    #flutter #dart #android #ios #material #cupertino #мобильная_разработка #кроссплатформенность #кроссплатформенное_программирование #кроссплатформенная_разработка

  12. Не только смартфоны: 5 сфер, где нужны мобильные разработчики

    Хабр, привет! Меня зовут Борис Денисенко. Я мобильный разработчик и наставник на курсе

    habr.com/ru/companies/yandex_p

    #android #мобильная_разработка #android_development #android_разработка #android_разработчик #kotlin #kotlin_multiplatform #java #ios_development #ios_разработка

  13. Push-уведомления в мессенджере: production-грабли которых нет в туториалах

    Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.

    habr.com/ru/articles/1035992/

    #react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking

  14. Push-уведомления в мессенджере: production-грабли которых нет в туториалах

    Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.

    habr.com/ru/articles/1035992/

    #react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking

  15. Push-уведомления в мессенджере: production-грабли которых нет в туториалах

    Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.

    habr.com/ru/articles/1035992/

    #react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking

  16. Push-уведомления в мессенджере: production-грабли которых нет в туториалах

    Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.

    habr.com/ru/articles/1035992/

    #react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking

  17. Почему мало просто перейти на SwiftUI и Compose: заглядываем под капот перезапуска приложения Бургер Кинг

    Когда старый монолит начинает мешать процессам в разработке, первое, что обычно приходит в голову командам — это переезд на новый стек. Логика понятна: сделаем новый UI, почистим код, а дальше и разработка пойдет бодрее. Чаще всего такое решение — очень дорогая иллюзия. Потому что в бигтехе проблема обычно не в UI, а в связности компонентов, зависимости фронта от бэка, сложных релизах и фичах, которые требуют синхронной работы команды. Мы — разработчики Surf, Android и iOS команды: Светлана Сорокина, Антон Бояркин и Алексей Рябков. Когда начали работать с Бургер Кинг над трансформацией приложения, столкнулись с похожей историей. Поэтому мы решили переписать архитектуру так, чтобы разные подрядчики могли нормально работать вместе, а продукт — развиваться быстрее.

    habr.com/ru/articles/1034430/

    #мобильная_разработка #мобильные_приложения #бигтех #бургер_кинг #фронтендразработка #разработка_под_android #разработка_под_ios #перезапуск #архитектура_приложений #процесс_разработки

  18. Почему мало просто перейти на SwiftUI и Compose: заглядываем под капот перезапуска приложения Бургер Кинг

    Когда старый монолит начинает мешать процессам в разработке, первое, что обычно приходит в голову командам — это переезд на новый стек. Логика понятна: сделаем новый UI, почистим код, а дальше и разработка пойдет бодрее. Чаще всего такое решение — очень дорогая иллюзия. Потому что в бигтехе проблема обычно не в UI, а в связности компонентов, зависимости фронта от бэка, сложных релизах и фичах, которые требуют синхронной работы команды. Мы — разработчики Surf, Android и iOS команды: Светлана Сорокина, Антон Бояркин и Алексей Рябков. Когда начали работать с Бургер Кинг над трансформацией приложения, столкнулись с похожей историей. Поэтому мы решили переписать архитектуру так, чтобы разные подрядчики могли нормально работать вместе, а продукт — развиваться быстрее.

    habr.com/ru/articles/1034430/

    #мобильная_разработка #мобильные_приложения #бигтех #бургер_кинг #фронтендразработка #разработка_под_android #разработка_под_ios #перезапуск #архитектура_приложений #процесс_разработки

  19. Почему мало просто перейти на SwiftUI и Compose: заглядываем под капот перезапуска приложения Бургер Кинг

    Когда старый монолит начинает мешать процессам в разработке, первое, что обычно приходит в голову командам — это переезд на новый стек. Логика понятна: сделаем новый UI, почистим код, а дальше и разработка пойдет бодрее. Чаще всего такое решение — очень дорогая иллюзия. Потому что в бигтехе проблема обычно не в UI, а в связности компонентов, зависимости фронта от бэка, сложных релизах и фичах, которые требуют синхронной работы команды. Мы — разработчики Surf, Android и iOS команды: Светлана Сорокина, Антон Бояркин и Алексей Рябков. Когда начали работать с Бургер Кинг над трансформацией приложения, столкнулись с похожей историей. Поэтому мы решили переписать архитектуру так, чтобы разные подрядчики могли нормально работать вместе, а продукт — развиваться быстрее.

    habr.com/ru/articles/1034430/

    #мобильная_разработка #мобильные_приложения #бигтех #бургер_кинг #фронтендразработка #разработка_под_android #разработка_под_ios #перезапуск #архитектура_приложений #процесс_разработки

  20. Почему мало просто перейти на SwiftUI и Compose: заглядываем под капот перезапуска приложения Бургер Кинг

    Когда старый монолит начинает мешать процессам в разработке, первое, что обычно приходит в голову командам — это переезд на новый стек. Логика понятна: сделаем новый UI, почистим код, а дальше и разработка пойдет бодрее. Чаще всего такое решение — очень дорогая иллюзия. Потому что в бигтехе проблема обычно не в UI, а в связности компонентов, зависимости фронта от бэка, сложных релизах и фичах, которые требуют синхронной работы команды. Мы — разработчики Surf, Android и iOS команды: Светлана Сорокина, Антон Бояркин и Алексей Рябков. Когда начали работать с Бургер Кинг над трансформацией приложения, столкнулись с похожей историей. Поэтому мы решили переписать архитектуру так, чтобы разные подрядчики могли нормально работать вместе, а продукт — развиваться быстрее.

    habr.com/ru/articles/1034430/

    #мобильная_разработка #мобильные_приложения #бигтех #бургер_кинг #фронтендразработка #разработка_под_android #разработка_под_ios #перезапуск #архитектура_приложений #процесс_разработки

  21. Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет

    Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.

    habr.com/ru/articles/1034690/

    #react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry

  22. Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет

    Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.

    habr.com/ru/articles/1034690/

    #react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry

  23. Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет

    Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.

    habr.com/ru/articles/1034690/

    #react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry

  24. Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет

    Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.

    habr.com/ru/articles/1034690/

    #react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry

  25. Как я сделал на Flutter игру для разработчиков

    Всем привет! Меня зовут Амир Утеуов — я ML-инженер из Авито . В этой статье поделюсь своей историей создания мобильной игры DevRush, пет-проекта, который перерос в игру на стенде IT-конференции CodeFest 2025. Однажды у меня под рукой оказался датасет из иконок различных фреймворков и языков программирования. Так я решил разработать приложение, где нужно как можно быстрее находить и выбирать иконки языков программирования среди случайных иконок. До этого я не занимался разработкой и публикацией мобильных игр и приложений, но решил пройти весь путь с нуля. Статью разделим на две части: в первой расскажу как создавал первую версию игры и с какими трудностями столкнулся, а во второй — как мы готовили игру к конференции.

    habr.com/ru/companies/avito/ar

    #flutter #gamedev #авито #мобильная_разработка #мобильные_игры #dart

  26. Как я сделал на Flutter игру для разработчиков

    Всем привет! Меня зовут Амир Утеуов — я ML-инженер из Авито . В этой статье поделюсь своей историей создания мобильной игры DevRush, пет-проекта, который перерос в игру на стенде IT-конференции CodeFest 2025. Однажды у меня под рукой оказался датасет из иконок различных фреймворков и языков программирования. Так я решил разработать приложение, где нужно как можно быстрее находить и выбирать иконки языков программирования среди случайных иконок. До этого я не занимался разработкой и публикацией мобильных игр и приложений, но решил пройти весь путь с нуля. Статью разделим на две части: в первой расскажу как создавал первую версию игры и с какими трудностями столкнулся, а во второй — как мы готовили игру к конференции.

    habr.com/ru/companies/avito/ar

    #flutter #gamedev #авито #мобильная_разработка #мобильные_игры #dart

  27. Как я сделал на Flutter игру для разработчиков

    Всем привет! Меня зовут Амир Утеуов — я ML-инженер из Авито . В этой статье поделюсь своей историей создания мобильной игры DevRush, пет-проекта, который перерос в игру на стенде IT-конференции CodeFest 2025. Однажды у меня под рукой оказался датасет из иконок различных фреймворков и языков программирования. Так я решил разработать приложение, где нужно как можно быстрее находить и выбирать иконки языков программирования среди случайных иконок. До этого я не занимался разработкой и публикацией мобильных игр и приложений, но решил пройти весь путь с нуля. Статью разделим на две части: в первой расскажу как создавал первую версию игры и с какими трудностями столкнулся, а во второй — как мы готовили игру к конференции.

    habr.com/ru/companies/avito/ar

    #flutter #gamedev #авито #мобильная_разработка #мобильные_игры #dart

  28. Как я сделал на Flutter игру для разработчиков

    Всем привет! Меня зовут Амир Утеуов — я ML-инженер из Авито . В этой статье поделюсь своей историей создания мобильной игры DevRush, пет-проекта, который перерос в игру на стенде IT-конференции CodeFest 2025. Однажды у меня под рукой оказался датасет из иконок различных фреймворков и языков программирования. Так я решил разработать приложение, где нужно как можно быстрее находить и выбирать иконки языков программирования среди случайных иконок. До этого я не занимался разработкой и публикацией мобильных игр и приложений, но решил пройти весь путь с нуля. Статью разделим на две части: в первой расскажу как создавал первую версию игры и с какими трудностями столкнулся, а во второй — как мы готовили игру к конференции.

    habr.com/ru/companies/avito/ar

    #flutter #gamedev #авито #мобильная_разработка #мобильные_игры #dart

  29. Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а

    Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.

    habr.com/ru/articles/1033930/

    #webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер

  30. Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а

    Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.

    habr.com/ru/articles/1033930/

    #webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер

  31. Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а

    Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.

    habr.com/ru/articles/1033930/

    #webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер

  32. Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а

    Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.

    habr.com/ru/articles/1033930/

    #webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер

  33. Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге

    Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.

    habr.com/ru/articles/1033502/

    #react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram

  34. Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге

    Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.

    habr.com/ru/articles/1033502/

    #react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram

  35. Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге

    Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.

    habr.com/ru/articles/1033502/

    #react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram

  36. Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге

    Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.

    habr.com/ru/articles/1033502/

    #react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram

  37. 200 OK по протоколу, но не OK для клиента: автоматизация контроля совместимости API и приложения

    Выпустить релиз — часы работы команды. Упасть на старте — 1 секунда. Узнать об этом не из отзывов пользователей — бесценно. Серверные тесты проходят, эндпоинт отвечает 200 OK, но мобильный клиент падает на первом же ответе API. Типичный сценарий: в user.id приходит null , у status появляется новое значение или меняется вложенная структура — и ответ API расходится с клиентскими моделями. Чтобы ловить такие расхождения до релиза, мы встроили в пайплайн контроль совместимости API и приложения. Этот слой решает две задачи: не даёт серверным изменениям ломать текущий клиент и проверяет совместимость предстоящего релиза с текущим бэкендом. При расхождении пайплайн останавливается на этапе проверки api, до build/archive/sign/publish. Я Алексей Матвеев, директор по мобильным технологиям в «Первой Форме». В статье расскажу, как мы задали архитектуру решения и делегировали ИИ рутинные задачи. В CI/CD мы проверяем ответы API по DTO и YAML-контрактам, а для сценариев изменения состояния сверяем «до/после». Итог сразу уходит в CI-лог и тред задачи.

    habr.com/ru/companies/1forma/a

    #мобильная_разработка #api_тестирование #cicd #devops #ai #llm #bpmсистемы #автоматизация #корпоративные_приложения

  38. 200 OK по протоколу, но не OK для клиента: автоматизация контроля совместимости API и приложения

    Выпустить релиз — часы работы команды. Упасть на старте — 1 секунда. Узнать об этом не из отзывов пользователей — бесценно. Серверные тесты проходят, эндпоинт отвечает 200 OK, но мобильный клиент падает на первом же ответе API. Типичный сценарий: в user.id приходит null , у status появляется новое значение или меняется вложенная структура — и ответ API расходится с клиентскими моделями. Чтобы ловить такие расхождения до релиза, мы встроили в пайплайн контроль совместимости API и приложения. Этот слой решает две задачи: не даёт серверным изменениям ломать текущий клиент и проверяет совместимость предстоящего релиза с текущим бэкендом. При расхождении пайплайн останавливается на этапе проверки api, до build/archive/sign/publish. Я Алексей Матвеев, директор по мобильным технологиям в «Первой Форме». В статье расскажу, как мы задали архитектуру решения и делегировали ИИ рутинные задачи. В CI/CD мы проверяем ответы API по DTO и YAML-контрактам, а для сценариев изменения состояния сверяем «до/после». Итог сразу уходит в CI-лог и тред задачи.

    habr.com/ru/companies/1forma/a

    #мобильная_разработка #api_тестирование #cicd #devops #ai #llm #bpmсистемы #автоматизация #корпоративные_приложения

  39. 200 OK по протоколу, но не OK для клиента: автоматизация контроля совместимости API и приложения

    Выпустить релиз — часы работы команды. Упасть на старте — 1 секунда. Узнать об этом не из отзывов пользователей — бесценно. Серверные тесты проходят, эндпоинт отвечает 200 OK, но мобильный клиент падает на первом же ответе API. Типичный сценарий: в user.id приходит null , у status появляется новое значение или меняется вложенная структура — и ответ API расходится с клиентскими моделями. Чтобы ловить такие расхождения до релиза, мы встроили в пайплайн контроль совместимости API и приложения. Этот слой решает две задачи: не даёт серверным изменениям ломать текущий клиент и проверяет совместимость предстоящего релиза с текущим бэкендом. При расхождении пайплайн останавливается на этапе проверки api, до build/archive/sign/publish. Я Алексей Матвеев, директор по мобильным технологиям в «Первой Форме». В статье расскажу, как мы задали архитектуру решения и делегировали ИИ рутинные задачи. В CI/CD мы проверяем ответы API по DTO и YAML-контрактам, а для сценариев изменения состояния сверяем «до/после». Итог сразу уходит в CI-лог и тред задачи.

    habr.com/ru/companies/1forma/a

    #мобильная_разработка #api_тестирование #cicd #devops #ai #llm #bpmсистемы #автоматизация #корпоративные_приложения

  40. 200 OK по протоколу, но не OK для клиента: автоматизация контроля совместимости API и приложения

    Выпустить релиз — часы работы команды. Упасть на старте — 1 секунда. Узнать об этом не из отзывов пользователей — бесценно. Серверные тесты проходят, эндпоинт отвечает 200 OK, но мобильный клиент падает на первом же ответе API. Типичный сценарий: в user.id приходит null , у status появляется новое значение или меняется вложенная структура — и ответ API расходится с клиентскими моделями. Чтобы ловить такие расхождения до релиза, мы встроили в пайплайн контроль совместимости API и приложения. Этот слой решает две задачи: не даёт серверным изменениям ломать текущий клиент и проверяет совместимость предстоящего релиза с текущим бэкендом. При расхождении пайплайн останавливается на этапе проверки api, до build/archive/sign/publish. Я Алексей Матвеев, директор по мобильным технологиям в «Первой Форме». В статье расскажу, как мы задали архитектуру решения и делегировали ИИ рутинные задачи. В CI/CD мы проверяем ответы API по DTO и YAML-контрактам, а для сценариев изменения состояния сверяем «до/после». Итог сразу уходит в CI-лог и тред задачи.

    habr.com/ru/companies/1forma/a

    #мобильная_разработка #api_тестирование #cicd #devops #ai #llm #bpmсистемы #автоматизация #корпоративные_приложения

  41. Simplphoto для iPhone объединяет ручную камеру, stop motion и коллажи

    Разработка iOS-приложения для ручной съёмки на iPhone: ISO, выдержка, фокус, RAW, stop motion и попытка ограничить вычислительную обработку снимков. Описываю принцип работы приложения.

    habr.com/ru/articles/1031606/

    #iOS #swift #мобильная_разработка #мобильная_разработка_ios #iPhone #камера #фотография #мобильное_приложение

  42. Simplphoto для iPhone объединяет ручную камеру, stop motion и коллажи

    Разработка iOS-приложения для ручной съёмки на iPhone: ISO, выдержка, фокус, RAW, stop motion и попытка ограничить вычислительную обработку снимков. Описываю принцип работы приложения.

    habr.com/ru/articles/1031606/

    #iOS #swift #мобильная_разработка #мобильная_разработка_ios #iPhone #камера #фотография #мобильное_приложение

  43. Simplphoto для iPhone объединяет ручную камеру, stop motion и коллажи

    Разработка iOS-приложения для ручной съёмки на iPhone: ISO, выдержка, фокус, RAW, stop motion и попытка ограничить вычислительную обработку снимков. Описываю принцип работы приложения.

    habr.com/ru/articles/1031606/

    #iOS #swift #мобильная_разработка #мобильная_разработка_ios #iPhone #камера #фотография #мобильное_приложение

  44. Simplphoto для iPhone объединяет ручную камеру, stop motion и коллажи

    Разработка iOS-приложения для ручной съёмки на iPhone: ISO, выдержка, фокус, RAW, stop motion и попытка ограничить вычислительную обработку снимков. Описываю принцип работы приложения.

    habr.com/ru/articles/1031606/

    #iOS #swift #мобильная_разработка #мобильная_разработка_ios #iPhone #камера #фотография #мобильное_приложение

  45. Вредные советы для Flutter-разработчика

    Назидательная статья, написанная в стихах и вдохновленная детскими книгами. Посвящается всем ошибкам, которые я совершал на работе — большим и маленьким.

    habr.com/ru/companies/agima/ar

    #flutter #мобильная_разработка #вредные_советы #стихи

  46. Вредные советы для Flutter-разработчика

    Назидательная статья, написанная в стихах и вдохновленная детскими книгами. Посвящается всем ошибкам, которые я совершал на работе — большим и маленьким.

    habr.com/ru/companies/agima/ar

    #flutter #мобильная_разработка #вредные_советы #стихи

  47. Вредные советы для Flutter-разработчика

    Назидательная статья, написанная в стихах и вдохновленная детскими книгами. Посвящается всем ошибкам, которые я совершал на работе — большим и маленьким.

    habr.com/ru/companies/agima/ar

    #flutter #мобильная_разработка #вредные_советы #стихи

  48. Вредные советы для Flutter-разработчика

    Назидательная статья, написанная в стихах и вдохновленная детскими книгами. Посвящается всем ошибкам, которые я совершал на работе — большим и маленьким.

    habr.com/ru/companies/agima/ar

    #flutter #мобильная_разработка #вредные_советы #стихи

  49. Пишем логический калькулятор, лёжа на диване: как Termux и Си заменяют IDE, когда лень вставать

    Говорят, для программирования на Си нужен стол, стул, мощный ПК и Linux. У меня другой стек: диван, планшет на Андроиде и Termux. Но иногда мой монитор помещается в карман — это смартфон. В этой статье я расскажу, как небольшая лень привела к созданию пяти версий логического калькулятора и почему мобильный кодинг — это не только боль, но и своеобразная свобода. Противостояние против индустрии Идея родилась внезапно. Захотелось проверить одну логическую схему, но вставать и идти к компьютеру было выше моих сил. Так началось моё «преступление» против канонов профессиональной разработки. Инструментарий Чтобы превратить диван в рабочее место, мне понадобился стандартный набор для Termux: <cut />

    habr.com/ru/articles/1027400/

    #C #Termux #Android #Программирование #Логика #Консоль #DIY #Мобильная_разработка

  50. Пишем логический калькулятор, лёжа на диване: как Termux и Си заменяют IDE, когда лень вставать

    Говорят, для программирования на Си нужен стол, стул, мощный ПК и Linux. У меня другой стек: диван, планшет на Андроиде и Termux. Но иногда мой монитор помещается в карман — это смартфон. В этой статье я расскажу, как небольшая лень привела к созданию пяти версий логического калькулятора и почему мобильный кодинг — это не только боль, но и своеобразная свобода. Противостояние против индустрии Идея родилась внезапно. Захотелось проверить одну логическую схему, но вставать и идти к компьютеру было выше моих сил. Так началось моё «преступление» против канонов профессиональной разработки. Инструментарий Чтобы превратить диван в рабочее место, мне понадобился стандартный набор для Termux: <cut />

    habr.com/ru/articles/1027400/

    #C #Termux #Android #Программирование #Логика #Консоль #DIY #Мобильная_разработка