أهم أقسام المدونة

الصفحات

الثلاثاء، 17 يونيو 2014

كلمة في سرك


كلمة في سرك 

عـايز أقول لِكْ ... عاشقِكْ iiكلِّكْ
قـمرك، ليـلِكْ، شمسِكْ، ضِـلِّكْ
باحْـلمْ أقطفْ لَـمّا اوصـَلْ iiلِكْ
سِـحرِكْ، عطركْ، وردكْ، iiفُلِّكْ
زِيدي فْ دَلّكْ ... قلبي شايلْ iiلِكْ
غـنـوة حـبّ لِـحلمي iتِـدلّكْ
مِن يوم مالْ لِكْ ... عمره ما مَلِّكْ
حــسّ بـأنّـه الـدنيا iاتـملّكْ
لِـيه تـتعالي وبـدري نِزلْ لِكْ؟
لِـيّا تـعالي فْ حـضني iمَحلّكْ 

محمد حمدي غانم
14/6/2014

أحلام الهوى


أحلام الهوى

يـا  حبيبي أَبقِني في iiسُباتي      أَبـقِ أحلامَ الهَوَى iiناعساتِ
إنَّ كـأسَ الأمـنياتِ 
iiلـذيذٌ      طابَ  حُلوًا رَشفُهُ الآنَ iiهاتِ
أَسَـكِرْنا بِالْهَوَى في 
ii مُجونٍ      أم  جُننّا من رُؤَى iiمُذهِلاتِ؟
لستُ  أدري أيَّ عمرٍ 
iiأَضَعْنا      كلُّ مـا  قد  فاتَ iiكالتُّرَّهاتِ
يُـولدُ  العمرُ ما أراكِ 
iiجديدا      فـاتركيني أَنتَهِلْ مِن  iiفُراتي
وعِـديني  والزمانُ 
iiخطوبٌ      لا تـغيبي لحظةً عن iiحياتي
حَسْبُ قلبي أنتِ كنزُ كنوزي      كـلُّ حـلمٍ في هواكِ 
iiيُواتي 
 
محمد حمدي غانم
28/5/2014

الأحد، 8 يونيو 2014

المبرمجان

المبرمجان
(قصة) 
 

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

الأحد، 1 يونيو 2014

هل يجب أن أتعلم VB6 أولا قبل VB.NET؟


س: هل يجب أن أتعلم VB6 أولا قبل VB.NET؟ 

ج: لا.. الأفضل البدء مباشرة بفيجوال بيزيك دوت نت، للأسباب التالية:
1- VB6 ظهرت عام 1998 أي منذ أكثر من 16 عاما، تطور فيها نظام التشغيل من ويندوز 98 إلى ويندوز ME إلى ويندوز 2000 إلى ويندوز XP إلى ويندوز فيستا إلى ويندوز 7 إلى ويندوز 8.. وقد أوقفت ميكروسوفت دعم VB6 نهائيا، حتّى إنها أزالت المعالج السحري Wizard الذي يقوم بتحويل مشاريع VB6 إلى مشاريع VB.NET منذ إصدار دوت نت 2010.

2- كثير من المهام التي يجب أن يقوم بها المبرمج في VB6 يحتاج فيها إلى استخدام دوال API أو يبحث عن أدوات خاصة ومكتبات كود جاهزة كتبها آخرون.. بينما في VB.NET تقوم مكتبة فئات إطار العمل .NET Framework بمعظم هذه المهام بصورة سهلة وبسيطة.

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

4- الذين يتعلمون VB6 حتى الآن يظنون أن هذا تمهيد يجعلهم ينتقلون إلى VB.NET بسهولة.. هذا غير حقيقي، بل على العكس، تعلم VB6 يجعل الانتقال إلى VB.NET أصعب، لأن معظم دوال VB6 الخاصة بالنصوص والمصفوفات والتواريخ والتحويل بين الأنواع وغيرها قد صارت مهجورة الآن، ويجب تعلم ما يناظرها في إطار العمل، مع مراعاة أن دوال VB6 تستخدم الأساس 1 في التعامل مع خانات المصفوفات وحروف النصوص، بينما تستخدم فئات إطار العمل الأساس صفر.

5- بيئة VS6 (التي تعمل فيها VB6) نفسها محدودة، ومحرر الكود فقير في إمكانياته مقارنة بمحرر كود VS.NET، لدرجة أنك تحتاج إلى إعداد Patch لجعل المنزلق الرأسي Vertical Scrollbar في محرر كود VB6 يستجيب لحركة عجلة الفأرة Mouse Wheel.. نعم VB6 أقدم من عجلة الفأرة!!

6- VB6 ليست لغة برمجة موجهة بالكائنات OOP بالكامل، فإنشاء الفئات Classes والواجهات Interfaces فيها محدود القدرات، ولا تدعم الوراثة Inheritance.. على عكس VB.NET.

7- VB6 محدودة في تعاملها مع أنواع قواعد البيانات المختلفة، والكود المكتوب بتقنية ADO لا يمكن تحويله إلى تقنية ADO.NET بدون الكثير من المجهود اليدوي.. والأسوأ من هذا أن تقنية ADO.NET نفسها صارت تقنية قديمة، وتحتل الصدارة الآن تقنية Entity Framework (ونسختها المختصرة LinQ To SQL).

8- حتى تصميم الواجهة بـ VB6 صار متخلّفا بجيلين، فقد تجاوزت دوت نت تقنية نماذج الويندوز Win Forms وتوقفت عن تطويرها، وتدعم الآن تقنية WPF لتصميم نوافذ المشروع باستخدام لغة توصيف خاصة تسمى XAML، تمنح قدرات مدهشة في تغيير شكل الأدوات وتحكما كاملا في كل جزء من أجزائها، وتوفر الوقت والجهد على المبرمج في التصميم باستخدام أنماط التنسيق Styles وقواميس الموارد Resource Dictionaries والقوالب Templates، مع قدرات جديدة في التحريك والتجسيم واستخدام الرسوم والصوت والفيديو، كما أنها تدعم أجهزة الإدخال الحديثة مثل شاشات اللمس Touch Screens وقلم اللمس Stylus وتأخذ في اعتبارها أي تطور مستقبلي في هذا المجال مثل أجهزة رصد الصوت والحركة.. فأي وجه للمقارنة بلغة برمجة لا تستطيع من خلالها رصد حركة عجلة الفأرة؟

 

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

 

ملحوظة:

هناك ميزة واحدة في VB6 عن دوت نت، وهي عدم حاجة البرنامج إلى إطار العمل .NET Framework و المترجم الفوري JIT Compiler، فعلى الرغم من كل مزاياهما، فإن العيب الرئيسي هو أن الملف التنفيذي .EXE لمشاريع دوت نت ليس ملفا تنفيذيا حقيقيا، وإنما هو ملف مكتوب بلغة ميكروسوفت الوسيطة MSIL ويمكن لبعض البرامج مثل Reflector أن تستعيد منه الكود الأصلي للمشروع كاملا، مما يفرض على المبرمج جهدا إضافيا في حماية الكود الخاص به، مثل استخدام بعض البرامج لتهويش الكود Obfuscation، والتي مهما كانت كفاءتها، فلن تحمي الكود بصورة تامة، وإنما ستجعل فهمه أصعب والاستفادة به في مشروع جديد شبه مستحيلة.. وهذا على العكس من الملف التنفيذي لمشاريع VB6، الذي يترجم إلى لغة الآلة (هناك تفاصيل هنا عن اعتماد الملف التنفيذي على VB Runtime لكن سنتجاهلها لأن هذا ليس مجالها)، والبرامج التي تستطيع كسر هذا البرنامج تستعيد منه الكود بلغة التجميع Assembly، وهي أصعب وأعقد وتحتاج مبرمجين محترفين لاستخدامها في كسر حماية البرنامج.. لمثل هذا قد ألجأ إلى كتابة مشروع بـ VB6 إذا كان يحتوي على تشفير أو بيانات حساسة، مع الأخذ في الاعتبار أن هذا أيضا لا يغني عن تشويش الكود، لأن النصوص التي توضع في المتغيرات في الكود، وأسماء النماذج والدوال، تظهر كما هي في كود الأسمبلي ويمكن من خلالها الوصول إلى المناطق المرغوب في حمايتها من الكود.

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

استبداد


استبداد 

هكذا.. لا تسأليني.. ليسَ في الحبِّ اختيارْ!
ما اختيارُ الكونِ حتّى يَتبعَ الليلُ النهارْ؟
هل ـ إذا ما كانَ حُرَّا ـ يَتركُ البدرُ المدارْ؟
هل رأيتِ الطيرَ يومًا في سَماها تُستشارْ؟
هل تأنَّى الزهرُ حتّى يسألَ العِطرَ انتشارْ؟
ما أرادَ البحرُ كَيما يَحضُنَ الدرَّ المَحارْ؟
هكذا فلتعشقيني ليسَ مِن حبّي فِرارْ!
فانْعمي في أَسْرِ قلبي إنّني هذا القرارْ!

محمد حمدي غانم
28/5/2014

 

هل صارت تقنية ADO.NET موضة قديمة؟


س: هل صارت تقنية ADO.NET خارج الخدمة، وحلت محلها التقنيات الأحدث مثل Entity Framework؟

 

ج: لا يمكن القول بهذا، للأسباب الموضحة في النقاط التالية:

1- تقنية ADO.NET هي الأساس الذي بُنيت عليه التقنيات التالية مثل LinQ To SQL و Entity Framework.. وهذا معناه أنك تستطيع استخدامها لفعل كل ما تفعله التقنيات الأخرى وأكثر.

2- استخدام النموذج التصوري Conceptual Model وإنشاء الكينونات Entities كما في L2SQL و EF يوفر الكثير من الوقت والجهد عند التعامل مع قواعد بيانات كثيرة الجداول بينها علاقات، ويتم عرض البيانات من معظم هذه الجداول للمستخدم، أو يقوم هو بإدخال البيانات فيها.. في هذه الحالة تقوم التقنيات الحديثة بإنتاج الكود اللازم لإنشاء تطبيق متعددة الطبقات n-Tier Applications ومن ثمّ يكون استخدام استعلامات LinQ أكثر اختصارا وراحة، والكود الذي يكتبه المستخدم أقل ما يمكن.

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

4- بشكل عام، تقنية ADO.NET هي ملجأ المبرمجين حينما تكون السرعة والكفاءة مطلبا جوهريا في البرنامج بسبب طبيعة قاعدة البيانات.. كائن الاتصال Connection Object وكائن الأمر Command Object وقارئ البيانات Data Reader تقدم تحكما كاملا وسريعا في كيفية الاتصال بقاعدة البيانات والحصول على البيانات المطلوبة بدقة باستخدام استعلامات SQL.. خاصة أن استعلام LinQ يعجز أحيانا عن إنتاج بعض استعلامات سيكويل، وفي بعض الأحيان ينتج استعلامات أقل كفاءة مما يمكن أن تكتبه أنت مباشرة.

5- بينما النموذج التصوري هو الملاذ المريح للمبرمج الذي ينشئ واجهة استخدام معقدة فيها استعلامات كثيرة متشابهة، وفيها إدخال بيانات وتحديث وحذف وما شابه.. في هذه الحالة توفر التقنيات الحديثة مثل EF وقتا هائلا في إنشاء الكينونات وتختصر استعلامات LinQ الكثير من الكود والوقت والجهد.

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

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

 

 

كلمة واحدة


كلمة واحدة 

انـتظرت  مـفاجأة iiمنك      كـلمة  واحدة نفسي iiفيها
ليه أنـا  أطـلبها  مـنك      أحـلى حاجة تحسي بيها 

أيـوة أنـا بعْـشق عنادك      وغـرورك   واعـتدادك
وصَـحِبت خلاص بعادك      بــس هـتجنن  عـليها 

كـلمة  من  أربع حروف      أحـلى من أحلى iiالقطوف
كـلمة تـهـزم أي iiخوف      بـس امـتى iiهـتقوليها؟ 

يـا اللي قلبي بين iiإيديكي      نفسي أكون دلوقتي شايفك
عـايز  أقراها ف عنيكي      قبل ما أسمعها ف  شفايفك
وأمـا أغـنّي بحبّي ليكي      جـوّا  حـضني iiتهمسيها 

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