تاريخ النشر: 28 أكتوبر 2025
أنا "هارش سينغ"، طالب في السنة النهائية من برنامج بكالوريوس التكنولوجيا في الهندسة الكيميائية في معهد IIT (ISM) Dhanbad، وشاركتُ في برنامج Google Summer of Code (GSOC) في عام 2025. تشارك هذه المشاركة رحلتي إلى أن تم قبولي في برنامج GSoC، وبعض الأشياء التي تعلّمتها أثناء مشاركتي فيه.
قبل GSoC: استكشاف تطوير الإضافات
في سنتي الأولى، كنت حريصًا على الانضمام إلى CyberLabs، وهو نادي التكنولوجيا الرسمي في كليتنا، مثل العديد من الطلاب الآخرين. للاستعداد، استشرتُ طالبًا في الصفوف العليا، وقد عرض عليّ إضافة Chrome أنشأها للانضمام إلى النادي. كانت مختلفة تمامًا عن تطوير الويب العادي الذي أعرفه. بدا الأمر وكأنّه طريقة رائعة لإدخال نصوص برمجية وتعديل المواقع الإلكترونية على متصفّحك الخاص.
لقد جرّبت الكثير من واجهات برمجة التطبيقات للإضافات، وشهدت حتى عملية الانتقال من الإصدار Manifest V2 إلى الإصدار V3. تمكّنتُ من إنشاء مشروع صغير باستخدامها، ثم انضممتُ إلى CyberLabs، وبعدها انشغلتُ بحياتي الجامعية، وتوقّفتُ عن تطوير الإضافات لفترة من الوقت.
مؤخرًا، وأثناء التفكير في التقديم للمشاركة في برنامج Google Summer of Code (GSoC)، عثرت على مشروع حول واجهات برمجة التطبيقات لإضافات Chrome. لقد أثارت هذه الذكريات حماسي، فقلت لنفسي: "ألن يكون من الرائع إنشاء واجهة برمجة تطبيقات هذه المرة يمكن أن يستخدمها طالب في الصف الثاني الثانوي في المستقبل للدخول إلى CyberLabs؟ سيكون ذلك أفضل ما يمكن أن أتباهى به". بما أنّني أدرك معظم مصطلحات الإضافات من عملي السابق، يبدو لي أنّ هذا المشروع مناسب تمامًا.
جارٍ الاستعداد للتطبيق
فجأة، قرّرت التواصل مع أوليفر، وهو مهندس علاقات المطوّرين في فريق "إضافات Chrome". سألته عن المتطلبات التي يجب استيفاؤها ليتم قبول المتقدّم في برنامج GSoC الخاص بمشروع Chromium. وقد ردّ عليّ في غضون يومين. كانت رسالته الإلكترونية مشجّعة للغاية، وقال إنّهم يريدون فقط التأكّد من قدرتي على استكشاف قاعدة الرموز البرمجية وكتابة بعض رموز C++.
بدأتُ بإعداد Chromium على جهازي. كانت تجربة صعبة جدًا، فقد استغرقت أربعة أيام كاملة ومحاولات لا حصر لها لإعداد قاعدة الرموز البرمجية الضخمة وإجراء عملية إنشاء ناجحة. لقد عثرتُ على مشكلة بسيطة على الإنترنت، وهي تتعلّق بـ sidePanel.open() بدون إيماءة مستخدم، وأرسلتُ تصحيحًا لحلّها. (عندما أتذكّر الأمر الآن، أدرك أنّ التغيير كان بسيطًا 🙂). أرسلتُ رسالة إلكترونية إلى أوليفر لإطلاعه على تقدّمي. أخبرني أنّهم لا يخططون لإتاحة هذه الميزة، لكنّه أشار أيضًا إلى أنّ العمل الذي أنجزته كان كافيًا لإثبات جديتي. بعد ذلك، اقترح عليّ العمل على طريقة getPosition للوحة الجانبية. لقد أدركتُ الخطأ وأرسلتُ إليه رسالة إلكترونية أخرى، وقد عبّر عن سعادته وأخبرني أنّ طريقتي تتوافق مع ما كان يناقشه فريقه. وقد منحني ذلك الثقة للمضي قدمًا في المشروع، مع العلم أنّه يمكنني فهم الرمز البرمجي وإجراء تغييرات عليه.
اقتراحي في GSoC
بعد ذلك، تم تقديم اقتراح GSoC. كان وصف المشروع الأولي، "واجهات برمجة التطبيقات SidePanel وDNR"، عامًا جدًا، لذا لم أكن متأكدًا من المهام المحددة التي يجب إدراجها أو كيفية إنشاء جدول زمني في اقتراحي. أرسلتُ رسالة إلكترونية إلى "أوليفر" بشأن ذلك، وأجابني بأنّه عدّل وصف المشروع. ولم يكن يخفى عليّ أنّه أضاف العديد من واجهات برمجة التطبيقات، بما في ذلك واجهة برمجة التطبيقات sidePanel.getPosition التي كنت أعمل عليها.
كانت المكوّنات الرئيسية لاقتراحي هي فهم المشروع وأفكار التصميم والعمل التحضيري للاقتراح وجدول زمني للمخرجات. لقد حدّدتُ حجم مهامي بدقة، ما أظهر فهمًا شاملاً للعمل المطلوب. لقد أعددتُ مسودة اقتراحي وراجعتها مرتين.
أحد الأمور التي أندم عليها، وهي نصيحة مهمة للمتقدّمين في المستقبل، هو عدم تضمين مواصفات تصميم مناسبة للميزات التي خطّطتُ لإنشائها. على سبيل المثال، عند اقتراح واجهة برمجة تطبيقات لإغلاق اللوحة الجانبية، كان من المفترض أن أقدّم ملخّصًا للمعلمات، وأوضّح أسباب اختياري لها، وأشرح كيفية التعامل مع الحالات الحدّية، وأصف كيف يمكن توحيد واجهة برمجة التطبيقات لجميع المتصفّحات. كان ذلك سيُظهر مستوى فهم أعمق بكثير.
في سياق مشروع إضافات Chromium، إحدى الجهات الرئيسية هي WECG (مجموعة WebExtensions Community Group، ويتم لفظها "وي سي جي")، حيث تتم مناقشة تصاميم واجهات برمجة التطبيقات الجديدة بشكل رسمي. خلال فترة GSoC، قد يحتاج المساهمون إلى تقديم مقترحاتهم بشأن واجهات برمجة التطبيقات إلى هذه المجموعة. لذلك، فإنّ توفّر فكرة تصميم جاهزة في اقتراحك المقدَّم إلى GSoC يمنحك ميزة كبيرة، لأنّه يوضّح للمرشدين أنّك مستعد لهذه الخطوة الحاسمة وأنّك ستحقّق أداءً جيدًا خلال فترة GSoC.
في أوائل شهر مايو، تلقّيتُ الرسالة الإلكترونية التي تفيد بقبولي. 🙂
مساهماتي خلال برنامج GSoC
كانت فترة GSoC رائعة. كان معلّمي "سليمان" لطيفًا للغاية، وعقدنا اجتماعات أسبوعية مثمرة ساعدتني في الحفاظ على تركيزي. تعرّفت أيضًا على مساهم آخر، وهو "أميت ب"، الذي قدّم لي مساعدة كبيرة كلما شعرت بالإحباط. كانت المشاركة في اجتماعات WECG تجربة مفيدة جدًا، فقد أدركتُ كيف تسير الأمور على هذا المستوى وفهمتُ سبب أهمية الخبرة. ناقشتُ مقترحاتي بشأن واجهة برمجة التطبيقات هناك وحصلتُ على الموافقة من مورّد متصفّح آخر.
لقد فتحتُ عدة قوائم تغييرات في البداية. تراجع تقدّمي لاحقًا بسبب المراجعات المتكرّرة للرمز، ولكنّني كنت سعيدًا بمواصلة العمل. كانت مساهماتي الرئيسية المدمجة في Side Panel API كما يلي:
sidePanel.getLayout()APIsidePanel.close()API- حدثا
sidePanel.onOpened()وsidePanel.onClosed()(استند هذان الحدثان إلى اقتراح بشأن مراحل النشاط من Microsoft)
لا تزال طلبات تغيير الرمز الأخرى لواجهة Commands API قيد التطوير (يعتمد ذلك على مدى نشاطي بعد انتهاء برنامج GSoC 🙂). يمكنك الاطّلاع على تفاصيل مفصّلة في تقريري النهائي المتاح ضمن الرابط "عرض الرمز" في صفحة مشروع GSoC.
أودّ أن أشكر بشكل خاص "أوليفر دانك" و"سولومون كينارد" و"كلفن جيانغ" و"ديفلين كرونين" و"توم لوكاسيفيتش" و"أندريا أورو" الذين راجعوا كل قوائم التغيير تقريبًا. أشعر بسعادة غامرة عندما أرى الرمز البرمجي الذي كتبته يصبح جزءًا من Chrome. وصفني المرشدون بأنّني أتحلّى بإحساس قوي "بالملكية"، وهو ما أعتبره إطراءً كبيرًا.
ملخص
إذا سألتموني عن الفوائد التي حقّقتها من خلال برنامج GSoC، أقول إنّها لم تقتصر على المعرفة الفنية. لقد أتاحت لي المشاركة في المناقشات المهمة التي ستؤثر في العديد من مطوّري الإضافات. كان هذا أول عمل لي يتم استخدامه في تطبيق حقيقي. لقد التقيتُ بموجّهين صبورين أرشدوني وعلّموني الكثير، ما جعل التجربة بأكملها مثمرة للغاية.
آمل أن تكون قصتي مرجعًا مفيدًا للآخرين الذين يريدون المساهمة في Chromium أو المشاركة في برنامج Google Summer of Code.
نصائح للمتقدّمين إلى برنامج GSoC
- اختَر فكرة تعجبك حقًا. يجب أن يكون الاهتمام هو أولويتك القصوى. يمكنك دائمًا تحسين مهاراتك، ولكن الشغف هو ما سيساعدك على مواصلة رحلتك في الأوقات الصعبة. لقد جرّبتُ كلا الجانبين، وأؤكّد لك أنّه عندما تعمل على شيء لا يهمّك، ستلقي اللوم على الآخرين عندما تسوء الأمور. ومع ذلك، إذا كنت تحب عملك، ستنظر إليه على أنّه تحدٍّ يجب التغلّب عليه.
- لا تخَف من المنافسة. لقد رأيت الكثير من الأشخاص يفقدون حماسهم بعد الاطّلاع على أسماء المتقدّمين الآخرين في قنوات المنتدى. كل مشروع جيد سيواجه منافسة. ركِّز على نقاط قوتك. إذا سبق لك استخدام أي مكتبة، ابحث عن مشروع يستخدمها. ستكون لديك ميزة تنافسية لأنّك ستتمكّن من الاستفادة من خبرتك الفريدة.
- الاعتراف بدور الحظ والتركيز على التواصل: لنكن واقعيين، يتطلّب برنامج GSoC بعض الحظ. تتلقّى بعض المشاريع الرائجة أكثر من 300 عرض لشغل منصب أو منصبين. أشكّ في أنّ المرشدين يمكنهم قراءة كل رسالة بالتفصيل. لهذا السبب، يُعد التواصل المبكر أمرًا أساسيًا. شارك في المشروع مسبقًا، وتأكَّد من أنّ اقتراحك قوي ومباشر.
- إذا لم يتم اختيارك، لا يعني ذلك نهاية المطاف. أصبحت لديك الآن مساهمات قيّمة في مشاريع مفتوحة المصدر في سيرتك الذاتية. استخدِم هذه الشهادة للتقدّم بطلب للحصول على فرص أخرى خلال الصيف. لقد أنجزت الجزء الأصعب.
أخيرًا وليس آخرًا:
"لقد خُلق كل إنسان لعمل معيّن، وقد وُضع الشوق إلى هذا العمل في قلب كل فرد". — الرومي
نشكرك على القراءة.