הכרתי פעם איזה חמש בדיחות שיכולות היו להתחיל את הפוסט הזה, אבל אני לא זוכר אותן. וכנראה שלפחות ארבע מהן היו ברוסית, וזה אף פעם לא עובד בתרגום. לכן רק אסביר בקצרה מה זה קארגו קאלט (cargo cult) , ומי שבכל זאת מעוניין לגלות את העולם הביזארי של בדיחות רוסיות, מוזמן לקרוא את הרשומה המדהימה הזאת בוויקיפדיה. אני מבטיח לכם שעה של WTF אנתרופולוגי טהור.
כמו כל דבר אחר בעולם, גם המושג קארגו קאלט מוסבר בוויקיפדיה, אבל מאחר וכותרת העמוד שם היא "כת מטען", מה שמעיד על חוסר הבנה בסיסי של המושג, אני מעדיף את התיאור של ריצ'רד פיינמן: בזמן מלחמת העולם השנייה כמה מהשבטים הפרימיטיביים המאכלסים איים באוקיינוס השקט נפגשו עם התרבות המערבית. הם ראו מטוסים שנוחתים על האיים שלהם ומביאים איתם סחורה וכל מיני דברים מופלאים. הם רוצים שהמטוסים יחזרו, ולכן הם מנסים לשחזר את התופעה – הם מפנים רצועות שטח ארוכות, מדליקים מדורות לצידי 'מסלול הנחיתה' הזה, בונים בקתה גבוהה שבה יושב אדם עם חתיכות עץ על ראשו, ועל הגג מותקנים מקלות במבוק גבוהים – זה מגדל הפיקוח עם הפקח בעל האוזניות ועם האנטנות על הגג. וכך הם מקווים להביא את המטוס. זו דוגמא אחת, הדוגמא הקלאסית, למה שמכונה "קארגו קאלט".
שלשום, בזמן שכתבתי את הפוסט על שדות סיסמא, כל האתרים שקישרתי אליהם היו פתוחים לי בפיירפוקס, כל אחד בטאב נפרד. וכשסיימתי, רציתי לסגור את כולם (אבל להשאיר את הדפדפן פתוח). אז תפסתי את העכבר ולחצתי על ה-X של הטאב האחרון, ואז על ה-X של הטאב האחרון החדש, ואז על ה-X של הטאב האחרון החדש (אם אי-פעם תהיתם מה משותף לטאבים בדפדפן ולראשי החמאס בגדה…). ואז הבנתי שמשהו מוזר לי בתהליך – בהתחלה הטאבים נסגרו לי מבלי שנאלצתי להזיז את העכבר כלל, פשוט לחצתי תמיד באותו מקום, אבל באיזשהו רגע התחלתי להזיז אותו שמאלה בשביל להגיע אל ה-X של הטאב האחרון. אז החלטתי לבחון את העניין הזה לעומק.
מה שקורה, מרגע פתיחת הטאבים, זה ככה: בהתחלה הטאבים החדשים נפתחים בגודל קבוע, עד שהם ממלאים את רוחב החלון. מרגע שלא נכנסים יותר טאבים ברוחב המקורי, רוחבם של כל הטאבים מתחיל לקטון עם פתיחת כל טאב חדש, כי צריך להכניס יותר טאבים באותו חלון. באיזשהו שלב הם מפסיקים להצטמצם, הרוחב שלהם נשאר קבוע (הרוחב המינימלי), ומופיעה גלילה שמאפשרת להגיע לטאבים שלא נכנסים בחלון.
אבל אותנו יותר מעניינת סגירת הטאבים. אז אותו העקרון פועל גם בסגירה, רק להיפך – אם התחלת עם המון טאבים (במצב של גלילה), רוחבם לא משתנה עם סגירת כל טאב, לאחר מכן הגלילה נעלמת וכל טאב שנסגר מאפשר לטאבים הנותרים להתרחב קצת, עד שמגיעים למצב של רוחב מקסימלי קבוע – כשרוחבם המצטבר כבר לא ממלא את כל רוחב החלון. ואז הם מפסיקים לגדול, מסכנים.
ההשפעה של האלגוריתם הזה על תהליך סגירת טאבים מרובים ע"י המשתמש היא לא נעימה, בגלל ששינוי גודל הטאבים מזיז את כפתור ה-X, וצריך לרדוף אחריו.
כאשר יש לנו הרבה טאבים בעלי רוחב קבוע (כלומר, יש גלילה במסך), מצבנו טוב: הטאבים ממלאים את כל המסך, וסגירתם אינה גורמת לשינוי רוחב הטאבים הנותרים. אז אין לנו בעיה, כי טאב חדש תופס את מקומו של זה שנסגר, ומאחר והם בעלי אותו רוחב, ה-X החדש יושב בדיוק באותו מקום כמו בטאב שנסגר.
זה מתחיל להיות מעניין (ואני יודע ששאלתם את עצמכם מתי זה כבר יתחיל להיות מעניין) במצב שרוחב הטאבים משתנה. כי אז יש הבדל בין סגירת טאבים מהסוף (מימין בממשק אנגלי, כלומר סגירת הטאב האחרון) לבין סגירת טאבים מהאמצע. כי סגירתם מהסוף מציבה את כפתור ה-X החדש בדיוק במקום של הכפתור הישן, ואין צורך לכוון מחדש. אבל סגירתם מהאמצע גורמת בד"כ לכך שהעכבר עכשיו נמצא באמצע הטאב החדש, ולא על ה-X, בצורה כזו (השורה למטה זה המצב לאחר סגירת הטאב):
אז לכאורה כל עוד אנחנו סוגרים מהסוף, אנחנו מסודרים. אבל גם זה הולך להשתנות, כי ברגע שהטאבים כבר לא ממלאים את כל המסך, רוחבם נשאר קבוע (רוחב מקסימלי), אבל הטאב האחרון מתחיל לזחול שמאלה עם כל טאב שנסגר. אז עכשיו כפתורי ה-X הפנימיים כן חופפים, אבל האחרון כל פעם משנה את מקומו:
מה שמחמיר את המצב עוד, זה כל מיני משחקים שהדפדפנים עושים עם הטאבים וכפתורי ה-X. יש כאלה שמציגים את ה-X רק כשהטאב בפוקוס (IE8), יש כאלה שמציגים אותם רק כשהטאב ב-mouseover (ספארי), ויש שמשתדלים להציג אותו כל עוד המקום מאפשר (אופרה וכרום – והם גם אלה שממשיכים עם צמצום הטאבים הכי הרבה – בכרום הטאבים ממשיכים לקטון עד שיש כמאה טאבים, ואז רוחבם הופך לקבוע, וזה נראה בערך ככה:
כל הדפדפנים שבדקתי מעלימים את ה-X כשיש ממש המון טאבים ואז מציגים אותו רק בפוקוס על הטאב – אבל יש כאלה שמעבירים את הפוקוס אל הטאב שתופס את מקומו של זה שנסגר, ואז אפשר להמשיך ללחוץ על ה- X((IE8, ויש גם כאלה שמעבירים את הפוקוס טאב אחד ימינה, ואז העכבר נמצא מעל טאב שאין בו X (פיירפוקס) וצריך ללחוץ פעמיים.
בקיצור, כשיש הרבה טאבים שמשנים את רוחבם, אם נסגור מהסוף לא נצטרך להזיז את העכבר, אבל אם נסגור מהאמצע אז כן נצטרך.
זאת כל עוד משתמשים בפיירפוקס (המחשה למעלה), באקספלורר
באופרה
ובספארי
אבל לא בכרום! האנשים הטובים מגוגל המציאו לנו טאבים קסומים!
בכרום, כל עוד יש מספיק טאבים בשביל למלא את המסך, הטאב הבא תמיד ימוקם כך שכפתור ה-X שלו נמצא במקום בו היה הכפתור של הטאב שנסגר זה עתה. וזאת ללא קשר למיקומו – אם סגרתי מהסוף אז הטאב האחרון מחליק ימינה, ואם סגרתי מהאמצע אז הטאב הימני מחליק שמאלה.
אבל זה לא הכל. אם חושבים על זה לשניה, מבינים שזה לא לגמרי מסתדר – כיצד הטאבים יכולים גם להחליק ימינה (ולהתרחק ע"י כך מקצה המסך), וגם לתפוס את כל המסך, בשביל שכפתור ה-X הימני ביותר יישאר במקומו? אמנם הם משנים את רוחבם, אבל הם עדיין חייבים גם למקם את כפתור ה-X החדש בדיוק במקומו של הישן, וגם להיות בעלי רוחב זהה. בקיצור, כל התנאים האלה לא ממש מסתדרים.
מבולבלים? גם אני. לא בטוח שהייתי עולה על הסתירה לבד אלמלא שמתי לב למנגנון שפותר את זה. והפתרון הוא שהתהליך יכול לקרות בשני שלבים: אם סוגרים מהאמצע, אז בהתחלה הטאבים מחליקים שמאלה ואכן מתרחקים מקצה המסך, אבל לאחר שהזזנו את העכבר משורת הטאבים, הם נפרסים מחדש, ברוחב גדול יותר, ושוב תופסים את כל המסך. כך נראים שלושת השלבים:
השינוי קורה רק אם סגרתי מהאמצע – כשסוגרים מהסוף, זה קופץ ישר למצב הסופי. והקסם כן נפסק ברגע שאין מספיק טאבים בשביל למלא את המסך, כי יש להם גודל מקסימלי קבוע.
אגב, אני לא רואה סיבות אחרות שבגללן גוגל היו רוצים ליישם את המנגנון המסובך הזה מלבד לענות על התרחיש הספציפי הזה, בו המשתמש סוגר הרבה טאבים בבת אחת ומעוניין לעשות זאת מבלי להזיז את העכבר. וזה אומר שהם חושבים עלינו.