ביצי הפתעה – מה ולמה

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

מאפיין נסתר של Slack

בתוכנה Slack, כאשר נכנסים לתפריט המאפיינים, רואים אפשרות בחירה מסקרנת. מה שקורה אחר כך נראה כך:


ב-Slack הבינו לחלוטין שגם מוצרי B2B צריכים להיות כיפיים. רואים את זה על כל צעד ושעל: בהודעות המשעשעות המתקבלות כאשר כל ההודעות נקראו, בהודעות השגיאה, באפשרות לבחור ״חומוס״ כצליל נוטיפיקציה, וגם באיסטר אג הקטן הזה. אולי לפיצ׳ר הזה אין ערך מוסף אמיתי בכל הקשור לתפקיד אותה אמורה האפליקצייה למלא – העברת מסרים מידיים בין חברי צוות – אבל היא משרתת את התדמית של המוצר ושל הציפייה של המשתמשים שלו: שהכלים המשמשים בעבודה יהיו כיפיים וחברותיים לפחות כמו הכלים המשמשים את המשתמש האישי.

מתיחת אחד באפריל של Stack Overflow

לקראת אחד באפריל האחרון שינו ב-Stack Overflow את המראה והראו לנו איך יכול היה האתר להיראות לו היינו כעת באמצע שנות התשעים העליזות. כמו בעוגת יום הולדת של בני שש, לאתר נזרקו כל הצבעים והאפקטים שהיה אפשר למצוא, החל מטקסטורה צבעונית לרקע דרך פונט של קומיקס ועד לזנב של ניצוצות שיוצא מסמן העכבר. למי שפספס את זה בזמן אמת, אפשר לראות סרטון קצר כאן. כדי לא להרגיז יותר מדי את המשתמשים מפעילי האתר סימנו באופן בולט היכן אפשר לכבות את האפקטים ולחזור למראה הרגיל.למרות שאולי לא מדובר באיסטר אג מהזן הרגיל, שכן לא היה ממש צריך לחפש כדי למצוא את הפיצ׳ר הזה, זו דוגמא לחברה ששנה אחר שנה משתדלת לממש פיצ׳רים שאין להם תרומה של ממש למוצר המקורי, ולפעמים אפילו מזיקים לו, כמו שאירע בשנה שעברה כאשר מתיחת אחד באפריל גרמה לאתר לקרוס.

הזן של פייתון

בשפות תכנות רבות למילה this יש משמעות מיוחדת בתכנות מונחה עצמים. בפייתון לעומת זאת המילה this היא חסרת משמעות והמילה הדומה ביותר לשימוש בה היא self. אולם אם ננסה לייבא ספריה בשם this נקבל את התוצאה הבאה:

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

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

אגב, קל לפספס את הבדיחה הנסתרת בשורה הבאה:

החתימה של מארק זביקובסקי

כולנו מכירים את הסיומת exe לקבצי חלונות, שמגלה שהקובץ הוא בר הרצה. מאחורי הסיומת הזאת מסתתרים כמה סוגי קבצים, ואחד מהם הוא DOS MZ executable. מקור השם הוא משני הביטים הראשונים בקובץ שאינם מקודדים פקודות או נתונים של התוכנית אלא הם תמיד 77 ו-90, שבקידוד ASCII פירושם MZ. אלו הם ראשי התיבות של מארק זביקובסקי, יהודי כמובן, שתכנן את הפורמט הזה ורצה להשאיר בו את חותמו האישי. כתוצאה מכך, שני התווים הללו משמשים במערכות רבות לקביעת סוג הקובץ – אם הקובץ מתחיל בתווים MZ די בכך שהמערכת תתייחס לקובץ הזה כאל קובץ הרצה של חלונות.

HTTP Status Code 418

גם מי שאינם מתכנתים מכירים את הסטטוס בקוד 404 שתיאורו הוא ״Not Found״, שאומר שמשאב מסוים (בדרך כלל עמוד אינטרנט) לא נמצא. רשימת הסטטוסים שמוגדרים בסטנדרט של HTTP כוללים קודים רבים, כמו 200 שתיאורו הוא בפשטות ״OK״, או 401 שמשמעותו הוא שהמשתמש אינו מזוהה.כשמתבוננים בתיאור של הסטטוס 418 מגלים שהוא ״I'm a teapot״, או בעברית ״אני קנקן תה״. הסטטוס הזה נולד ממסמך RFC שנוצר בראשון באפריל 1998, ומאז הוא חלק מהסטנדרט. כך מתואר הסטטוס בתיעוד של מוזילה:

הכתובת http://www.error418.net ניגשת לשרת שמממש את הפורט הזה ואומר שהוא קנקן תה ולכן הוא איננו מוכן להכין קפה.

כתוצאה מכך כל ספריה שרוצה שרוצה לממש את הסטנדרט באופן מלא צריכה להיות מוכנה לאפשרות שמישהו ישתמש בפורט הזה ולהשתמש בו. למשל, הנה קוד המקור של הספרייה requests בפייתון בה סטטוס 418 נמצא ברשימה כשווה בין שווים:

בחזרה לעתיד בפייתון

לפעמים נתקלים באיסטר אגס מוצלחים פחות שיכולים ליצור בעיות. בפייתון 3.8 שוחרר תיקון לבאג בהגדרת איסטר אג שאם לא היה מתגלה בזמן היה יכול לגרום לבעיות.
כאשר רוצים להציג בפייתון שינוי שיש לו פוטנציאל להשפעה משמעותית, משחררים אותו תחילה כאפשרות אופציונלית שנמצאת בחבילה הווירטואלית __future__. למשל, אחד השינויים הבולטים בין פייתון 2 לפייתון 3 היה ההמרה של print שהיה statement (מילת מפתח, כמו if או return) להיות פונקציה, מה שאיפשר לה לקבל פרמטרים. כדי להפוך את ההמרה להדרגתית ולאפשר לכתוב קוד פייתון 2 עם print כפונקציה, אפשר להמיר את ההתנהגות על ידי שימוש בחבילה הווירטואלית המתאימה.

נשים לב שזוהי לא באמת פעולה של טעינת ספרייה, אלא רק הוראה לאינטרפרטר להתנהג כאילו print היא פונקציה. לכל פיצ׳ר כזה מוגדר מתי נתווספה האפשרות הזאת ומתי היא תהפוך למנדטורית, דהיינו שהקוד יתנהג כך תמיד אפילו בלי הגדרת ה-import הזה.

נתבונן כעת בקוד הבא, הפעם בפייתון 3:

זהו איסטר אג שנוצר באחד באפריל 2009, והוא משנה את הסינטקס של השפה כך שבמקום אופרטור אי השוויון != משתמשים באופרטור <>. כמו כל future, מוגדר באיזו גירסה ההתנהגות תהפוך למנדטורית והיא תהפוך להיות חלק מהשפה.

כאשר הפיצ׳ר יצא בגירסת פייתון 3.1, היה נראה שגירסה 3.9 היא מספיק רחוקה כדי להגדיר אותה לגירסה בה ההלצה הזאת תהפוך להיות חלק מהשפה. לקראת שחרור גירסה 3.8 מישהו שם לב לכך. והתיקון? להגדיר את הגירסה המנדטורית להיות 4.0.
גם אם הבאג הזה היה נשכח ולא מתוקן בגירסה 3.8, לא סביר שגירסה 3.9 הייתה יוצאת עם <> כאופרטור אי השוויון ושוברת כל קוד פייתון 3 שקיים. סביר יותר להניח שהפיצ׳ר הזה היה מוחרג איכשהו. אלא שנראה שגם זה היה עלול להיות מחיר גבוה מדי עבור בדיחת אחד באפריל.

לסיום

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

תגובה אחת בנושא “ביצי הפתעה – מה ולמה

הוסיפו את שלכם

נשמח לשמוע מה אתם חושבים על המאמר

ערכת עיצוב: Baskerville 2 של Anders Noren.

למעלה ↑

רוצים להיות מפתחים טובים יותר?
הכניסו את כתובת המייל שלכם כדי לקבל הודעות על פוסטים חדשים ולהישאר מעודכנים.

נרשמת בהצלח. בתודה, הגמל.

שגיאה בלתי צפויה, אנא נסה שוב.

camelCase will use the information you provide on this form to be in touch with you and to provide updates and marketing.