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

الاثنين، 20 أكتوبر 2014

واقف في يدي الزهور


واقفٌ في يَدي الزهورُ 

فاتـنٌ حُسْـنُـهُ غَــرُورُ     فاضَ مِنْ  وَجْـهِهِ السُّـرورُ
صِـرتُ مِن لَهفـتي أُغنّي:     يا لَمَـنْ وجْـنَتـاهُ نُــورُ
قالَ: "مَنْ أنتَ".. قلتُ: صَبٌّ     واقـفٌ في يَـدي الزُّهـورُ
حـولَ مَنْ قد أضـاعَ عقلي     مُهجـتي   بالهَـوَى تَـدورُ
افتـحِ البـابَ قـالَ:  "لا لا     بِالحَـيا  يَحتَـيي الشعـورُ"
"قد عَشِقْتَ العَذابَ، دَعْـني"     قلـتُ:  بَـلْ إنّني صَبـورُ
كيـفَ لا، والهَـوَى ربيـعٌ     سافـرَتْ خلـفَهُ  الطيـورُ
أنـتَ لي جَـوهرُ المَعـاني     كـلُّ ما دُونَنـا  قُشــورُ
قـالَ: "فَلْـنَنْتـَظِرْ ونَنْظُـرْ"     قُـلتُ:  ما دامتِ البحـورُ
سـوفَ يَحـلو اللقاءُ يـوما     تَصطَـفِي ليلَـنا البــدورُ 

محمد حمدي غانم
مايو 2013 

ملحوظة عروضية:
هذه القصيدة تندرج ضمن محاولاتي لتبسيط البحور المركبة، وهي مكتوبة على الصيغة: "فاعلن فاعلن فعولن" أو "فاعلاتن متفعلاتن".. ويمكن بهذا أن تندرج تحت البحر الخفيف (فاعلاتن متفعلن فع) وقد سبق أن ذكرت أن البحر الخفيفي يمكن أن يكتب على الصيغة الأسهل "فاعلن فاعلن فعولن فعولن".. هذه صيغة أكثر سهولة واختصارا!
كما يمكن أن تندرج القصيدة تحت البحر الممتدّ (فاعلن فاعلاتُ فاعلْ).
والحقيقة أن هذه الصيغة (فاعلن فاعلن فعولن) أسلس بكثير على أذني من الصيغة الأصلية لكلا البحرين، لدرجة أنني ارتجلت معظم هذه القصيدة في ذهني وأنا في المواصلات العامة.

الجمعة، 10 أكتوبر 2014

وهم مضى


وهم مضى 

لا تَستدرّي العطفَ إنّي قد سئمتُ الكاذباتْ
لا تَستزيدي الآنَ من وهمٍ مَضَى
وهمٌ وماتْ!!
هي لَمسةٌ أحسستُها لم تَشعريها
هي لَهفةٌ عانيتُها لم تَعرفيها
هي فِكرةٌ أحببتُها لم تَفهميها
هي لحظةٌ قد عِشتُها لم تَحتويها
هي كلُّ ذِكرَى كنتِ فيها لم تَعودي الآنَ فيها
هي كِلْمةٌ فَلْـتَسمعيها قبلَ أنْ يَطغَى السُّـكاتْ:
سأقولُ في كلِّ اللغاتْ
أنا لا أحبُّ الخائناتْ 

محمد حمدي غانم، 2013

الأحد، 5 أكتوبر 2014

حلا لها


همساتٌ لامرأةٍ ما
(22) 

يا قلبُ لا تَأسَـفْ لها ... إنَّ الفِراقَ حَلا لها
مَن خانَتِ الحُبَّ الأصيلَ فلنْ يَظلَّ حَلالَها
والشوقَ والشعرَ اللذينِ بلهفةٍ رَحَلا لها
فالآنَ فاكْسِِرْ قَيدَها ... لِي العُمرُ أصبحَ لا لها

محمد حمدي غانم، 2013

 

مقارنة Nothing وصفر


مقارنة Nothing وصفر!! 

هذا مثال على المشاكل التي قد تحدث بسبب تفعيل التحويل التلقائي بين الأنواع Implicit Conversion:

عند مقارنة كائن Object قيمته Nothing مع متغير قيمته صفر ستكون النتيجة True على عكس المتوقع جرب مثلا:

Dim Test As Object = Nothing

If Test = 0 Then MsgBox("Test = 0")

عند تشغيل هذا الكود، ستظهر الرسالة التي تخبرك بأن قيمة المتغير Test تساوي 0، مع أن قيمته هي Nothing!!

(هذا لا يحدث عند مقارنة Nothing مع أي رقم آخر غير الصفر، لأان التحويل التلقائي يحول الكائن إلى صفر)

ولحل هذه المشكلة، عليك إضافة شرط للتأكد أولا أن قيمة الكائن ليست Nothing:

If Test IsNot Nothing AndAlso Test = 0 Then

       MsgBox("Test = 0")

End If

أو يمكنك تحويل الكائن إلى عدد صحيح منعدم Nullable Integer ثم إجراء عملية المقارنة عليه:

Dim I = CType(Test, Integer?)

If I = 0 Then MsgBox("Test = 0")

أما لو أجريت عملية التحويل مباشرة في جملة الشرط، فعليك في هذه الحالة استخدام الوسيلة Equals بدلا من العلامة = وإلا فسيحدث نفس الخطأ:

If CType(Test, Integer?).Equals(0) Then

    MsgBox("Test = 0")

End If

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

 

ملحوظة:

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

object  Test = null;

if (Test == 0) MessageBox.Show("Test = 0");

لأن مترجم الكون سيرفض المقارنة Test == 0.

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

object  Test = null;

if ((int?)Test == 0) MessageBox.Show("Test = 0");

 

صفحة الشاعر