Связаться с поддержкой

Мы отвечаем по электронной почте, обычно в течение двух дней.

Для защиты от злоупотреблений Google reCAPTCHA проверяет эту отправку; при этом данные передаются в Google. Скрипт загружается только при открытии этой формы.

← Все записи

Одно лишнее экранирование в восьми диаграммах

Какое-то время восемь записей этого блога показывали посреди фразы семь знаков —, причём внутри диаграмм. Не тире. Сам текст. С тех пор это исправлено на всех языках.

81 строка, 91 вхождение. В прозе тех же восьми записей — ни одного.

строки диаграмм, нарисовавшие сущность вместо тире одиннадцать языков Счёт без cookie middot, mdash Заберите свои данные mdash Счётчик через тег-менеджер mdash Ваш счётчик на странице HTTPS mdash Счётчик в профиле Chomikuj mdash Длинный адрес уложил счётчик mdash Почему список исключений не хешируется mdash Кэш, живущий в памяти mdash 81 строка в 8 записях, 91 вхождение — и в прозе ни одного проверка ширины видела их широкими, но не ошибочными

Одно экранирование лишнее

Диаграммы — это встроенный SVG, записанный в тело статьи. Подпись, которой нужно тире, несёт —, и браузер делает из этого тире, ровно как в абзаце.

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

Причина мелкая и скучная. Записать стоит другое: почему она так долго стояла у всех на виду и что её прекратило.

Проверка её видела и говорила другое

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

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

Такова форма этого дела. Проверка отвечает на вопрос, который ей дали, и не может сообщить, что вопрос был не тот. Здесь ничего не измерили неверно; измерение просто было о другой задаче, чем та, на которую походило.

Что её нашло

Отрисовать одну диаграмму и посмотреть на неё. Chromium без окна, один снимок, десять секунд. Сущность стояла в третьей строке картинки, буквами того же размера, что и всё остальное.

Починкой стала миграция, заменяющая &amp; на & для закреплённого списка имён сущностей и только внутри блоков <svg class="dg">, чтобы амперсанд, задуманный как амперсанд, им и остался. Всё, чего в списке не было, сообщалось и оставлялось в покое, а не угадывалось. Все 81 строка исправлены на каждом языке; в блоге остались лишь те вхождения, которые эта запись цитирует намеренно.

Что здесь обобщается

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

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

Реклама