// Записи
Заметки из пути
Мысли о создании спокойного, приватного софта в команде из одного человека.
RSS-лента
Room TypeConverters в 2026 году: как хранить enum'ы, даты и списки, не повреждая схему
Практическое руководство по Room TypeConverters на Android — enum'ы, Instant/LocalDate и списки — а также ошибки, которые превращают конвертер в незаметный баг повреждения данных.
R8 и ProGuard для Kotlin, Room и Compose: сбой, который случается только в релизе
Почему приложение Android на Room + Compose идеально работает в debug и падает в продакшене, и какие именно правила keep R8/ProGuard ловят это раньше пользователя.
In-App Review API в Android: как просить оценку, не раздражая пользователя
Практическое руководство по In-App Review API от Google — как он на самом деле работает, когда его запускать и почему обычный попап «оцените нас» незаметно портит вашу оценку в Play Store.
Ярлыки приложений Android и плитка быстрых настроек: логирование воды без открытия приложения
Практическое руководство по динамическому ShortcutManager API и TileService в Android — как позволить действию в один тап полностью обойти приложение, и о подводных камнях, на которых спотыкается большинство реализаций.
Типы foreground-сервисов в Android в 2026 году: как выбрать тот, что реально подходит вашей функции
Практическое руководство по ограничениям типов foreground-сервисов Android — dataSync, mediaPlayback, specialUse, shortService — и как выбрать правильный, не получив ни принудительной остановки, ни отказа в проверке.
Одно приложение — одна задача: почему я не делаю супер-приложение
Любое растущее приложение сталкивается с давлением добавлять функции и сливаться в одну платформу. Вот почему MFKAPPS остаётся набором из шести небольших приложений.
StateFlow против SharedFlow в Jetpack Compose: моделируем UI-состояние без бага повторного воспроизведения
Когда использовать StateFlow, а когда SharedFlow в Compose ViewModel — и баг одноразового события, который возникает, если их перепутать.
Индексы базы данных Room в 2026 году: находим по-настоящему медленный запрос и исправляем его
Практическое руководство по индексированию базы Room/SQLite на Android — чтение EXPLAIN QUERY PLAN, добавление @Index без угадывания и ошибки, которые незаметно сводят индекс на нет.
@Relation в Room: запрос данных «один ко многим» на Android без N+1-запросов
Практическое руководство по аннотации @Relation в Room — моделирование данных «один ко многим», таких как категории и записи, без N+1-запросов и ручных join'ов.
Типобезопасная навигация в Jetpack Compose: маршруты как данные, а не строки
Как заменить строковые маршруты Compose Navigation сериализуемыми Kotlin-объектами — типобезопасные аргументы, вложенные графы и deep links, переживающие рефакторинг.
Бюджет при нерегулярном доходе: система, не рассчитанная на стабильную зарплату
Большинство советов по бюджету исходят из того, что каждый месяц приходит одна и та же сумма. Вот система для фриланса, комиссионных или сезонного дохода, которая действительно работает.
Live Updates в Android 16: таймер фокусировки Mintly теперь на экране блокировки
Практическое руководство по уведомлениям Android 16, ориентированным на прогресс — сегменты ProgressStyle, продвинутые постоянные уведомления и что они дают работающему таймеру Pomodoro.
Настройка напоминаний о лекарствах для члена семьи: руководство для того, кто заботится
Практическое руководство о том, как помочь родителю или партнёру не сбиваться с приёма лекарств — что настроить, чего избегать и как узнавать о делах, не превращаясь в надзирателя.
Каналы уведомлений Android в 2026 году: как задать уровни важности, которые пользователи не отключат
Практическое руководство по каналам уведомлений Android — уровни важности, группы каналов, почему настройки замораживаются после создания и как мигрировать, не потеряв доверие пользователя.
Сколько должна длиться сессия концентрации? Подход за пределами стандартных 25 минут
25-минутный Помодоро — это отправная точка, а не правило. Практический подход к поиску реальной длины сессии по типу задачи и уровню энергии.
Paging 3 и Room: как сохранить плавность растущего списка транзакций в Android-приложении в 2026
Как постранично загружать список транзакций на Room с помощью Jetpack Paging 3, чтобы годы данных оставались плавными в Compose — без RemoteMediator, без сети, просто правильно устроенная локальная база данных.
Переход Android на страницы памяти 16 КБ: что реально ломается и как проверить свой APK
Google теперь требует, чтобы Android-приложения поддерживали страницы памяти 16 КБ. Что это значит на практике, почему ломаются именно нативные библиотеки и как проверить, что у тебя всё в порядке.
Структурированная конкурентность в Android в 2026: области видимости, отмена и утечки, которых она не допускает
Практическое руководство по структурированной конкурентности Kotlin в Android — viewModelScope против lifecycleScope, почему отмена распространяется, и какие утечки корутин это тихо предотвращает.
Recomposition в Jetpack Compose: что на самом деле его вызывает и почему я перестал гадать
Практическое руководство по recomposition в Jetpack Compose в 2026 году — стабильность типов, нестабильные лямбды, ключи LazyColumn и чтение отчёта метрик компилятора.
Полнотекстовый поиск в Room: добавляем мгновенный поиск в local-first Android-приложение в 2026
Практическое руководство по поддержке FTS4 в Room на Android — создание виртуальной таблицы поиска, синхронизация через триггеры и почему FTS5 требует ручной миграции.
Без аккаунтов, без паролей: почему в моих приложениях нет экрана входа
Шесть приложений, ноль форм регистрации. Вот реальная причина полного отказа от аккаунтов — во что это обходится, что убирает и где проходит граница.
Шифрование базы данных Room в 2026: SQLCipher, Keystore и миграция без потери данных
Практическое руководство по шифрованию базы данных Room/SQLite в состоянии покоя на Android с помощью SQLCipher — управление ключами через Keystore, разовая миграция и реальная цена по производительности.
Резервное копирование локальных данных в Android в 2026 году: экспорт через SAF, Auto Backup и восстановление, которому можно доверять
Как local-first приложения для Android резервируют данные пользователя без сервера: экспорт/импорт через SAF, Auto Backup for App Data и восстановление, которое проверяет данные перед перезаписью.
Тестирование local-first Android-приложения в 2026 году: Room, Flow и Compose UI-тесты, которые ловят реальные баги
Практическая стратегия тестирования для local-first Android-приложений в 2026 году — DAO-тесты с Room в памяти, Turbine для Flow и те немногие Compose UI-тесты, которые действительно стоит писать.
Биометрическая аутентификация в Android в 2026 году: BiometricPrompt, Keystore и блокировка local-first приложения
Практическое руководство по androidx.biometric в Android — BiometricPrompt, ключи на основе CryptoObject, резервный вариант с учётными данными устройства и ошибки, из-за которых проверка отпечатка не защищает ничего.
Доступность на Android в 2026 году: чек-лист по TalkBack и семантике Compose, который реально работает
Практический чек-лист по доступности Android на 2026 год — TalkBack, семантика Compose, размер зон касания и тестовый прогон, который я делаю на каждом экране перед релизом.
Health Connect в Android в 2026 году: как читать и писать данные, не отказываясь от local-first
Практическое руководство по API Health Connect в Android в 2026 году — разрешения, фоновое чтение и почему local-first-приложениям стоит относиться к нему как к опциональному источнику, а не как к истине.
Edge-to-edge и predictive back в Android в 2026 году: что теперь обязательно и как не сломать интерфейс
Edge-to-edge теперь обязателен для API 35+, а predictive back стал жестом по умолчанию. Практическое руководство по insets в Compose, WindowInsets и PredictiveBackHandler.
Сколько воды на самом деле нужно пить? Формула лучше, чем «8 стаканов в день»
Правило 8 стаканов игнорирует ваш вес, активность и климат. Вот формула на основе веса тела, которую реально используют врачи, с конкретным примером.
Спокойная настройка телефона: пошаговый план для новичков
Практичный пошаговый план к более спокойному телефону — сортировка уведомлений, компактный домашний экран и сгруппированные проверки, которые действительно приживаются надолго.
Jetpack DataStore в 2026 году: переход с SharedPreferences без потери ни одной настройки
Практическое руководство по переходу с SharedPreferences на Jetpack DataStore на Android — асинхронные ловушки, путь миграции, сохраняющий существующие значения, и как это протестировать.
Как проверить свои подписки за 20 минут (и правда отменить те, что не нужны)
Пошаговая ревизия подписок, которую можно закончить за один присест — найдите каждый повторяющийся платёж, решайте по одному правилу, оставить или отменить, и выработайте привычку, которая держит список честным.
Сканирование штрихкодов с ML Kit на Android в 2026 году: как Stocky добавляет товар в кладовую меньше чем за секунду
Практическое руководство 2026 года по сканированию штрихкодов на устройстве с ML Kit и CameraX: настройка форматов, офлайн-поиск товара и математика частичного расхода в приложении для кладовой.
Миграции баз данных Room в 2026 году: как менять схему, не теряя ни одной строки
Практическое руководство по миграциям баз данных Room на Android — AutoMigration, написанные вручную объекты Migration и как протестировать миграцию до того, как её найдут ваши пользователи.
Baseline Profiles в Android: что на самом деле влияет на время холодного запуска в 2026 году
Практическое руководство по Android Baseline Profiles — генерация через Macrobenchmark, подключение в Gradle, честное измерение выигрыша и ещё три вещи, которые сильнее влияют на холодный запуск.
Jetpack Glance в 2026 году: как создать виджет для главного экрана, который никогда не врёт о ваших данных
Практическое руководство по виджетам Jetpack Glance на Android — состояние, обработка нажатий и ловушка квоты обновлений, из-за которой виджеты показывают устаревшие данные.
Система инвентаризации кладовой, которая действительно предотвращает пищевые отходы
Большая часть пищевых отходов возникает не из-за плохого планирования, а из-за того, что мы забываем, что уже есть. Простая система инвентаризации и сортировки по срокам годности, которая срабатывает раньше мусорного ведра.
Разработка календаря приверженности OldSchool: превращаем отметки о приёме в надёжный день
Месячный календарь приверженности выглядит как одна цветная точка на день. Вот модель событий, правила дневного статуса и математика своевременности — всё на устройстве.
Как устроен Subly: календарная математика за датами продления подписок
Предсказать дату следующего списания по подписке кажется тривиальным — пока не столкнёшься с биллингом в конце месяца, високосными годами и переходом из пробного периода. Вот как Subly решает это прямо на устройстве.
Разработка Mintly: как удержать точность таймера фокуса, когда Android хочет убить процесс
У работающего таймера Pomodoro проблема с надёжностью сложнее, чем у одноразового напоминания. Вот как Mintly переживает режим Doze, гибель процесса и дрейф при выключенном экране благодаря foreground-сервису и времени окончания по системным часам.
Привычка пить воду, которая не держится на силе воли
Большинство советов про питьевой режим сводятся к «пей больше воды» в надежде, что дальше сработает сила воли. Вот привычка, построенная на подсказках и мягких напоминаниях — вместо этого.
Разработка Granyn: трекер бюджета без входа в банк, всего на трёх таблицах
Как Granyn отслеживает расходы в разных валютах и распознаёт повторяющиеся счета, не подключая ни одного банковского аккаунта — схема Room под капотом и компромиссы, которые она навязывает.
Правильные действия в уведомлениях Android: отметить приём дозы без открытия приложения
Практическое руководство по кнопкам действий в уведомлениях Android — PendingIntent, ограничение activity-трамплина, goAsync() и безопасное обновление состояния Room.
Техника Помодоро, которая переживает плохой день
Таймер 25/5 легко начать и легко бросить. Вот версия техники Помодоро, построенная на ритуалах, а не на сериях, — чтобы трудный день не заканчивал привычку.
Система бюджета для тех, кому раньше не удавалось её придерживаться
Большинство бюджетов умирают в первые две недели. Система из трёх категорий и пятиминутная еженедельная проверка, которая выдерживает не только идеальный месяц, но и по-настоящему хаотичный.
Как я делал Stocky: предсказать, что заканчивается на вашей кухне — прямо на устройстве
Как Stocky превращает скан штрихкода и немного истории использования в список покупок, который появляется прежде, чем у вас что-то закончится — и вся математика, и все данные остаются на вашем телефоне.
Как выстроить режим приёма лекарств, которого вы действительно будете придерживаться
Практическое руководство по соблюдению режима приёма лекарств — почему люди пропускают дозы, как на самом деле работает время напоминаний и как выстроить режим, который переживёт плохую неделю.
Сайт теперь говорит на семи языках
MFKAPPS теперь доступен на английском, турецком, французском, испанском, японском, хинди и русском. Короткая заметка о том, зачем студии из одного человека вообще было это нужно и как она остаётся быстрой.
OCR с приоритетом приватности на Android: как Subly читает счета без облака
Практическое руководство 2026 года по OCR на устройстве под Android с ML Kit Text Recognition — настройка, код и приёмы извлечения полей, которые держат данные пользователей вне ваших серверов.
Как я создавал Hydrame: умные напоминания без занудства
Приложение-напоминалка живёт или умирает благодаря своим уведомлениям. Рассказываю, как я спроектировал уведомления Hydrame, чтобы они мягко подталкивали вас — и подстраивались под ваш день, а не боролись с ним.
Перегрузка подписками: почему я больше не привязываю банк к приложениям
Приложения для учёта подписок обычно решают задачу так: просят логин от вашего банка. В 2026 году есть путь спокойнее — сканирование счетов прямо на устройстве, без Plaid, без агрегатора.
Надёжные напоминания на Android в 2026 году: WorkManager, точные будильники и новые правила батареи
Как в 2026 году выпускать напоминания на Android, которые действительно срабатывают — WorkManager против AlarmManager, SCHEDULE_EXACT_ALARM, POST_NOTIFICATIONS и причуды производителей, которые всё ещё кусаются.
Local-first на Android в 2026 году: SQLite, Room и хранение пользовательских данных на устройстве
Руководство 2026 года по созданию local-first приложений для Android на Room и SQLite — проектирование схемы, миграции, WAL, экспорт и когда (и когда не стоит) добавлять синхронизацию.
Как я выпускаю Android-приложения в одиночку в 2026 году
Реальный сквозной план запуска Android-приложения на Kotlin + Compose в одиночку в 2026 году — рамки, разработка, страница в Play Store и скучные детали, которые решают, выйдете ли вы вообще.
Преимущество local-first приложений в приватности
Самые приватные данные — те, которые вы вообще не собираете. Local-first — это не просто выбор архитектуры, а самая простая политика конфиденциальности, какая только бывает.
Почему я ушёл, чтобы создавать спокойные инструменты
Большинство приложений устроены так, чтобы держать вас на крючке. Я хотел сделать обратное — программы, которые делают своё дело и уходят с дороги.