المتابعون للمدونة

الاثنين، 6 مايو 2024

مجموعة ماندلبروت

 عن الذكاء الصناعي ورسم مجموعة ماندلبروت باستخدام العمليات الفرعية في سمول فيجوال بيزيك!


سألني أحد الأصدقاء أن أشرح له مجموعة ماندلبروت Mandelbrot Set، ولم أكن على علم بها فبحثت عنها، فاكتشفت أنها إحدى الأنماط الجزئية (الكسيريات) Fractals وهي منمنمات رياضية متكررة تصنع أشكالا مبهرة.. فمثلا، لو رسمت مجموعة ماندلبروت بدقة عالية جدا، ثم كبرت كل جزء منها لتغوص في تفاصيلها أكثر وأكثر، فستجد كل نفس الشكل النمطي يتكرر داخل نفسه إلى ما لا نهاية (شاهد الصورة المتحركة في صفحة ويكيبيديا(.
استهواني الموضوع، فطلبت من صديقي الذكاء الصناعي "كوبايلت" أن يعطيني مثالا عليها بكود سمول بيزيك (لأنه لم يتعلم سمول فيجوال بيزيك بعد) فلم يتأخر، ومن ثم حولت أنا الكود إلى سمول فيجوال بيزيك ببساطة، لكن المشكلة أنه كان بطيئا جدا، لأنه يرسم نقطة بنقطة باستخدام الدالة GW.SetPixel، ومساحة نافذة الرسم 800×600 أي 480 ألف نقطة.

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

-      كيف نجعل رسم الصورة أسرع؟

فاقترح تصغير مساحة الرسم، لكني أخبرته أنني لا أريد تصغير المساحة.

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

وحينما أخبرته بهذا أراد أن يبيع القضية، وتعلل بأن لغة سمول بيزيك لا تملك القدرات اللازمة للرسم بأفضل كفاءة وأن عليّ استخدام لغة أخرى!

فقلت له:

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

فأجابني بطريقة شخص حافظ لا فاهم:

-      بالطبع، يمكن تحسين أداء الرسم في Small Basic دون الحاجة إلى تقليل حجم الشاشة. إليك بعض النصائح التي قد تساعدك.

وأخذ يسرد علي نصائح لا تعنيني ولا تحل المشكلة!

فأدركت أن هذه آخر حدوده, وأنه لا يستطيع اكتشاف الحل بدون توجيه، فسألته:

-      هل تستطيع معرفة إن كان اللون الذي سترسمه أقرب إلى السواد فتتجاهله؟

وهنا فوجئت به يقول:

-      لتحديد ما إذا كان اللون الذي سترسمه قريبًا من السواد وبالتالي تجاهله، يمكنك استخدام قيمة التكرار iteration التي تحصل عليها من الحلقة التكرارية. إذا كانت قيمة iteration قريبة من الحد الأقصى maxIteration، فهذا يعني أن النقطة تقع داخل مجموعة ماندلبروت ويجب أن تكون سوداء أو قريبة جدًا من السواد. في هذه الحالة، يمكنك تجاهل رسم هذه النقطة لتسريع العملية. إليك كيف يمكن تعديل الكود لتحقيق ذلك.

وأعطاني الكود المعدل، وكان بالفعل نفس الكود الذي استخدمته أنا لحل المشكلة!.. وأضاف:

-      في هذا الكود، أضفت المتغير threshold الذي يحدد عتبة لتجاهل النقاط التي تكون قيمة iteration لها قريبة من maxIteration. بهذه الطريقة، سيتم رسم النقاط التي لها قيم ألوان أكثر إشراقًا فقط، والتي تمثل النقاط خارج مجموعة ماندلبروت، وهو ما يسرع العملية بشكل كبير.. أتمنى أن يكون هذا الحل مفيدًا لك!

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

-      نعم، هذا هو ما أتكلم عنه.

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

الأولى:

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

 

والثانية:

هي استخدام العمليات الفرعية Threads لتسريع رسم النقاط والاستفادة من قدرات معالج الحاسب.. وفي نقاش مع مطور LitDev أشار إلى أنه يستخدم المنبه Timer في سمول بيزيك حينما يريد تنفيذ عمليات غير متزامنة، لكن هذا الأمر محدود لأن كل المتغيرات في سمول بيزيك عامة ولا توجد متغيرات محلية Local Variables.. بينما سمول فيجوال بيزيك لا تعاني من هذه المشكلة لأنها تسمح بالمتغيرات المحلية.. وقد أعجبتني الفكرة، لكن حينما حاولت تجربتها اكتشفت أن المنبه الخاص بالنماذج يعطل تنفيذ البرنامج إلى أن ينتهي الكود الذي ينفذه وهذا يمنعني من استخدامه كعملية فرعية، بينما المنبه العام الخاص بسمول بيزيك يحل هذه المشكلة، لكن مشكلته أنه منبه واحد فقط ويجب استخدامه لتشغيل كل العمليات الفرعية وهذا يعقد الكود!
وهنا سألت نفسي: ولماذا لا أسمح بإنشاء عمليات فرعية مباشرة في لغة سمول فيجوال بيزيك؟
كل المطلوب هو إرسال الإجراء الفرعي
subroutine الذي تريد تشغيله في عملية جديدة إلى دالة في مكتبة تؤدي هذا الغرض.. لكن المشكلة، كيف أرسل الإجراء (وليكن اسمه task1)؟.. الطريقة الوحيدة المتاحة هي إرساله اسمه كنص "task1" واستخدام الانعكاس Reflection لاستدعاء هذا الإجراء من اسمه، وهو أمر ليس معقدا جدا ويمكن فعله، لكن كتابة اسم الإجراء كنص سيحتمل الخطأ، وسيحتاج لتعديلات في محرر الكود لأدعم الإكمال التلقائي للاسم، وتعديلا في مترجم الكود لأعطي خطأ لو كان الاسم خاطئا، وأنا لا أريد أن أقوم بكل هذا المجهود!

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

Button1.OnClick = Button_OnClick

إذن فكل ما أريده هو طريقة لأستخدم هذه الصيغة لإنشاء عملية فرعية.. وهنا فكرت فيما يلي:

Thread.SubToRun = Task1

حيث SubToRun هو حدث Event سيستقبل الإجراء الفرعي (مثل Task1)، ولكني هنا لن أطلق الحدث أبدا، لكني سأستخدم الجزء AddHandler الموجود في تعريف الحدث لإطلاق عملية فرعية جديدة وجعلها تنفذ الإجراء الفرعي:

Public Shared Custom Event SubToRun

   AddHandler(handler As SmallVisualBasicCallback)

      Dim t As New Threading.Thread(Sub() handler())

      t.Start()

   End AddHandler

End Event

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

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

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

ولحل هذه المشكلة، أضفت سطرا من الكود لتعطيل العملية الفرعية الرئيسية ل 10 ملي ثانية بعد إطلاق كل عملية فرعية، لأعطيها الفرصة لبدء التشغيل وقراءة المتغير العام:

AddHandler(handler As SmallVisualBasicCallback)

   Dim t As New Threading.Thread(Sub() handler())

   t.Start()

   Program.Delay(10)

End AddHandler

وقد نجحت هذه الطريقة في حل المشكلة، مع الأخذ في الاعتبار أنك لو كنت تتعامل مع عدد كبير من المتغيرات العامة وتجري عليها بعض الحسابات التي تحتاج لبعض الوقت، فقد تحتاج أن تستدعي الدالة Program.Delay بنفسك لتعطيل البرنامج الرئيسي لفترة أطول تسمح لكل عملية فرعية ببدء العمل بشكل صحيح.. وأفكر عامة في أن أضيف خاصية إلى المكتبة Thread اسمها InitialDelay ستكون قيمتها الافتراضية 10، وأعدل الكود إلى

   Program.Delay(InitialDelay)

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

وبتقسيم الرسم على عدة عمليات فرعية، وفرت حوالي 35% من الوقت!

 

الأربعاء، 1 مايو 2024

عيد ميلاد سعيد للبيسيك


 60 عاما منذ صدور لغة البيسيك


في العيد الستين للغة البسييك: أهدي للمصرين والعرب والعالم الإصدار الثالث من لغة Small Visual Basic، لتتوج بذلك أربع سنوات من العمل المضني بحمد الله وفضله وتوفيقه.

ملحوظة للمبرمجين: لغة سمول فييجوال بيزيك لغة مفتوحة المصدر ومنشورة على GitHub وهي مكتوبة بالكامل بلغة VB .NET.

هكذا سارت الرحلة عبر تلك السنوات الأربع:

-      بدأ الأمر في حظر كورونا، حينما قررت الاستفادة بوقتي في تعليم البرمجة للأطفال وعلى رأسهم أولاد أخويّ، فقدمت سلسلة دروس مرئية على يوتيوب لشرح لغة ميكروسوفت سمول بيزيك.

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

-      وقد ظللت أطور اللغة في إصدارات متلاحقة طوال العام التالي وأشرحها في سلسلة دروس مرئية أثناء تطويري لها.

-      ثم كتبت المرجع الإنجليزي الكامل للغة (وهو مجاني ومرفق ببرامج إعداد اللغة)، والذي وصل حاليا إلى حوالي 850 صفحة، وهو بالتأكيد غير موجه للأطفال، لكنه ضروري لدعوة المبرمجين المحترفين للمساهمة في تطوير اللغة، كما أن فيه كل الملاحظات والأمثلة التي تعين أي مبرمج أو مدرس على فهم تفاصيل اللغة وحل أي مشكلة تواجهه.

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

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

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

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

-      واستعدادا لنشر المزيد من الكتب للأعمار الأكبر (7، 8، .... وحتى 18)، أضفت المزيد من الميزات والتسهيلات للغة في الأشهر الماضية مثل نافذة الخصائص Properties Window ومصمم القوائم الرئيسية Menu Designer ومصحح الأخطاء Debugger، لأني أردت أن تكون اللغة أكثر إنتاجية بأقل قدر من الكود لجعل الكتب أبسط وأكثر اختصارا.

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

وقد اكتمل بحمد الله الإصدار الثالث من اللغة في صباح هذا اليوم 1 مايو 2024 في مدينة الروضة بمحافظة دمياط المصرية، وليست لدي أي نية لتطوير اللغة أبعد من هذا (سوى تصحيح أي أخطاء تظهر بها)، فهي الآن صالحة لتقديم البرمجة لمستويات مختلفة من سن 6 سنوات إلى 8 سنوات، وتعتبر نسخة مصغرة من لغة فيجوال بيزيك دوت نت، وتصلح كمدخل سهل جدا لتعلم VS .NET بدون الحاجة إلى جهاز كمبيوتر حديث، فحجم اللغة صغير وتصلح للعمل على ويندوز 7 وما تلاه من إصدارات الويندوز، لهذا أنصح بها من يريد تعلم البرمجة من أي سن حتى لو كان أكبر من 18 سنة، لأنه يستطيع مشاهدة الفيديوهات التعليمية في 10 ساعات، يتعلم فيها أساسيات البرمجة وكود فيجوال بيزيك بنسبة كبيرة، ويسهل عليه بعدها الانتقال إلى فيجوال بيزيك دوت نت، وسي شارب لو أحب، فلغة البيزيك هي أسهل لغة برمجة عبر التاريخ وساهمت في جعل البرمجة ثقافة شعبية منذ الستينات.

باختصار:

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

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

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

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

فالآن دوركم للمساهمة الإيجابية في هذا العمل:

-      بتعلم اللغة لمن يريد من الشباب.

-      وعمل دورات لها بالنسبة للمدرسين وأصحاب مراكز التدريب.

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

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

-      وأضعف الإيمان ألا تبخلوا بدعوة لي وأبي وجدودي في التعليقات.

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

وختاما: علمني الله وإياكم ما ينفعنا، ونفعنا بما علمنا، وزادنا علما، ونفع به الإسلام والمسلمين.

م. محمد حمدي غانم

1/5/2024

 

الأربعاء، 24 أبريل 2024

المدللة

 المدللة.. قصة محبوكة حول قصيدة:

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

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

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

ثم كانت حوارية "عيناها"، وفي حوارها الرومانسي قال البطل بعض المقطوعات الشعرية لحبيبته كجزء من سياق الحوار.

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

وبهذا خرجت هذه القصة وهذه القصيدة المكونة من 9 أبيات.

أرجو أن تستمتعوا بهذا العمل كما أستمتع به كلما أعدت قراءته.

يمكنكم قراءة القصة أو تنزيلها بصيغة PDF من هذا الرابط.

وقتا ممتعا.

 

الاثنين، 22 أبريل 2024

بلا ملهمة


 

إلى متى سأحبك

 ترجمتي بتصرف لهذه الأغنية الأجنبية التي أعجبتني:

إلى متى سأحبُّك؟
ما دامتِ النجومُ فوقَك
وأطولَ إن استطعت

How long will I love you?
As long as stars are above you
And longer if I can

إلى متى سأحتاجُك؟
طالما تعاقبت الفصول

في قدرها المجهول

How long will I need you?
As long as the seasons need to
follow their plan

كم من الوقت سأقضيه معك؟
طالما غسل البحر رمال الشاطئ

وبلل إصبعك

How long will I be with you?
As long as the sea is bound to
wash upon the sand

إلى متى أريدك؟
بطول ما ترغبين،

وأطول بكثير

How long will I want you?
As long as you want me to
And longer by far

إلى متى سأضمُّك؟
للوقت الذي يُنسيك همَّك!

وبطول ما تحتملين ضمتي

How long will I hold you?
As long as your father told you
As long as you can

كم من الوقت سأعطيك؟
بطولِ ما أعيش فيك،

وحسبما يكفيك

How long will I give to you?
As long as I live through you
However long you say

إلى متى سأحبك؟
ما دامت النجوم فوقك
وأطول إن جاز لي

How long will I love you?
As long as stars are above you
And longer if I may

 

 

السبت، 13 أبريل 2024

She is a bird

 قصيدة منقحة بعد التشاور مع الذكاء الصناعي



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

She will never bring back
my heart that she stall

باعتبار أن bring back فيها ثقل موسيقي، كما أن من الأفضل أن تنتهي بالقافية لطول السطر.. لهذا عدلته إلى:

She'll never give back

ثم قررت أن أبحث عن كلمة تناسب القافية، فلم يسعفني جوجل، فسألت الذكاء الصناعي copilot عن كلمة مناسبة للقافية بدلا من give back فاقترح الكلمة recall ، فأخبرته أنها لا تناسب الضمير She وإن كانت تنساب الضمير I كأن أقول:

I'll never recall
my heart that she stole

وقد عقدت النية على اللجوء لهذا إن عجز عن إيجاد قافية أكثر ملاءمة، لكنه فاجئني باقتراح reinstall رغم إقراره بأنه استخدام غير شائع لكنه يجوز في استعارات الشعر.. وقد أعجبني هذا الاقتراح: إنها لن تعيد أبدا تركيب قلبي الذي سرقته!.. جميلة في الشعر!

She'll never reinstall
my heart that she stole

كما أن هناك جناسا بين reinstall و stole، لكن لاستقامة الوزن يجب إدغام re و install وقراءتها كأن ال i غير موجودة (همزة وصل لا قطع بالعربي: رينستول). الحقيقة أن مستوى أداء الذكاء الصناعي رائع في معظم الأحيان، بشرط أن تحاوره بالإنجليزية لأنها مجال تدريبه الأساسي، بينما حينما أحاوره بالعربية يرتكب أخطاء مضحكة لأنه يعتمد على ترجمة الأسئلة والإجابات بين اللغتين، وما زالت التراجم الآلية مليئة بالمشاكل، كما أنه يلجأ فيما يبدو إلى مصادر عربية غير موثوقة فيأتي بمعلومات ما أنزل الله بها من سلطان!
وقد رأيت الفارق جليا بين الذكاء الصناعي والبحث في جوجل في سؤال القافية هذا، فقد عرض لي جوجل كثيرا من النتائج ليس من بينها ما أبحث نه، فالبحث فيه عن شيء كهذا يبدو أشبه بالبحث عن قشة في كومة تبن، بينما استخدام برمجة الذكاء الصناعي للوصول إلى إجابات تتعلق بالمعاني والقوافي أسرع وأدق بكثير.
وقد جربت الذكاء الصناعي أيضا في البرمجة، وأداؤه فيها مبهر.. يمكنه شرح أكواد وتحويل أكواد من لغة برمجة إلى أخرى وإنتاج أكواد جديدة، وإخبارك عن طرق حل بعض المشاكل.. فلغات البرمجة أسهل بالنسبة للذكاء الصناعي لأنها من بني جنسه، فهي مصممة للحوار مع الحاسب ولا تتضمن كنايات واستعارات وتشبيهات وتعبيرات شائعة تستند إلى ثقافات محلية.. إلخ.. لكن طبعا مع وجود حدود فالذكاء الصناعي لن يستطيع ابتكار خوارزمية لم ير مثيلا لها من قبل، وقد عجز عن تحويل بعض الأكواد من لغة إلى أخرى بسب اختلاف منطق الرسم على الشاشة بين اللغتين.. لكن يقدم لك الفكرة الأولية وبعض المصادر في مثل تلك الحالات ويتركك لتكمل العمل.
على كل حال، هذه هي النسخة المجانية، لكنك تستطيع أن تحصل على أداء أفضل بشراء نسخة خاصة بك وتدريبها على مجال عملك ومنهج تفكيرك لتحصل على نتائج مبهرة.

صفحة الشاعر