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

מסיבה לא ברורה התעקשתי לנסות להריץ קוד לא תואם ABI על MIPS, והיה עם זה באג שלקח 
הרבה זמן ומאמץ לפתור.
להלן התקשורת בינינו במשך כמה ימים שניסיתי להבין את הבעיה (קצת ארוך, כי זה היה 
ארוך):

"הקוד הכי פשוט נתקע"
"תנסי ktrace" (מראה איזה קריאות מערכת נעשו וקצת מידע, כמו strace)
<פלט שמראה שזה נתקע בלופ עם getdents>
"נראה שזה נתקע בקריאת getdents... בטוח שזה קורא לספריות הנכונות (עם ה ABI האחר)?
אגב, תנסי לבטל את האופטימיזציה הזאת, אולי היא לא מתאימה פה מסיבה לא ברורה"
"לא, זה לא עוזר. אבל זה כן מוצא את הספריות הנכונות. אגב, יש לי דוגמה של 3 שורות 
קוד שגם נתקעת"
"נראה לי יותר פשוט קוד שלא משתמש ב locale ומנסה לעבור על הקבצים בתיקייה כלשהי 
גם יתקע"
"אכן נתקע"
*כמה שעות של להסתכל על gdb ללא רעיון מוצלח*
מישהו אחר: "ההבדל היחידי בקוד לקריאת מערכת בין 64ביט ואמולצית 32 ביט תחת קרנל 
64 ביט בקריאה הזאת זו השורה הזאת שנותנת מידע ל ktrace, לא נראה לי רלוונטי אבל 
אם מישהו יבדוק אני אעשה commit"
"זה לא רלוונטי כי שניהם זה אמולציית 32 ביט, אז מה ההבדל?"
"ל ABI השני יש רגיסטרים 32 ביט ולרגיל יש 64 ביט. הקרנל בשביל תאימות צריך לתרגם 
את זה מ32 ביט ל64 ביט"
עכשיו במקרה הסתכלתי על משהו אחר ומצאתי את הקוד שאחראי לאמולציה וניסיתי לקרוא 
וגם ראיתי איזה קריאה מחזירה נתון לא נכון (השוותי לקוד רגיל)
הראתי לחבר שלי שכתב כל מיני דברים שהוא חשב במהלך הזמן שהוא ניסה להבין את הקוד 
(לא הכי קריא, המפתח שכתב את זה ידוע לשמצה בתור אחד שכותב קוד לא קריא)... חשבנו 
שטעה בקוד כי הוא כל כך לא קריא, אבל הסתבר שהכל תקין במאה אחוז.
בשביל להבין וגם בגלל שנגמרו לי הרעיונות ניסיתי קצת printf debugging
בסוף אחרי הרבה זמן מצאתי פרמטר לא במקום. מסתבר שיש לנו נתונים על כל קריאת מערכת 
וחלק לא היה מלא. גם זה לא הספיק בשביל לפתור אז תיארתי במדויק מה חסר, וכאן מפתח 
עם המון ניסיון עזר ותוך כמה דקות מצא פתרון.

באופן מוכלל:

סה"כ סיכום בזבוז זמן:
אני: 4 ימים (!)
מנטור\חבר טוב: שעתיים
מפתחים שסתם מעוניינים לפתור באג כי זרקת להם פאזל והצלחת לתאר צעדים פשוטים 
לשחזור הבאג: 20-40 דקות

תיארתי בעיה עם דוגמה מאוד פשוטה לשחזור (3 שורות קוד) וזה הפך את הבאג 
ל"אטרקטיבי", זרקתי פאזל קטן למפתחים וגם כאלה שהם לאו דווקא מנטורים או חברים 
טובים היו מוכנים להסתכל קצת למשך כמה דקות ולהציע רעיונות.
מישהו שהוא חבר טוב היה מוכן לבזבז הרבה יותר זמן, וקצת חשבנו בקול רם כדי לשתף 
במחשבות\לוודא שלא איבדתי את הכיוון.
רוב המוטבציה באה ממני. ובכלל באופן כללי אם רואים מישהו מנסה לפתור בעיה במשך כמה 
ימים וממש מתאמץ אז רוצים קצת לעזור לו ומתסכלים איפה הוא תקוע.

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

מתכנתים קוראים את הרשימות תפוצה או צ'אט כי משעמם להם ולהסתכל כמה דקות על בעיה 
חדשה זה מעניין. להציע רעיונות זה גם קל.
אם תוכל לתאר את הבעיה תוך 3 דקות ככה שאפשר לשחזר אותה אז יש לך כמה דקות נוספות 
שבהם מפתח אחר יכול להציע רעיונות.
בהאקתון בניגוד לרשימות תפוצה תמצא אנשים שמוכנים לבזבז יותר זמן וגם תוכל לדבר 
ישירות ולא רק לכתוב מייל, או "בוא תראה אצלי במחשב" (שם כבר הבאג רץ, הקוד 
פתוח...)
כנראה שלא תצליחו למצוא מישהו שמתעניין דווקא באותו הנושא ומוכן להשקיע המון זמן, 
אבל כן תמצאו מישהו שיכול לשחרר אותכם אם אתם נתקעים ולהציע רעיונות.
_______________________________________________
Discussions mailing list
Discussions@hamakor.org.il
http://hamakor.org.il/cgi-bin/mailman/listinfo/discussions

לענות