تم نشر هذا الموضوع في dev.to

مرحبا جميعا،

يسعدني أن أقدم لكم أول مشروع open source جدي وعصري لـي، وهو مكتبة لإنشاء إعدادات في ال php ثنائية الإتجاه، أي أعدادات قابلة للقرائة و الكتابة. هذه المكتبة مفيدة في المشاريع او التطبيقات التي تحتاج نظام إعدادات بدون إستعمال قواعد بيانات.

رابط المكتبة على ال github

مثال على الإستعمال :

use MazenTouati\Simple2wayConfig\S2WConfigFactory;

$config = S2WConfigFactory::create( __DIR__ . '/demo' );

// Get a value from the config
$old_host = $config->get('database.drivers.mysql.host');

// Change the value at the run-time
$config->set('database.drivers.mysql.host', '127.0.0.1');

// Sync the changes with the source file
$config->sync('database');

اذا أعجبك المشروع سيكون من الرائع وضع نجمة لان ذلك سوف يساعدني كثيرا، شكرا. كذلك باب المشاركة و الإقتراحات مفتوح.

قصة خلفية عن المشروع

بدأت القصة عندما قررت في يوم ما من رحلتي في عالم برمجة الويب " full-stack " ان أشارك أصبح جزء من مجتمع المشاريع مفتوحة المصدر، لعدة أسباب اهمها تطوير مهاراتي. خاصة في جزء واجة الواب " front-end " حيث انه يتطور بسرعة كبيرة كما انه ملئ بالمكتبات و أطر العمل المعقدة ( over-engineered ). بالتالي، فقد إنطلقت في بناء مكتبة أدوات لإدارة قواعد البيانات شبيه بال ( phpmyadmin )، حيث ستكون موجه للمشاريع الصغيرة و المتوسطة نسبيا. فعلا، كان خيارا صائبا أن أنطلق في بناء هذا المشروع لأني بالفعل رغم اني لم انتهي منه نهائيا الا اني تعلمت الكثير. بدايا لقد وضعت نفسي اما ثلاثة خيارات react, vue & angular أي منه سأختار. تعمقت كثيرا في مقارنتهم ايهم الأحسن او المناسب لمشروعي، انتهى الأمر لرفضهم الثلاثة. ومن ثم قمت بصنع مكتبات او سكريبتات صغيرة لمعالجة امور صغيرة لها علاقة بالمشروع كالـ data binding و القولبة... لا أعتقد اني قمت باعادة اختراع العجلة هنا، لأنه وكما ذكرت سابقا الكثير من الحلول مبالغ في تعقيدها وتم انشاءها لتحل جميع المشاكل و تكون مناسبة لجميع الوضعيات. وضع الكثير من الأكواد الغير مستعملة و المكتبات الثقيلة في مشروعي لم يكن وارد، لانه من أولياتي كانت المردودية و السرعة. فأنا إنسان بسيط و براغماتي، أريد فقط ما يسد حاجتي و حاجة مشروعي، لا أشعر براحة كبيرة بينما يوجد الكثير من الأكواد الغير مستعملة و بعض المناطق الغير مكتشفة في مكتبة ما. فقط أريد استعمال مكتبات موجه لغرض واحد، فقط.

بذكر هذا، فهو يشير مرة اخرى لموضوعنا اليوم، لقد وصلت الى نقطة في مشروعي حيث كنت احتاج الى جعل إعدادات قاعدة البيانات قابلة للكتابة و القرائة. بحثت كثيرا عن مكتبات بسيطة لهذا الغرض ولكني لم أجد اي شئ مناسب لي. سوف اخبركم بالسناريو الذي كنت فيه: كنت بصدد بناء console يقوم بتطبيق الأوامر سطر بسطر في مرحلة ما اذا قام المستعمل بكتابة الأمر use _database فاني بحاجة الى اخذ ذلك الإسم و تحديث اسم قاعدة البينات في ملف الإعدادات ثم ارجاء رسالة في الconsole تقول " تم تغيير قاعدة البيانات بنجاح !" ثم يقول المستعمل بكتابة أوامر SQL اخرى ويتم تشغيلها في قاعدة البيانات الجديدة. كما انها ستبقى موجودة في إستعمال مستقبلية لل console. من البديهي انه لم يكن لدي الخيار لإستعمال قاعدة البيانات لانشاء اعدادات متغيرة.

لحل المشكلة قمت بعمل نسخة ( fork ) من مكتبة اخرى و اظفت إليها خاصية تحديث الملفات، ثم استعملتها عن طريق composer وذلك حتى استطيع الإنتهاء من انشاء المشروع. لكني في النهاية لم اكن مرتاح كثيرا مع ذلك الحل، بعد الإنتهاء من مشروع ال console قمتُ بإنشاء هذه المكتبة و نشرتها في ال packagist ثما استعملتها في ال console.

حاليا ال console جاهز للنشر ولكني بصدد تحضير موقع رسمي له، عند الانتهاء من ذلك سوف انشره وانشر معه موضوع فيه تفاصيل اكثر عن قصتي مع هذا المشروع.

هذا الأشياء التي تعلمتها ( الأشياء التي تذكرتها خلال كتابتي للموضوع ) : بعضها سمعتُ به من قبل وجربته لأول مرة، بعضها لم اعرفها في الماضي واكتشفتها ثم استعملتها في هذا المشروع، وبعضها كنت اعرفها و استعملها ولكني طورت في معرفتي لها خلال هذا المشروع

  • Javascript: React, Vue, Reveal Pattern, Sub-pub, Data binding, ES2016, Gulp, More VanillaJS, HTML Tag's templating ( usings custom attribute ) ...

  • CSS: SMACSS, More flexbox, More composer

  • PHP: Unit Testing, Continuous Integration, Slim Micro Framework, Code-sniffer

  • Other: Git, Vim, Lossless coupled components, Modular Programming in general, more command line...

مرة اخرة أريد فيها أن أعبر عن فرحتي و رضائي على ما مررتُ به خلال هذا المشروع. فقط شئ واحد أريد أن اقوله لكل قارئ " أنطلق في إنشاء مشاريعك مفتوحة المصدر" فعلا تجربة مميزة.

practice makes perfect

يسعدني سماع أرائكم، شكرا.

سوف أعود لأصلاح الأخطاء اللغوية لاني ترجمة افكاري من الموضوع الأصلي بالأنجليزية الى العربية، اسف ان كان هناك تعبير او لفظ ركيك.

رابط الموضوع الأصلي :