11 Блог
Записки о разработке
Как устроены проекты, что ломается в продакшене и чем это лечится. Без пересказа документации — только то, с чем сталкивался сам.
- Яндекс не индексирует сайт, и дело не в сайтеРобот заходит, отдаётся ему то же, что и браузеру, запретов нет — а страниц в поиске нет. Разбор ловушки, которую не видно снаружи: главное зеркало на http.
- XML со стилями: почему карта сайта выглядела сломанной и при чём тут hreflangКарта сайта открывалась в браузере одной плоской строкой. Причина — пространство имён XHTML внутри XML. Разбор, починка через XSL и ловушка с типом отдачи файла.
- Карта сайта, которая врала про даты, и как её починитьlastmod, зашитый константой в код, — это обещание роботу, что сайт не меняется. Как брать дату из файла, что считать полом и почему точность в сутки правильнее миллисекунд.
- Канвас, который выдавил страницу за экран: как замер раздувал вёрсткуПервый экран уезжал вправо на телефоне. Виновата была одна строка, записывавшая измеренную ширину обратно в стиль — и цикл, который наращивал её при каждом замере.
- 3D без библиотеки: перспектива и повороты в плоском canvasКак разложить десяток окон по дуге в объёме, имея только 2D-контекст: матрицы поворота, деление на глубину и вывод аффинного преобразования из спроецированных полуосей.
- Мини-ролик на первом экране: 2D canvas вместо three.jsПять сцен, которые переходят друг в друга, кликабельные шаги и повтор — без WebGL и без библиотек анимации. Разбор устройства и главной ошибки с часами.
- Блочный редактор вместо Markdown: почему у моего блога нет разметки в текстеMarkdown — очевидный выбор для блога. Я его не взял, и вот честный разбор: что теряется, что выигрывается и почему две модели контента хуже одной.
- Как не дать OOM-killer убить сайт на общем сервереНа одной машине живут сайт, Docker с чужим WordPress и раннер CI. Кого ядро убьёт первым при нехватке памяти — и как объяснить ему, что не сайт.
- Деплой релизами: симлинк, каталог данных снаружи и одна ошибка, которая стоит контентаСхема выкладки, где каждый релиз — отдельный каталог, а данные живут вне них. И почему DATA_DIR внутри релиза — потеря контента, а не неудобство.
- Черновики и двадцать версий: история правок без базы данныхКак сделать откат правок и невидимые черновики на голых файлах: копия перед записью, обрезка по числу, восстановление наложением.
- Файлы вместо базы данных: хранилище для сайта, который правит один человекКонтент сайта лежит в JSON-файлах, а не в PostgreSQL. Разбор решения: чем платишь, что получаешь и где эта схема ломается.
