سوالف #7 VirtualBox و procedural programming و ابعد من الاستسلام للحلول

اهلا وسهلا

اهلا وسهلا

حل

من فترة طويلة ماكتبت شي في المدونة (اخاطب الخلا والجن) بس فعلا من فترة طويلة و طويلة جدا ايام ماكان virtualbox يبتع لشركة sun قبل استحواذ اوراكل عليها كتبت موضوع في نقطة تطوير 🥺 -واحد من اعظم المنتديات في وقته (لا تتصفح الارشيف)- وفحوى الموضوع هو مشاركة مجلد بين الـ host و guest VM مع صلاحيات كاملة R/W

مشكلة

المشكلة كانت في وقتها ان عملية المشاركة البسيطة الافتراضية في VirtualBox لا تعطي صلاحية كتابة, ثم بدأت وقتها ابحث عن حل واتذكر شاركت في نقاش حول الموضوع اعتقد في احد صفحات sourceforge او موقع ثاني الله العالم, وكانت ثمرة النقاش وجود حل بمشاركة المجلد عن طريق الشبكة من ادوات vbox مباشرة, و بالرغم من بساطة الموضوع الا انه كان وقتها ثورة في المنتديات العربية وكان واحد من موضوعين (الاول كتبت عنه في 2011 وموجود في بدايات المدونة) كتبتها و تم نقلها ونشرها كعادة اعضاء المنتديات في ذلك الوقت لكن كان نشر ضخم و في اكثر من منتدى اجنبي والسبب تسهيل نقل سيرفرات bifrost 😅

تذكرت هذا الموضوع وانا اشتغل على احد المشاريع البرمجية البسيطة موخرا, انتهيت منه لكن ما اعجبني تصميم الكود واعدت تعديل هيكلة الكود 3 مرات خلال فترة قصيرة! more on that later


حل

تشغيل برامج معينة –اهمها برنامج ruTorrent– في بيئة linux خام بداخل سيرفر synology بالانظمة الافتراضية بالرغم من ان نظام DSM للسيرفر ماكان يدعم البيئات الافتراضية WOW

سيرفر synology كان يستخدم كرنل خاص لذلك لازم نسخة خاصة من virtualbox تدعم الكرنل الخاص للسينولوجي حتى مع بعض مشاكه, الا ان virbox كان عظيم وفتح ابواب كثيرة للتجارب في بيئات معزولة عن نظام السيرفر.

مشكلة جديدة

في بداياتي مع synology استخدمت debian-chroot لعمل بيئات معزولة تثبت فيها تطبيقات مختلفة بدون ما تتاثر الحزم والاعتماديات داخل النظام الاصلي (who kills this ancient tech) فمع كل تحديث للسيرفر يضرب chroot و نعمل debugging ونتابع السجلات حتى نجد حل وتتكرر المشكلة حتى توقف المطور الرئيس عن المشروع.


حل

عملت مشروع برمجي بسيط يقرأ معلومات معينة ويتأكد من تطابق شروط عمل ثم في حال تحقق الشروط يعمل تاثير وتسجيل معلومات في مكان ما, وبشكل مباشر بدأت العمل على ان يكون البرنامج procedural لبساطته.

عند كل تطبيق لاحد شروط العمل اقع في دوامة separation of concerns واضطر اعمل كلاس منفصل حتى وصل مجلد Services لعدد كبير جدا من الكلاسات و الانترفيس بالرغم من جمع المنطق المشترك في abstract كلاس.

نتائج البرنامج كانت سليمة وتعمل بكفائة وممكن يشتغل المشروع بالشكل هذا, لكن ما كان عاجبني تقسيم المنطق 😕 و قلت اغير طريقتي وفعلا وبشكل مباشر بدأت اعمل مودلز تمثل العناصر الرئيسية في المشروع مع الـ behaviors الاساسية وكانت نتيجة افضل لكني شتتت المنطق في اماكن مختلفة ماهي متناسقة models – domain layer و sevices – service layer واشبه بال anemic models.🧐

مشاكل اكثر

لا انا الي نمذجت العناصر الرئيسية من البداية بشكل صحيح ولا انا الي عملت كود اجرائي بسيط, هنا وقفت المشروع وقلت اعيد النظرة في التصميم هل المشروع فعلا بسيط؟ هل حللته اصلا؟ نعم بسيط ولكن ما حسبت حساب ضخامة شروط العمل, حللت وقرأت وبنيت النماذج الرئيسية من جديد OOP مع الـ behaviors بشكلٍ افضل لا بشكلٍ ممتاز 😆


ابعد من الاستسلام للحلول

تقدم إلى الامام نحن معك سوف تصل … انت تستطيع

لا فرق يذكر في الاداء بين اول واخر نسخة من الكود, لكن النتيجة النهائية كود اوضح سهل الاضافة عليه, وحبة الكرز الي فوق الكيكة ان اعادة البناء فتحت مخي على اشياء جديدة, و وصلت لنقطة ضعف وهي صعوبة في نمذجة نطاق domain المشروع قد يكون سببها بساطة المشروع بشكل خاص و كثرة مشاريع crud بشكل عام وحلها بالتجارب والاطلاع على اكواد اشخاص اشخاص مختلفين.

كل الي عملته هنا وفي اوقات سابقة يبدأ وينتهي بالـ trial and error و ماكان لأي من هذه التجارب عائد سوا ارتفاع تقدير الذات وإراحة الضمير والصعود للمستوى التالي 🥱 بداية بتشغيل التورنت في بيئات معزولة من ثم تجارب سيرفر السونولوجي وعالم الـ selfhosting و homelabing وغيرها من التجارب وكما ذكرت في خاتمة هذه التدوينة اسوي كل ذا كهواية ثم الاستفادة في حل مشاكل قد اواجهها عند الاحتياج الحقيقي او في المهنة, لذلك مصدرك الاول للتعلم هو تجاربك خارج الصناديق الافتراضة كما في هذه الغريدة.😱

سبحان الله وبحمده سبحان الله العظيم عدد خلقه ورضا نفسه وزنة عرشة ومداد كلماته.