יצירת קשר עם התמיכה

אנחנו משיבים בדוא״ל, בדרך כלל בתוך יומיים.

למניעת שימוש לרעה, Google reCAPTCHA בודק את הפנייה הזאת; נתונים נשלחים אל Google. הסקריפט נטען רק עם פתיחת הטופס הזה.

→ כל הרשומות

שתי דרכים לספור יומן גישה לא נכון

על התוכן ועל בדיקתו

במאמר הזה

שבוע של שינויים כאן נשען על ספירות שנלקחו מיום אחד ביומן הגישה: מיליון שורות, מאה אלף מהן שלנו. כדי לברר אם משהו מזה עבד, צריך לבצע את אותן ספירות שוב בהמשך — וספירות שמרכיבים ידנית בפעם השנייה לעולם אינן בדיוק הספירות מהפעם הראשונה. רשימת בוטים אחרת, טווח תאריכים אחר, פקודה אחרת של grep.

לכן הספירה הועברה לכלי שקו הבסיס כתוב בו כקבוע. ההרצה הראשונה בוצעה מול אותו יומן ממש שממנו הגיע קו הבסיס. הכול היה צריך לצאת שווה.

שתי שורות לא יצאו שוות. בשני המקרים הכלי צדק והספירה המקורית הייתה שגויה.

נספרבפועלאסימון הבעלים10הזנה שבועית0398שתי הספירות היו שגויות בכיוונים מנוגדים

grep קורא את השורה כולה

הממצא המרכזי של השבוע היה שאסימון הבעלים הופיע פעם אחת ביום שלם. הוא נספר באמצעות תבנית שהותאמה לשורות יומן שלמות — ושורת יומן מכילה את הבקשה, אבל גם את הדף המפנה ואת סוכן המשתמש.

ההתאמה היחידה הייתה &t= בתוך כתובת ה־URL המפנה של מנוע חיפוש. מישהו הגיע מתוצאת חיפוש בנייד שהכתובת שלה הכילה במקרה את שני התווים האלה. בבקשות עצמן, האסימון הופיע אפס פעמים.

הממצא התחזק, וזאת דרך מוזרה לטעות. זאת עדיין טעות. יש לחלץ קודם את שדה הבקשה — זהו השדה המצוטט השני בשורת יומן משולבת — ולחפש בתוכו.

שרשרת else-if בולעת את המקרה המסוים

הספירה השנייה אמרה שההזנה השבועית נשלפה אפס פעמים. הסיווג נראה סביר:

if (url contains "/live/") ... else if (url contains "feed.xml") ...

כתובות ההזנה באתר הזה הן /live/<number>/feed.xml. כל אחת מהן התאימה לענף הראשון ולעולם לא הגיעה לשני. הנתון האמיתי היה 398.

המסקנה שנבעה מהמספר השגוי שרדה במקרה: 398 הבקשות האלה מחולקות שווה בשווה בין כל אחת עשרה קידומות השפה, תחת שלוש מחרוזות דפדפן כלליות, וזה סורק שלוקח כל תרגום, ולא מנוי. איש לא נרשם כמנוי. אבל “איש לא נרשם כמנוי” ו־“אפס בקשות” הן אמירות שונות, והשנייה צוטטה שוב ושוב לפני שמישהו בדק אותה.

הבדיקה שתופסת את שניהם

יש להריץ את כלי הספירה מול היום המדויק שממנו הגיע קו הבסיס. כל שורה חייבת לצאת שווה. כל מה שאינו שווה הוא באג בכלי או באג בספירה המקורית, ומתברר איזו מהאפשרויות נכונה לפני שזה משנה ולא אחרי.

נדרשה הרצה אחת וכארבע דקות. שני המספרים כבר הופיעו בכתב עד אז, ואף אחד מהם לא היה מתגלה מקריאה קפדנית יותר של הקוד — אלא רק מהעמדת המדידה עצמה לבדיקה.

פרסומת