פורסם: 28 באוקטובר 2025
קוראים לי הארש סינג (Harsh Singh), ואני סטודנט שנה אחרונה לתואר ראשון בטכנולוגיה (B.Tech) בהנדסה כימית ב-IIT (ISM) Dhanbad. בשנת 2025 השתתפתי בתוכנית Google Summer of Code (GSOC). בפוסט הזה אני משתף את המסע שלי עד שהתקבלתי ל-GSoC, וכמה מהדברים שלמדתי במהלך ההשתתפות שלי.
לפני GSoC: הכרת פיתוח תוספים
בשנה הראשונה שלי, כמו הרבה אחרים, רציתי להצטרף ל-CyberLabs, מועדון הטכנולוגיה הרשמי של המכללה שלנו. כדי להתכונן, פניתי לסטודנט ותיק שהראה לי תוסף ל-Chrome שהוא בנה כדי להיכנס למועדון. היא הייתה שונה לחלוטין מהפיתוח הרגיל לאינטרנט שהכרתי. זה נראה כמו דרך מגניבה להוסיף סקריפטים ולשנות אתרים בדפדפן שלכם.
השתמשתי בהרבה ממשקי API של תוספים, ואפילו הייתי עד למעבר מ-Manifest V2 ל-V3. הצלחתי לבנות פרויקט קטן באמצעות התוספים, נכנסתי ל-CyberLabs, ואז הייתי עסוק בלימודים ולא פיתחתי תוספים במשך תקופה.
לאחרונה, כשחשבתי להגיש בקשה להשתתפות בתוכנית Google Summer of Code (GSoC), נתקלתי בפרויקט בנושא ממשקי API של תוספים ל-Chrome. הנוסטלגיה הכתה בי בעוצמה – 'איזה מגניב יהיה ליצור הפעם API שבעתיד, סטודנט בשנה השנייה ישתמש בו כדי להיכנס ל-CyberLabs? זה יהיה הכי טוב". מכיוון שאני כבר מבין את רוב המונחים שקשורים לתוספים מהעבודה הקודמת שלי, הפרויקט הזה מתאים לי באופן מושלם.
הכנה להגשת בקשה
מתוך אינטואיציה, החלטתי לפנות לאוליבר, מהנדס קשרי מפתחים בצוות התוספים ל-Chrome. שאלתי אותו מה צריך לעשות כדי להתקבל לתוכנית GSoC של Chromium. הוא השיב לי תוך כמה ימים! האימייל שלו היה מעודד מאוד. הוא כתב שהם רק רוצים לראות שאני יכול לחקור את בסיס הקוד ולכתוב קוד ב-C++.
התחלתי בהגדרת Chromium במחשב שלי. היה לי קשה מאוד. לקח לי ארבעה ימים מלאים וניסיונות רבים עד שהצלחתי להגדיר את בסיס הקוד העצום וליצור build מוצלח. מצאתי באינטרנט בעיה פשוטה – משהו שקשור ל-sidePanel.open() בלי תנועת משתמש – ושלחתי תיקון כדי לפתור אותה. (במבט לאחור, זה היה שינוי קטן 🙂). שלחתי לאוליבר אימייל לגבי ההתקדמות שלי. הוא אמר לי שזה לא משהו שהם מתכננים לתמוך בו, אבל גם שהעבודה שעשיתי מספיקה כדי להראות שאני רציני. אחר כך הוא הציע שאעבוד על שיטת getPosition לחלונית הצדדית. הבנתי מה הבעיה, שלחתי לו אימייל שוב והוא היה מאוד שמח. הוא אמר שהגישה שלי תואמת למה שהצוות שלהם דן בו. ההסבר הזה נתן לי את הביטחון להמשיך בפרויקט, כי ידעתי שאני יכול להבין את הקוד ולבצע בו שינויים.
My GSoC proposal
השלב הבא היה שליחת ההצעה ל-GSoC. התיאור הראשוני של הפרויקט, SidePanel APIs & DNR APIs, היה רחב מאוד, ולכן לא הייתי בטוח אילו משימות ספציפיות לכלול ברשימה או איך ליצור ציר זמן בהצעה שלי. שלחתי אימייל לאוליבר בנושא הזה, והוא השיב לי שהוא עדכן את תיאור הפרויקט. לשמחתי, הוא הוסיף כמה ממשקי API, כולל sidePanel.getPosition API שכבר עבדתי עליו.
הרכיבים העיקריים של ההצעה שלי היו הבנה של הפרויקט, רעיונות עיצוביים, עבודה לפני ההצעה ולוח זמנים של חומרים להגשה. הערכתי בצורה מדויקת את גודל המשימות, כי זה מעיד על הבנה מעמיקה של העבודה הנדרשת. כתבתי טיוטה של ההצעה שלי וביקשתי לבדוק אותה פעמיים.
דבר אחד שאני מצטער עליו, וזה טיפ חשוב למועמדים בעתיד, הוא שלא כללתי מפרט עיצוב מתאים לתכונות שתכננתי ליצור. לדוגמה, כשמציעים API לסגירת החלונית הצדדית, צריך לפרט את הפרמטרים, להצדיק את הבחירות, להסביר איך לטפל במקרים חריגים ולתאר איך אפשר לתקנן את ה-API לכל הדפדפנים. התשובה הייתה משקפת רמת הבנה עמוקה יותר.
במסגרת פרויקט התוספים ל-Chromium, הגוף המרכזי הוא WECG (WebExtensions Community Group, קבוצת הקהילה של WebExtensions, שמבטאים "ווי-סי-ג'"), שבו מתקיימים דיונים רשמיים על עיצובים חדשים של API. במהלך תקופת GSoC, יכול להיות שהמשתתפים יצטרכו להציג את הצעות ה-API שלהם לקבוצה הזו. לכן, אם יש לכם רעיון לעיצוב שמוכן להצעה שלכם ל-GSoC, זה יתרון עצום, כי זה מראה למנטורים שאתם מוכנים לשלב החשוב הזה ושאתם תצליחו במהלך התקופה של GSoC.
בתחילת מאי קיבלתי את האימייל – התקבלתי! 🙂
התוכן שהוספתי במהלך GSoC
התקופה של GSoC הייתה נהדרת. המנטור שלי, סולומון, היה נחמד מאוד, והפגישות השבועיות שלנו היו יעילות ועזרו לי להתקדם. הכרתי גם תורם נוסף, אמיט פ., שתמיד עזר לי כשהייתי מתוסכל. השתתפות בפגישות של WECG פקחה את עיניי. ראיתי איך הדברים עובדים ברמה הזו והבנתי למה הניסיון חשוב כל כך. הצגתי שם את הצעות ה-API שלי וקיבלתי אישור מספק דפדפן אחר.
בהתחלה פתחתי כמה רשימות שינויים. ההתקדמות שלי הואטה בהמשך בגלל תהליך הלוך ושוב של בדיקות קוד, אבל שמחתי להמשיך. התרומות העיקריות שלי למיזוג היו ל-Side Panel API:
-
sidePanel.getLayout()API -
sidePanel.close()API sidePanel.onOpened()ואירועיsidePanel.onClosed()(האירועים האלה מבוססים על הצעה למחזור חיים של מיקרוסופט)
השינויים האחרים שלי ב-API של הפקודות עדיין בתהליך (תלוי כמה אהיה פעיל אחרי GSoC 🙂). אפשר לראות פירוט בדוח הסופי שלי, שזמין בקישור 'הצגת הקוד' בדף הפרויקט שלי ב-GSoC.
תודה מיוחדת לאוליבר דאנק (Oliver Dunk), סולומון קינארד (Solomon Kinard), קלווין ג'יאנג (Kelvin Jiang), דבלין קרונין (Devlin Cronin), טום לוקשביץ' (Tom Lukaszewicz) ואנדראה אורו (Andrea Orru), שבדקו כמעט את כל רשימות השינויים שלי. זה מדהים לראות את הקוד שלי הופך לחלק מ-Chrome. המשוב שקיבלתי מהמנטורים שלי היה שיש לי תחושת אחריות חזקה, וזה היה מחמיא מאוד.
סיכום
אם תשאלו אותי מה קיבלתי מ-GSoC, התשובה היא הרבה יותר מידע טכני. הייתה לי הזדמנות להשתתף בדיונים חשובים, שישפיעו על הרבה מפתחי תוספים. זו הייתה העבודה הראשונה שלי שאי פעם נכללה באפליקציה בעולם האמיתי. פגשתי מנטורים שהיו מטופלים בעבר, והם הנחו אותי ולימדו אותי כל כך הרבה, מה שהפך את כל החוויה למעשירה מאוד.
אני מקווה שהסיפור שלי יעזור לאנשים אחרים שרוצים לתרום ל-Chromium או להשתתף בתוכנית Google Summer of Code.
טיפים לאנשים שמגישים מועמדות ל-GSoC
- בוחרים רעיון שבאמת אוהבים. האינטרס שלכם צריך להיות בראש סדר העדיפויות. תמיד אפשר לשפר את הכישורים, אבל התשוקה היא מה שתעזור לכם להמשיך כשדברים מסתבכים. הייתי בשני הצדדים, ותאמינו לי: כשעובדים על משהו שלא מעניין, מאשימים אחרים כשמשהו משתבש. אבל אם אתם אוהבים את העבודה, תראו בה אתגר שצריך להתמודד איתו.
- אל תחששו מתחרות. ראיתי הרבה אנשים שאיבדו את המוטיבציה אחרי שראו מי עוד הגיש בקשה בערוצי הקהילה. בכל פרויקט טוב תהיה תחרות. התמקדו בחוזקות שלכם. אם עבדתם עם ספרייה כלשהי בעבר, חפשו פרויקט שמשתמש בה. יהיה לכם יתרון כי תוכלו להביא לשולחן את הניסיון הייחודי שלכם.
- הכירו בכך שהיה לכם מזל והתמקדו בתקשורת. בואו נהיה ריאליים, יש גם קצת מזל ב-GSoC. יש פרויקטים פופולריים שמקבלים יותר מ-300 הצעות ל-1-2 מקומות. אני בספק אם המנטורים יכולים לקרוא כל אחת מהן בפירוט. לכן חשוב ליצור קשר מוקדם ככל האפשר. כדאי להשתתף בפרויקט מראש, ולוודא שההצעה שלכם מוצקה וממוקדת.
- אם לא נבחרתם, זה לא סוף הסיפור. עכשיו יש לכם תכנים חשובים שהוספתם לקוד פתוח בקורות החיים. אפשר להשתמש במידע הזה כדי להגיש מועמדות להזדמנויות אחרות בקיץ. כבר עשית את העבודה הקשה!
ואחרון חביב:
"כל אחד נוצר למטרה מסוימת, והרצון להשיג את המטרה הזו הוטמע בכל לב". — רומי
תודה שקראתם.