Все, что я знаю о хорошем системном дизайне
Хороший системный дизайн — это простота и надежность, а не модные сложные схемы. Главное: такие системы незаметны — всё работает, и не требует постоянного вмешательства.
• Минимизируйте количество компонентов, особенно хранение состояния.
• Один сервис пишет в базу, остальные работают через API или события.
• Читайте с реплик, пишите — на мастер; индексация и грамотные запросы — ключ к скорости.
• Долгие операции — в фоновую очередь, быстрые — прямо пользователю.
• Кэшируйте только то, что невозможно оптимизировать другими способами.
• Не злоупотребляйте событиями — проще API-запрос.
• Фокус на “горячих путях” — самые критичные точки.
• Логи и метрики нужны всегда, особенно для ошибок и редких случаев.
• Учитывайте сбои: идемпотентность, ретраи, правильное поведение при падении.
Главное — стабильность и предсказуемость, а не “эффектные” архитектурные решения.
Статья: https://www.seangoedecke.com/good-system-design/
Платформа: разработка
Хороший системный дизайн — это простота и надежность, а не модные сложные схемы. Главное: такие системы незаметны — всё работает, и не требует постоянного вмешательства.
• Минимизируйте количество компонентов, особенно хранение состояния.
• Один сервис пишет в базу, остальные работают через API или события.
• Читайте с реплик, пишите — на мастер; индексация и грамотные запросы — ключ к скорости.
• Долгие операции — в фоновую очередь, быстрые — прямо пользователю.
• Кэшируйте только то, что невозможно оптимизировать другими способами.
• Не злоупотребляйте событиями — проще API-запрос.
• Фокус на “горячих путях” — самые критичные точки.
• Логи и метрики нужны всегда, особенно для ошибок и редких случаев.
• Учитывайте сбои: идемпотентность, ретраи, правильное поведение при падении.
Главное — стабильность и предсказуемость, а не “эффектные” архитектурные решения.
Статья: https://www.seangoedecke.com/good-system-design/
Платформа: разработка
Seangoedecke
Everything I know about good system design
I see a lot of bad system design advice. One classic is the LinkedIn-optimized “bet you never heard of queues” style of post, presumably aimed at people who are…
WordMasterKMP - клон Wordle на KMP
WordMasterKMP - приложение на Kotlin Multiplatform, вдохновлённое игрой Wordle, а также примерами Word Master и Wordle-solver. Основная логика/состояние игры включены в общий код KMP, а поверх этого реализованы клиенты для iOS (SwiftUI), Android (Jetpack Compose) и десктопов (Compose for Desktop).
WordMasterKMP на GitHub: https://github.com/joreilly/WordMasterKMP
Платформа: Android/кроссплатформа
⭐️: 78
WordMasterKMP - приложение на Kotlin Multiplatform, вдохновлённое игрой Wordle, а также примерами Word Master и Wordle-solver. Основная логика/состояние игры включены в общий код KMP, а поверх этого реализованы клиенты для iOS (SwiftUI), Android (Jetpack Compose) и десктопов (Compose for Desktop).
WordMasterKMP на GitHub: https://github.com/joreilly/WordMasterKMP
Платформа: Android/кроссплатформа
⭐️: 78
👍1
Интеграционное тестирование на Android: практическое руководство с Hilt, Compose и Room
В статье рассказывается о важности интеграционного тестирования для Android-приложений, которое часто недооценивают в пользу юнит-тестов. Автор приводит пример собственного проекта DogBreed App, чтобы показать, как интеграционные тесты позволяют убедиться, что вся архитектура приложения — экраны, ViewModel, репозитории и источники данных — корректно взаимодействуют между собой. Особое внимание уделяется способу реализации: приложение построено на Kotlin, Jetpack Compose и Hilt, с чистой архитектурой и делением на три слоя (UI, доменный и слой данных). Для интеграционного теста используются фейковые реализации сервисов и вспомогательная, база данных в памяти Room, что позволяет менять стандартные зависимости на тестовые внутрь DI-фреймворка — в примере через Hilt и аннотацию
Статья: https://proandroiddev.com/integration-testing-on-android-a-practical-guide-with-hilt-compose-room-73d49e243001
Платформа: Android
В статье рассказывается о важности интеграционного тестирования для Android-приложений, которое часто недооценивают в пользу юнит-тестов. Автор приводит пример собственного проекта DogBreed App, чтобы показать, как интеграционные тесты позволяют убедиться, что вся архитектура приложения — экраны, ViewModel, репозитории и источники данных — корректно взаимодействуют между собой. Особое внимание уделяется способу реализации: приложение построено на Kotlin, Jetpack Compose и Hilt, с чистой архитектурой и делением на три слоя (UI, доменный и слой данных). Для интеграционного теста используются фейковые реализации сервисов и вспомогательная, база данных в памяти Room, что позволяет менять стандартные зависимости на тестовые внутрь DI-фреймворка — в примере через Hilt и аннотацию
@TestInstallIn.Статья: https://proandroiddev.com/integration-testing-on-android-a-practical-guide-with-hilt-compose-room-73d49e243001
Платформа: Android
❤1👍1
Реализация продвинутого преобразования речи в текст в вашем приложении SwiftUI
Apple недавно внедрила функцию преобразования речи в текст во многие свои приложения, включая «Заметки» и «Диктофон», что отражает более широкий переход к голосовому вводу как основному методу. В связи с этим Apple выпустила новый SpeechAnalyzer API, использующий более быструю и эффективную модель, специально настроенную для обработки длинных аудиозаписей и речи отдаленных говорящих.
К концу этого руководства вы научитесь получать доступ к аудиобуферу микрофона, а затем предоставлять его новому классу SpeechAnalyzer для обработки и преобразования в текст.
Статья: https://www.createwithswift.com/implementing-advanced-speech-to-text-in-your-swiftui-app/
Платформа: iOS
Apple недавно внедрила функцию преобразования речи в текст во многие свои приложения, включая «Заметки» и «Диктофон», что отражает более широкий переход к голосовому вводу как основному методу. В связи с этим Apple выпустила новый SpeechAnalyzer API, использующий более быструю и эффективную модель, специально настроенную для обработки длинных аудиозаписей и речи отдаленных говорящих.
К концу этого руководства вы научитесь получать доступ к аудиобуферу микрофона, а затем предоставлять его новому классу SpeechAnalyzer для обработки и преобразования в текст.
Статья: https://www.createwithswift.com/implementing-advanced-speech-to-text-in-your-swiftui-app/
Платформа: iOS
👍1
SwiftUI в 2025: забудьте MVVM
На дворе 2025 год, а мне всё ещё задают один и тот же вопрос: «Где ваши ViewModel?» Каждый раз, когда я делюсь своим мнением или кодом своих открытых проектов, таких как клиент BlueSky IcySky или даже приложение Medium для iOS, разработчики удивляются, видя чистые, простые представления без единой ViewModel.
Позвольте мне прояснить: вам не нужны ViewModel в SwiftUI.
Никогда не были нужны.
И никогда не будут нужны.
Статья: https://apptractor.ru/info/articles/swiftui-v-2025-zabudte-mvvm.html
Платформа: iOS
На дворе 2025 год, а мне всё ещё задают один и тот же вопрос: «Где ваши ViewModel?» Каждый раз, когда я делюсь своим мнением или кодом своих открытых проектов, таких как клиент BlueSky IcySky или даже приложение Medium для iOS, разработчики удивляются, видя чистые, простые представления без единой ViewModel.
Позвольте мне прояснить: вам не нужны ViewModel в SwiftUI.
Никогда не были нужны.
И никогда не будут нужны.
Статья: https://apptractor.ru/info/articles/swiftui-v-2025-zabudte-mvvm.html
Платформа: iOS
👍4👎3🖕1
FileSystem - пакет Swift для взаимодействия с файловой системой
FileSystem - это пакет Swift, предоставляющий простой кроссплатформенный API для взаимодействия с файловой системой.
Зачем создавать новый пакет Swift для взаимодействия с файловой системой, если уже есть FileManager? Вот причины:
• Обеспечение понятных пользователю сообщений об ошибках, которые можно выводить на экран.
• Интеграция с swift-log для предоставления возможности журналирования операций с файловой системой.
• Использование структурированного параллелизма Swift с async/await.
• Предоставление API, в котором пути всегда абсолютны, упрощает анализ операций с файловой системой.
FileSystem лежит в основе Tuist — набора инструментов для ускорения разработки качественных приложений.
FileSystem на GitHub: https://github.com/tuist/FileSystem
Платформа: iOS
⭐️: 32
FileSystem - это пакет Swift, предоставляющий простой кроссплатформенный API для взаимодействия с файловой системой.
Зачем создавать новый пакет Swift для взаимодействия с файловой системой, если уже есть FileManager? Вот причины:
• Обеспечение понятных пользователю сообщений об ошибках, которые можно выводить на экран.
• Интеграция с swift-log для предоставления возможности журналирования операций с файловой системой.
• Использование структурированного параллелизма Swift с async/await.
• Предоставление API, в котором пути всегда абсолютны, упрощает анализ операций с файловой системой.
FileSystem лежит в основе Tuist — набора инструментов для ускорения разработки качественных приложений.
FileSystem на GitHub: https://github.com/tuist/FileSystem
Платформа: iOS
⭐️: 32
👍1
Как мы готовимся к новым версиям iOS
Меня зовут Антон Долганов, я старший iOS-разработчик в Контуре. Большую часть времени я работаю над инфраструктурными модулями, чтобы наши приложения были быстрыми, стабильными и легко развивались.
Следить за новинками платформы — также важная часть моей работы. Ведь чтобы инфраструктура не тормозила развитие продуктов, нужно заранее понимать, что изменится в iOS, какие риски появятся, и какие возможности можно будет использовать.
Статья: https://habr.com/ru/companies/skbkontur/articles/936570/
Платформа: iOS
Меня зовут Антон Долганов, я старший iOS-разработчик в Контуре. Большую часть времени я работаю над инфраструктурными модулями, чтобы наши приложения были быстрыми, стабильными и легко развивались.
Следить за новинками платформы — также важная часть моей работы. Ведь чтобы инфраструктура не тормозила развитие продуктов, нужно заранее понимать, что изменится в iOS, какие риски появятся, и какие возможности можно будет использовать.
Статья: https://habr.com/ru/companies/skbkontur/articles/936570/
Платформа: iOS
👍1
Технический разбор Max: что внутри APK
Сейчас мессенджер Max «очень классно ловит даже на парковке» 🙃 Стало интересно: а что же за технологии стоят за этим чудом? Скачал APK (весит ~114 MB) и полез внутрь.
Статья: https://habr.com/ru/articles/938518/
Платформа: Android
Сейчас мессенджер Max «очень классно ловит даже на парковке» 🙃 Стало интересно: а что же за технологии стоят за этим чудом? Скачал APK (весит ~114 MB) и полез внутрь.
Статья: https://habr.com/ru/articles/938518/
Платформа: Android
🔥2👎1
Retrofit + корутины Kotlin: полное руководство для Android-разработчиков
Связка Retrofit и корутин Kotlin преобразила сетевое программирование в Android: теперь это не сложная и "ломкая" задача, а элегантное и поддерживаемое решение. Используя подходы и лучшие практики из этого руководства, вы сможете делать надёжные и масштабируемые сетевые слои, улучшающие и опыт разработки, и производительность приложения.
Статья: https://apptractor.ru/develop/retrofit-korutiny-kotlin-polnoe-rukovodstvo-dlya-android-razrabotchikov.html
Платформа: Android
Связка Retrofit и корутин Kotlin преобразила сетевое программирование в Android: теперь это не сложная и "ломкая" задача, а элегантное и поддерживаемое решение. Используя подходы и лучшие практики из этого руководства, вы сможете делать надёжные и масштабируемые сетевые слои, улучшающие и опыт разработки, и производительность приложения.
Статья: https://apptractor.ru/develop/retrofit-korutiny-kotlin-polnoe-rukovodstvo-dlya-android-razrabotchikov.html
Платформа: Android
❤2👎2
Smart Cleaner - клинер для Android
Smart Cleaner for Android помогает освободить место на устройстве и управлять им. Он удаляет ненужные файлы, кэш и другие нежелательные данные с устройства, восстанавливая необходимый объём памяти и производительность.
Smart Cleaner включает в себя множество функций для поддержания чистоты и бесперебойной работы телефона, таких как очистка буфера обмена, менеджер приложений, очистка файлов WhatsApp, оптимизация изображений и многое другое. С Cleaner вы можете легко поддерживать свой телефон в идеальном состоянии, не беспокоясь о сложных настройках или получении root-доступа. Приложение разработано таким образом, чтобы быть простым, удобным, быстрым и лёгким в использовании.
Smart Cleaner на GitHub: https://github.com/MihaiCristianCondrea/Smart-Cleaner-for-Android
Платформа: Android
⭐️: 154
Smart Cleaner for Android помогает освободить место на устройстве и управлять им. Он удаляет ненужные файлы, кэш и другие нежелательные данные с устройства, восстанавливая необходимый объём памяти и производительность.
Smart Cleaner включает в себя множество функций для поддержания чистоты и бесперебойной работы телефона, таких как очистка буфера обмена, менеджер приложений, очистка файлов WhatsApp, оптимизация изображений и многое другое. С Cleaner вы можете легко поддерживать свой телефон в идеальном состоянии, не беспокоясь о сложных настройках или получении root-доступа. Приложение разработано таким образом, чтобы быть простым, удобным, быстрым и лёгким в использовании.
Smart Cleaner на GitHub: https://github.com/MihaiCristianCondrea/Smart-Cleaner-for-Android
Платформа: Android
⭐️: 154
👍1
Акторы в Swift: руководство для начинающих по безопасному параллелизму
Акторы повышают безопасность параллельной работы, контролируя, кто и когда может получить доступ к общим данным. Они устраняют необходимость в ручных блокировках или сложном управлении очередями.
Статья: https://apptractor.ru/info/articles/actors.html
Платформа: iOS
Акторы повышают безопасность параллельной работы, контролируя, кто и когда может получить доступ к общим данным. Они устраняют необходимость в ручных блокировках или сложном управлении очередями.
Статья: https://apptractor.ru/info/articles/actors.html
Платформа: iOS
Еще про акторы:
• Погружение в Акторы в Swift 5.5
• Акторы в Swift — для чего они нужны?
•📺 А так ли нужны акторы в Swift Concurrency?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Можно ли унаследовать один `actor` от другого?
Anonymous Quiz
7%
Да, но только если они final
68%
Нет, акторы не поддерживают наследование
10%
Да, при условии что оба отмечены @MainActor
15%
Да, но только через протокол
👍1
Forwarded from Mobile Development by AppTractor
Митап RuStore про монетизацию и рекламу
Когда: 27 августа, 17:00 (мск)
О чем: обсудим, как заработать на приложениях - тренды, рекламные форматы 2025 года и возможности RuStore.
Эксперты — ведущие менеджеры продукта:
Артём Фролкин — про рекламу;
Иван Шарков — про in-app платежи и RuStore Pay SDK.
Участвуй: можно задать вопрос команде RuStore и получить быстрый ответ — прямо в эфире. Остальные вопросы разберут в чате.
Регистрируйся, если хочешь получать больше с приложений!
Когда: 27 августа, 17:00 (мск)
О чем: обсудим, как заработать на приложениях - тренды, рекламные форматы 2025 года и возможности RuStore.
Эксперты — ведущие менеджеры продукта:
Артём Фролкин — про рекламу;
Иван Шарков — про in-app платежи и RuStore Pay SDK.
Участвуй: можно задать вопрос команде RuStore и получить быстрый ответ — прямо в эфире. Остальные вопросы разберут в чате.
Регистрируйся, если хочешь получать больше с приложений!
👎3👍2
TSAlertController - элегантная библиотека оповещений
TSAlertController - элегантная библиотека для отображения уведомлений, оповещений и прочих информационных окон.
Она имитирует интерфейс
TSAlertController на GitHub: https://github.com/rlarjsdn3/TSAlertController-iOS
Платформа: iOS
⭐️: 4
TSAlertController - элегантная библиотека для отображения уведомлений, оповещений и прочих информационных окон.
Она имитирует интерфейс
UIAlertController и ссылается на другие API, чтобы минимизировать кривую обучения. Метод настройки аналогичен [UIButton.Configuration] и [UIBarAppearance], что позволяет разработчикам легко изменять внешний вид и поведение оповещений, используя знакомые API.TSAlertController на GitHub: https://github.com/rlarjsdn3/TSAlertController-iOS
Платформа: iOS
⭐️: 4
•
(iOS En) Multi-Item Drag & Drop API•
(iOS En) Professional SwiftUI Card Component Library•
(iOS En) SwiftUI Custom Calendar - Modern Date Picker Component•
(iOS En) AI Refactoring Is Faster?!•
(iOS En) Setting Up App Icons in Xcode 26 with Icon Composer•
(iOS En) Mastering Icon Composer Create Stunning App Icons•
(And En) Custom Design Systems In Jetpack Compose - THESE Are My Best Practices•
(And En) APIs: How Hard Can They Be?•
(And En) Fast inner dev loops for Kotlin Gradle builds•
(And En) Nested type aliases in Kotlin 2.2•
(And En) You didn't handle the Process Death, did you?•
(And En) AI-Powered Android Development chat with Kevin Tang•
(Crs Ru) Генерация UI Kit с использованием ИИ•
(Crs En) Build Websites in Kotlin & Compose HTML with Kobweb•
(Crs En) Multiplatform Settings: A case study in Multiplatform library development•
(Crs En) Project Sparkles: How Compose for Desktop is changing Android Studio•
(Dev Ru) Надежность мобильных приложений: что это и как достичь•
(Dev Ru) Зачем нужен COBOL в 2025•
(Mrk En) App Experts Reveal How to Improve ConversionsПрошлогодние видео:
•
(And Ru) Фантастические баги: как их ловить и править•
(Crs Ru) Почему вам стоит учить/использовать Kotlin Multiplatform•
(Dev Ru) Задача на логику из собеседования в Amazon (+ все собеседования)•
(Psy Ru) Как успевать больше, оставаясь эффективным, и не выгоретьPlease open Telegram to view this post
VIEW IN TELEGRAM
Как работает WorkManager в Android
Ты запускаешь процесс в приложении, но ждать результата тебе лень, поэтому ты уходишь в мессенджер, уверенный, что через пять минут процесс закончится сам собой. А он не заканчивается, потому что система убила процесс этого приложения, высвободив ресурсы на другую работу. Как бороться с Android’ом и не позволять ему уничтожать важные фоновые процессы, расскажет Сергей Смирнов, Android-разработчик CleverPumpkin, который так овладел инструментом WorkManager, что смог в фоновом режиме написать эту статью.
Статья: https://apptractor.ru/info/articles/kak-rabotaet-workmanager-v-android.html
Платформа: Android
Ты запускаешь процесс в приложении, но ждать результата тебе лень, поэтому ты уходишь в мессенджер, уверенный, что через пять минут процесс закончится сам собой. А он не заканчивается, потому что система убила процесс этого приложения, высвободив ресурсы на другую работу. Как бороться с Android’ом и не позволять ему уничтожать важные фоновые процессы, расскажет Сергей Смирнов, Android-разработчик CleverPumpkin, который так овладел инструментом WorkManager, что смог в фоновом режиме написать эту статью.
Статья: https://apptractor.ru/info/articles/kak-rabotaet-workmanager-v-android.html
Платформа: Android
❤1
Чем в Android JobScheduler принципиально отличается от WorkManager при выполнении фоновых задач?
Anonymous Quiz
31%
JobScheduler доступен только начиная с API 26, а WorkManager — с API 14
30%
JobScheduler требует явной регистрации заданий, WorkManager сам подбирает подходящий планировщик
13%
WorkManager может запускать только однократные задачи, а JobScheduler — периодические
26%
JobScheduler использует AlarmManager, а WorkManager — нет
👍1
Руководство по оптимизации Jetpack Compose — лучшие практики для ускорения приложений
Jetpack Compose упрощает разработку пользовательского интерфейса для Android, но написание производительного кода требует определённых навыков Если ваше приложение работает медленно или подтормаживает во время анимации, отображения списков или перекомпоновки, несколько оптимизаций могут существенно улучшить ситуацию.
В большом разрешении: https://medium.com/@jetpackcomposedev.channel/jetpack-compose-optimization-guide-best-practices-for-faster-apps-c707fade6081
Платформа: Android
Jetpack Compose упрощает разработку пользовательского интерфейса для Android, но написание производительного кода требует определённых навыков Если ваше приложение работает медленно или подтормаживает во время анимации, отображения списков или перекомпоновки, несколько оптимизаций могут существенно улучшить ситуацию.
В большом разрешении: https://medium.com/@jetpackcomposedev.channel/jetpack-compose-optimization-guide-best-practices-for-faster-apps-c707fade6081
Платформа: Android
Deepr - управление глубокими ссылками
Deepr — это нативное приложение для Android, разработанное для оптимизации управления и тестирования глубоких ссылок. Оно обеспечивает простой и эффективный способ хранения, организации и запуска диплинков, что делает его незаменимым инструментом для разработчиков и тестировщиков.
Приложение создано с использованием современных практик разработки Android и библиотек: Jetpack Compose, Jetpack Compose Navigation 3, Android ViewModel, SQLDelight, Koin, корутины.
Deepr на GitHub: https://github.com/yogeshpaliyal/Deepr
Платформа: Android
⭐️: 64
Deepr — это нативное приложение для Android, разработанное для оптимизации управления и тестирования глубоких ссылок. Оно обеспечивает простой и эффективный способ хранения, организации и запуска диплинков, что делает его незаменимым инструментом для разработчиков и тестировщиков.
Приложение создано с использованием современных практик разработки Android и библиотек: Jetpack Compose, Jetpack Compose Navigation 3, Android ViewModel, SQLDelight, Koin, корутины.
Deepr на GitHub: https://github.com/yogeshpaliyal/Deepr
Платформа: Android
⭐️: 64
👍1
Как RecyclerView создает магию анимаций: архитектура ItemAnimator под капотом
RecyclerView умеет превращать обычные операции с данными в плавные анимации. Когда вы добавляете элемент в список, остальные элементы плавно расступаются. При удалении — схлопываются. Эта магия происходит благодаря ItemAnimator — механизму, который сегодня разберем до последнего винтика.
В этой статье мы погрузимся в архитектуру системы анимаций RecyclerView, проследим путь от вызова notifyItemInserted() до финальной анимации на экране.
Статья: https://habr.com/ru/articles/939594/
Платформа: Android
RecyclerView умеет превращать обычные операции с данными в плавные анимации. Когда вы добавляете элемент в список, остальные элементы плавно расступаются. При удалении — схлопываются. Эта магия происходит благодаря ItemAnimator — механизму, который сегодня разберем до последнего винтика.
В этой статье мы погрузимся в архитектуру системы анимаций RecyclerView, проследим путь от вызова notifyItemInserted() до финальной анимации на экране.
Статья: https://habr.com/ru/articles/939594/
Платформа: Android
❤1
Я заменил все != nil в своем Swift-коде
Как и большинство разработчиков, я тысячи раз писал
Но затем, во время плановой чистки кода, я решился на смелый поступок: удалил все вхождения
Статья: https://apptractor.ru/develop/coding/vse-nil.html
Платформа: iOS/Swift
Как и большинство разработчиков, я тысячи раз писал
if someValue != nil на Swift, ни секунды не задумываясь. Это было быстро, привычно и ощущалось безопасным.Но затем, во время плановой чистки кода, я решился на смелый поступок: удалил все вхождения
!= nil в iOS-проекте среднего размера и заменил их более выразительными конструкциями.Статья: https://apptractor.ru/develop/coding/vse-nil.html
Платформа: iOS/Swift
👍1💊1