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

الأحد، 27 نوفمبر 2016

وعلى الذين يطيقونه


هل تلفت نظركم الكلمة "يطيقونه" في هذه الآيات؟:

(يَا أَيُّهَا الَّذِينَ آمَنُواْ كُتِبَ عَلَيْكُمُ الصِّيَامُ كَمَا كُتِبَ عَلَى الَّذِينَ مِن قَبْلِكُمْ لَعَلَّكُمْ تَتَّقُونَ {183} أَيَّامًا مَّعْدُودَاتٍ فَمَن كَانَ مِنكُم مَّرِيضًا أَوْ عَلَى سَفَرٍ فَعِدَّةٌ مِّنْ أَيَّامٍ أُخَرَ وَعَلَى الَّذِينَ يُطِيقُونَهُ فِدْيَةٌ طَعَامُ مِسْكِينٍ فَمَن تَطَوَّعَ خَيْرًا فَهُوَ خَيْرٌ لَّهُ وَأَن تَصُومُواْ خَيْرٌ لَّكُمْ إِن كُنتُمْ تَعْلَمُونَ {184})

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

ضغط زر على شريط الأدوات


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

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

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

لاحظ أن مؤشر الفأرة قد يكون فوق شريط الأدوات لكنه يمر فوق منطقة فارغة من الأزرار، وهذا سيجعل الوسيلة GetItemAt تعيد null (Nothing) وهذا سيسبب خطأ عند استدعاء الوسيلة PerformClick، لهذا يجب كتابة شرط للتأكد من أن القيمة العائدة من الوسيلة GetItemAt ليست null أو يمكن اختصار الكود إذا كنت تستخدم دوت نت 2015 باستخدام العلامة ؟ التي لا تنفذ ما بعدها إلا إذا كان لما قبلها قيمة غير منعدمة.. مثال:
T.GetItemAt(p)?.PerformClick( )

سأضع لكم الكود بلغة C# ثم بلغة VB.NET.. هذا هو كود سي شارب:

private void Form1_Activated(object sender, EventArgs e)
{
    // تحويل موضع مؤشر الفأرة من إحداثيات الشاشة إلى إحداثيات النموذج
    Point p = this.PointToClient(Cursor.Position);
    Control c = this.GetChildAtPoint(p);
    if (c is ToolStrip)
    {
        ToolStrip T = (ToolStrip)c;
        // تحويل موضع مؤشر الفأرة من إحداثيات الشاشة إلى إحداثيات شريط الأدوات
        p = T.PointToClient(Cursor.Position);
        T.GetItemAt(p)?.PerformClick( );       
    }
}
وهذا هو الكود بلغة VB.NET:
Private Sub Form1_Activated(ByVal sender As Object,
                ByVal e As EventArgs) Handles Me.Activated
        ' تحويل موضع مؤشر الفأرة من إحداثيات الشاشة إلى إحداثيات النموذج
        Dim p As Point = Me.PointToClient(Cursor.Position)
        Dim c As Control = Me.GetChildAtPoint(p)
        If TypeOf c Is ToolStrip Then
            Dim T As ToolStrip = CType(c, ToolStrip)
            ' تحويل موضع مؤشر الفأرة من إحداثيات الشاشة إلى إحداثيات شريط الأدوات
            p = T.PointToClient(Cursor.Position)
            T.GetItemAt(p)?.PerformClick( )
        End If
    End Sub

 

الجمعة، 25 نوفمبر 2016

وداعا


وداعا 

ما بالُ أيامٍ تَمرُّ سِراعا؟ = كلُّ الأحبّةِ يَرحلونَ تِباعا

هُم يَذهبونَ ويَحملونَ قلوبَنا = ومآثرًا مِنْ عالمٍ قد ضاعا

يا كلَّ مَن قدْ فارقوا أيامَنا = يا ليتَ نُرجعُ ما مَضَى إرجاعا

لولا يقينٌ بالإلهِ وبَعْـثِهِ = لاستنزفَ الحزنُ النُّهَى المُلتاعا

هي سُنّةُ الدنيا: غُرورٌ زائلٌ = إن كنتَ فيها قد أردتَ مَتاعا

أَحبِبْ إذنْ مَن شِئتَ، أنتَ مُفارقٌ! = كأسُ السعادةِ تَنتهي أوجاعا

لا لومَ لو أنّي لكمْ قد قلتُها = يا كلَّ أحبابي الكرامِ: "وداعا"

محمد حمدي غانم
22/11/2016

تحديد أحد الأزرار على شريط الأدوات


س: كيف يمكن تحديد أحد الأزرار على شريط الأدوات ToolStrip باستخدام الكود؟

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

ToolStrip1.Focus( );
ToolStripButton1.Select( );

الأربعاء، 23 نوفمبر 2016

تعويذة الليل 4


الصمتُ،
الوحْشةُ،
وكتابٌ،
ودُخانُ المصباحِ الأزرقْ

تعويذةُ شبحٍ
محْبوسٍ في السّاعةِ والصّمْتِ الأخْرقْ
 
لا يُعْرَفُ ماذا تستدعي!
لا يُوجدُ توضيحٌ مُرْ فَقْ!

في بُطْءٍ عَدَميٍّ،
تمتمَ يقرؤها الجنّيُّ المُرْهُقْ

دوَّتْ زمْجرةُ الأرْياحِ
ودمّرتِ الأشباحُ الأحْمقْ!
 


#انتهاك_حدود_اللحظة
#قصيدة #تعويذة_الليل
محمد حمدي غانم، 2000
لتحميل ديوان انتهاك حدود اللحظة كاملا:

حلقة التكرار Loop


تكرار تنفيذ أمر معين أو مجموعة من الأوامر لأي عدد من المرات:

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

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

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

 

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

 

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

وسنتعرف لاحقا على كيفية كتابة كود التكرارات Loops في فيجيوال بيزيك.

 

من كتاب المبرمج الصغير، للصف الثالث الإعدادي، للتنزيل مجانا:


 

تعويذة الليل 3


"حينَ تصيرُ السّاعةُ سجْنَ العقْلِ
سيشْقى القلْبُ وتشْقى"

"حينَ تصيرُ النّارُ فتاةً
سوفَ تصيرُ جِنانُكَ عشْقا"

"اسكبْ نفْسَكَ
وارْشُقْ في آلامِ وجودِكَ ذاتَكَ رشْقا"

"ستثورُ رياحُ طواحينِكَ
حينَ تَشُقُّ جمودَكَ شقّا"

"خُذْ رُوحَ الأشياءِ جميعًا
واهبطْ في أعْماقِكَ وارْقَ" 

#انتهاك_حدود_اللحظة
#قصيدة #تعويذة_الليل
محمد حمدي غانم، 2000
لتحميل ديوان انتهاك حدود اللحظة كاملا:


الخوارزمية Algorithm


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

 

من كتاب المبرمج الصغير، للصف الثالث الإعدادي، للتنزيل مجانا:


 

السبت، 12 نوفمبر 2016

مقارنة قيمتين واتخاذ القرار


مقارنة قيمتين واتخاذ القرار بناء على نتيجة المقارنة:

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

 

اقرأ الطول الذي يمدك به المستخدم.
إذا كان الطول أصغر من 60 سم إذن:
اكتب على الشاشة: "الشخص قصير"
غير ذلك: إذا كان الطول أكبر من 160 سم إذن:
اكتب على الشاشة: "الشخص طويل"
غير ذلك:
اكتب على الشاشة: "الشخص متوسط الطول"
نهاية الشرط.

 

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

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

 

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

 

من كتاب المبرمج الصغير، للصف الثالث الإعدادي، للتنزيل مجانا:

الجمعة، 11 نوفمبر 2016

كبرياء



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

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

تقنيات ميكروسوفت الجديدة




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

تراودني فكرة الكتابة عن ويندوز سيرفر 2016.. فهل منكم أحد يمكن أن يهمه هذا الكتاب بالعربية؟

أما الفكرة الأهم، فهي الكتابة عن سيكويل سيرفر 2016، وهو كتاب أؤجله منذ سنوات، لأنه موجه إلى المهتمين بالعمل كمديرين للنظام وليس للمبرمجين بشكل أساسي.. فهل منكم أحد يهتم بمثل هذا الكتاب؟

طبعا تشغيل سيكويل سيرفر على ويندوز سيرفر مهم عند تشغيل مواقع ASP.NET، وأنا أعمل في كتاب عن ASP .NET MVC Core لكني مضطر لتأخيره قليلا إلى حين صدور دوت نت 15، لأن دوت نت كور ما زالت تحت التطوير، وبيئة فيجوال ستديو ستشهد بعض التغييرات والإضافات.. لنفس السبب ليس ممكنا الكتابة الآن عن  Entity Framework Core ولا UWP .. فكرت حتى في البدء في كتاب المواضيع المتقدمة في إطار العمل المؤجل بدوره منذ سنوات، لكن أيضا يجب أن أنتظر صدور دوت نت كور بشكل مستقر، لأشير للتوافقات والاختلافات بين إطار العمل ودوت نت كور!

لكل هذا، رأيت أن أتعرف على الوافدين الجديدين ويندوز سيرفر 2016 وسيكويل سيرفر 2016 إلى أن تصل دوت نت إلى وضع الاستقرار.

 

أرجو أن يخبرني كل منكم في التعليقات ما هي الكتب التي تهمه أكثر مما يلي:

1- ASP.NET MVC Core

2- Entity Framework Core

3- Universal Windows Platform (UWP)

4- المواضيع المتقدمة في  Framework و  .NET Core

4-  SQL Server 2016

5-  Windows Server 2016

الثلاثاء، 8 نوفمبر 2016

الغالي يرخص لي


أنا بعشق الغالي والغالي يرخص لي
وفْ عيني أنا أشيله وبحبي أنا أغلّيه

أما الرخيص أصلا بزيادة يرخص لي
من عيني أنا أشيله من قلبي أنا أرميه 

أنا بعشق الحلوة تضحك وترقص لي
لكن قصاد غيري لا بد تبقى غفير!
 
لو عين غيري تشوفها أنا غيرتي مِ الأصلي
تخسر أوام ثـقـتي وتموت بلا تأثير 

محمد حمدي غانم
7/11/2016

 

إجراء العمليات على البيانات


إجراء العمليات الحسابية على البيانات:
يستطيع الحاسوب القيام بالعمليات المنطقية Logical Operations والعمليات الحسابية الأساسية Arithmetic Operations.

العمليات المنطقية الأساسية هي:
- "ليس" Not.
- "و" And.
- "أو" OR.
وهي تستخدم في صياغة الشروط..

والعمليات الحسابية الأساسية هي:
- الجمع Addition (+) .
- الطرح Subtraction (-) .
- الضرب Multiplying (*) .
- القسمة Division (/) .
وتعتبر العمليات المنطقية والحسابية كافية لمعالجة أي نوع من أنواع البيانات. 

من كتاب المبرمج الصغير، للصف الثالث الإعدادي، للتنزيل مجانا:

السبت، 5 نوفمبر 2016

تعويذة الليل 2



السّاعةُ تخْتالُ
بتَكْتَكَةِ البَنْدولِ
طَوالَ الوقتْ

لا تدْري أنّي داخلَها
ممسوخٌ فلسفةَ الصّمتْ

أنّ عقاربَها آلامٌ
تسْعى في رُوحي كالموتْ

أنّي البَنْدولُ،
وتكْتكتي:
أنفا- سٌ تَحْ- تاجُ الـ - ـزَّيتْ

أنّي
ـ والخوفُ يزلزلُني ـ
أسألُني:
مَن ذا يا أنتْ؟
#انتهاك_حدود_اللحظة
#قصيدة #تعويذة_الليل
محمد حمدي غانم، 2000
 
لتحميل ديوان انتهاك حدود اللحظة كاملا:

صفحة الشاعر