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

الجمعة، 28 أبريل 2017

أطيعيني


أطيعيني 

يا مَن عشقْتِ عذابَ النفسِ مِن صَلَفٍ
إنْ كنتِ تَهوَيْـنَني حقا أطيعيني

لا يُعرَفُ الحبُّ إلا من بَوادِرِهِ
منكِ العنادُ بَدَا كُرْهًا يُعاديني

لا كبرياءَ على المأسورِ في وَلَهٍ
عيناكِ مَحبَسُهُ بينَ الرياحينِ

للأسْرِ في الأسْرِ ها عيناكِ في شَغَفي
وعِتْـقُكِ السجنُ في صدري فضُمّيني

خَبِّي جمالَكِ لي وحدي لأَنهَلَهُ
فغَيْرتي أُجِّجَتْ كالنارِ تَكويني

إنْ عيّروكِ على عشقٍ فُتِنْتِ بِهِ
فالكبرياءُ أنا، ذُوبي بتكويني

مَن هُم أولاءِ، وما في الكونِ قيمتُهمْ
كي يَسجنوكِ بهاتيكِ القوانينِ؟

كي يَحرموكِ حناني مِن مَخافتِهمْ
والتمرُ طابَ لذيذا في عراجيني

مِقدامةٌ دائما إلا على عَسَلي
إن كنتِ عاشقةً حقًّا فذُوقيني

مَن يَهْوَ كانَ رِضا المحبوبِ غايتَهُ
فقدّمي الآنَ لي أغلى القرابينِ

أعني غرورَكِ لو عندي تَدَلُّـلُهُ
معنى خضوعِكِ شوقًا أن تُحبّيني

فبيّـني الآنَ لي شيئًا يُطمئنُني
والفِعلُ يُثْـقِلُ قَولاً في الموازيينِ 

محمد حمدي غانم
7/4/2017 

أيها الرجال: ربوا بناتكم تربية الإماء!!


أيها الرجال: ربوا بناتكم تربية الإماء!!

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

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

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

والأمثلة لا تحصى!

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

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

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

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

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

أنوثة المرأة وحدها لا تكفي الرجل، لأنه سيملها عند لحظة ما، فالإنسان ليس مجرد جسد، والحياة ليست كلها لحظات عشق.

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

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

الخميس، 27 أبريل 2017

عاشق هواها


عاشق هواها 

أنا قلبي فِ غرامها عرف وعده = لا تحبه ولا تقدر على بُعده

وقابلها على عيبها ومش قابلة = تتغاضى عن عيبه تدوق سعده

مغرورة مهزوزة احتار فيها = غندورة لذّوذة يا ناس بردو

لو يصحى بكرة الصبح ناسيها = الكونُ يضيق ف عنيها مِن بَعده

لكن استحالة دا مجنون بيها = والفرحة ضاعت وسنين عدّوا

ودا حيلته إيه غير يفضل ليها = عاشق هواها ف جَزْره ومَدّه

لو بس ليه يوم تفتح بابها = تلاقيه قصادها وف إيده وردُه 

محمد حمدي غانم
27/9/2016

 

إجراء العمليات على المتغيرات:


إجراء العمليات على المتغيرات:

لن تكون هناك فائدة إذا كنت ستضع الأرقام في متغيّرات، دون أن تستطيع أن تُجريَ عليها العمليّات الحسابيّة.. تعال نعرّف ثلاثة متغيرات، لنجري عليها بعض العمليات الحسابية:
Dim X As Integer = 3
Dim X As Integer = 5
Dim Z As Double
الجدول التالي يلخص علامات العمليّات الحسابيّة الأساسيّة: 

العلامة
معناها
مثال
الناتج  (Z = )
+
علامة الجمع
Z = Y + X
8
-
علامة الطرح
Z = Y - X
2
*
علامة الضرب
Z = Y * X
15
/
علامة القسمة
Z = 7 / 2
3.5
\
علامة القسمة بدون باقي
(بدون كسور عشرية).
Z  = 7 \ 2
3
Mod
الباقي من القسمة.. فمثلا لو قسمنا 7 على 2 فسيكون الناتج 3 والباقي 1.. هذا المعامل يعطيك الباقي فقط.
Z = 7 mod 2
1
Z = 8 mod 2
0
Z = 8 Mod 3
2
^
علامة الأسّ
Z = 2 ^ 3
8

 
ملحوظة:
تستطيع الحصول على الجذور من خلال الأسس، وذلك باستخدام أس كسري وليس صحيحا.. فمثلا: لو أردت الجذر التربيعي، فارفع العدد للأسّ (1/2) كالتالي:
Z = 16 ^ (1/2)    ' الناتج 4
أو كالتالي:
Z = 16 ^ (0.5)    ' الناتج 4
ولو أردت الجذر التكعيبيّ، فارفع العدد للأسّ (1/3) كالتالي:
Z = 8 ^ (1/3)      ' الناتج 2

 من كتاب المبرمج الصغير للصف الثالث الإعدادي (الفصل الدراسي الثاني).. للتنزيل كاملا:

 

الأحد، 23 أبريل 2017

قهوة عشقي


قهوة عشقي 

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

محمد حمدي غانم
23/4/2017

 

 

الثلاثاء، 18 أبريل 2017

نهج البردة 2


نهج البردة (2/10)

هذا هو المقطع الثاني من قصيدة نهج البردة لأمير الشعراء أحمد شوقي.. للاستماع له بصوتي:




وهذا هو شرح معاني الكلمات: 

جدول التتبع Trace Table


جدول التتبع Trace Table:

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

Dim X As Integer
X = 3
Dim Y As Integer = 4
Dim Z As Integer
Z = X * Y

الجدول التالي هو جدول تتبع الكود السابق: 

الكود
X
Y
Z
Dim X As Integer
0
غير معرف
غير معرف
X = 3
3
غير معرف
غير معرف
Dim Y As Integer = 4
3
4
غير معرف
Dim Z As Integer
3
4
0
Z = X * Y
3
4
12


من كتاب المبرمج الصغير للصف الثالث الإعدادي (الفصل الدراسي الثاني).. للتنزيل كاملا:

 

هيا عادتك


تاني مرة هيا عادتك = فات سنين واحنا ف مكانا

فاسألي نفسك سعادتك = هو مين عطّل مَكنّا

يعني فين هيا سعادتك = والدموع ناطّة ما كانّة

هو أنا عني بعدتك؟ = فرحنا ليه فْ يوم ما كانّا؟

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

 

DataAdapter.FillError


  خطأ الملء DataAdapter.FillError:

ينطلق هذا الحدث إذا حدث خطأ أثناء ملء مجموعة البيانات.. والمعامل الثاني e لهذا الحدث من النوع FillErrorEventArgs، وله الخصائص التالية: 

DataTable
تعيد كائن جدول البيانات DataTable الذي حدث الخطأ أثناء ملئه.
Errors
تعيد كائن الاستثناء Exception الذي يحتوي على معلومات الخطأ الذي حدث.
Values
تعيد مصفوفة كائنات Object Array، تحتوي على القيم الموجودة بالصف الذي حدث به الخطأ.
Continue
إذا جعلت قيمتها True، فسيستمر ملء الجدول بالسجلات وتجاهل الخطأ.. أما إن جعلت قيمتها False فسيتوقف ملء مجموعة البيانات في الحال.


لمزيد من التفاصيل انظر فئة موصل البيانات DataAdapter

 

ما لكش حل


ولا مرة منّك قلبي مل

أصلك معادلة ف مجهولين

وما لكش حل!

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

* تنويه:

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

(س أس 2) + (ص أس 2) = -1

هذه معادلة ليست لها حلولا حقيقية.

هذه معادلات تبدو سهلة ولكنها معقدة في نفس الآن.. تماما كالنساء :)

LoadOption Enum


يمتلك المرقم LoadOption القيم التالية: 

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

لمزيد من التفاصيل انظر فئة موصل البيانات DataAdapter

وريني الرخص


يا حلوة يا سايقة الدلال هدي ووريني الرخص

القلب عايزك بالحلال ولا عمر شوقه في يوم نقص

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

 

ContinueUpdateOnError


 استمرار التحديث عند الخطأ DataAdapter.ContinueUpdateOnError:

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

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


لاحظ أن جدول العرض يمنع معظم الأخطاء، فهو يرفض ترك خانة فارغة إذا كانت لا تقبل القيمة Null، كما يرفض أي نص يتكون من عدد من الحروف أطول مما تقبله الخانة.. لهذا لو أردت اختبار هذا البرنامج، فليس أمامك إلا أن تضع في العمود CountryID رقما أكبر من 22، لأن قيد المفتاح الفرعي FOREIGN KEY Constraint بين جدول الدول وجدول المؤلفين، يمنعك من استخدام رقم دولة ليس موجودا في جدول الدول.

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

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

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

 
 
If ChkContinue.Checked Then
     ' استمرار التحديث رغم حدوث أخطاء
    DaAuthors.ContinueUpdateOnError = True
    DaAuthors.Update(Ds)
    ' علينا جمع الأخطاء التي حدثت وعرضها في تقرير للمستخدم
    ' ………………………….
Else ' إيقاف التحديث عند حدوث أي خطأ
    DaAuthors.ContinueUpdateOnError = False
    Try
          DaAuthors.Update(Ds)
    Catch ex As SqlException
          MsgBox(ex.Message)
    End Try
End If
 
 
لاحظ أننا لم نكتب أي كود لوضع علامة الخطأ التي تظهر في جدول العرض بجوار السجل الذي سبب المشكلة، فهي تظهر تلقائيا بسبب وجود ربط Binding بين جدول العرض ومجموعة البيانات.. وسنتعرف على تقنية ربط البيانات بالتفصيل في فصل لاحق.

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

لمزيد من التفاصيل انظر فئة موصل البيانات DataAdapter

 

صفحة الشاعر