برجاء تسجيل الإعجاب بالصفحة لتصلك كتاباتي على فيسبوك

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

الثلاثاء، 29 أبريل 2014

لكنه احترق



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

يا بيتَ شِعرٍ كالشِّهابِ بخطفةٍ بَرَقا
أَهْوَى بليلةٍ مُسْهَدٍ لِيَزيدَهُ أَرَقا
رَسَـمَ ارتجافَ شُعورِه، وجَنانَهُ سَرَقَا
أحيا المُنَى في لَمحةٍ لكنّهُ احترقَا!

محمد حمدي، 2013


الأحد، 27 أبريل 2014

SQL Server Express



س: هل يمكن الاعتماد على نسخة SQL Server Express عند توزيع البرنامج؟

 




ج: SQL Server Express هي النسخة المجانية من سيكويل سيرفر، وهي تسمح لك بالتعامل مع قاعدة بيانات يصل حجمها الأقصى إلى 10 جيجا بايت، وعمليات متزامنة تستهلك 1 جيجا من الذاكرة بحد أقصى.. ورغم أن هذه القيود تبدو فقيرة للغاية بجوار ما يمكن أن تفعله النسخة الكاملة من سيكويل سيرفر، تظلّ النسخة المجانية مناسبة جدا للتطبيقات التي تعمل على جهاز شخصي أو شبكة صغيرة أو موقع إنترنت صغير، فملء قاعدة بيانات بـ10 جيجا من البيانات أمر صعب، ما لم تكن تتعامل مع شركة عملاقة تخدم آلاف العملاء يوميا، وتحفظ بعض الصور والملفات كبيرة الحجم.

لكن.. ماذا لو زاد الضغط على قاعدة البيانات وامتلأت فعلا وتوقف التعامل معها (فلنقل بعد عامين أو ثلاثة مثلا)؟!

أنا في الحقيقة، لست من أنصار ترك قاعدة البيانات تتضخم بلا حد حتّى لو كنا نتعامل مع النسخة الكاملة من سيكويل سيرفر.. فزيادة حجم قاعدة البيانات يعني ما يلي:

-      وقت أكثر في البحث والفهرسة والتحديث والضغط والإصلاح.

-  مشاكل أكثر عند حفظ نسخ احتياطية من قاعدة البيانات، تتعلق بمساحة التخزين وبطء النقل.

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

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

 

ملحوظة: في النظم التي يملك فيها أكثر من مستخدم صلاحية التعديل، احفظ مع كل سجل المستخدم الذي أدخله وآخر مستخدم عدّله، لمنع أي تلاعبات.

 

لو خطّطت برنامجك بهذه الطريقة، فستكون نسخة SQL Server Express كافية للأعمال الصغيرة والمتوسطة التي لا يزيد حجم البيانات الذي تحفظه سنويا عن 10 جيجا بايت.

أما الشركات الكبيرة التي تحتاج أكثر من هذا، فلا أظن أنها ستمانع من شراء نسخة سيكويل سيرفر مرخصة كاملة الإمكانيات J

 

يمكن تحميل نسخة Microsoft® SQL Server® 2012 Express من هنا.

 

لتعلم برمجة قواعد بيانات سيكويل سيرفر مع دوت نت، يمكن قراءة أحد هذين الكتابين:


وهو يشرح استخدام تقنية ADO.NET مع قواعد بيانات SQL Server ويتطرق إلى قواعد بيانات Access أحيانا.

-     كتاب المدخل العملي السريع:

يشرح مشروع قواعد بيانات عمليا كاملا يتعامل مع قواعد بيانات SQL Server باستخدام تقنية LinQ To SQL.



 

 

 


السبت، 26 أبريل 2014

ألا تدرين يا خالة؟



ألا تدرين يا خالة؟ 

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

ولـو  مـسّتكِ iiمُؤلمةٌ      تُـعـذِّبُـنا حَـنـايانا
ولولا ضِحْكُكِ 
iiالصّافي      لَـزارَ الـحزنُ iiدُنيانا
ولولا  عطفُكِ 
iiالضافي      لـماتَ الـحبُّ iiظَمآنا

ألا  تَـدرينَ يـا 
iiخالةْ      وأنـتِ  العِطرُ iiللزَّهرِ
وأنـتِ لِـشمسِنا 
iiهالةْ      وطُهرُ النورِ في الفَجرِ
ويَـرثِي كـلُّنا 
iiحـالَهْ      لِـدائكِ رَجـفةَ iiالذُّعْرِ

وإنّــا كـلُّنا 
iiنـدعو      طـوالَ  الليلِ لا iiنَغفو
فـلا مـا طابتِ 
iiالدنيا      وعـنْ أفـراحِنا نَجفو
تَـغيمُ  العينُ من 
iiدمعٍ      وكيفَ سماؤنا iiتَصفو؟

دعـوتُ إلـهَنا 
iiيَشفي      كِ مِـن آهٍ ومِـن iiهَمِّ
فـأنتِ  صديقتي 
iiدومًا      وإنّـكِ خـالتي: iiأمّي
فـيـا اللهُ 
iiبـارِكْـها      كـبدرِ الـليلِ في iiالتَّمِّ

 
 
محمد حمدي غانم
1996


الخميس، 24 أبريل 2014

دوت نت وأوراكل



س: هل يمكن إنشاء تطبيقات دوت نت تتعامل مع قواعد بيانات أوراكل Oracle Database؟

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

مزود Oracle:

قدمت ميكروسوفت منذ إصدار دوت نت 2003 دعما للتعامل مع قواعد بيانات أوراكل، فهي تمتاز بالقوة والشهرة والانتشار.. وتوجد فئات هذا المزود في النطاق:

System.Data.OracleClient

لكن استخدام هذا النطاق يتطلب منك أولا إضافة مرجع إليه Reference في برنامجك، علما بأنه يوجد في الملف:

System.Data.OracleClient.dll

وعليك أن تلاحظ أن جميع هذه المزودات توفر نفس أدوات الاتصال بقاعدة البيانات (كائن الاتصال Connection، كائن الأمر Command، موصل البيانات DataAdapter، مجموعة البيانات DataSet، قارئ البيانات DataReader... إلخ)، لكنّ كلا منها يبدأ باختصار يوضح نوع المزود، مثل:

كائنات الاتصال:

SqlCeConnection

SqlConnection

OdbcConnection

OleDbConnection

OracleConnection

كائنات الأمر:

SqlCeCommand

SqlCommand

OdbcCommand

OleDbCommand

OracleCommand

موصلات البيانات:

SqlCeDataAdapter

SqlDataAdapter

OdbcDataAdapter

OleDbDataAdapter

OracleDataAdapter

مجموعات البيانات:

SqlDataSet

OdbcDataSet

OleDbDataSet

OracleDataSet

قارئات البيانات:

SqlCeDataReader

SqlDataReader

OdbcDataReader

OleDbDataReader

OracleDataReader


الأحد، 13 أبريل 2014

غيرة



غيرة 

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

محمد حمدي غانم
12/4/2014


* ملحوظة:
الدَّفا كلمة فصيحة، بتسهيل كلمة الدَّفاء، وهي مصدر الفعل دفئ دفئا ودَفاءً ودفاءة

 


الأربعاء، 9 أبريل 2014

إحباط



* إحباط

صرت أخشى الاقتراب منك من جديد، ففي كل مرة أعود بِخُـفَّيْ حُـنَـيْن، حتى صار عندي معرض كامل من أحذية هذا المسكين!!


الثلاثاء، 8 أبريل 2014

متعبة!



متعبة! 

ذاتُ الجمـالِ وذاتُ العقـلِ مُـتعبـةٌ
حُـلوُ الدلالِ مَـريرُ العَـنْدِ والجَـدَلِ
سهـلُ المنـالِ بديعٌ سحـرُ بَسمتِـها
شهدُ الوصالِ عَصِـيُّ اللَّـثْمِ والنَّهَـلِ
مِن أيِّ شَيءٍ صُنِـعْتَ  قلبَ فاتِنـتي؟
ما رقَّ نبضُكَ مهما قلتُ مِن غَـزَلي!
قُل يا يمامُ لها ـ  إن كنتَ تسمعُـني:
إنّي عـلى بابـها أشـدو مِـنَ الأَزَلِ
أَبْدِي الحنـانَ لِمَـنْ أضْـنتْهُ لَهْـفَتُهُ
لا تَغمُـضي، إنّـني حيـرانُ لَمْ أَزَلِ
هل تَذكرينَ فتًى في البُعد مُـدَّكِـرًا؟
إن رقَّ قلـبُـكِ فَلـتُحيـيهِ بالأمـلِ
قولي لعقلِكِ: لا تغتـرَّ عـن وطـني
رِفقًا بِنصفِكِ، هـيّا الآنَ بي اكتـملي 

محمد حمدي غانم
23/3/2014


الأحد، 6 أبريل 2014

تنظيم المرور بتنظيم الموظفين



تنظيم المرور بتنظيم الموظفين 

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

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

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

ندخل في فكرة البرنامج:
افترض أن شخصا يعمل في مدينة نصر، طلب الانتقال إلى الدقي..
وشخصا يعمل في الدقي، طلب الانتقال إلى الهرم..
وشخصا يعمل في الهرم، طلب الانتقال إلى القناطر..
وشخصا يعمل في القناطر، طلب الانتقال إلى مدينة نصر..
من الواضح أن من الممكن تحقيق كل هذه الطلبات بعملية تبادل مواقع بسيطة، ولا تكلف الدولة شيئا!
المطلوب من البرنامج، هو أن يفحص كل الطلبات المقدمة، ويرى كل إمكانيات الانتقال المتاحة، مع مراعاة الوظيفة والتخصص.. (في المثال السابق لو كان صاحب طلب الانتقال إلى الدقي مدرس أحياء، فيجب أن يكون الباقون مدرسي أحياء أيضا.. ولو كان صاحب الطلب مدير حسابات، فيجب أن يكون الباقون كذلك.. وهكذا).
قد تبدو فكرة هذا البرنامج بسيطة.. من الممكن كتابة برنامج يفحص شجرة الاحتمالات باستخدام Stack للحصول على كل دائرة تباديل مغلقة.. لكن المشكلة أن شجرة الاحتمالات قد تكون هائلة، والدائرة قد تتكون من عشرات وربما مئات التبديلات، وهو ما قد يستغرق سنوات لكي يحسبها البرنامج.. لا تنسَ أن القاهرة الكبرى فيها 30 مليون مواطن، وأرجح أن يكون منهم على الأقل مليون موظف حكومي، ولو أرسل 1% منهم طلبات تنقل، فسيكون أمام البرنامج 10 آلاف طلب للبحث فيها!
لاحظ أيضا أن هناك اعتبارات أخرى يجب أن يراعيها البرنامج:
-  بالنسبة لموظف مدينة نصر، لن يرفض لو عرض عليه البرنامج الانتقال إلى المهندسين أو الجيزة أو التحرير أو رمسيس أو العباسية بدلا من الدقي.. ففي كل الأحوال هو سيوفر جزءا من وقت المواصلات ومعاناتها لأن هذه الأماكن أقرب إليه من مدينة نصر.. أخذ هذا في الاعتبار سيزيد من عدد الاحتمالات التي يجب فحصها!.. إضافة إلى أننا نحتاج إلى إدخال معلومات عن متوسط زمن المواصلات بين كل منطقة وأخرى في القاهرة.. والأسهل أن يقدم المواطن في الطلب المناطق البديلة التي يمكن أن يقبل النقل إليها.
-  هناك تخصصات مشتركة بين عدة وزارات كالمحاسبين والإداريين وغيرهم.. وبالتالي يمكن أن يسمح مجلس الوزراء بالتنقل بين الوزارات بنفس الدرجة والراتب، فهذا لن يكلف موازنة الدولة شيئا.
-  نظرا لعدم تلقي كل الطلبات في نفس الوقت، سيواجه البرنامج مشكلة في إعادة الحسابات مع كل طلب جديد يتلقاه وهذا إهدار للوقت، ويحتاج إلى طريقة لعدم تكرار الحسابات السابقة، والاستفادة من الطلب الجديد في إكمال الدوائر المكسورة.. هذه مشكلة ليست سهلة.
-  سيكون تسهيلا جميلا إذا استطاع البرنامج في مرحلة متقدمة أن يقدم للموظف الحل العكسي: لماذا لا تنتقل أنت للسكن قرب محل العمل، ولكن هذا يتطلب تقديم معلومات عن الشقق المتاحة والإيجارات المحتملة والمدارس التي يمكن أن ينقل إليها أولاده... هذه مرحلة تحتاج لقاعدة بيانات الحكومة الذكية J
عامة، هذا البرنامج يصنف في البرمجة والتفكير الهندسي ضمن ما يسمى بالبرمجة المرنة Dynamic programming، والمشكلة التي تواجهنا هنا تسمى مشكلة توزيع الموارد Resource Allocation.. وهي مشكلة مشهورة تواجه المهندسين في التخطيط العمراني وإدارة الشحن والتفريغ في أرصفة الموانئ، وتواجه المبرمجين في كتابة نظم التشغيل وغير ذلك.. لهذا يحتاج الأمر إلى القراءة في هذا الأمر جيدا قبل كتابة أي كود.. لهذا على من تهمه فكرة البرنامج، أن يجري بعض البحث عن:
Resource allocation Algorithms
و Dynamic programming
ليعرف ما هي أقرب خوارزمية للمشكلة التي تواجهنا هنا، ليختصر وقتا طويلا في إجراء عمليات التبديل، وتفادي شجرة البحث، فالبحث الشجري يكون أسيا Exponential ويستغرق أوقاتا خارقة.. لهذا وضع المهندسون طرقا رياضية لحل مثل هذه المشاكل.
من المهم أيضا لمن يعمل في هذا البرنامج أن يجد إحصائيات عن موظفي الحكومة وتوزيعهم، والنسبة التي سيحلها البرنامج من أزمة المرور لو أعاد توزيعهم جغرافيا.. يعني مثلا: هل سيحل 10% من أزمة المرور في القاهرة أم أكثر أم أقل.. طبعا هذا يعتمد على حجم الفوضى في توزيع الموظفين حاليا، وهو ما أعتقد أنه في ذروة مجده كما هي سمات كل شيء في عصر مبارك!!


السبت، 5 أبريل 2014

صباح ربيعي بلا كهرباء!



صباح ربيعي بلا كهرباء! 

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

مساعدة أمي في تنظيف الغرفة وإخراج الوسائد والمراتب للشمس لم يستغرق سوى ساعة..

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

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

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

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

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

وحين عدت إلى البيت، وجدت أنني لم أضيع سوى ساعة أخرى!!

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

خمس ساعات من انقطاع الكهرباء، هو عيد أسري سعيد يتزاور فيه الأهل والجيران :)

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

وللأسف، الحاسب المحمول (لابتوب) لم يعمل لأكثر من نصف ساعة قبل أن يفرغ شحن بطاريته، لأني لا أهتم بشحنه كثيرا!!

قلبت بعض صفحات ديواني "دلال الورد"، فأوحت لي قصيدة "الملهمة" التي كتبتها على وزن المتدارك الأصلي "فاعلن فاعلن فاعلن" بوزن جديد لم أكتب عليه من قبل، فسجلت بيتا عليه في مسوداتي.

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

فانتازيا مصرية صميمة بلا أدنى شك!!

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

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

الحمد لله.. انتهت المعاناة في الواحدة والنصف، بعودة التيار الكهربي نصف ساعة مبكرا.. كرماء هم فعلا!!

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

 


الجمعة، 4 أبريل 2014

Wpf عالم جديد رائع


Wpf عالم جديد رائع


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

 
تصف ميكروسوفت تقنية WPF بأنها: "الجيل التالي لتصميم واجهات استخدام بتأثيرات مرئية مذهلة".. وأنا أؤكد لك أن هذا الوصف يخلو تماما من أي نوع من المبالغة، فباستخدام WPF يمكنك أن تفعل كل ما يلي وأكثر:

-   تصميم الواجهة المرئية باستخدام لغة توصيف خاصة اسمها XAML.. ورغم أن هذا يبدو عبئا على مبرمجي فيجوال بيزيك (على الأقل الذين لم يتعاملوا من قبل مع لغة ASP.NET التي تحوي طريقة تصميم مشابهة)، فإنه يوفر عليهم كثيرا من الصداع الذي يسببه تصميم النوافذ يدويا باستخدام السحب والإسقاط من صندوق الأدوات Tool Box، ثم تغيير الخصائص من نافذة الخصائص Properties Window، خاصة عند تصميم وتنسيق نوافذ تحتوي على كثير من الأدوات، واستخدام عدة أدوات حاوية Container Controls على النافذة.
والأهم من هذا، أن وجود لغة توصيف Markup Language لتصميم النموذج، يجعل من السهل إشراك محترفي تصميم الرسوم Graphic Designers في تصميم واجهة البرنامج، حيث تتيح بعض برامج الرسوم حفظ تصميماتها بتنسيق XAML، ومن ثم يمكن استيراده في WPF.. هذا بالطبع يخفف عبء التصميم عن كاهل المبرمج، وفي نفس الوقت يترك له الحرية الكاملة في تعديل كود XAML الخاص بالتصميم الذي حصل عليه، والتفاعل معه برمجيا بالطريقة التي تناسبه.. وهذا لم يكن بالأمر الهين في نماذج الويندوز، حيث كان المبرمج يحصل على التصميم في هيئة صورة أو مجموعة صور، ولا يستطيع تعديلها أو تطويرها، إلا بطلب المزيد من الصور من المصمم!!
-   تصميم واجهات لا تعتمد على دقة الشاشة DPI على جهاز المستخدم مهما كان حجم ودقة شاشته، مما يضمن لك ظهور النوافذ وما عليها من أدوات بنفس الشكل والأبعاد كما صممتها على جهازك.
-   التحكم الكامل في كل جزء من أجزاء الأداة (كالإطار Frame والهامش الداخلي والخارجي والأرضية والخطوط)، وهو ما يتيح لك مرونة كبيرة في تغيير شكل الأدوات بطرق لا يمكنك حتى تصورها في نماذج الويندوز.. يمكنك مثلا عرض أزرار مستطيلة بحواف مستديرة، ومع زيادة استدارة الحواف يمكن الوصول إلى أزرار بيضاوية أو دائرية الشكل!
-   استخدام الأشكال الهندسية الأساسية في الرسوم بطريقة أسهل مع تحكم أكبر، مع إمكانية تدويرها وقصها وتغيير أحجامها وتأثيرات عرضها، وهو ما يمكن فعله أيضا مع أدوات WPF (كالأزرار ومربعات النصوص).. على سبيل المثال: يمكنك عرض مربع نص يميل 45 درجة عن الخط الأفقي بمجرد سطور قليلة من كود XAML، وسيظل يعمل بشكل طبيعي وصحيح بدون أي مجهود إضافي منك!.. مع ملاحظة أن الرسوم في WPF مبنية على تقنية DirectX مباشرة وتستفيد من قدرات كارت الشاشة على جهاز المستخدم، لهذا تعمل بشكل أسرع وبكفاءة أعلى من الرسوم في نماذج الويندوز.
-   إنشاء أنماط تنسيق Styles تضم تنسيقات الخطوط والألوان والهوامش وتأثيرات الرسوم، لتطبيقها دفعة واحدة على بعض الأدوات كالأزرار مثلا، مما يوفر عليك مجهود تطبيق نفس التنسيق على كل زر على حدة.
-   استخدام قوالب تنسيق Templates تتيح لك تغيير شكل الأدوات بشكل جذري وإعادة رسمها بالشكل الذي تريده، مما يتيح لك استخدام هذه القوالب في أكثر من برنامج بعد ذلك.
-   استخدام الإمكانيات الجاهزة للتحريك Animation التي توفرها WPF لمنح النافذة والأدوات تأثيرات بصرية جذابة عند تكبيرها وتصغيرها، أو عند مرور الفأرة فوقها، أو عند ضغطها.. كما يمكنك استخدامها في تحريك شعار البرنامج Logo، وفي عمل بعض العروض الإيضاحية للمسائل العلمية، أو حتى في برمجة بعض الألعاب.
-       تشغيل الصوت والفيديو بسهولة على النافذة.
-       استخدام الرسوم ثلاثة البعد 3D Graphics في تصميم النافذة.
-   تصميم واجهات لعرض البيانات في تطبيقات قواعد البيانات، مع إمكانيات رائعة لربط البيانات Data Binding وعرضها في الأدوات بأي طريقة تناسبك، مع إمكانية إنشاء قوالب بيانات Data Templates تتيح لك تغيير شكل الأدوات (كالقوائم Lists والشجرة TreeView و جدول البيانات DataGrid) لتعرض البيانات بالشكل الذي تريده.
-   إنشاء مشروع يتكون من مجموعة من الصفحات Pages، لعرضها في متصفح الإنترنت Internet Explorer (أو أي متصفح آخر تستخدمه)، بدلا من العمل كبرنامج مستقل على سطح المكتب.
أظن هذه النبذة السريعة قد أقنعتك بأنك أمام تقنية جديدة وثرية وثورية، لا تضع عليك أي قيود عند تصميم واجهة البرنامج، لتستفيد أقصى استفادة من الطفرات السريعة في إمكانيات أجهزة الحاسب ونظم التشغيل.
والصور التالية تريك جزءا من واجهة برنامج الشاعر الذي كتبته أنا والصديق م. محمد جلال أبو الرجال قديما بفيجوال بيزيك 6، وحولت جزءا منه إلى دوت نت لأستفيد من واجهات Wpf.. الصور تريك واجهات معقدة للغاية لم أكتب في تصميمها إلا كودا قليلا للغاية معظمة كود XAML.

 



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


بالحب ما أبخلك


بالحبِّ ما أبخلَكْ!
 
يـا ويـحَ قـلبي رغـمَ الجَفَا رقَّ لَكْ
فـي لـيلِ وجْـدي مِـن شوقِهِ كحّلَكْ
أرهـقتَ  قـلبًا جـازَ الـمَدَى  نَبضُهُ
مَـنْ بالأمـانـي للمُنتـهَى iiأرسـلَكْ؟
الـعمرُ يَـمضي، ما زِلتَ في  غَيبةٍ؟!
يـا  حلمَ عُمري طابَ الهوَى لي iiولَكْ
هل لستَ تدري، أم خِفتَ جمرَ الجوَى؟
ويـلٌ لِـشِعرْي هـذا الـذي iiأخجلَكْ!
إنْ كـنتَ مـثلي فـي لَـهفةٍ عـاشقًا
مـاذا إذنْ عـنْ نـبعِ الـلِّقا iiأجّـلَكْ؟
يَـكفي دلالٌ، مـا كـنتَ بـي iiجاهلاً
إنْ لـمْ تُـجبْني "أهـوَى" فلنْ iiأسألَكْ!
أضـناكَ  عـنّي مَـنفاكَ فـي وَحْشةٍ
عـتَّـقْتُ دِفـئي، مـا ذُقـتَهُ أثـملَكْ
يـا نـهرَ حُـسنٍ يَـجري إلى iiجنّتي
أُجِّـجْتُ شـوقًا، هـيّا لِـكَيْ iiأنـهلَكْ
هـيّـا إلـى مَـنْ عـيناكَ iiأحـلامُهُ
أهـديكَ قـلبي، بـالحبِّ مـا iiأبخلَكْ!
لا  تَـقْصُ عـنّي، فالرُّوحُ لا iiتَرتوي
يـا  سـيلَ سِـحْرٍ بـينَ الحنايا iiسلَكْ
فـاسْمع لِـقَولي إنْ كـنتَ iiمُـسْتكبرًا
أنْ كـنتَ طـيرًا أو كـنتَ نَجمُ iiالفَلَكْ
إن شِـئتَ تُـخفي مـا ليسَ لي iiخافيًا
أَبـداهُ عِـشقي هـذا الـذي iiزَلـزلَكْ
فـاعْلَمْ  إذنْ: مَـنْ لـي جاءَ مُستسلمًا
فــي أسْـرِ حـبّي قَـيّدتُهْ iiفـامتلْكْ
شـلالُ  شِـعري يـنسابُ في iiروعةٍ
لــو فـيه تَـهوِي تَـحنانُهُ iiأذهـلَكْ
فـاسكُنْ بـحِضني لا تَـنتوي iiفُـرقةً
مَـن غـابَ عنّي في ليلِ بَردي iiهَلَكْ!
 
محمد حمدي غانم
1/4/2014
 
ملحوظة:
كتبت هذه القصيدة لأاجرب تقطيع البحر المنسرح صوتيا على الصيغة (مستفعلاتن مستفعلن فاعلن).
وأستطيع أن أقول من هذه التجربة أن هذا التقطيع يجعل الكتابة على المنسرح كالسكين في الزبد، وتكشف أنه في الحقيقة لا يختلف عن الرجز سوى في السبب الخفيف الفاصل بين التفعيلتين الأولى والثانية، والذي حوّل مستفعلن إلى مستفعلاتن :).
أفكّر أن أكتب أي قصيدة تأتيني على الرجز على هذه الصيغة.. أفكر أيضا في بحر توأم لهذا البحر هو (متفاعلاتنْ متفاعلنْ متفاعلْ) ويمكن تسميته بالبحر المتكامل لأنه يزيد على الكامل بسبب خفيف بين أول تفعيلتين :)
 


صفحة الشاعر