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

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

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

← Все записи

Два способа неправильно посчитать собственный журнал

Неделя изменений здесь опиралась на подсчёты, взятые из одного дня журнала доступа: миллион строк, сто тысяч из них наши. Чтобы узнать, сработало ли что-нибудь, те же подсчёты надо сделать позже ещё раз — а подсчёты, собранные вручную во второй раз, никогда не бывают в точности теми же, что в первый. Другой список ботов, другой диапазон дат, другой grep.

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

Две строки не вышли. Оба раза прав был инструмент, а исходный подсчёт ошибался.

grep читает всю строку

Главным выводом недели было, что токен владельца встретился один раз за целый день. Его считали шаблоном по целым строкам журнала — а строка журнала содержит запрос, но также и источник перехода, и строку браузера.

Это единственное совпадение оказалось &t= внутри адреса источника перехода из поисковой системы. Кто-то пришёл из мобильного результата поиска, чей адрес случайно содержал эти два знака. В самих запросах токен встретился ноль раз.

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

Цепочка else-if проглатывает частный случай

Второй подсчёт говорил, что недельную ленту забирали ноль раз. Классификация выглядела разумно:

if (адрес содержит "/live/") ... else if (адрес содержит "feed.xml") ...

Адреса ленты на этом сайте выглядят как /live/<номер>/feed.xml. Каждый из них попадал в первую ветку и до второй не доходил никогда. Настоящее число было 398.

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

Проверка, ловящая оба случая

Запустите свой инструмент подсчёта против ровно того дня, из которого взята ваша база. Каждая строка должна выйти равной. Всё, что не выходит, — это либо дефект инструмента, либо дефект исходного подсчёта, и вы узнаёте, какой из двух, прежде чем это станет важно, а не после.

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

Реклама