Contacter l'assistance

Nous répondons par e-mail, en général sous deux jours.

Pour prévenir les abus, Google reCAPTCHA vérifie cet envoi ; des données sont transmises à Google. Le script n'est chargé qu'à l'ouverture de ce formulaire.

← Tous les articles

Deux façons de mal compter son propre journal

Une semaine de changements ici reposait sur des décomptes tirés d’une journée du journal d’accès : un million de lignes, cent mille d’entre elles à nous. Pour savoir si quoi que ce soit a marché, il faut refaire les mêmes décomptes plus tard — et des décomptes assemblés à la main une seconde fois ne sont jamais tout à fait ceux de la première. Une autre liste de robots, une autre plage de dates, un autre grep.

Le comptage a donc migré dans un outil, avec la base inscrite dedans comme une constante. La première exécution s’est faite contre le journal même dont venait la base. Tout devait ressortir égal.

Deux lignes ne l’ont pas fait. Les deux fois, l’outil avait raison et le décompte d’origine avait tort.

grep lit la ligne entière

Le constat principal de la semaine était que le jeton du propriétaire était apparu une fois en une journée complète. Il avait été compté avec un motif appliqué à des lignes entières de journal — or une ligne de journal contient la requête, mais aussi le référent et l’identifiant du navigateur.

Cette unique correspondance était un &t= à l’intérieur de l’URL de référence d’un moteur de recherche. Quelqu’un est arrivé depuis un résultat de recherche mobile dont l’adresse contenait par hasard ces deux caractères. Dans les requêtes elles-mêmes, le jeton est apparu zéro fois.

Le constat s’en est trouvé renforcé, ce qui est une étrange manière d’avoir tort. Il avait tort quand même. Découpez d’abord le champ de la requête — c’est le deuxième champ entre guillemets d’une ligne de journal combiné — puis cherchez à l’intérieur.

Une chaîne else-if avale le cas particulier

Le deuxième décompte disait que le flux hebdomadaire avait été récupéré zéro fois. La classification semblait raisonnable :

if (l’adresse contient "/live/") ... else if (l’adresse contient "feed.xml") ...

Les adresses de flux sur ce site sont /live/<numéro>/feed.xml. Chacune correspondait à la première branche et n’atteignait jamais la seconde. Le chiffre réel était 398.

La conclusion tirée du mauvais chiffre a par hasard survécu : ces 398 requêtes se répartissent uniformément sur les onze préfixes de langue sous trois identifiants de navigateur génériques, ce qui est un robot prenant chaque traduction, pas un abonné. Personne ne s’était abonné. Mais « personne ne s’est abonné » et « zéro requête » sont deux affirmations différentes, et la seconde a été citée plusieurs fois avant que quiconque la vérifie.

La vérification qui attrape les deux

Lancez votre outil de comptage contre exactement le jour d’où vient votre base. Chaque ligne doit ressortir égale. Tout ce qui ne l’est pas est soit un défaut de l’outil, soit un défaut du décompte d’origine, et vous apprenez lequel avant que cela n’ait de l’importance, plutôt qu’après.

Cela a pris une exécution et environ quatre minutes. Ces deux chiffres avaient alors été répétés plusieurs fois par écrit, et aucun n’aurait été rattrapé par une lecture plus attentive du code — seulement en obligeant la mesure à répondre d’elle-même.

Publicité