في عام 2024، كنت أبحث عن عمل. قررت تقديم خدماتي كـ مستشار مجتمعي. ومع ذلك، كان معظم الناس مهتمين بالمساعدة التقنية لإصلاح أو تحديث مواقع Discourse الخاصة بهم. سألني عميل محتمل عما إذا كان بإمكاني إضافة نموذج اتصال للأشخاص الذين لا يملكون حسابًا لإرسال ملاحظاتهم. بحثت حولي واستنتجت أن الأمر لم يكن ممكنًا. لكنني كنت أملك وقتًا فراغًا كافيًا، فاتبعت دليل مطوري الإضافات لأرى ما يمكنني فعله. في النهاية، طورت إضافة نموذج اتصال ووقّعت العقد مع العميل.[1]
فقط للتوضيح للجميع: لست مبرمج واجهات أمامية! لقد مرّ 13 عامًا منذ أن كنت مبرمجًا محترفًا بأي نوع. أعرف كيفية إنشاء نموذج HTML، وهذا هو تقريبًا كل ما أعرفه. لذا، كافحت من خلال قسم Ember وHandlebars في الدليل وجمعت حلًا مؤقتًا عمل بشكل كافٍ. لحسن الحظ، كنت مرتاحًا لأنظمة القوالب بعد أن استخدمتها في وظيفة سابقة.
وجدت وظيفة في مؤسسة OpenSSL[2] وتخلّيت معظمًا عن عملائي. لكن العميل الذي بنيت له الإضافة احتفظ بي في عقد احتياطي لأنه كان يقدر عملي حقًا. (لقد قمت بعدة مشاريع غير مرتبطة له.) لكي أستحق عقد الاحتياطي هذا، قررت ترقية خادم Discourse الخاص به. وهذا ما رأيته:
كان هذا فقط على موقع عميلي لأنني كنت غبيًا وقمت بتثبيت، لكن لم أفعّل، إضافة الاتصال على موقعي التجريبي. لذا، دخلت بسرعة في الوضع الآمن وقمت بتعطيل الإضافة. قضيت نهاية الأسبوع الماضي بعض الوقت في فهم ما حدث خطأ وكيف يمكنني إصلاحه لعميلي.
بعد بعض البحث، وجدت إلغاء دعم امتداد الملف .hbs في القوالب والإضافات:
في أحدث إصدار من Discourse، يُعتبر استخدام ملفات .hbs في القوالب والإضافات منتهي الصلاحية. سيتم إزالة دعم هذا تنسيق الملف بعد إصدار ESR التالي.
كان هذا في مارس، مما يعني أنه كان ينبغي أن يكون لدي حتى نهاية سبتمبر تقريبًا لإصلاحه إذا كنت أستخدم إصدار ESR. لكن إعدادات Discourse الخاصة بي تستخدم “tests-passed”[3]، لذا حصلت على الخطأ قبل بضعة أشهر، على ما أعتقد.
بما أنني سأضطر إلى إصلاحه على أي حال (أو خيبة أمل عميلي)، قفزت إلى التعليمات: تحديث القوالب والإضافات تلقائيًا إلى تنسيق الملف .gjs. كانت الخطوة الأولى هي تثبيت بيئة تطوير لأنني غيّرت حواسبي المحمولة منذ آخر مرة حاولت فيها ذلك.[4] عندما بدأت تشغيل Discourse أخيرًا وتأكدت من أن إضافتي معطلة محليًا، شغلت عملية الفحص[5]:
$ pnpm eslint --fix .
/Users/jericson/src/discourse-contact-plugin/assets/javascripts/discourse/components/contact-form.js
1:8 error Use Glimmer components(@glimmer/component) instead of classic components(@ember/component) ember/no-classic-components
3:16 error Native JS classes should be used instead of classic classes ember/no-classic-classes
3:16 error Please switch to a tagless component by setting `tagName: ''` or converting to a Glimmer component ember/require-tagless-components
20:3 error Use the @action decorator instead of declaring an actions hash ember/no-actions-hash
✖ 4 problems (4 errors, 0 warnings)
في حين أنه مزعج الاضطرار إلى تغيير إضافتي، إلا أن عملية الفحص ساعدتني على تنظيف وتحديث كودي. لكن السكربت الآلي تعثر في محاولة التحويل إلى .gjs. لذا، قررت تجربة https://ask.discourse.com/
لدي 12 سؤالًا هناك. لن أشاركها مع إنسان لأنها مجرد حركات مبعثرة لمبرمج متزايد الإحباط. في إحدى المراحل، اقترحت البوت “نهجًا عصريًا أكثر متانة” لواحدة من مشاكلي الفرعية شملت… ملف .js وملف .hbs.
أعرف سبب حدوث هذا. إنه مدرب على مناقشات Meta Discourse ولا تزال هناك الكثير من المنشورات التي تحتوي على كود Handlebars، بما في ذلك الجزء الثاني من دليل مطوري الإضافات الرسمي. سيتم تحديث ذلك بمرور الوقت، لكنني أقلق من أن يستغرق الأمر وقتًا أطول قليلاً لأن النصيحة الرسمية للحصول على مساعدة في الترقية هي سؤال البوت الدردشة بدلاً من السؤال على Meta Discourse.
أعتقد أنه لا ينبغي عليّ الشكوى؛ فقد ساعدني في فرز كودي وربما بجهد أقل من سؤال البشر.
استقرار المنصة
لذا، أعمل الآن في مؤسسة OpenSSL. ربما تعرفون عن OpenSSL بسبب ثغرة Heartbleed. تُستخدم في كل مكان. الإصدار الأكثر شعبية للتحميل هو 1.1.1 الذي وصل إلى نهاية عمره في 2023. الأكثر شعبية التالي هو 3.0، الذي أُطلق في 2021، لكنه لا يزال مدعومًا كإصدار دعم طويل الأجل (LTS). يليه 3.5، وهو أحدث إصدار LTS لدينا. هذه الإصدارات الثلاثة تمثل ما يقرب من 2/3 من التحميلات من GitHub.
هذا مخيب بعض الشيء لأن الإصدار 3.5 يحتوي على ميزات جديدة رائعة. لكن في النهاية، الميزات التي يهتم بها الناس هي مزيج من SSL/TLS والبدائيات التشفيرية. ما لم تكن متحمسًا لخوارزميات التشفير ما بعد الكمومية، فستؤجل ألم الترقية لأطول فترة ممكنة.
OpenSSL يقع في طبقة أدنى بكثير من Discourse، بالطبع. لكن المبدأ هو نفسه. ما لم تكن هناك ميزة جديدة، فإن الناس غير مهتمين بالترقيات التي تكسر العمل. أعرف أن أنتم جميعًا متحمسون للميزات الجديدة التي تمت إضافتها إلى Discourse. أفهم الرغبة في تغيير واجهة برمجة التطبيقات (API) للحصول على بعض التحسينات لاحقًا. أنا فقط أقلق من أن التحرك بسرعة كبيرة قد يضر بـ Discourse كمنصة تُبنى عليها المجتمعات.
بمناسبة الحديث عن ذلك، هناك عرض شرائح مفيد جدًا بعنوان رعاية المنصات كتبه أليكس كوموروسكي. الشريحة 90 تبدأ قسمًا يسمى “المنصة + النظام البيئي” يشرح كيف يجب أن تتطور المنصات مع نظمها البيئية. في هذه الحالة، Discourse هي المنصة التي تدعم نظامًا بيئيًا من مصممي الإضافات والقوالب، وخدمات الاستضافة، ومجتمع Meta Discourse، وحتى المجتمعات المبنية على Discourse. رؤى مهمة في ملاحظات المتحدث من الشريحة 98:
لكنهم ليسوا مستقلين؛ بل يرتبطون تبادليًا.
الأحداث التي تحدث في أحدهما تؤثر على الآخر، والعكس صحيح. فكر فيها كحلقات تغذية راجعة تربطهم في كلا الاتجاهين.
ليسوا مرتبطين بشكل جامد، بل يشبهون شريطًا مطاطيًا يربطهم. إنه جاذبية.
إذا تحركت منصة ونظامها البيئي بسرعة كبيرة نسبيًا لبعضهما البعض، فإن الرابطة تنكسر بتأثير كارثي. أنا أثق بـ Discourse في فعل الصواب تجاه النظام البيئي. إنه فقط بالنسبة لي، أشبه بأسابيع الماضي أن هذا الثقة قد ضعفت.
أنا فخور بعض الشيء بعملتي رغم أنها انتهت بأن تكون موقعًا ثابتًا إلى حد كبير. ↩︎
تلميح! ↩︎
كان تثبيت Redis و Rails أصعب مما تذكرت. ↩︎
ليس قبل قضاء وقت طويل في فشل استحواذ
eslint.config.mjs، على أي حال ↩︎

