Перейти к содержимому

// Записи

Заметки из пути

Мысли о создании спокойного, приватного софта в команде из одного человека.

RSS-лента
MFKAPPS 4 мин чтения

Room TypeConverters в 2026 году: как хранить enum'ы, даты и списки, не повреждая схему

Практическое руководство по Room TypeConverters на Android — enum'ы, Instant/LocalDate и списки — а также ошибки, которые превращают конвертер в незаметный баг повреждения данных.

#android #engineering #room
MFKAPPS 4 мин чтения

R8 и ProGuard для Kotlin, Room и Compose: сбой, который случается только в релизе

Почему приложение Android на Room + Compose идеально работает в debug и падает в продакшене, и какие именно правила keep R8/ProGuard ловят это раньше пользователя.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

In-App Review API в Android: как просить оценку, не раздражая пользователя

Практическое руководство по In-App Review API от Google — как он на самом деле работает, когда его запускать и почему обычный попап «оцените нас» незаметно портит вашу оценку в Play Store.

#android #engineering #kotlin
MFKAPPS 5 мин чтения

Ярлыки приложений Android и плитка быстрых настроек: логирование воды без открытия приложения

Практическое руководство по динамическому ShortcutManager API и TileService в Android — как позволить действию в один тап полностью обойти приложение, и о подводных камнях, на которых спотыкается большинство реализаций.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Типы foreground-сервисов в Android в 2026 году: как выбрать тот, что реально подходит вашей функции

Практическое руководство по ограничениям типов foreground-сервисов Android — dataSync, mediaPlayback, specialUse, shortService — и как выбрать правильный, не получив ни принудительной остановки, ни отказа в проверке.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Одно приложение — одна задача: почему я не делаю супер-приложение

Любое растущее приложение сталкивается с давлением добавлять функции и сливаться в одну платформу. Вот почему MFKAPPS остаётся набором из шести небольших приложений.

#indie #philosophy #ux
MFKAPPS 4 мин чтения

StateFlow против SharedFlow в Jetpack Compose: моделируем UI-состояние без бага повторного воспроизведения

Когда использовать StateFlow, а когда SharedFlow в Compose ViewModel — и баг одноразового события, который возникает, если их перепутать.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Индексы базы данных Room в 2026 году: находим по-настоящему медленный запрос и исправляем его

Практическое руководство по индексированию базы Room/SQLite на Android — чтение EXPLAIN QUERY PLAN, добавление @Index без угадывания и ошибки, которые незаметно сводят индекс на нет.

#android #engineering #room
MFKAPPS 4 мин чтения

@Relation в Room: запрос данных «один ко многим» на Android без N+1-запросов

Практическое руководство по аннотации @Relation в Room — моделирование данных «один ко многим», таких как категории и записи, без N+1-запросов и ручных join'ов.

#android #engineering #room
MFKAPPS 4 мин чтения

Типобезопасная навигация в Jetpack Compose: маршруты как данные, а не строки

Как заменить строковые маршруты Compose Navigation сериализуемыми Kotlin-объектами — типобезопасные аргументы, вложенные графы и deep links, переживающие рефакторинг.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Бюджет при нерегулярном доходе: система, не рассчитанная на стабильную зарплату

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

#mobile #ux #indie
MFKAPPS 4 мин чтения

Live Updates в Android 16: таймер фокусировки Mintly теперь на экране блокировки

Практическое руководство по уведомлениям Android 16, ориентированным на прогресс — сегменты ProgressStyle, продвинутые постоянные уведомления и что они дают работающему таймеру Pomodoro.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Настройка напоминаний о лекарствах для члена семьи: руководство для того, кто заботится

Практическое руководство о том, как помочь родителю или партнёру не сбиваться с приёма лекарств — что настроить, чего избегать и как узнавать о делах, не превращаясь в надзирателя.

#reminders #ux #mobile
MFKAPPS 4 мин чтения

Каналы уведомлений Android в 2026 году: как задать уровни важности, которые пользователи не отключат

Практическое руководство по каналам уведомлений Android — уровни важности, группы каналов, почему настройки замораживаются после создания и как мигрировать, не потеряв доверие пользователя.

#android #engineering #notifications
MFKAPPS 4 мин чтения

Сколько должна длиться сессия концентрации? Подход за пределами стандартных 25 минут

25-минутный Помодоро — это отправная точка, а не правило. Практический подход к поиску реальной длины сессии по типу задачи и уровню энергии.

#ux #mobile #indie
MFKAPPS 4 мин чтения

Paging 3 и Room: как сохранить плавность растущего списка транзакций в Android-приложении в 2026

Как постранично загружать список транзакций на Room с помощью Jetpack Paging 3, чтобы годы данных оставались плавными в Compose — без RemoteMediator, без сети, просто правильно устроенная локальная база данных.

#android #engineering #room
MFKAPPS 4 мин чтения

Переход Android на страницы памяти 16 КБ: что реально ломается и как проверить свой APK

Google теперь требует, чтобы Android-приложения поддерживали страницы памяти 16 КБ. Что это значит на практике, почему ломаются именно нативные библиотеки и как проверить, что у тебя всё в порядке.

#android #engineering #kotlin
MFKAPPS 5 мин чтения

Структурированная конкурентность в Android в 2026: области видимости, отмена и утечки, которых она не допускает

Практическое руководство по структурированной конкурентности Kotlin в Android — viewModelScope против lifecycleScope, почему отмена распространяется, и какие утечки корутин это тихо предотвращает.

#android #engineering #kotlin
MFKAPPS 5 мин чтения

Recomposition в Jetpack Compose: что на самом деле его вызывает и почему я перестал гадать

Практическое руководство по recomposition в Jetpack Compose в 2026 году — стабильность типов, нестабильные лямбды, ключи LazyColumn и чтение отчёта метрик компилятора.

#android #engineering #kotlin
MFKAPPS 5 мин чтения

Полнотекстовый поиск в Room: добавляем мгновенный поиск в local-first Android-приложение в 2026

Практическое руководство по поддержке FTS4 в Room на Android — создание виртуальной таблицы поиска, синхронизация через триггеры и почему FTS5 требует ручной миграции.

#android #engineering #room
MFKAPPS 4 мин чтения

Без аккаунтов, без паролей: почему в моих приложениях нет экрана входа

Шесть приложений, ноль форм регистрации. Вот реальная причина полного отказа от аккаунтов — во что это обходится, что убирает и где проходит граница.

#privacy #indie #philosophy
MFKAPPS 5 мин чтения

Шифрование базы данных Room в 2026: SQLCipher, Keystore и миграция без потери данных

Практическое руководство по шифрованию базы данных Room/SQLite в состоянии покоя на Android с помощью SQLCipher — управление ключами через Keystore, разовая миграция и реальная цена по производительности.

#android #engineering #privacy
MFKAPPS 4 мин чтения

Резервное копирование локальных данных в Android в 2026 году: экспорт через SAF, Auto Backup и восстановление, которому можно доверять

Как local-first приложения для Android резервируют данные пользователя без сервера: экспорт/импорт через SAF, Auto Backup for App Data и восстановление, которое проверяет данные перед перезаписью.

#android #engineering #privacy
MFKAPPS 5 мин чтения

Тестирование local-first Android-приложения в 2026 году: Room, Flow и Compose UI-тесты, которые ловят реальные баги

Практическая стратегия тестирования для local-first Android-приложений в 2026 году — DAO-тесты с Room в памяти, Turbine для Flow и те немногие Compose UI-тесты, которые действительно стоит писать.

#android #engineering #kotlin
MFKAPPS 5 мин чтения

Биометрическая аутентификация в Android в 2026 году: BiometricPrompt, Keystore и блокировка local-first приложения

Практическое руководство по androidx.biometric в Android — BiometricPrompt, ключи на основе CryptoObject, резервный вариант с учётными данными устройства и ошибки, из-за которых проверка отпечатка не защищает ничего.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Доступность на Android в 2026 году: чек-лист по TalkBack и семантике Compose, который реально работает

Практический чек-лист по доступности Android на 2026 год — TalkBack, семантика Compose, размер зон касания и тестовый прогон, который я делаю на каждом экране перед релизом.

#android #engineering #kotlin
MFKAPPS 5 мин чтения

Health Connect в Android в 2026 году: как читать и писать данные, не отказываясь от local-first

Практическое руководство по API Health Connect в Android в 2026 году — разрешения, фоновое чтение и почему local-first-приложениям стоит относиться к нему как к опциональному источнику, а не как к истине.

#android #engineering #kotlin
MFKAPPS 5 мин чтения

Edge-to-edge и predictive back в Android в 2026 году: что теперь обязательно и как не сломать интерфейс

Edge-to-edge теперь обязателен для API 35+, а predictive back стал жестом по умолчанию. Практическое руководство по insets в Compose, WindowInsets и PredictiveBackHandler.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Сколько воды на самом деле нужно пить? Формула лучше, чем «8 стаканов в день»

Правило 8 стаканов игнорирует ваш вес, активность и климат. Вот формула на основе веса тела, которую реально используют врачи, с конкретным примером.

#mobile #ux #hydrame
MFKAPPS 4 мин чтения

Спокойная настройка телефона: пошаговый план для новичков

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

#mobile #ux #notifications
MFKAPPS 4 мин чтения

Jetpack DataStore в 2026 году: переход с SharedPreferences без потери ни одной настройки

Практическое руководство по переходу с SharedPreferences на Jetpack DataStore на Android — асинхронные ловушки, путь миграции, сохраняющий существующие значения, и как это протестировать.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Как проверить свои подписки за 20 минут (и правда отменить те, что не нужны)

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

#subscriptions #ux #mobile
MFKAPPS 5 мин чтения

Сканирование штрихкодов с ML Kit на Android в 2026 году: как Stocky добавляет товар в кладовую меньше чем за секунду

Практическое руководство 2026 года по сканированию штрихкодов на устройстве с ML Kit и CameraX: настройка форматов, офлайн-поиск товара и математика частичного расхода в приложении для кладовой.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Миграции баз данных Room в 2026 году: как менять схему, не теряя ни одной строки

Практическое руководство по миграциям баз данных Room на Android — AutoMigration, написанные вручную объекты Migration и как протестировать миграцию до того, как её найдут ваши пользователи.

#android #engineering #room
MFKAPPS 4 мин чтения

Baseline Profiles в Android: что на самом деле влияет на время холодного запуска в 2026 году

Практическое руководство по Android Baseline Profiles — генерация через Macrobenchmark, подключение в Gradle, честное измерение выигрыша и ещё три вещи, которые сильнее влияют на холодный запуск.

#android #engineering #kotlin
MFKAPPS 5 мин чтения

Jetpack Glance в 2026 году: как создать виджет для главного экрана, который никогда не врёт о ваших данных

Практическое руководство по виджетам Jetpack Glance на Android — состояние, обработка нажатий и ловушка квоты обновлений, из-за которой виджеты показывают устаревшие данные.

#android #engineering #kotlin
MFKAPPS 4 мин чтения

Система инвентаризации кладовой, которая действительно предотвращает пищевые отходы

Большая часть пищевых отходов возникает не из-за плохого планирования, а из-за того, что мы забываем, что уже есть. Простая система инвентаризации и сортировки по срокам годности, которая срабатывает раньше мусорного ведра.

#mobile #ux #stocky
MFKAPPS 4 мин чтения

Разработка календаря приверженности OldSchool: превращаем отметки о приёме в надёжный день

Месячный календарь приверженности выглядит как одна цветная точка на день. Вот модель событий, правила дневного статуса и математика своевременности — всё на устройстве.

#android #engineering #room
MFKAPPS 4 мин чтения

Как устроен Subly: календарная математика за датами продления подписок

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

#android #engineering #subscriptions
MFKAPPS 4 мин чтения

Разработка Mintly: как удержать точность таймера фокуса, когда Android хочет убить процесс

У работающего таймера Pomodoro проблема с надёжностью сложнее, чем у одноразового напоминания. Вот как Mintly переживает режим Doze, гибель процесса и дрейф при выключенном экране благодаря foreground-сервису и времени окончания по системным часам.

#android #engineering #mobile
MFKAPPS 4 мин чтения

Привычка пить воду, которая не держится на силе воли

Большинство советов про питьевой режим сводятся к «пей больше воды» в надежде, что дальше сработает сила воли. Вот привычка, построенная на подсказках и мягких напоминаниях — вместо этого.

#mobile #ux #reminders
MFKAPPS 4 мин чтения

Разработка Granyn: трекер бюджета без входа в банк, всего на трёх таблицах

Как Granyn отслеживает расходы в разных валютах и распознаёт повторяющиеся счета, не подключая ни одного банковского аккаунта — схема Room под капотом и компромиссы, которые она навязывает.

#android #engineering #privacy
MFKAPPS 4 мин чтения

Правильные действия в уведомлениях Android: отметить приём дозы без открытия приложения

Практическое руководство по кнопкам действий в уведомлениях Android — PendingIntent, ограничение activity-трамплина, goAsync() и безопасное обновление состояния Room.

#android #engineering #notifications
MFKAPPS 4 мин чтения

Техника Помодоро, которая переживает плохой день

Таймер 25/5 легко начать и легко бросить. Вот версия техники Помодоро, построенная на ритуалах, а не на сериях, — чтобы трудный день не заканчивал привычку.

#ux #mobile #indie
MFKAPPS 5 мин чтения

Система бюджета для тех, кому раньше не удавалось её придерживаться

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

#mobile #ux #indie
MFKAPPS 3 мин чтения

Как я делал Stocky: предсказать, что заканчивается на вашей кухне — прямо на устройстве

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

#android #engineering #privacy
MFKAPPS 4 мин чтения

Как выстроить режим приёма лекарств, которого вы действительно будете придерживаться

Практическое руководство по соблюдению режима приёма лекарств — почему люди пропускают дозы, как на самом деле работает время напоминаний и как выстроить режим, который переживёт плохую неделю.

#reminders #ux #notifications
MFKAPPS 2 мин чтения

Сайт теперь говорит на семи языках

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

#indie #ux #philosophy
MFKAPPS 7 мин чтения

OCR с приоритетом приватности на Android: как Subly читает счета без облака

Практическое руководство 2026 года по OCR на устройстве под Android с ML Kit Text Recognition — настройка, код и приёмы извлечения полей, которые держат данные пользователей вне ваших серверов.

#android #engineering #privacy
MFKAPPS 4 мин чтения

Как я создавал Hydrame: умные напоминания без занудства

Приложение-напоминалка живёт или умирает благодаря своим уведомлениям. Рассказываю, как я спроектировал уведомления Hydrame, чтобы они мягко подталкивали вас — и подстраивались под ваш день, а не боролись с ним.

#hydrame #engineering #ux
MFKAPPS 6 мин чтения

Перегрузка подписками: почему я больше не привязываю банк к приложениям

Приложения для учёта подписок обычно решают задачу так: просят логин от вашего банка. В 2026 году есть путь спокойнее — сканирование счетов прямо на устройстве, без Plaid, без агрегатора.

#privacy #subscriptions #opinion
MFKAPPS 7 мин чтения

Надёжные напоминания на Android в 2026 году: WorkManager, точные будильники и новые правила батареи

Как в 2026 году выпускать напоминания на Android, которые действительно срабатывают — WorkManager против AlarmManager, SCHEDULE_EXACT_ALARM, POST_NOTIFICATIONS и причуды производителей, которые всё ещё кусаются.

#android #engineering #mobile
MFKAPPS 7 мин чтения

Local-first на Android в 2026 году: SQLite, Room и хранение пользовательских данных на устройстве

Руководство 2026 года по созданию local-first приложений для Android на Room и SQLite — проектирование схемы, миграции, WAL, экспорт и когда (и когда не стоит) добавлять синхронизацию.

#android #engineering #privacy
MFKAPPS 7 мин чтения

Как я выпускаю Android-приложения в одиночку в 2026 году

Реальный сквозной план запуска Android-приложения на Kotlin + Compose в одиночку в 2026 году — рамки, разработка, страница в Play Store и скучные детали, которые решают, выйдете ли вы вообще.

#android #indie #mobile
MFKAPPS 3 мин чтения

Преимущество local-first приложений в приватности

Самые приватные данные — те, которые вы вообще не собираете. Local-first — это не просто выбор архитектуры, а самая простая политика конфиденциальности, какая только бывает.

#privacy #engineering
MFKAPPS 3 мин чтения

Почему я ушёл, чтобы создавать спокойные инструменты

Большинство приложений устроены так, чтобы держать вас на крючке. Я хотел сделать обратное — программы, которые делают своё дело и уходят с дороги.

#indie #manifesto #philosophy