Блог
Разборы из практики
Что делал, что измерил, что получилось. Flutter, Node.js, SEO и всё, что вокруг ЧатЯдра. Подписка — RSS.
Lighthouse 100/100/100/100 на Eleventy: бандл CSS, Метрика, которая не роняет оценку, и CSP без сюрпризов
Как этот сайт получил четыре сотни в Lighthouse и не потерял их после установки Яндекс.Метрики и заголовков безопасности. С цифрами, кодом и одной ловушкой, в которую легко попасть.
Публикация в RuStore: пять шагов формы, отказ по юридическому основанию и почему APK нужно вскрывать, а не грепать
Как ЧатЯдро попало в RuStore за девять дней: что скрывают поля консоли, за что отказали на модерации, как собрать сборку без своего апдейтера и как правильно проверять, что внутри APK.
Медиа в чате: как библиотека видео похудела с 630 до 204 МБ, а фото с 3,8 МБ до 729 КБ
Разбор медиа-пайплайна ЧатЯдра: сжатие фото средствами браузера без библиотек, перекодирование видео до 720p на сервере с ffmpeg, превью первым кадром, кэш подписанных ссылок и проценты загрузки. С параметрами и цифрами до/после.
Проверка орфографии в PWA на Flutter: hunspell на сервере, своя таблица опечаток и разбор текста в два шага
В вебе у Flutter нет системной проверки текста. Оказалось, подчёркивание он рисует сам, а источник вердикта подключаемый. Как сделан сервис на nspell с русским словарём: замеры, кэши, почему встроенный подборщик не чинит «превед» и что нельзя отправлять на сервер.
Лента без машинного обучения: непросмотренное вперёд, окно в семь дней и не больше двух постов подряд от автора
Хронологическая лента выглядела мёртвой: пачки постов от одного канала и ничего нового при обновлении. Как это починили двумя простыми правилами, как выбрали окно свежести замером на живых данных и какой баг курсора ломал «загрузить ещё».