البرمجة غرضية التوجه مع php و mysql

يوليو 5, 2009

 

السلام عليكم ورحمة الله وبركاته

عملياً وبشكل أساسي أستخدم البرمجة غرضية التوجه أثناء برمجتي لمواقع الوب , فإذا ما اطلعتم على الكود البرمجي الخاص بأحد المواقع التي برمجتها لوجتموه بشكل أساسي مؤلف من مجموعة من الصفوف الخاصة بالتعامل مع الكتل الأساسية في الموقع , وقبل عدة أيام كنت أبحث عن بعض المواضيع المتقدمة في البرمجة غرضية التوجه وبشكل خاص بالنسبة ل php  , فوقعت يداي على بعض المواقع الرائعة التي تتحدث عن هذا الموضوع وتطبقه بشكل فعلي , وقد قمت بقرائتها بشكل مفصل وأعجبتني كثيراً , وجعلتني أغير كودي البرمجي الذي استخدمه في العادة بنسبة 80% ووفرت علي الكثير من الوقت والجهد, لذا فقد ارتأيت بأنه من واجبي أن أترجم لكم هذه المواضيع التي قرأتها , عسى ولعل أن يستفيد منها أحد غيري.

الموضوع السابق كان يتحدث عن البرمجة غرضية التوجه المتقدمة في php  , أما الموضوع الحالي فيتحدث عن تطبيق هام جداً يخدم البرمجة غرضية التوجه في التعامل مع قاعدة المعطيات mysql , وقد قمت فعليا في برامجي بالاستفادة من الافكار المطروحة في المقالتين عبر الدمج بينهما.

لن أطيل عليكم في المقدمة وسأبدأ بطرح المقالة التي قمت بترجمتها وصياغتها , مع خالص تمنياتي لكم بالفائدة.

 

المقالة:

هنالك على الوب الكثير من المقالات التي تتحدث عن البرمجة غرضية التوجه وتطرح الكثير من الأمثلة الشهيرة عليها مثل (مثال الدراجة …وغيره), ولكننا هنا فضلنا أن نشرح البرمجة غرضية التوجه في php   و mysql عبر عدد من الأمثلة التطبيقية الواقعية المفيدة للمبرمج بشكل فعلي ومباشر.

يقوم المثال المفيد الذي سنطرحه بإنشاء صف ذو علاقة بالعمليات الأساسية التي تنفذ على قاعدة المعطيات mysql ويدعى هذا الصف CRUD class (create,read,update,delete) حيث يقوم هذا الصف بتنفيذ عملية الإنشاء والقراءة والتعديل والحذف على مداخل السجلات الموجودة في قاعدة المعطيات, وذلك بغض النظر عن كيفية تصميم قاعدة المعطيات .

كخطوة أولى سنقوم بإنشاء الهيكل الأساسي لهذا الصف , ومن خلاله نستطيع أن نستشف الأمور التي نحتاجها.

في البداية نحن بحاجة للتأكد من قدرتنا على تنفيذ التوابع الأساسية في mysql . وحتى نستطيع القيام بذلك , نحتاج إلى كل من التوابع التالية:

 وإليكم الشكل العام للصف الذي يقوم بتنجيز- تحقيق – كل من هذه التوابع الأساسية:

selInserD

لاحظوا بأنني حرصت على أن تسبق هذه التوابع المعرفة بالكلمة المفتاحية public

dbclass

التابع function connect()

يعتبر هذا التابع بمثابة تابع function أساسي , وعملية تنجيزه – تحققه- ستكون بسيطة وسهلة , لكن في البداية نحن بحاجة إلى إنشاء وتعريف عدد من المتحولات variables. وحتى نضمن بأن لا يتم النفاذ لهذه المتحولات من خارج هذا الصف class, سنقوم بإسباق كل من هذه المتحولات بمعرف النفاذ private  وبذلك نضمن بأن فضاء رؤية هذه المتحولات أصبح محصوراً ضمن فضاء الصف الذي نقوم بتعريفه.

ستستخدم هذه المتحولات من أجل حفظ قيم كل من : المضيف host, اسم المستخدم username, كلمة المرور password, وقاعدة المعطيات database , هذه المعلومات المستخدمة بشكل أساسي من أجل إنشاء الإتصال مع قاعدة المعطيات.

وبما أن المتحولات السابقة , عملياً لا تتغير قيمها ,فنحن لسنا بحاجة إلى إنشاء توابع معدلة لقيم هذه المتحولات سابقة الذكر.

ومن ثم نحن بحاجة فقط إلى إنشاء عبارة اتصال بسيطة بلغة تقوم بربطنا مع قاعدة المعطيات mysql .

وبسبب طبيعتنا كمبرمجين , فنحن نفضل التحقق من كل شيء – أحياناً تكون بعض التحققات سخيفة ولكن مع ذلك نقوم بها- فمثلاً في بداية تنجيز تابع الاتصال سنقوم بالتحقق من أن الاتصال قد تم إنشاءه من قبل أم لا , حيث عندها لا يكون هنالك داعي لإعادة إنشاء الاتصال مرة أخرى , وإلا سنقوم بإنشاء الاتصال مع قاعدة المعطيات.

 connect  

 وكما نر فإنه يستخدم بعض التوابع الأساسية الخاصة ب mysql , وبعض الكود الخاص بالتحقق من الخطأ , من أجل التأكد بأن كل شيء يسير على مايرام وفق الخطة المرسومة.

في حال تم الاتصال بقاعدة المعطيات , فسيعيد التابع (تابع الاتصال ) القيمة المنطقية true  وإلا false .

وكنقطة إضافة سيقوم بتغير قيمة متحول الاتصال إلى القيمة true  في حال نجاح الاتصال.

 تابع فصل الاتصال public function disconnect()

يقوم هذا التابع ببساطة باختبار متحول الاتصال للتحقق من كونه يحمل القيمة المنطقية true وبالتالي بأن هذا يعني بأن الاتصال قائم مع قاعدة المعطيات , وبالتالي يقوم هذا التابع عندئذ بقطع الاتصال ويعيد القيمة المنطقية true  التي تدل على نجاح عملية قطع الاتصال , وإلا , في حال عدم وجود اتصال على الإطلاق , عندها لا يوجد ما نستطيع القيام به فعلياً.

public function disconnect()   

 disconnect    

تابع الاختيار public function select()

مع هذا التابع سنلاحظ بأن الأمور لن تعود ببساطة تعريفات التوابع السابقة , وستصبح أكثر تعقيداً.

سنتعامل الآن مع معاملات المستخدم التي سيمررها , ونعيد النتيجة بشكل مناسب.

وبما أننا لسنا مضطرين إلى لاستخدام النتيجة بشكل مباشر   , لذلك سنقوم بتعريف متحول يدعى result  يتم تخزين النتيجة فيه .

بالإضافة لما سبق , سنقوم بتعريف تابع يقوم بالتحقق من وجود جدول معين في قاعدة المعطيات أم لا . وبما أن أغلب التوابع المعرفة ضمن هذا الصف ستقوم باستخدام هذا التابع , لذلك سنقوم بإنشاءه بشكل مستقل , بدلا من وضعه ضمن أحد التوابع المعرفة , بهذه الطريقة نكون ضربنا أكثر من عصفور بحجر واحد – إن جازالتعبير – حيث نكون قد وفرنا الكثير من إعادة كتابة الرماز – الكود – وسيكون بإمكاننا أمثلة الأمور بشكل أفضل لاحقاً.

سنعرض فيما يلي الكود – الرماز – الخاص بتعريف المتحول الخاص بالنتيجة , بالإضافة إلى الكود الخاص بتعريف تابع التحقق من تواجد جدول ما في قاعدة المعطيات

 table exists  

ببساطة يقوم هذا التابع بالتحقق من قاعدة المعطيات والتأكد من تواجد الجدول الممرر كمعامل دخل لهذا التابع .ويعيد هذا التابع القيمة المنطقية true  في حال تواجد الجدول , وإلا فإنه سيعيد القيمة المنطقية false .

select

للوهلة الأولى يبدو تعريف تابع الاختيار select function  مخيفاً قليلاً, ولكن عملياً , وإذا أمعنا النظر في الرماز , سنلاحظ بأنه بسيط , ويقوم بعدد من الخطوات . في البداية يتقبل هذا التابع 4 معاملات دخل  , الأول منهم مطلوب ولا يوجد له قيمة افتراضية , أم البقية فيوجد لهم قيم افتراضية . المعامل الأول , يمثل أسم الجدول. أما معامل rows فيحدد أسماء الأعمدة التي نريد احضارها من الجدول ضمن استعلامنا , أما المعامل where  فيفيد في وضع بعض الشروط على الاستعلام المطلوب تنفيذه على قاعدة المعطيات .

وكما هو واضح من الرماز , فقبل تنفيذ الاستعلام على قاعدة المعطيات , يتم التحقق من تواجد الجدول – المعامل الأول الممرر لهذه الاجرائية – في قاعدة المعطيات . في حال تواجده , عندها يتم تنفيذ الاستعلام , وإلا فنعيد عندها القيمة المنطقية false  التي تدل على الفشل.

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

في حال حصولك على أكثر من سجل – سطر-  نتيجة الاستعلام , عندها سيتم تخزين النتيجة في مصفوفة ثنائية الأبعاد, حيث يمثل المفتاح الأول فيها ترقيم لسطر النتيجة , والمفتاح الثاني يمثل اسم العمود.

أما في حال كانت النتيجة عبارة عن سجل وحيد – سطر واحد – عندها يقوم التابع بإعادة مصفوفة أحادية البعد (شعاع) تكون المفاتيح فيه عبارة عن أسماء أعمدة الجدول المطلوبة.

أما في حال عدم وجود أي نتيجة , عندها تسند القيمة الخالية null   إلى متحول النتيجة.

وأعود وأكرر مرة أخرى , بإنه التابع للوهلة الأولى يبدو مضللاً , ولكن ما إن نحلله لأجزاء ومقاطع بسيطة , يصبح عندها بإمكاننا فهم آلية عمله البسيطة وتصبح أمامنا سهلة جداً.

تابع الإضافة في قاعدة المعطيات public function insert()

هذا التابع أبسط بكثير من التابع المعرف سابقاً. وهو ببساطة يمكننا من إضافة المعلومات – السجلات – إلى قاعدة المعطيات.

بالنسبة لمعاملات الدخل الممررة , فإننا بالإضافة إلى اسم الجدول , نحن بحاجة إلى تمرير القيم المراد إدخالها إلى الجدول . بإمكاننا ببساطة فصل قيمة عن القيمة الأخرى عبر استخدام الفاصلة . ومن ثم كالعادة فحتى ننفذ الاستعلام , نحن بحاجة في البداية إلى التحقق من تواجد الجدول فعلياً في قاعدة المعطيات , ومن ثم نقوم بإنشاء وبناء الاستعلام المطلوب عبر تنظيم المعاملات الممررة في دخل هذا التابع لتشكل صيغة استعلام نظامية , ومن ثم ننفذ الاستعلام.

insert  

وكما تر, فإن هذا التابع اسهل بكثير من التابع المسؤول عن إنشاء تعليمة select .

كما أن التابع الذي يقوم بعملية الحذف من قاعدة المعطيات أسهل بكثير من كل ماسبق.

تابع الحذف من قاعدة المعطيات public function delete()

يقوم هذا التابع ببساطة إما بحذف كل سطور الجدول من قاعدة المعطيات , أو يقوم بحذف سطور محددة.

وكما اعتدنا سابقاً , فإننا نمرر اسم الجدول , وعبارة where وكما هو واضح فهي اختيارية.

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

delete 

وأخيراً , وصلنا الآن إلى أخر تابع في جعبتنا.

تابع التعديل public update function

هذا التابع ببساطة يقوم بتعديل سطر – أو سطور – في قاعدة المعطيات بالمعلومات الجديدة الممررة له.

على كل الأحوال, بسبب طبيعة تعريف هذا التابع التي تحوي القليل من التعقيد , لذلك سيكون سرده أطول قليلاً , ومربك قليلاً.

ولكنه بالنهاية يملك الكثير من الأعراف المستخدمة في تعريف التوابع السابقة.في البداية , سنقوم باستخدام المعاملات الممررة لهذه الإجرائية بهدف تشكيل عبارة التعديل المطلوبة update statement.

وكما اعتدنا في تعريف التوابع السابقة , فإننا في البداية نتحقق من تواجد الجدول أصلاً في قاعدة المعطيات. في حال تواجده سنقوم عندها ببساطة بتعديل السطور المطلوبة . يكمن الجزء الأصعب ,في إنشاء عبارة التعديل المطلوبة وصياغتها بالشكل السليم .

عبارة where ببساطة تحوي على الشروط التي تحدد السطور التي من المطلوب إجراء التعديلات عليها.

سيقوم المقطع التالي بإنشاء الجزء من عبارة التعديل الذي يتعامل مع توضيع القيم المراد تعديلها في مكانها المناسب.

حيث تحوي المصفوفة $rows على القيم الجديدة , وبنية المصفوفة $rows هي على الشكل التالي : الأدلة فيها تمثل أسماء الأعمدة المراد تعديلها , أما القيم فتمثل القيم الجديدة لتلك الأعمدة الموافقة لها.

والرماز أدناه يوضح آلية صياغة جزء من عبارة التعديل , حيث يتم وضع الفواصل في الأماكن المناسبة لها.

getkeys

وسنعرض الآن التابع الذي يقوم بعملية التعديل بشكل كامل:   

 update

والآن وبعد أن انتهينا من تعريف آخر تابع , أصبح الصف الخاص بالعمليات الأساسية على قاعدة المعطيات مكتملاً الآن , وأصبح بإمكانك اعادة استخدامه أكثر من مرة وبذلك توفر الكثير من الوقت والرماز.وهنا تكمن روعة وسحر البرمجة غرضية التوجه.

وفي الختام , أتمنى للجميع الفائدة , وفي حال وجود أي تساؤلات عن الموضوع أرجو ألا تترددوا في طرحها حتى نناقشها سوية .

وإلى أن ألقاكم قريباً , استودعكم الله والسلام عليكم ورحمة الله وبركاته.

 

المرجع

http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/


البرمجة غرضية التوجه المتقدمة في php

يوليو 4, 2009

البرمجة غرضية التوجه المتقدمة في php

 

السلام عليكم ورحمة الله وبركاته

كثيراً ما نبحر بعيداً عن شطئاننا وأراضينا وقٌرانا , بحثاً عن عالم جديد وأفكار جديدة وأفق آخر , وقد تطول غربتنا عن أرضنا التي نعشق , ولكننا في النهاية نجد أنفسنا رهيني شوقنا لتلك الأرض , ولم نعد نطيق الابتعاد عنها أكثر من ذلك .

تمر بنا أحيان كثيرة ننكر فيها رغبتنا في العودة …ونتحدى أنفسنا ولهفتنا لذلك , ونكابر ونراهن على ذلك …في تلك اللحظات – التي قد تكون مصطنعة أو حالة راهنة واقعية – نعتقد بأن ما نقوله هو الذي سيتم فعليا ً. ولكن ما إن ينبض الشوق الحقيقي في عروقنا , حتى نجد أنفسنا تحترق بحرارة الشوق …شوق العودة , وتكسر كل القوانين والضوابط التي وضعتها سابقاً تحسباً من هكذا مرحلة ….

وهذا هو حالي مع تدوينتي هذه , فقد تأخذني فورة الحياة , وروتين العمل , وضيق الوقت بعيداً عن مدونتي التي أحب , ولكن ما ألبث أن أعود إليها وكلي شوق وحنين لأن أغنيها بما هو جديد , وبالأشياء التي علمتني إياها الحياة ,عسى ولعل أن يستفيد منها أحد آخر.

أما الآن , وبعد هذه المقدمة التي أستمتع دوماً بكتابتها في مقدمة أي موضوع , سنباشر الآن رحلتنا الممتعة في مجال البرمجة غرضية التوجه المتقدمة  و php  …

 

البرمجة غرضية التوجه مع مكتبة php  النظامية  SPL (standered php library )في الإصدار الخامس من php  

مقدمة :

تغطي هذه المقالة كل التوسعات المضافة إلى البرمجة غرضية التوجه في الإصدار الخامس من PHP بما فيها من SPL (مكتبة php  النظامية Standard PHP Library ) وكيفية استخدامهم في تطبيقاتنا الفعلية, وذلك حتى لا يبق الموضوع قيد الدراسة النظرية.

ملاحظة :

حتى تستطيع الاستفادة من قراءة هذه المقالة , يجب أن يكون لديك فكرة عن الصفوف classes, والواجهات interfaces , والأعضاء السكونين –الثابتين – static members , والمراجع references. أي باختصار يجب أن يكون لديك فكرة بشكل عام عن مفاهيم البرمجة غرضية التوجه.

كما يتوجب أن يكون لديك فكرة وفهم عن بعض قوالب التصميم الأساسية basic design patterns مثل قالب المعمل Factory.

سيتم استعراض هذه المفاهيم وشرحها من خلال استخدام طبقة قاعدة المعطيات المفاهيمية conceptual database layer.

 

غالباُ في برمجة تطبيقات الوب , يكون هنالك ميل كبير ونزعة لدى المبرمجين لكتابة وبرمجة طبقة مجردة ومنفصلة خاصة بقاعدة المعطيات , وذلك لأهداف تتعلق بسهولة نقل البرنامج – تطبيق الوب – من بيئة لأخرى database portability , وكمثال عليها PEAR::DB abstraction.

ولكن لسوء الحظ , فإن لا يمكن كتابة كود عام يتعامل مع كل قواعد المعطيات , وبالتالي فهو سيكون موافقاً للعمل مع قاعدة معطيات وحيدة .

والسؤال هنا هو التالي:

كيف بإمكاننا التخلص من هذه المحدودية ؟

الجواب يكمن في استخدام القوة التي يقدمها لنا الإصدار الخامس من PHP بما فيه من الواجهات والمكتبة النظامية الخاصة ب PHP Interfaces and SPL , التي تزودنا بقدر عالي من الأداء الأمثلي , وتمكننا من التمتع بخاصية توافق رمازنا – الكود – مع البيئات المختلفة portability (المحمولية) , وبذلك يصبح بإمكاننا- مع إجراء بعض التعديلات البسيطة – تشغيل تطبيقاتنا على قواعد معطيات مختلفة.

الواجهات في PHP5 PHP5 Interfaces in- 

مع وجود عدد من الابتكارات المترافقة في PHP5 و SPL ( مكتبة PHP النظامية),أصبح الآن بإمكانك استخدام المفاهيم المتقدمة للبرمجة غرضية التوجه, مثل الصفوف classes, الواجهات interfaces, والدلائل indexers, والعدادات iterators, بطريقة لم تكن تحلم بها من قبل , ولم تكن متاحة أصلاً.

إن SPL ( اختصار لمكتبة PHP النظامية Standard PHP Library) هي بمثابة تمديد ل php , حيث تضيف لنواة php كل من الواجهات interfaces والصفوف classes والتوابع functions.

إن كل من التمديدات التي تم ذكرها , ولحد هذه اللحظة , لا تزال غير موثقة بشكل جيد , ولذلك سأحاول شرح استخدام الواجهات الثلاث الموجودة في  SPL والتي نحن بحاجة لاستخدامها حتى ننهي هذا المشروع.

الواجهات الثلاث هي التالية:

The ArrayAccess interface

The Countable interface

The Iterator interface

وسنبدأ ب

The ArrayAccess interface 

عندما تم تنجيز implement هذه الواجهة , فقد تم تمكين المبرمجين من استخدام الدلائل indexers عليها (أي استخدام عمليات دليل المصفوفة [])وذلك بالنسبة لأي غرض لا على التعينن ( أي بإمكاننا النظر إليها على أنها مصفوفة وعناصرها هي الأغرض وبالتالي بإمكاننا الوصول إلى هذه الأغراض عبر اسخدام العمليات المتاحة على الأدلة index operators []).

كل الأغراض المفهرسة indexed objects  في PHP تحتاج بشكل أساسي إلى 4 طرائق methods  حتى تستطيع التعامل معها كمصفوفة , ويجب أن تصرح على أنها تحقق الواجهة ArrayAccess (implement the ArrayAccess interface).

الطرائق الأربع التي يحتاجها كل غرض مفهرس هي التالية:

offsetExists($offset)

تستخدم هذه الطريقة لأخبار php عن وجود قيمة value   (أو عدم وجودها )بالنسبة للمفتاح key  المحدد عبر الإزاحة المعطاة والممرة كعنصر دخل لهذه الطريقة ($offset)

القيمة المرجعة من هذه الطريقة هي إما القيمة المنطقية true أو false.

offsetGet($offset)
تستخدم هذه الطريقة لإعادة القيمة value  المحددة عبر المعامل –المفتاح key – الممر كدخل لهذه الطريقة offset.

offsetSet($offset, $value)

تقوم هذه الطريقة بتوضيع القيمة value  الممرره كمعامل دخل لهذه الطريقة ضمن الغرض وذلك في المكان المحدد لها عبر المفتاح offset  الممرر أيضاً كمعامل دخل .

بالإمكان إطلاق استثناء من هذه الطريقة في حال كانت هذه المجموعة للقراءة فقط read-only collection, وبالتالي ليس بإمكانك تعديلها بكتابة قيم جديدة فيها.

offsetUnset($offset)
تستخدم هذه الطريقة في الحالات التي يتم فيها إزالة قيمة من المصفوفة , إما عن طريق unset() أو  عبر إسناد قيمة اللاشيء value of null إلى المفتاح key الخاص بقيمة ما.

في حالة المصفوفات العددية,لا يتوجب حذف المفتاح منها , ولا يتوجب إعادة فهرسة تلك المصفوفات ,إلا في حال كان ذلك لغاية مدروسة في نفسك.

 The Countable interface

تحاكي هذه الواجهة سلوك التابع الشهير count() , وبذلك تعيد حجم الغرض الذي قمت بتعريفه , وذلك بالاعتماد على الكود الذي ستقوم أنت بكتابته ضمن هذه الطريقة.

تعتمد هذه الواجهة على الإصدار PHP 5.1.

ملاحظة: حتى يقوم الصف الذي عرفته بتحقيق الواجهة Countable يتوجب عليك تعريف طريقة باسم count() تعيد عدد صحيح , ويجب أن يقوم الصف أيضاً بالإشارة بشكل صريح إلى تحقيق الواجهة Countable.

The Iterator interface 

تعتبر العدادات Iterators بمثالة أكثر الأجزاء أهمية في SPL , حيث تمكننا من أستخدام الأغراض ( التي نعرفها )ضمن الحلقات البرمجية loops.

قد تتسائل , لماذا لم تضمن الواجهة Iterator ضمن الواجهة ArrayAccess ؟

يعود السبب في ذلك بسبب عدم توفيرها للآلية مناسبة تخبر فيها PHP عن المفاتيح keys المحتملة وترتيبهم الموافق.

إذا كنت ترغب في الأستفادة من حلقات foreach loop في التعامل مع الأغراض التي قمت بتعريفها , يتوجب عليك القيام بتحقيق الواجهة Iterator. 

حتى تستطيع تحقيق implement الواجهة Iterator , تحتاج إلى كتابة كل من الطرق الخمس التالية:

current()

تعيد هذه الطريقة القيمة الموافقة للدليل الحالي current index’s value

أنت المسؤول الوحيد عن عملية تتبع الدليل الحالي , ولن تقوم الواجهة بتحقيق هذه العملية لك ما لم تعرفها أنت بنفسك.

key()

تقوم هذه الطريقة بإعادة القيمة الموافقةللمفتاح الحالي .

تعتبر هذه الطريقة مهمة جداً بالنسبة لحلقات foreach , حيث يصبح عندها باستطاعتنا الحصول على كل المفاتيح والقيم الحالية  المشار إليها في كل دورة من دورات الحلقة على الغرض الممرر لها.

next()

تقوم هذه الطريقة بتحريك الدليل الداخلي إلى الأمام بمقدار مدخل واحد (إذا نظرنا إلى غرضنا باعتباره عبارة عن سلسلة أو مصفوفة من المداخل المتتالية)

rewind()

تقوم هذه الطريقة بإعادة تهيئة الدليل الداخلي , وتوضيعه ليشير إلى العنصر الأول (المدخل الأول ضمن الغرض).

valid()
تقوم هذه الطريقة بإعادة إحدى القيمتين المنطقيتين true أو false , في حال وجود عنصر في المكان الذي نقف عنده الآن.

تستخدم هذه الطريقة عادة بعد استدعاء إحدا الطريقتين التاليتين rewind() أو next().

تجدر الإشارة إلى أن هنالك عدة أنماط من العدادات iterators التي تقدمها المكتبة النظامية في PHP, ولكننا سنقتصر في مثالنا المطروح على ذكر نمط واحد فقط  ألا وهو  Iterator  ونقوم بتحقيقه implement.

إنشاء وبرمجة أول واجهة خاصة بنا- أي من كودنا الخاص-

حتى تستطيع إنشاء تطبيق محمول portable application , يتوجب عليك في البداية تحديد الآلية التي سيتخاطب عبرها تطبيقك مع قاعدة المعطيات.

في الحل الذي سنطرحه هنا , سنقوم بإنشاء واجهة تؤمن لنا وسيلة تخاطب عامة بالنسبة للتطبيق , أي , مهما كانت قاعدة المعطيات التي تستخدمها , فإن الطرائق المعرفة لدينا ( والهادفة لتحقيق عملية التكامل مع قواعد البيانات المختلفة ) ستقوم بتوحيد واجهة التخاطب دوماً , وبالتالي ستقوم دوماً بأخذ نفس معاملات الدخل (من حيث المفهوم وليس القيمة ), وإعادة نفس القيم.

وكبداية , سنقوم بإنشاء ملف يدعى IDataBaseBindings.php.

ستبدو محتويات هذا الملف مشابهة للكود الموجود أدناه:

 

  

Listing 1 IDataBaseBindings.php
<?php    /**     * IDataBaseBindings interface     *

     * This interface contains the standarized implementation point for all

     * database methods.

     *

     */

 

    interface IDataBaseBindings

    {

        /**

         * getCustomerDetails

         *

         * Returns an UnbufferedAsociativeResultSet containing all

         * detailed information about a user from the userDetails table.

         *

         * @param   int     $userid     A user identification number like 12345

         * @return  UnbufferedAsociativeResultSet    All relevant data from userDetails

         * @throws  ReadOnlyException

         */

        public function getCustomerDetails($userid);

    }

?>

 

 

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

عبر استخدام واجهة مثل هذه الواجهة , يصبح بإمكانك توفير عدد من الصفوف المختلفة التي تقوم بتحقيق هذه الواجهة , وذلك تبعاً لقاعدة المعطيات المراد استخدامها.

بالنسبة لقواعد معطيات PostgreSQL التي تحقق هذه الواجهة , فإنه بإمكانها استخدام CIDR كنمط معطيات , أما بالنسبة لقواعد معطيات MySQL فإنك ستستخدم القيم البوليانية الرياضية Boolean math من أجل تحديد المعلومات.

كان ذلك مجرد مثال بسيط جداً , ولكن هنالك حالات كثيرة تتطلب منك رفع قدرات قاعدة معطيات معينة لأسباب تتعلق بالإنجاز performance reasons, وبشكل خاص عند التعامل مع الإجرائيات المخزنة stored procedures, أو الإستعلامات المعدة مسبقاً , prepared queries والمعطيات ذات الحجوم الكبيرة .

تحقيق الواجهة IDataBaseBindings التي قمنا بتعريفها سابقاً:

حتى نستطيع القيام بتحقيق الواجهة المعرفة سابقاً , سوف نقوم بإنشاء ملف جديد يدعى PostgreSQL.php. ستبدو محتوياته على الشكل التالي:

 

 

   

Listing 2 PostgreSQL.php

<?php    /**     * PostgreSQL implementer for IDataBaseBindings.     *

     * Implements all members indicated by the interface and

     * optimizes queries for the PostgreSQL database.

     *

     * @author      Kevin McArthur

     * @depends     UnbufferedAssociativeResultSet, IDataBaseBindings

     * @implements  IDataBaseBindings

     */

    class PostgreSQL implements IDataBaseBindings

    {

        public function __construct() {

            // Create Database Connections

        }

 

        /**

         * getCustomerDetails

         *

         * Gets customer data from userDetails specified by userid

         *

         * @see IDatabaseBindings

         */

        public function getCustomerDetails($userid)

        {

            $queryResult = pg_query(’select * from userDetails where userid = ‘. $userid . ‘;’);

            return new UnbufferedAssociativeResultSet($queryResult);

        }

 

        public function __destruct()

        {

            // Destroy Database Connections

        }

    }

?>

   

يقوم الرماز السابق بإنشاء صف class جديد يدعى PostgreSQL الذي يقوم بدوره بتحقيق implements الطريقة getCustomerDetails() المعرفة سابقاً- بشكل مجرد – ضمن الواجهة IDataBaseBindings التي نقوم بتحقيقها عبر هذا الصف.

يجب أن تكون هذه الطريقة مسؤولة عن القيام بكل الاستعلامات. القيام مباشرةً بوضع واستعادة القيم من قاعدة المعطيات.

إنشاء معمل خاص بقاعدة المعطيات Creating a Database Factory

قد تطرح في نفسك بعض التساؤلات: كيف تكون التعريفات السابقة قد قامت بوضع مفهوم مجرد للواجهة في حال قمنا بإنشاء أغراض جديدة مثل PostgreSQL  بشكل مباشرمنها؟

حتى نحل هذه المشكلة سنقوم باستخدام نموذج المعمل Factory Pattern , والذي يعرف بالشكل التالي:

Listing 3 DatabaseFactory.php
<?php    /**     * DatabaseFactory     *

     * Creates an IDataBaseBindings object for use from the application layer

     *

     * @depends    PostgreSQL, MySQL

     */

    class DatabaseFactory

    {

        /**

         * factory

         *

         * Returns an IDataBaseBindings compatible object based on the type of database

         * defined in $configuration['databasetype']

         */

        public static function factory()

        {

            switch($configuration['databasetype']) {

                case ‘PostgreSQL’:

                    return new PostgreSQL();

                    break;

                case ‘MySQL’:

                    return new MySQL();

                    break;

                default:

                    throw new Exception(‘Database implementer not found’);

            }

        }

    }

?>

 

يقوم الرماز أعلاه بتزويدنا بطريقة نفاذ موحدة تهدف لإنشاء واجهات لأغراض متوافقة ليتم استخدامها ضمن رماز التطبيق.

فعلياً نجد , ومن خلال الرمازالسابق بأن تطبيقك لا يعلم ولا يهتم حول قاعدة المعطيات التي سيتم استخدامها.وإنما فقط يهتم بتلبية المتطلبات المعرفة في الواجهة .

أي باختصار , توحيد واجهة التخاطب البرمجية – مع اختلاف قواعد المعطيات التي من الممكن التعامل معها – قد حل لنا مسألة المحمولية وجعلها متاحة وممكنة لأقصى الدرجات وعبر أكثر الوسائل البرمجية تقدماً (البرمجة غرضية التوجه)

التعامل مع المعطيات المعادة :

UnbufferedAssociativeResultSet 

ربما قد تكون – عبر قراءة الرماز المذكور سابقاً – قد لاحظت بأن الصف PostgreSQL لم يقم بإعادة نتائج الاستعلام بشكل مباشر. السبب في ذلك هو أن مثل هذه العملية (الإعادة المباشرة للنتيجة ) قد تقضي على الهدف المرجو من تعريف الواجهات , لأنه في PHP  لكل قاعدة معطيات طرائق مختلفة في ا لتعامل مع مصادر النتائج result resources التابعة لها .

فعلى سبيل المثال نجد بإن الصف PostgreSQL يستخدم الغرض UnbufferedAssociativeResultSet.

Listing 4 UnbufferedAssociativeResultSet.php 

<?php 
    /**
     * UnbufferedAssociativeResultSet
     *
     * Allows for unified access to a database result set
     *
     * @implements  ArrayAccess, Iterator, Countable
     * @remarks     If not using 5.1, implementing countable can be and count() used directly.
     * @see         SPL Documentation For Interface Declarations.
     */ 
    class UnbufferedAssociativeResultSet implements ArrayAccess, Iterator, Countable 
    { 
        private $currentIndex, $result;
 
        function __construct($result) 
        {
            $this->currentIndex = 0;
            $this->result = $result;
        }
         //Region ArrayAccess
        function offsetExists($offset)
        {
            switch($configuration['databasetype']) {
                case 'PostgreSQL':
                    if(pg_fetch_assoc($this->result, $offset)) {
                        return true;
                    } else {
                        return false;
                    }
                default:
                    throw new Exception("No Database Handler");
            }
        }
 
        function offsetGet($offset)
        {
            switch($configuration['databasetype']) {
                case 'PostgreSQL':
                    if($row = pg_fetch_assoc($this->result, $offset)) {
                        return $row;
                    } else {
                        throw new Exception("No row at ". $offset);
                    }
                default:
                    throw new Exception("No Database Handler");
            }
        }
         function offsetSet($offset,$value)
        {
            throw new Exception("This collection is read only.");
        }
         function offsetUnset($offset)
        {
            throw new Exception("This collection is read only.");
        }
        //EndRegion
         //Region Countable
        function count()
        {
            switch($configuration['databasetype']) {
                case 'PostgreSQL':
                    if($rows = pg_num_rows($this->result)) {
                        return $rows;
                    } else {
                        throw new Exception("Could not fetch the number of rows in resultset");
                    }
                default:
                    throw new Exception("No Database Handler");
            }
        }
        //EndRegion
         //Region Iterator
        function current()
        {
            return $this->offsetGet($this->currentIndex);
        }
         function key()
        {
            return $this->currentIndex;
        }
         function next()
        {
            return $this->currentIndex++;
        }
 
        function rewind()
        {
            $this->currentIndex = 0;
        }
         function valid()
        {
            if($this->offsetExists($this->currentIndex)) {
                return true;
            } else {
                return false;
            }
        }
         function append($value)
        {
            throw new Exception("This collection is read only");
        }
         function getIterator()
        {
            return $this;
        }
        //EndRegion
    }
?>

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

بإمكانك استخدام هذه المصفوفة وكأنها مصفوفة عددية , وكل دليل فيها سيقوم بإعادة المصفوفة المرافقة التي تحوي المفاتيح الموجودة في مجموعة النتائج.

ملاحظة:

1: من أجل الاختصار , قد قمت بإهمال كتابة التعليقات على هذا الصف , واستخدمت استثناءات exceptions  بسيطة.

2:أنت بحاجة لاستخدام الأغراض المشتقة من الصف Exception حتى تستطيع إطلاق استثناءات مثل الاستثناء ReadOnlyException.

يقوم هذا الصف باستخدام switch وذلك من أجل تحديد التوابع المستعملة في قاعدة المعطيات وذلك تبعاً لقاعدة المعطيات التي سيتم التعامل معها.

مثال تطبيقي:

Listing 5 listing-5.php

<?php
    $uid = 12345;
    $db = DatabaseFactory::factory();
    $ubars = $db->getCustomerDetails($uid);
 
    if($ubars[0]['property'] == "Name") {
    echo "The first property was 'name'";
    }
 
    foreach($ubars as $values) {
        foreach($values as $key=>$value) {
            echo $key . '=' . $value;
        }
    }
 
    $rows = count($ubars);
?>

 

الخلاصة :

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

وكل ما هو مطلوب منا برمجياً وفق إطار العمل المعرف سابقاً , هو كتابة الرماز المرتبط بالعمليات الخاصة بقاعدة معطيات معينة ليس إلا. وستكون تطبيقاتنا المعدة للانترنت تتميزبكونها قابلة للعمل على منصات التشغيل المختلفة .والتعامل مع قواعد معطيات مختلفة .

 

وبالختام أتمنى لكم الفائدة عبر هذه الترجمة لمقالة بعنوان البرمجة غرضية التوجه المتقدمة في PHP  

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

في حال وجود أي من التساؤلات حول البرمجة غرضية التوجه , أرجو عدم التردد أبداً في طرحها.

وبعد فترة قليلة سأدرج مواضيع أخرى قيمة حول البرمجة غرضية التوجه في PHP   و mysql فقد قرأت منذ فترة قريبة مقالة رهيبة في هذا الصدد , وعلى أساسها وأساس الأفكار التي استوحتها منها فقد قمت بتغير أسلوبي البرمجي بشكل كامل عند التعامل مع قاعدة المعطيات .

وإلى ذلك الحين أسألكم الدعاء و استودعكم الله , والسلام عليكم ورحمة الله وبركاته.

 

المرجع :

http://www.phpriot.com/articles/oop-with-spl-php-5

 

   

 


خدماتنا

مايو 9, 2009
  • برمجة كافة أنواع المواقع الديناميكية والستاتيكية التي تخدم كافة أنواع الشركات أو الأفراد أو نظم العمل, وبحرفية عالية , مع ضمان الدعم الفني والصيانة – إن تطلب الأمر
  • تصاميم فنية مبتكرة ذات جودة عالية ….
  • ترجمة من اللغة الانلكيزية للغة العربية بحرفية عالية , ولمجال وطيف واسع من المواضيع – معلوماتية , فلكية , برمجية ,طبية …
  • رسم صور شخصية صغيرة بأحجام كبيرة وبجودة عالية

وكل ذلك بأسعار منافسة

راسلونا على البريد التالي:schwarzd.tiger@gmail.com


الثقب الأسود – الحلقة 3

أبريل 30, 2009

السلام عليكم ورحمة الله وبركاته

إخواني أخواتي  الأعزاء, أرجو ألا أكون قد أطلت عليكم , وإليكم فيما يلي متابعة الإجابة عن بعض الأسئلة المتعلقة بالثقب الأسود تلك الظاهرة الفلكية الفذة .

 

1.      كيف يبدو الثقب الأسود – ماهو شكله؟

يعتبر الثقب الأسود بحد ذاته غير مرئي وذلك بسبب عدم قدرة الضوء على الانفلات منه.

في الواقع , عندما ظهرت في البدايات النظريات التي تتحدث عن الثقوب السوداء ,كانت الثقوب السوداء تسمى بالنجوم غير المرئية “invisible stars.” .

حسناً, بما أن الثقوب السوداء غير مرئية , فكيف عرفنا إذن بوجودها؟

هذا السؤال تماماً يبين لنا كم هو من الصعب إيجاد الثقوب السوداء في الفضاء! على كل الأحوال فإنه يتم إيجاد الثقب الأسود بشكل غير مباشر عبر ملاحظة التأثيرات على النجوم والغازات القريبة منه.

على سبيل المثال , لنفترض حالة نظام نجمي مزدوج  a double-star system حيث تكون النجوم فيه قريبة جداً من بعضها البعض. في حال انفجار أحد النجوم على شكل سوبرنوفا supernova  وتحوله إلى ثقب أسود , عندها فإنه من المتوقع من الغاز والغبار الصادر عن النجم المرافق بأن تسحب باتجاه الثقب الأسود – وذلك في حال كان هذا النجم المرافق قريب لدرجة كافية.في تلك الحالة , يبدأ كل من الغاز والغبار بالانسحاب باتجاه الثقب الأسود ويشرع بالدوران حول الأفق الزوجي event horizon ومن ثم يدور وفق مدارات حول الثقب الأسود .وخلال ذلك يزداد تضاغط الغاز لدرجة كبيرة , ويقوم الاحتكاك المتولد بين الذرات بتحويل الطاقة الحركية kinetic energy  في الغاز والغبار إلى حرارة, وبالتالي يتم إصدار وبث أشعة x x-rays.  وبالاستفادة والأستعانة بالأشعة القادمة من تلك المواد التي تدور حول الثقب الأسود , يتمكن العلماء من قياس درجة حرارتها وسرعتها.

بإمكاننا من المعلومات القادمة عن حركة وحرارة المواد الدوارة , استنتاج وجود الثقوب السوداء .

تدعى المادة الحارة التي تدور بالقرب من ا لأفق الزوجي التابع للثقب الأسود بالأقراص الملتحمة accretion disk.

يصور لنا أحد العلماء هذه الظاهرة عبر ثنائي راقص في غرفة سوداء مظلمة , حيث ترتدي المرأة ثوباً أبيض , أما الرجل فيرتدي بدلة سوداء حالكة وبالتالي لا يتمكن الناظر لهما إلا من ملاحظة المرأة وحركاتها, ومن خلال ملاحظة المرأة وهي تدور وتتحرك راقصة حول محور ما بإمكانك التنبؤ بوجود شريكها الراقص الغير مرئي.

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

 

2.      هل تتحول كل النجوم إلى ثقوب سوداء؟

للإجابة باختصار على هذا السؤال , بإمكاننا القول بأنه فقط النجوم ذات الكتل الهائلة يمكن لها أن تتحول إلى ثقوب سوداء , على سبيل المثال , شمسنا من غير الممكن لها أن تتحول إلى ثقب أسود لأنها كتلتها ليست كبيرة كفاية.

بعد أربع بلايين سنة انطلاقاً من هذا التاريخ, وعندما ينفذ الوقود النووي الموجود داخل لب الشمس والذي يؤمن تفاعلاتها النووية التي تسبب توهجها وإضاءتها, في ذلك الوقت سوف تموت شمسنا ميتة هادئة. 

إن مثل هذا النوع من النجوم تنتهي على شكل نجوم قزمية بيضاء white dwarf stars.

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

عندما ينفذ الوقود النووي من النجوم ذات الكتل الهائلة , عندها لا تعود هذه النجوم قادرة على دعم كتلتها الكبيرة جداً,وتبدأ بالتضاغط والانهيار. وعند حدوث ذلك تبدأ درجة حرارة النجم بالارتفاع , وتقوم بعض الأقسام والأجزاء التابعة للطبقة الخارجية من النجم – حيث تكون لا تزال تحوي بعض الوقود النووي – بتنشيط التفاعل النووي مرة أخرى وتنفجر على شكل يدعى بالسبرنوفا  supernova. أما فيما يتعلق بالأجزاء الداخلية المتبقية من النجم , لب النجم , فإنها تستمر بالانهيار والتضاغط . وبالإعتماد على مدى ضخامة كتلة لب النجم , نجد أن هنالك إحدى حالتين , إما أن يتحول النجم على نجم نيوتروني neutron star ويتوقف عن الانهيار , أو أن يستمر بالانهيار والتضاغط حتى يتحول إلى ثقب أسود.

إذن نستنتج من ذلك بأن ضخامة كتلة لب النجم تلعب دور هام في تحديد مصيره النهائي.

تدعى الثقوب السوداء المشكلة من النجوم بالثقوب السوداء النجمية a stellar black hole .

3.      ما هو عدد الأنماط والأنواع المتواجدة من الثقوب السوداء؟

تبعاً للنظرية , فإنه يوجد ثلاثة أنواع من الثقوب السوداء:

الثقوب السوداء النجمية stellar black holes

الثقوب السوداء ذات الكتلة الخارقة supermassive black holes

الثقوب السوداء المصغرة  black holes miniature

وهذا التصنيف يعتمد على أحجام  الثقوب السوداء.

كما أن هذه الأنواع المختلفة من الثقوب السوداء يتم تشكلها بطرق مختلفة.

بالنسبة للثقوب السوداء النجمية فقد تم توضيح آلية تشكلها سابقاً.

أما بالنسبة للثقوب السوداء ذات الكتل الهائلة – الخارقة – supermassive black holes ,فهي غالباً ما تتواجد في مراكز أغلب المجرات , بما فيها مجرتنا – درب التبانة.

من الممكن لمثل هذه الثقوب السوداء أن تملك كتلة مساوية لبلايين أضعاف كتلة شمسنا.

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

بشكل معامد للأقراص الملتحمة accretion disk التابعة لثقب أسود ذو كتلة خارقة supermassive black holes , وفي أغلب الأحيان , هنالك دفقان من الغاز الساخن two jets of hot gas .

bh22gas-jet-1

الصور أعلاه توضح لنا كل من الأقراص الملتحمة accretion disk التي تدور حول الثقب الأسود , ودفقا الغاز الذان يتوضعان بشكل معامد بالنسبة لهذه الأقراص الملتحمة.

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

هنالك عدد من الملاحظات التي تمت عبر تلسكوب هبل الفضائي Hubble Space Telescope التي استطاعت أن تثبت , وبدليل جيد , تواجد مثل هذه الثقوب السوداء ذات الكتلة المهولة supermassive black holes.

لم يتم لحد الآن بشكل دقيق تحديد الآلية الفعلية التي ينتج عنها الثقوب السوداء المصغرة miniature black holes , ولكن قد تم وضع عدد من الفرضيات.

تقترح الفكرة الأساسية احتمال تشكل الثقوب السوداء المصغرة بعد وقت قصير من حدوث “الانفجار الكبير” “Big Bang,” , الذي يعتقد بأنه بمثابة بداية الكون وحدث قبل حوالي 15 بليون سنة مضت.

على كل الأحوال, ولحد الآن , لا يوجد أي دليل على وجود الثقوب السوداء المصغرة.

المراجع:

http://amazing-space.stsci.edu/resources/explorations/blackholes/teacher/sciencebackground.html

http://en.wikipedia.org/wiki/Black_holes

مع خالص تمنياتي لكم بالتوفيق, وإلى لقاء قريب بإذن الله مع موضوع جديد , وإلى ذلك الحين استودعكم الله والسلام عليكم ورحمة الله وبركاته


الثقب الأسود – الحلقة 2 –

أبريل 19, 2009

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

لن أطيل عليكم بأي مقدمة , وسنباشر فوراً بالتعرف على بعض المعلومات المشوقة جداً عن الثقوب السوداء , والتي لا تتطلب أن يكون القارئ على معرفة سابقة بها , وإنما أن يتمتع بقليل من الصبر ليتابع قراءة الموضوع كله حتى تتضح وتتبين له الصورة بشكل كامل.

وأتمنى لك الاستمتاع بهذه المعلومات:

الثقب الأسود : ببساطة هو عبارة عن منطقة من الفضاء تكون فيها قوة السحب الجاذبي باتجاه مركزها قوية جداً جداً, لدرجة بأنه لا يوجد شئ قادر على الافلات من الانجذاب باتجاه الثقب الأسود بعد أن يصبح ضمن حدود معينة تحيط بالثقب الأسود, تدعى هذه الحدود “بالأفق الزوجي” event horizon – والتي سنعكف على شرحها فيما بعد.

  1. ما هو الثقب الأسود؟

يعرف الثقب الأسود عملياً عبر سرعة الانفلات escape velocity  التي تحدد المقدار الذي ضمنه تكون عملية الهرب والانفلات من السحب الجاذبي الصارد عن غرض ما ممكنة. على سبيل المثال , تقدر سرعة انفلات الأرض ب   11 km/s.

لذلك فإن أي شئ يريد أن ينفذ – ينفلت – من قوة السحب الجاذبي التابعة للأرض يتوجب عليه أن يتحرك بسرعة بالحد الأدنى مساوية ل 11 km/s , وذلك بغض النظر عن ماهية ذلك الشئ – مركبة فضائية , أو حتى كرة.

تعتمد سرعة الانفلات لغرض ما على مدى انضغاط هذا الغرض , أي على نسبة كتلته إلى نصف قطره.

يعتبر الثقب الأسود عبارة عن غرض مضغوط لدرجة كبيرة جداً, وحتى على مسافة محددة بعيداً عنه , فإن سرعة الضوء لا تعتبر سريعة كفاية حتى تستطيع الانفلات منه ومن قوة جذبه.

كيف ينشأ ويتشكل الثقب الأسود النجمي ؟

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

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

تولد التفاعلات النووية الموجودة في لب النجم طاقة كافية مندفعة نحو الخارج.

بالنسبة لمعظم النجوم – خلال حياتها – تكون قوة كل من الضغط والجاذبية متوازنتين تماماً, وبذلك يكون النجم مستقراً.

ولكن على كل الأحوال , عندما ينفذ الوقود النووي الذي يؤمن التفاعلات النووية المولدة للقوة النابذة , يصبح عندها الجسم خاضع فقط للقوة الجاذبة ,وبالتالي فإن الكتلة الموجودة في النواة تتضاغط أكثر فأكثر نتيجة خضوعها للقوة الجاذبة فقط.

وكلما ازدادت كتلة نواة النجم , ازدادت معها قوة الجذب التي تقوم بضغط المادة , وبالتالي يزداد تضاغط النجم ضمن وزنه الحالي.

بالنسبة للنجوم الصغيرة , عندما يستنفذ الوقود النووي , تنتهي التفاعلات النووية nuclear reactions التي كانت تقوم بمقام القوة التي تحفظ توازن النجم بتأمينها القوة التي توفر الدفع الخارجي مقابل قوة الجاذبية, وبالتالي وبالتدريج , تولد القوة المنفرة المتواجدة بين الالكترونات في النجم ضغط كافي مندفع نحو الخارج , وبذلك تستطيع أن تنفذ من عملية الانهيار والانخساف الجاذبي gravitational collapse.  بعد ذلك يبرد النجم تدريجياً ويموت بسلام . يسمى هذا النمط من النجوم “الأقزام البيضاء” “white dwarf.” .

أما بالنسبة للنجوم ذات الكتلة العالية , فإنه في المرحلة التي يتم فيها استنفاذ الوقود النووي , فإنها تنفجر وتسمى عند هذه الحالة بالسبر نوفا supernova. حيث تنقذف الأجزاء الخارجية من النجم بشكل عنيف في الفضاء , بينما ينخسف وينهار و يتضاغط لب النجم بشكل كامل .

حتى يكون لدينا نجم يتميز بلب ذو كتلة كبيرة جداً, عندها يتوجب أن تكون كتلة النجم – بالحد الأدنى – أكبر بمقدار 20 مرة من الشمس .

وفي الحالة التي تكون فيها كتلة النجم كبيرة جداً (أي ما يقارب 2.5 مرة من كتلة الشمس ) عندها لا تستيطيع أي قوة تنافر موجودة داخل النجم أن تولد قوة دفع كافي لمنع قوة الجاذبية من إحداث انهيار كامل داخل لب النجم محولة اياه إلى ثقب أسود. عندها يتحول لب النجم إلى نقطة – بالمعنى الرياضي – ذات حجم افتراضي مكافئ للصفر, حيث بإمكاننا القول عندها بأن هذه النقطة ذات كثافة لا نهائية.

عندما يتحقق الكلام السابق , فإن سرعة الانفلات المطلوبة لغرض ما يجب أن تكون أكبر من سرعة الضوء – حتى يستطيع هذا الغرض الانفلات من تأثير الثقب الأسود. فعلياً , لا يمكن لأي غرض أن يصل لسرعة الضوء.

تسمى المسافة الفاصلة بين أي غرض والثقب الأسود والتي تكون فيها سرعة الانفلات مساوية لسرعة الضوء ” بالأفق الزوجي”   event horizon .

event-horizon

 يتم احتباس أي شيء يمر ضمن الأفق الزوجي التابع للثقب الأسود للأبد – حتى لو كان هذا الشيء ضوءاً –.

bh3

3.      كيف يمكن للضوء أن يتم احتباسه عبر السحب الجاذبي الصادر عن ثقب أسود مع العلم بأنه لا يوجد للضوء أي كتلة؟

فيما مضى , كان نيوتن يعتقد بأنه فقط الأجسام التي تملك كتلة بإمكانها توليد قوة تجاذب بين بعضها البعض. وبالتالي , فإنه عند تطبيق نظرية نيوتن على الجاذبية , يصبح عندها بإمكان المرء أن يستنتج بأن قوة الجاذبية لا تستطيع التأثير على الضوء بسبب انعدام كتلته. ولكن فيما بعد جاء أنشتاين الذي اكتشف بأن الحالة أعقد بكثير من ذلك .

حيث أكتشف أولاً بأنه يتم توليد الجاذبية عبر الزملكان(زمان – مكان) المنحني curved space-time . ومن ثم ظهر بنظرية تقول بأن الكتلة ونصف القطر التابعيين لغرض ما قادرين على حني الزملكان space-time

Einstein theorized that the mass and radius of an object actually curves space-time

هنالك ترابط فيما بين الكتلة والمكان بطريقة ما لم يستطع الفيزيائيون لحد الآن فهمها بشكل كامل.

على كل الأحوال, فإننا نعلم الآن بأنه كلما ازدادت قوة حقل الجاذبية التابعة لغرض ما , كلما ازداد انحناء الفضاء المحيط بهذا الغرض. بمعنى آخر , لن تعود الخطوط المستقيمة مستقيمة في حال تعرضت لحقل جاذبية قوي, وبدل من ذلك ستتحول إلى خطوط منحنية.

وبما أن الضوء يسافر عبرمسار خطوط مستقيمة , فإنه سيتبع مساراً منحنياً في حال مر بالقرب من حقل جاذبية كبير.   هذا ما كنا نقصده أثناء قولنا ” فضاء منحني ” “curved space,” وهذا هو السبب نفسه الذي يسبب احتباس الضوء في الثقب الأسود .

وفي عام 1920 استطاع السيد ارثر ايدنغتون Sir Arthur Eddington إثبات نظرية انشتاين عندما لاحظ انحناء ضوء النجم عندما يسافر – أي يمر – بالقرب من الشمس. وبالتالي , كان ذلك أول تنبؤ صحيح تابع لنظرية إنشتاين في النسبية العامة Einstein’s General Theory of Relativity.

 إحدى الطرق الممكنة حتى نستطيع أن نتخيل تأثير الجاذبية هذا , هو تخيل صفيحة مشدودة من المطاط , تخيل بأنك وضعت كرة ثقيلة في منتصف الصفيحة.نلاحظ عندها بأن ثقل الكرة سيقوم بحني سطح الصفيحة بالقرب منه. هذه هي الصورة ثنائية البعد لما تفعله الجاذبية بالفضاء الثلاثي الأبعاد.  الآن , خذ جلة – كرة رخامية صغيرة يلعب بها الأطفال – وقم بدفعها من أحد أطراف الصفيحة المطاطية للطرف الآخر. ستلاحظ بأن هذه الجلة سوف تسلك خط منحنى – بدل من المسار المستقيم – ويبلغ قمة انحنائه عن مركز الصفيحة نتيجة ثقل الكرة الموضوعة في مركز الصفيحة المطاطية. إن هذا التأثير بمثابة محاكاة لكيفية تأثير حقل الجاذبية الناتج عن غرض ما ( الكرة ) في حنى الأشعة الضوئية (الجلة).

 وبهذا القدر نكتفي في هذه الحلقة , على أن نتابع الأجابة على بقية الأسئلة المطروحة في الحلقة القادمة,وحتى نفسح مجالاً للتفكر في هذه المعلومات وطرح أي تساؤلات عنها .

وإلى ذلك الحين ,استودعكم الله , والسلام عليكم ورحمة الله وبركاته.

 

 


الثقب الأسود Black Hole – الحلقة 1 –

أبريل 17, 2009

الثقب الأسود Black Hole

الثقب الأسود

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

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

ولكن يا تر …هل فكرت في يوم من الأيام أن تغيير عالمك بشكل كامل , كأن ترحل إلى خارج حدود هذه الكرة الأرضية ؟ أن تتجاوز بمخيلتك حدود هذه السماء ؟ أن تكون رحالة عبر هذا الكون ا لرهيب؟

هل تسائلت عن ماهية الأشياء هناك …نعم هنالك في البعيد في هذا الكون الشاسع الرهيب ؟ هل تسائلت عن طبيعة المكان والزمان هناك ؟ هل ستجد لتعاريف الأشياء التي تألفها على وجه هذه الكرة الأرضية نفس المعنى ؟ أم أن هنالك تعاريف أخرى وظواهر أخرى قد لا نكون ندرك عنها أي شئ …نعم قد لا ندرك عنها أي شئ بالرغم من درجاتنا العملية , ودراستنا وثقافتنا , فنجد المثقف منا هو الذي يعرف بوجود مثل هذه المسميات أو الأشياء …

إذن دعونا نخوض معاً في رحلات مقتضبة نتعرف فيها على بعض أسرار هذا الكون الرائع الذي يدل صنعه على عظمة خالقه …دعونا نبحر معاً في بحر يختلف في تعريفه عن تعريف البحر التقليدي الذي اعتدنا عليه لنكتشف أموراً كنا نجهلها وعوالم لم نكن مدركين لها من قبل …تعالوا معاً لنفتح أعيننا على هذا الكون فنخرج بذلك من ضيق أفكارنا ,وعوالمنا وندرك عظمة خالقنا …

أخواتي أخوتي …قد أطيل غالباً في المقدمات التي أضعها بوابة للمواضيع التي أقوم بدراستها وترجمتها وطرحها …ولكنني أميل كثيراً إلى التعبير عن نفسي…لأجد ذاتي من خلال كلماتي وتعابيري التي قد لا أفلح كثيراً في التعبير عنها …ففي واقع الأمر كلما شعرت بالضيق لجأت للقراءة والبحث في مواضيع الكون والفلك , لأنني أجد هناك ساحةً واسعة جداً …أجد فيها متنفسي …حيث يمتلئ قلبي بفيض وافر من العشق …عشق هذا الكون …ويزول الضيق عني ويمتلئ قلبي بحب هذا الإله بارئ الكون …فسبحان الله الذي خلق هذه الآيات كلها من حولنا لنتدبر في خلقها ولتكون لنا فيها أية وعبرة لمن  اعتبر.

المواضيع والنقاط التي سنناقشها في الحلقات القادمة:

 سنتناول في الحلقات القادمة موضوع الثقب الأسود ونناقشه عبر الإجابة على مجموعة من التساؤلات المطروحة, والتي وبالإجابة عنها ينفتح أمامنا أفق التفكير بشكل واسع وتطرح أسئلة ومواضيع ذات أفق أبعد من ذلك , لتكون إن شاء الله أحد المواضيع المدرجة لاحقاً.

1.      ما هو الثقب الأسود؟

2.      كيف تنشأ وتتشكل الثقوب السوداء النجمية ؟

3.      كيف يمكن للضوء أن يتم احتباسه عبر السحب الجاذبي الصادر عن ثقب أسود مع العلم بأنه لا يوجد للضوء أي كتلة؟

4.      كيف يبدو الثقب الأسود – ماهو شكله؟

5.      هل تتحول كل النجوم إلى ثقوب سوداء؟

6.      ما هو عدد الأنماط والأنواع المتواجدة من الثقوب السوداء؟

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

 


رسالة المدونة

أبريل 16, 2009

 

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

أخوتي إخواني الأعزاء , كلنا يعرف التاريخ , وكلنا يعرف كيف كان العلم والحضارة العلمية في أيدي العرب , وكيف كان الغرب في الماضي يرتع في غياهب الجهل والخرافات , بينما كان العالم العربي في أوج تقدمه وإزدهاره.

دوماً نتذكر الماضي …ونتفاخر فيه أحياناً…ونتحسر على حالنا أحياناً أخرى…

لكن دعونا الآن ننظر إلى الموضوع نظرة مفكرة علمية جادة…هل تفاخرنا أو تحسرنا كافي؟؟ هل هذا هو جلّ ما نستطيع القيام به …هل هذه هي رسالتنا في الحياة – النظر إلى إنجازات أجدادنا وأسلافنا دون أن نحرك قيد أنملة للتحرر من واقعنا المتخلف هذا , أو القيام بحركة جادة مفيدة تغيير وجه التاريخ ؟!

إن كانت هذه هي رسالتنا ..فما أسخفها من رسالة …وما اتفهنا من بشر , لكن بالتأكيد , وأنا واثقة بأن كل واحد منا لا يقبل بذلك , وبأنه يشعر في أعماق نفسه بأنه قادر على إحداث تغيير إيجابي على وجه هذه البسيطة…ولكن ربما يشعر للحظات بأنه وحيد,وقد يقول في نفسه ” الكف الواحدة غير قادرة على التصفيق” فيتجاهل الفكرة ويستمر في هذه الحياة الروتينية, أو ربما يحاول الإقدام على طرح افكاره عسى أن يجد من يساعده في تطويرها قدماً ويقف إلى جانبه بحثاً عن حل جدي ينتشل ركام حضارتنا من واقعها المأساوي الحالي..ولكنه أيضاً قد يواجه بكثير من السخرية والاستهزاءات التي بدورها قد تحبطه فما أكثرهم الأشخاص الذين قد يواجهونه – أو يواجهوا مثل هذه الأفكار – بالقول ” يكفيك أحلاماً ” , “هههههههه هل تريد أن تغيير وجه العالم ” ….وإلى غير ذلك من التفاهات , غير مدركين بأنهم جاهلون أو غافلون عن قوة الإرادة  البشرية, وكيف أن رجلاً واحداً قادر على تغيير العالم بأسره .

حسناً ما الذي بإمكاننا القيام به الآن , كلنا يعرف بأن طريق الألف ميل يبدأ بخطوة , وأول ما سنقوم به الآن هو الاستفادة من التاريخ بحد ذاته, ولنمحص النظر في صلب القضية, كيف انتقلت الحضارة للغرب؟؟

ببساطة :

1:  كان الغرب يؤمنون بقدرتهم على تغيير واقعهم بالدرجة الأولى .

2:  عبر حركة ترجمة العلوم بشكل تدريجي, حيث كانوا يقومون بإحضار الكتب العلمية في شتى المجالات من العرب ويعكفون على ترجمتها إلى لغاتهم, لينشأ بعد ذلك جيل واع على هذه العلوم السليمة المترجمة , ليأخذ بها ويدرسها منذ صغره ليطورها ويبدع في مجالها عند كبره. (أي انهم كانوا ذوي أفق واسع وتخطيط على المدى البعيد – ولا زالوا – ففي الوقت الذي نتصيد نحن فيه صوص اليوم , يتربصون هم دجاجة الغد التي تولد لهم عدد كبيراً من الصيصان).

أما بالنظر إلى العامل الأول ,فنجد بأنه بالأجدر بنا أن نملك هذا الإيمان بالقدرة على التغيير الإيجابي , ألا وربنا الله وهو ثقتنا وعليه توكلنا , وما خاب من توكل على الله وجعل جل ثقته وإيمانه بالله.

وبالنسبة للعامل الثاني,فما شاء الله عليكم كلكم مثقفون ومتعلمون , وقد حباكم الله بعقول نيرة أنتم مسائلون فيما بعد عن استخدامكم لها.

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


تعرف الأشخاص من خلال شكل الجسم وطريقة المشي :Human Identification from Body Shape and Gait

أبريل 16, 2009

 walking-human













 




   Entity authentication   وثوقية الكيان


  هي أحد المواضيع الهامة التي نحاول دوماً إيجاد حلول مناسبة لتحقيقها ,وهنالك عدة أساليب للتحقق من وثوقية الكيان ,ومن أشهر تلك الطرق في التحقق هي التالية:



  1: اعتماداً على شيء تملكه Something that you have


 Something that you know2:اعتماداً على شيء تعرفة


 Something that you are3:اعتماداً على شيء يمثلك أنت بحد ذاتك 


وغالباً مايستخدم للتوثق من كيان ما اعتماداً على مزيج من الطرق السابقةً


   بالنسبة للطريقة الأولى (شيء تملكه) فخير مثال عليها البطاقات الذكية Smart cards   وغالباً ما تستعمل


بكثرة في العمليات المصرفية ,وتطبيقات حجز البطاقات الالكترونية.


    أما بالنسبة للطريقة الثانية (شيء تعرفه) فأبسط مثال عليها هي كلمات السر , وتعتبر هذه الطريقة من أكثر الطرق شيوعاً والأكثر استخداماً في مجالات التحقق من وثوقية الكيان,وذلك بغض النظر عن المستوى الأمني الذي توفره فعلياً.


الطريقة الثالثة التي يعتمد عليها في تحقيق وثوقية الكيان هي اعتماداً على شئ يمثلك أنت بحداتك    


 ,وفي هذا الأسلوب يتم الاعتماد على تحويل الخواص الفيزيائية لجسم الإنسان (Something you are)


إلى قوالب رقمية لتخزن في قاعدة المعطيات ,وعندما نريد التوثق من شخصٍ ما تتم عملية قياس هذه الخواص الفيزيائية بوسيلة ما , وترمز بشكل رقمي على شكل قالب (نموذج)ممثل لصاحبها ,لتقارن مع القوالب الموجودة في قاعدة المعطيات .


 ومثال على الطريقة السابقة ,تطبيقات التعرف على الوجه Face identification


بصمة شبكية العين, بصمة الأصابع,وتتميز بأنها ثابتة وغير متغيرة وتميّز كل شخص بشكل فريد,لذلك تصنف static measurementsضمن  المقاييس الثابتة


بينما هنالك مقاييس تتغير بشكل ديناميكي , مثل التعرف على خط الكتابة , والتعرف على الصوت.


  وقد تم عملياً تنجيز كل أساليب التعرف السابقة واستخدامها بشكل واسع, ولكن مع تطورأساليب وتقنيات التعرف السابقة, كانت تتطور أساليب وطرق أخرى –سواء كانت بشرية أو الكترونية- بشكل متزامن معها, ألا وهي أساليب تهدف إلى محاولة كسر وتحدي درجة وثوقية تلك التقنيات .


  مثال : انتشار عمليات النتكر الاحترافي لدى المجرمين ,وعمليات التجميل التي جعلت عملية التعرف عليهم عبر تطبيقات التعرف على الوجه غير كافية, وكذلك الأساليب المختلفة لتشويه بصمات الأصابع عبر حرقها مثلاً بمادة مذيبة,بالإضافة إلى الأجهزة التقنية المتوافرة حالياً والتي تمكن من تغيير وتقليد الأصوات,وغير ذلك…


    كل ذلك دفع بالجهات المختصة والعاملة في مجال التعرف والتحقق من وثوقية الكيان إلى البحث عن تقنيات جديدة تعتمد بشكل أساسي على سلوكيات عفوية من قبل الأشخاص الصادرة عنهم ,وبالتالي تكون هذه الخواص تحمل درجة وثوقية أعلى , وانطلاقاً مما سبق بدأت فكرة التعرف على الأشخاص من خلال طريقة المشي بالظهور .


 [4]تعرف الأشخاص من خلال شكل الجسم وطريقة المشي 


Human Identification from Body Shape and Gait


 لنبدأ في البداية بتعريف ما يعرف ب


(طريقة المشي المميزة للشخص) Person’s gait[1]


و تعتمد على عدة عوامل منها البنية الفيزيائية ووزن الجسم, ارتفاع كعب القدم,و الحالة الشعورية للعقل .


      وقد وجد أن طريقة المشي تقريباً تميّز الأشخاص إلى حدٍ ما ,وهنالك الكثير من الدراسات الطبية التي تؤكد


 بعد تحليل طريقة المشي لعدد كبير من الأشخاص – بأنها تكاد تكون مميزة لكل شخص على حدى.-


وحتى أننا أنفسنا نعتمد غالباً على هذه الخاصية في تميز أصدقائنا ومعارفنا عن بعد من خلال هيئتهم أثناء المشي,فغالباً ماترانا نقول:”هه…هاقد جاء فلان ” وذلك عند رؤيته من بعيد وعلى مسافة تكاد تكون ملامح وجهه غير واضحة أبداً, أو في ظروف تكون فيها الإضاءة سيئة جداً بحيث يستحيل علينا تميّزه من خلال ملامح وجهه,وغالباً ما يكون الشخص هو فعلاً الشخص الذي ذكرنا اسمه.


 أي أنها تزودنا بطريقة فعالة للتعرف و تمييز الأشخاص على بعد, في حين تكون بقية المقاييس


 غير واضحة و غير قابلة للقياس,Biometrics


    وفي نفس الوقت تؤمن لنا وسيلة يمكن أن تُخَدم في إجراءات أخرى أكثر تعقيداً يمكن أن تشكل بتكاملها معاً وسيلة فعالة للتوثق,إذ تظهر لنا أماكن وظروف لاتسمح لنا باستخدام الطرق المعروفة في التوثق , لذلك دوماً نحاول أن نلجأ لإيجاد طرق بديلة قد تتعاون مع غيرها لإيجاد وسيلة للتوثق, و تتميز هذه الطريقة بأنها أسلوب تعرف خفي :أي أنها تزودنا بآلية للتعرف دون أن يشعر الشخص المراقب (الذي نتحقق منه)بذلك , ونحن نعلم بأن أساليب التعرف الخفية غالباً ما تكون أكثر فعالية من أساليب التحقق الظاهرة لأن الشخص المراقب يتصرف على طبيعته أثنائها, ولهذه التقنية استخدام في عدة مجالات ومنظومات مختلفة ففي مجال الاستخبارات تستخدم كوسيلة للتعرف و كشف الجواسيس و المجرمين و منتحلي الشخصية, و التوثق من الشخصيات الرسمية.


وإليكم المثال التالي الذي يوضح مجال فعال لاستخدام هذه التقنية في التعرف:


    دعونا نتخيل مؤتمر على مستوى القادة حيث يقع مقر الاجتماع في نهاية ممر طويل ضمن مبنى, ونريد التوثق من شخصيات القادة الحاضرين لنضمن على مستوى أمني عالي عدم وجود أشخاص مزورين (محاولات انتحال شخصية) , نجد أنفسنا في مثل هذه الحالة مضطرين للجوء إلى أساليب تعرف غير مباشرة, إذ نجد أنه من غير المعقول أن نطلب من القائد أن يبصم مثلاً لنتحقق من بصمته!؟


لكنه بإمكاننا وضع كاميرات مراقبة في الممر تلتقط صور له و هو يجتاز الممر ,ترسل هذه الصور للمعالجة,لتقارن نتائجها مع قاعدة معطيات تحوي صور تنمذج مشية القادة(طبعاً كل قائد على حدا),حيث تُجرى هنالك إجرائية التوثق.


أيضاً في الكثير من الجرائم نلاحظ أن المجرمين يخفون وجوههم, لكنه من الصعب إخفاء مشيتهم.


 


*   تعتمد الطريقة المذكورة على تقنيات بسيطة في مجال الرؤية الحاسوبية لتوصيف شكل الجسم و نمذجة حركته.


  ويتميز تنجيز هذه الطريقة في التوثق بمايلي :


      1 : سهلة الفهم و التنجيز (التطبيق).


      2 :بإمكانها أن تتجاوز بسهولة تأثير الضجيج على الصور المستحصلة من الفيديو الذي يلتقط صور ة الشخص وهو يمشي(الضجيج لا يشكل عائق أثناء مرحلة التوثق).


      3:لاتحتاج لمعطيات كبيرة من الصور (تعتبر الصور التي تمثل شخص و هو يمشي فقط بمقدار خطوة واحدة, كافية)


         4:غير حساسة للون الثياب .


ولكن من مساوئ هذه الطريقة:


       بأنها حساسة للزاوية التي يتم التقاط الصورة منها(الصور تم التقاطها بشكل مباشر أم جانبي), تماماً مثل المشكلة التي نواجهها في تطبيقات التعرف على الوجه.


(في الصورة ( a ) أدناه توضيح للزوايا المختلفة التي يمكن التقاط الصور منها )


 


 


steps-patterns


 


 


 


 


  على كل الأحوال , فإن هذه الطريقة مع كل مساوئها ,فهي لا تزال تؤمن لنا وسيلة للتعرف على الأشخاص , وهم على مسافة بعيدة حيث تكون معظم ملامحهم المميزة –والمعتمدة غالباً في أساليب التوثق الأخرى- غير ظاهرة وغير قابلة للقياس.


وصف التفاصيل التقنية باختصار


أما الآن فسنشرح إحدى أبسط الآليات البرمجية التي يمكن من خلالها تنجيز هذه الطريقة في التوثق. وهي تعتمد بشكل أساسي على مطابقة نماذج لتتالي صور (أطر مفتاحية) مستخلصة و  معالجة من صور الأشخاص و هم يمشون.


إذ يتم مقارنة هذه الأطر المفتاحية مع الأطر الموجودة في مجموعة التدريب ,إذ يتم  فعلياً استخدام خوارزمية تصنيف للأطر, تصنف الأطر التي نختبرها ,مع الأطر الأقرب لها في مجموعة التدريب,وذلك باعتماد معيارمعين لقياس البعد.


 [1]   خطوات الخوارزمية هي كالتالي:


1 : يتم استخلاص صورة مظللة للشخص من الصورة .


2 :يتم تحليل دورة المشي بهدف استحصال الأطر المفتاحية منها.


3:استخلاص النموذج(القالب).


4:مطابقة النماذج بهدف التحقق من شخص ما.


تتضمن الخطوة الأخيرة عملية تصنيف للنماذج و اختيار النموذج الأقرب اعتماداً على مفاهيم رياضية في قياس البعد .


                                                                                                                            


وفيما يلي شرح تقني مبسط جداً لخطوات الخوارزمية السابقة :


 


1 – يتم استخلاص صورة مظللة للشخص من الصورة .


(Silhouette Extraction)


يتم استخلاص الصورة المظللة ببساطة عبر عملية طرح لصورة الخلفية من الصورة التي تحوي صورة الشخص وهو يمشي (عملية الطرح تتم بيكسل بيكسل),و من ثم نفلتر الصورة الناتجة من الضجيج الذي قد تحتويه.


(ملاحظة : ينتج الضجيج من تأثير ظهور خيال الشخص الموجود في الصورة,وبالتالي سيتم استحصاله مع الصورة المظللة للشخص ,وذلك لعدم وجوده في صورة الخلفية المجردة من الشخص,بالإضافة للفجوات التي قد تعتري الصورة المستحصلة نتيجة التطابق اللوني في بعض المناطق بين صورة الخلفية وصورة الشخص الذي يمشي)




 1


الصورة على اليمين تمثل الصورة المظللة المستحصلة من الصورة اليسارية.   نجد في الشكل( d)


 


والصورة التالية تمثل بعض الصور المظللة المستحصلة ,والحاوية على بعض الضجيج الناتج من ظلال الأشخاص المنعكسة على الأرضية.


 


2 


2 – يتم تحليل دورة المشي بهدف استحصال الأطر المفتاحية منها.


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


 


يتم حساب هذه الوقفات العلامة من خلال ملاحظة الدورية في الصور المظللة.


3 


وكما نلاحظ في الصورة أعلاه


 بأن هنالك 4 وقفات علامة يمكن استحصالها من الصور المظللة, ألا و هي :


    Double support1+2: وضعية الدعم المزدوج (


         عندما تكون القدمان على الأرض و القدم اليمينية/اليسارية في المقدمة.


 3+4: وضعية التوسط اليميني اليساري  Right/Left midstance


        عندما تكون القدمان قريبتان من بعضهما البعض مع القدم   اليمنى/ اليسرى المتأرجحة تمر للتو من مستوى القدم  اليسرى / اليمنى.


 


3- استخلاص النموذج(القالب).


بعد إيجاد الأطر المفتاحية نقوم بإيجاد قالب لكل منها عن طريق القيام بعملية تقيّس لكل إطار,إذ نقوم بترك مسافات بادئة حول كل صورة بهدف إجراء معالجات لاحقة على الصورة .


4



بعد ذلك ثم يتم تعليم كل قالب بحسب نوع الإطار الممثل له (الدعم المزدوج أم التوسط اليميني/ اليساري)


       ومن ثم يتم تشكيل مجموعة التدريب  لتكون مؤلفة من كل قوالب الأطر المفتاحية المستخلصة من كل تتالي لطريقة مشي معدة لتضمن ضمن مجموعة التدريب.


 


4-:مطابقة النماذج بهدف التحقق من شخص ما.


ومن ثم يتم مقارنة نموذج(قالب) العينة قيد الاختبار –أي الشخص الذي نتحقق منه – مع نماذج التدريب المخزنة  مسبقاً,واعتمادا على معايير محددة لقياس مدى تطابق النموذج الحالي مع أحد النماذج المعالجة والمخزنة مسبقاً,وضمن نسبة خطأ معينة وعتبة محددة , نستطيع أن بحدد فيما إذا كان النموذج يطابق أحد النماذج الموجودة أو لا.


خاتمة:


باختصار تقوم الطريقة السابقة بالتقاط المنحنيات الشكلية المميزة للأشخاص(المنحنيات التي يمكن اعتبارها كمقياس)و من ثم التوثق من الأشخاص اعتماداً عليها,والطريقة المذكورة سابقاً ما هي إلا أحد أبسط التقنيات المتعارف عليها في هذا المجال لنتجيز أسلوب التوثق المطلوب, إذ أن هنالك عدد هائل من الأساليب المختلفة ,والدراسات المستفيضة في هذا المجال , والتي تنجّز أسلوب التعرف السابق بشكل أفضل من الأسلوب المذكور الذي قد لايعمل بشكل جيد إلا ضمن شروط وقيود معينة تحكم البيئة التي يتم فيها تنجيز تلك الطريقة .


ونعيد ونؤكد بأن هدفنا في هذه المقالة هو التنويه عن هذه الطريقة والإشارة إلى وجودها لاأكثر


 و في النهاية تبقى هذه الطريقة (المدروسة حديثاً) قابلة للتطوير و التحسين و الاستخدام المباشر في كثير من المنظومات الأمنية و ذلك بالإضافة لتطبيقاتها في المجالات الأخرى كالطبية مثلاً.




























جدول المصطلحات المستخدمة


Silhouette


Dark image outlined against lighter background


صورة مُظللة


Gait


way of walking


طريقة المشي


Biometrics


Branch of biology that studies the statistics of living organisms


مقاييس


Classification


sorting, systematic arranging


تصنيف


Key frames


 


أطر مفتاحية


 




















 


مراجع للاستزادة


[1]


 Robert T.Collins,Ralph Gross and Jianbo Shi Robotics Institute, Carnegie Mellon University Email:


_ rcollins,rgross,jshi_ @cs.cmu.edu


Silhouette-based Human Identification from Body Shape


And Gait


[2]


Ralph Gross and Jianbo Shi from


Robotics Institute Carnegie Mellon University


‘The CMU Motion of Body ( MoBo) Database’


 


[3]


James J. Little
Department of Computer Science
University of British Columbia


Jeffrey E. Boyd
Department of Electrical and Computer Engineering
University of California at San Diego


‘Recognizing People by Their Gait: The Shape of Motion


[4]


Mark S.Nixon   and John N.Carter


Michael G.Grant and Layla Gordon


‘Automatic recognition by gait: progress and prospects’


 


الخوارزميات الجينية (الحلقة 4 والأخيرة)

اغسطس 30, 2008

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

أخواتي إخواني الأعزاء , عذراً في حال كنت قد أطلت عليكم ريثما قمت بإعداد هذه الحلقة من سلسلة الخوارزميات الجينية , لنتابع سوية ما قد بدأنا به مسبقاً.

 بعد أن وصلنا إلى ما وصلنا إليه في الحلقات السابقة , وأصبح لدنيا الآن دراية واسعة في معنى  الخوارزميات الجينية ,وبعد أن أحطنا بكم كافي من المعلومات المتعلقة بالمكونات الأساسية للخوارزميات الجينية , والعمليات الأساسية التي تجرى عليها , أصبح الآن بإمكاننا التطرق لمبدأ الخوارزميات الجينية , حتى تصبح مادتنا قابلة للتطبيق العملي والبرمجة , وكما أننا سنستعرض في هذه الحلقة أهمية كل من عمليتي التصالب والطفرة اللتان تتمان على الخوارزميات الجينية ,وذلك عبر بعض الأمثلة العملية .

كما أننا سنتطرق إلى بعض المجالات التي تكون فيها الخوارزميات الجينية مفيدة وفعالة ,وبعض مجالات تطبيقها …

وسأدعكم الآن لتستمتعوا بمحتويات هذه الحلقة الأخيرة من الخوارزميات الجينية بشكل مفصل…

مبدأ الخوارزميات الجينية: [1]

مما سبق نرى بأن مبدأ الخوارزميات الجينية بسيط جداً ويمكن تلخيصه كما يلي :

1: ترميز المسألة بالشكل المناسب والأمثل

2:التوليد العشوائي للتجمعpopulation  البدائي المؤلف من مجموعة من الكروموزومات التي تتألف بدورها من مجموعة من الجينات , حيث ان كل كروموزوم (الذي هو عبارة عن تجمع جيني) عبارة عن حل.

3:حساب قيمة الصلاحية لكل كروموزوم (حل) من الكروموزومات الموجودة في التجمع . ويعتمد أسلوب تقييم  صلاحية كل حل في الجيل بمقدار بعده عن الحل الامثلي الذي نبحث عنه.

4:يتم اختيار الكروموزومات التي ستخضع لعملية التصالب لتوليد الجيل الجديد, وعملية الاختيار تقوم بحسب إحدى النظريات الكثيرة المقترحة في هذا المجال,وترتكز عملية الاختيار بشكل اساسي على مدى صلاحية الحل في الانتقال للجيل الثاني والتي يقوم بتحديدها تابع الصلاحية

5:تلي عملية الاختيار , عمليتي التصالب والطفرة .

6: ومن ثم نعود مجدداً للبدء من الخطوة رقم 3.

 

أهمية عمليتي التصالب والطفرة في الخوارزميات الجينية:

تشكل عملية التصالب في الخوارزميات الجينية العملية الأساسية , طبعاً لا غنى لنا عن بقية العمليات مثل الطفرة –التي تعطي نتوع وراثي للتجمع-, في الواقع , قد لا يتواجد الحل المطلوب حتى في تجمع كبير جداً في حال اعتمدنا بشكل اساسي على التصالب فقط , لذلك نحن بحاجة ماسة للطفرة التي تحسن وتزيد فرصة الحصول على الحل الأمثلي , وبالمثل , لا يمكننا الاعتماد على الطفرة وحدها في الخوارزميات الجينية لأنها تبطئ العملية كثيراً , لذلك نلجأ لمزيج من العمليتين بهدف الحصول على الحل الأمثلي –او القريب منه- بأسرع وقت ممكن .

 وحتى لا يبقى الكلام السابق مجرد كلام نظري ,إليكم المثال التالي الذي يوضح أهمية الطفرة والتصالب في الخوارزميات الجينية .

لنتخيل المسألة التالية :

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

(ملاحظة :

بهدف التبسيط , والتركيز على الفكرة المراد إيصالها سنهمل فكرة إشارة العدد الصحيح وأية اعتبارات أخرى.)

 

وضوحاً فإن الحل الأمثل هو السلسلة الثنائية الكاملة الوحدان , اي المؤلفة من تتالي 7 واحد دون ورود أي صفر

1111111

Chromosome  

 

وبفرض أنه بعد عملية التهيئة العشوائية للحلول كان لدينا مجموعة الحلول التالية :

 

Chromosome A

1100011

Chromosome B

0001100

Chromosome C

0110000

 

نجد أن الحل الأمثلي الذي نبحث عنه موجود ضمن التجمع , ولكنه غير فعال لكونه مبعثر ضمن عدد من الحلول , فنجد أنفسنا هنا بحاجة لآلية التصالب crossover  بهدف دمج هذه الحلول معاُ والوصول للحل المطلوب

, وبفرض أن الخوارزمية المتبعة هنا تعتمد بشكل أساسي على عملية التصالب فقط , دون عملية الطفرة , وبعد عدد معين من الأجيال وصلنا لحلول مقاربة جداً للحل الأمثلي , سلاسل مفعمة بالوحدان , ولكن للصدفة السعيدة , فإن أي من هذه السلاسل لا يحوي الواحد في الخانة الأولى , وبالتالي وبالاعتماد على التصالب فقط , قد نصل لحل قريب جداً من الحل الأمثلي

Chromosome X

1111110

 

 

لكننا لن نصل بحياتنا للحل الأمثلي نهائياً , وذلك لافتقارنا لعملية الطفرة التي قد تغير مجرى العملية كلها إذا حدث وأن قلبت أول صفر لواحد في أحد الحلول , وعندها تعود لنا فرصة الحصول على الحل الأمثلي.

 

وسنستغل فرصة ذكر المثال السابق بهدف توضيح مفهومي الجينوتايب , والفينوتايب, نستذكر حديثنا عن هذين المفهومين من المقدمة البيولوجية , حيث إن الجينوتايب يمثل الحل بشكله الوراثي , وبالقياس نجد أن الجينوتايب في المسألة السابقة يمثل السلسلة الثنائية ذات السبع خانات المتتالية من الأصفاروالوحدان , بينما الفينوتايب يمثل الحل بشكله الفيزيائي , أي في مسألتنا يمثل القيمة العددية الصحيحة للحل الناتج .

 

الرسم :

 

 

 

متى تكون الخوارزميات الجينية مفيدة وفعالة : [3]

تكون بشكل عام الخورازميات الجينية مفيدة وفعالة في أحد الحالات التالية :

  1: عندما يكون فضاء البحث كبير جداً و معقد إلى حدٍ ما وغير مفهوم بشكل واضح

 2: المعلومات ,أو بالاحرى المعرفة في المجال المدروس نادرة , أو أنه من الصعب ترميز خبرة الخبير في المجال المدروس بهدف تضيّق فضاء البحث

3:لا يوجد طرائق تحليل رياضي معروفة لحل المسألة .

4: فشلت طرائق البحث التقليدية لحل المسألة .

 

مجالات تطبيق الخوارزميات الجينية : [1]

تم تطبيق الخوارزميات الجينية في عدد كبير من المجالات , منها العلمية , المسائل الهندسية , وفي مجال الأعمال والألعاب و الروبوتات …

بعض التصنيفات الرئيسية التي استخدمت فيها الخوارزميات الجينية :

1:مسائل الأمثلة بشكل عام :

بما فيها الأمثلة العددية , والحسابية مثل مسألة البائع المتجول TSP  ,التصميم الصناعي مثل مسألة آلة تقطيع الخشب ,جدولة أعمال التسوق , أمثلة جودة الصوت والفيديو.

2: البرمجة الاوتوماتيكية :

حيث تم استخدام الخوارزميات الجينية لتطوير برامج حاسوبية بهدف تنفيذ مهام محددة ,ولتصميم بنى حاسوبية أخرى ,مثل شبكات الفرز sorting network  .

3:تعليم الروبوتات والآلات :

تم استخدام الخوارزميات الجينية في كثير من تطبيقات التعلم التلقائي machine –learning  ,ومن ضمنها التصنيف classification  و النتبأ prediction  .

وقد تم استخدام الخوارزميات الجينية في تصميم الشبكات العصبونية neural networks design  .

 

4:النماذج الاقتصادية Economic models

تم استخدام الخوارزميات الجينية لنمذجة آليات ابتكار وتطوير استراتيجيات المزايدة .وفي مجال نشوء الأسواق الاقتصادية emergence of economic markets .

5: التفاعل بين التطور والتعلم :

حيث تم استخدامها لدراسية التأثير المتبادل بين تعلم الأفراد وتطور الأنواع .

6:كنماذج للأنظمة الاجتماعية :

تم استخدامها لدراسة جوانب تطور النظم الاجتماعية , مثل تطور التعاون evolution of cooperation  و تتطور الاتصال evolution of communication  ,سلوك القافلة لدى النمل trail-following behavior in ants .

والكثير الكثير من المجالات التي استخدمت فيها الخوارزميات الجينية .

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

 وقي النهاية لا يسعنا إلا القول بأن المعلومات السابقة عن الخوارزميات الجينية ما هي إلا قطرة من فيض هائل لا يزال يتطور كل يوم ,ولا يمكننا الاحاطة بها كلها في مقالة واحدة ,ولمزيد من المعلومات يمكن العودة للروابط المذكورة ضمن المراجع.

مراجع للاستزادة

Introduction to Genetic Algorithm

www.rennard.org/alife/english/gavintrgb.html

[1]

Introduction to Genetic Algorithm

://cs.felk.cvut.cz/~xobitko/ga

[2]

Genetic Algorithms

www.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/tcw2/report.html

[3]

//lancet.mit.edu/~mbwall/presentations/IntroToGAs

[4]

Genetic Algorithms and Evolutionary Computation

www.talkorigins.org/faqs/genalg/genalg.html

[5]

 

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

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

وأدعوا من الله أن يوفق كل من قام بقراءة هذه الحلقات , ولا يسعني الآن إلا أن أودعكم في ختام هذه الحلقة الأخيرة من سلسلة الخوارزميات الجينية ,آملاً لكم التوفيق .

وإلى لقاء قريب بإذن الله تعالى ,وإلى ذلك الحين أستودعكم الله والسلام عليكم ورحمة الله وبركاته .


الخوارزميات الجينية (الحلقة 3 )

اغسطس 18, 2008

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

سنتابع اليوم من حيث توقفنا في الحلقة الثانية من الخوارزميات الجينية , حيث كنا بصدد مناقشة المكون الثالث للخوارزميات الجينية والذي يتجلى بالعمليات الجينية Genetic Operators , وأتمنى لكم مع هذه الحلقة الثالثة المزيد من المتعة والفائدة …

3: المكون الثالث يتجلى بالعمليات الجينية Genetic Operators

تنبع أهمية العمليات الجينية من إيجاد حلول لم تكن موجودة سابقاً في فضاء الحلول

ومن أهم العمليات الجينية :

-          التصالب crossover or recombination

-          الطفرة mutation

ويعتمد بشكل كبير أداء الخورزميات الجينية على هذين المؤثرين , وطبعاً بالتأكيد فإن أسلوب الترميز المستخدم له دوره ايضاً .

وكبداية , سنبدأ بشرح عملية التصالب أولاً crossover:وهي عملية منتجة , أي تنطلق من كروموزومين (صبغيين )–حلين – من الجيل الحالي – جيل الآباء – لتعطي بشكل عام حلين أبناء two offspring .

بينما الطفرة , هي عملية يتم فيها إجراء تبديل – تغيّر – على بعض جينات كروموزوم(صبغي ) ما .

ننوه هنا إلى أن نتجير كل من عمليتي التصالب crossover والطفرة mutation  تعتمد بشكل أساسي على أسلوب الترميز المستخدم للمسألة , وتتغير بتغيره ,ولتوضيح هذه الفكرة , سنذكر هنا بعض الأساليب الشهيرة في تنجيز الطفرة و التصالب, وذلك وفقاً لترميز محدد سابقاً

مثلاً في حال :

   1: الترميز الثنائي Binary Encoding

لدينا طيف واسع من أساليب التصالب crossover  الممكنة,نذكر منها :

   - التصالب بنقطة وحيدة Single point crossover

وفي هذا النوع من التصالب يتم في البداية تحديد نقطة تصالب وحيدة , ومن ثم يتم نسخ الجينات للابن الأول من بداية الكروموزوم الممثل لأحد الوالدين ,لنقطة التصالب , والبقية يتم نسخها من الوالد الثاني ,وينتج الابن الثاني وفق عملية موافقة للعملية السابقة ولكن الأب الذي كان يأخذ منه الجزء الأول من الجينات يصبح مصدر لبقية الجينات , بينما الأب الثاني تأخذ منه السلسلة الجينية من بدايته لنقطة التصالب,وتنسخ للابن الثاني

الرسم التوضيحي التالي يبين آلية العملية السابقة:

 

 

 

 

11001011+11011111 = 11001111

 

 

Chromosome parent A

11001011

Chromosome parent B

11011111

Offspring  C

11001111

Offspring  D

11011011

 

- التصالب وفق نقطتين Two point crossover

في البداية يتم اختيار نقطتي تصالب , حيث يتم هنا نسخ من بداية الكروموزوم (الصبغي ) لأول نقطة تصالب من أحد الوالدين للابن , ومن ثم الجزء من السلسلة الثنائية انطلاقاً من أول نقطة تصالب لثاني نقطة تصالب , يتم نسخها نسخها من الوالد الثاني , بينما بقية السلسلة الثنائية للابن الناتج يتم اخذها من الأب الأول وذلك من ثاني نقطة تصالب لنهاية الأب.

 إليكم الرسم التوضيحي التالي :

 

 

 

 

11001011 + 11011111 = 11011111

Chromosome parent A

11001011

Chromosome parent B

11011111

Offspring  C

11011111

Offspring  D

11001011

 

- Uniform crossover

ويتم في هذا النوع من التصالب اختيار بتات بشكل عشوائي ونسخها من الوالد الأول أو الوالد الثاني للأبن.

وربّ رسمة خيرُ من ألف جملة توضيحية :

 

 

11001011 + 11011101 = 11011111

Chromosome parent A

11001011

Chromosome parent B

11011101

Offspring  C

11011111

Offspring  D

11001001

 

- التصالب الحسابي Arithmetic crossover

وفي هذا النوع من التصالب يتم تنجيز بعض العمليات الحسابية وذلك لإنشاء أبناء جدد

 

11001011 + 11011111 = 11001001 (AND)

الطفرة Mutation

في حالة الترميز الثنائي , تكون الطفرة , ببساطة , ما هي إلا عملية عكس لأحد البتات في الكروموزم (الصبغي ), حيث يتم اختيار البت ثم قلبه

مثال توضيحي:

 

11001001 => 10001001

  2: ترميز التباديل Permutation Encoding

   - التصالب بنقطة وحيدة Single point crossover

يتم اختيار نقطة التصالب , وحتى الوصول لهذه النقطة يتم نسخ التباديل من الوالد الأول , ومن ثم يتم مسح الوالد الثاني جيناً تلو جين , وفي حال لم يكن الجين الذي يتم مسحه موجوداً مسبقاً في الابن الناتج , عندها وفقط عندها تتم إضافته لهذا الابن.

والهدف من الإجراء السابق هو الحفاظ على مفهوم التباديل ,وعدم تكرار الرموز في السلسلة الجينية.

ملاحظة :

يوجد طرق متعددة لانتاج بقية الجينات للابن الناتج بعد عملية نسخ الجينات حتى نقطة التصالب الأولى , لكننا لسنا بصدد ذكرها كلها هنا .

(1 2 3 4 5 6 7 8 9) + (4 5 3 6 8 9 7 2 1) = (1 2 3 4 5 6 8 9 7)

الطفرة Mutation

ويتم تنجيزها هنا ببساطة عبر تغير الترتيب في السلسلة الممثلة للكروموزوم , حيث يتم اختيار رمزين من الكروموزوم ويتم إجراء التبديل بينهما .

(1 2 3 4 5 6 8 9 7) => (1 8 3 4 5 6 2 9 7)

  3: ترميز القيمة Value Encoding

كل عمليات التصالب المتاحة في الخوارزميات الجينية يمكن تنجيزها هنا .

 

الطفرة Mutation

مثلاً في حال القيم كانت ممثلة على شكل أعداد حقيقية , عندها يمكن إضافة أو طرح قيمة حقيقية صغيرة من القيمة المحددة من الكروموزوم , والتي من المطلوب إجراء الطفرة عليها.

 

(1.29  5.68  2.86  4.11  5.55) => (1.29  5.68  2.73  4.22  5.55)

 

2: ترميز الشجرة Tree Encoding

التصالب :

يتم اختيار نقطة تصالب من كلا الوالدين ,ويتم تقسيم كل من الوالدين عند نقطة التصالب المختارة , ومن ثم يتم تبادل الاجزاء تحت نقطة التصالب تلك بين الوالدين , لإنتاج ابنين جدد new offspring

الإجراء السابق موضح في الرسم التالي إدناه:

 

الطفرة Mutation

ويمكن تخيلها على انها تديل العمليات أو الأعداد أو … وذلك حسب المسألة المطروحة , أي باختصار العقد التي يتم اختيارها من الشجرة , يتم اجراء التبديل عليها .

 الانتقاء Selection

ومما اتضح لنا سابقاً من الخطوط العريضة التي تسير وفقها الخورزميات الجينية,فإن الكروموزومات (الصبغيات )  الآباء التي تخضع لعملية التصالب , يتم اختارها –انتقائها – وفق آلية محددة من التجمع الحالي .

تكمن المسألة هنا في كيفية اختيار هذه الكروموزومات (الصبغيات ) ,فحسب نظرية داروين في التطور , فإن الكروموزومات (الصبغيات ) الأفضل يجب أن تنجو , ومنها تنشأ الكروموزومات (الصبغيات ) الأبناء .

إذن تعود مسألتنا هنا إلى مسألة الاختيار الأمثل .عملياً يوجد عدة طرائق لتحديد كيفية انتقاء الكروموزوم (الصبغي )الأمثل , على سبيل المثال :

عجلة الروليت Roulette wheel Selection  ,انتقاء بولتزمان Boltzman selection  , tournament selection  ,انتقاء الحالة المستقرة Steady state selection  …إلخ

سنورد فيمايلي شرح لطريقة عجلة الروليت في الانتقاء:

1-      اختيار عجلة الروليت Roulette Wheel Selection

يتم اختيار الوالدين في هذه الطريقة اعتماداً على قيم صلاحياتهم,فكلما ازدادت قيمة صلاحية الكروموزوم , كلما ازداد احتمال اختياره .

وحتى نتعرف لآلية عمل هذه الطريقة دعونا نتخيل أمامنا عجلة الروليت , بحيث تتوضع كل الكروموزومات الموجودة في التجمع فيها , ولكن وفق قطاعات تتناسب مع قيم صلاحياتها , حيث يحتل الكروموزوم ذو الصلاحية الأكبر ,القطاع الأكبر , وبتضح لنا ذلك من الصورة أدناه:

 ومن ثم يرمَ حجر المقامرة ضمن العجلة ,وحسب القطاع الذي سيقع فيه سيتم اختيار الكروموزوم الموافق,وبالتالي فإن الكروموزوم ذو القطاع الأكبر –الصلاحية الأكبر- سيكون عرضة للاختيار أكثر من مرة .

باختصار ,يمكننا تلخيص الاجرائية السابقة وفق الخوارزمية التالية:

1:(المجموع) حساب مجموع قيم صلاحية كل الكروموزومات الموجودة ضمن التجمع ولنرمز له ب S.

2: (الاختيار) توليد عدد عشوائي    rضمن المجال [0,S]

3: (حلقة)نمر بحلقة على الكروموزومات ضمن التجمع ونقوم بحساب مجموع قيم الصلاحيات أثناء هذا المرور, وعندما نصل لقيمة لهذا المجموع أكبر من r   عندها نتوقف , ونعيد الكروموزوم الذي وصلنا عنده وأدى لكسر الحلقة.

ملاحظة : بالطبع فإن الخطوة رقم 1  نتفذ مرة واحدة فقط من أجل كل تجمع.

نلاحظ مما سبق بأنه يوجد مشكلة في طريقة الاختيار السابقة وذلك عندما تتباين قيم الصلاحية بشكل كبير,على سبيل المثال , إذا كانت أفضل قيمة صلاحية لكروموزوم , كبيرة لدرجة تغطي فيها 90% من عجلة الروليت , عندها سيكون لبقية الكروموزومات فرص ضئيلة جداً لأن يتم اختيارها .

وبهذا القدر سنكتفي هذا اليوم لنتابع معاً في الحلقة القادمة المزيد المزيد عن الخوارزميات الجينية

ولنتابع – إن شاء الله – في مناقشة مبدأ الخوارزميات الجينية  ,والإشارة إلى أهمية كل من عمليتي التصالب والطفرة بشكل عملي…

ونحن بانتظار تعليقاتكم الكريمة , ونقدكم الكريم البناء لهذا الموضوع.

وإلى أن ألقاكم في ذلك الحين , أسألكم الدعاء , وأستودعكم الله , والسلام عليكم ورحمة الله وبركاته.

المحررون : م.نور