Илья, делаю небольшие приложения. Пишу сюда то, на что сам потратил время.
Фоновая выгрузка: два дня на чужой таймаут
14 августа 2026
Загрузка больших файлов падала примерно на четвёртой минуте, но только на реальных
устройствах и только по сотовой сети. В логах — обрыв без причины, на стороне сервера
запрос вообще не появлялся.
Оказалось, дело не в моём коде и не в сервере. Системный планировщик глушит фоновую
сессию, если она не отчиталась о прогрессе, а я слал прогресс только по завершении
куска — куски были по пять минут. Уменьшил кусок до тридцати секунд, проблема ушла
в тот же вечер.
Вывод, который стоил двух дней: если что-то обрывается ровно по времени, ищи того,
кто считает это время, а не того, кто передаёт данные.
Кэш картинок: три подхода, рабочий один
2 августа 2026
Сначала держал всё в памяти — приложение вылетало на списке из трёхсот элементов.
Потом складывал на диск по имени файла — получил коллизии, потому что имена
у разных источников совпадали.
В итоге кладу на диск по хэшу от полного адреса, в памяти держу только последние
сорок штук, остальное подтягиваю заново. Список листается ровно, память не растёт.
Скучное решение, зато перестало ломаться.
Сборка под две платформы одной командой
21 июля 2026
Держал два скрипта сборки, они разъехались через месяц: в одном добавил флаг,
в другой забыл. Классика.
Свёл в один файл с параметром платформы. Общая часть — проверки, версия, подпись —
лежит сверху, различия внизу двумя короткими ветками:
build.sh --target desktop --release
build.sh --target mobile --release
Правило простое: если два файла делают почти одно и то же, они обязательно
разойдутся. Вопрос только в том, когда я это замечу.
Размер сборки: откуда взялись лишние 18 мегабайт
9 июля 2026
Пакет распух вдвое между двумя выпусками. Ни одной новой зависимости я не добавлял.
Виноватой оказалась библиотека для работы с датами: она тянет данные о часовых
поясах всех стран, а мне нужны были две. Заменил на свою функцию на двадцать строк.
Восемнадцать мегабайт вернулись.
С тех пор смотрю на состав пакета перед каждым выпуском, а не раз в полгода.
Настройки: почему я перестал хранить их одним объектом
28 июня 2026
Хранил все настройки одной записью — удобно читать, удобно писать. Ровно до того
дня, когда обновление приложения не смогло разобрать старую запись, и у части людей
настройки обнулились разом.
Теперь каждая настройка лежит отдельно и читается с запасным значением. Потерять
можно одну, а не все сразу.