الأربعاء، 18 يناير 2012

من محاسن ubuntu

كنتُ قد تعودتُ في الفترة السابقة علي انتقاد توزيعات القنو/لينوكس بشدة، لذلك فاليوم أريد أن أتحدث عن إحداها مادحاً لها، حيث أريد أن أوضح المحاسن التي رأيتها في توزيعة أوبونتو لينوكس بعد فترةٍ بسيطةٍ من استعمالي لها.

فمن هذه المحاسن أن نظام أوبونتو قنو/لينوكس:
  1. مستقرٌ كخير ما يكون الاستقرار، و هذا كما تعلمون مهمٌ جداً بالنسبة لي خاصةً بعد التجربة المريرة لي مع آخر إصدارات واجهة الـKDE.
  2. يستجيب (دون الحاجة لأي ضبطٍ سابقٍ) لضغطات الأزرار ذات المهام الخاصة في لوحة المفاتيح. مثل زر (إبدأ)، و الآلة الحاسبة، و البريد الإليكتروني، و المنزل home، و غيرها. و هذا يجعله كالويندوز في سهولته في التعاملات السريعة مع ما تكثر الحاجة للتعامل معه.
  3. بسيطٌ و سهل، ربما يكون أبسط مما ينبغي و لكن هذا لا ينفي أن هذه ميزةٌ هامة؛ إذ أن البساطة في حد ذاتها غير سيئة بل علي العكس هي جيدة، و لكن المبالغة فيها هو السيئ دوماً.
  4. لم أحتج إلي أي برنامجٍ إلا و استطعت تنزيله من مستودع التوزيعة، و هذه ميزةٌ ضعيفةٌ جداً؛ لأنني قد أحتاج اليوم أو غداً إلي برنامجٍ ما فلا أجده في مستودعات التوزيعة، و حينها سأعاني الأمرين حتي أستطيع تنصيب البرنامج (إن استطعت فعل ذلك من الأصل).
  5. بالطبع من أكثر الأشياء التي أعجبتني في شكل واجهة أوبونتو هو الشريط العلوي الدائم؛ و هذا مما أُحب في نظام الماك أيضاً و كنت قد حولتُ شكل الـKDE إلي ما يشبهه حينما كنت أستخدم نظام kubuntu ^_^

    في النهاية: لا تعتادوا علي هذا التدليل و المدح؛ فربما يحدث بيني و بين أوبونتو ما أكره فأقلب له ظهر المجن :)

الاثنين، 16 يناير 2012

مايكروسوفت تحتفل بمرور 20 عاماً علي ولادة اللينوكس ^_^

مايكروسوفت تهنئ مؤسسة اللينوكس The Linux Foundation بمناسبة مرور 20 عاماً علي ولادة نواة اللينوكس !
خبرٌ غريبٌ جداً، أليس كذلك ؟!
الغريب كذلك أن فريق تطوير برنامج internet explorer في مايكروسوفت يُرسل كل فترةٍ بكعكةٍ لفريق تطوير برنامج firefox عند خروج إصداراته الجديدة !
بالنسبة لي حينما تصدر مثل هذه الأفعال عن مؤسسة مايكروسوفت كاملةً يكون من الواضح أنهم يتحايلون، و ليست هذه الأمور إلا أموراً دعائية؛ فمايكروسوفت تعلم أن سمعتها تسوء يوماً بعد يوم و لذلك تحاول تجميل صورتها أمام الرأي العام بشتي الطرق، و خاصةً إذا شاهدنا كيف يحاول ريتشارد ماثيو ستولمان و مؤسسة البرمجيات الحرة شن حربٍ شرسةٍ عليها و تشبيهها بالأخطبوط شديد الفتك. 
لكن حينما تصدر عن فريقٍ برمجيٍ في مايكروسوفت فالأغلب أن يكون هذا ناتجاً عن روحٍ وديةٍ فعليةٍ بين الفريقين، و حبٍ للمنافسة و إذكاء روح التحدي.
أظن أنه من الجيد أن يكون هناك النوعان من أنماط الحياة البرمجية؛ فالكاسب في النهاية هو المستخدم النهائي الذي سيمتلك قاعدة اختياراتٍ أوسع، و يمكنه ساعتها الحصول علي معظم ما يريد (إن لم يكن كله).

أترككم مع الفيديو لتستمتعوا به (أعتذر عن الموسيقي المُصاحِبة):

الأربعاء، 11 يناير 2012

نقد الدامجات unions في لغتي الـC و الـ++C

نبذةٌ بسيطة:
الـunions فى الـC و الـ++C هى مكوناتٌ الفكرة الرئيسة من ورائها هي إتاحة الفرصة لاستخدام نفس الحيز من الذاكرة بأكثر من متغيرٍ لها أكثر من نوعٍ مختلف، يعنى أن الدامج عبارةٌ عن حاويةٍ تُشبه الصنف class من حيث أنه يتم داخله تعريف متغيراتٍ مُكونةٍ له، و لكنه يختلف عنه فى أن الصنف يعتبر كل متغيرٍ مُعَرَّفٍ منفصلاً عن المتغيرات الأخرى من حيث حيز الذاكرة المحجوز له و لها، بينما فى الدامج يتم إعطاء كل تلك المتغيرات مساحةً مشتركةً فى الذاكرة تبدأ من نفس النقطة و تنتهى حسب مساحة ذلك المتغير (و التى تتأثر بنوعه).
يعنى لو أننا كتبنا ما يلى:
فإن معنى هذا أننا نُعَرِّفُ متغيراً يسمى var1 من النوع DATATYPE يمكننا التعامل معه على أساس أنه من النوعchar أو النوع int أو النوع long أو النوع float أو النوع double، فى حين أن القيمة التى نتعامل بها كل مرةٍ هى نفس القيمة و لكن مع اختلاف المساحة التى نتعامل بها منها.
و لمزيدٍ من التوضيح يمكنكم مراجعة هذا الرابط في موسوعة الويكيبيديا:
http://en.wikipedia.org/wiki/Union_%28computer_science%29

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

الأربعاء، 4 يناير 2012

مرحباً k-nity ^_^

السادة القراء: مرحباً بكم مرةً أخري في حلقةٍ جديدةٍ من مسلسل "وائل و القنو/لينوكس". 

في الحلقات الماضية عرفتم أنني و نظام القنو/لينوكس نرتبط بعلاقةٍ معقدةٍ من الحب و الكره جديرة بالأساطير و الملاحم !؛ فأنا أرفض استعمال الويندوز بسبب ثمنه الباهظ و تكلفة برامجه و كذلك بسبب ضعفه الشديد تجاه الفيروسات، و كذلك أنا أتململ من استعمال القنو/لينوكس بسبب نقاطٍ كثيرةٍ وضعتها في الموضوع قبل السابق (لن أضعها هنا حتي لا أثير مللكم ^_^).
المهم أنني في آخر مرةٍ تحدثت فيها عن تلك العلاقة أخبرتكم أنني أواجه صعوباتٍ جديدةٍ مع واجهة الـKDE التي عدت إليها مرةً أخري، و كانت تلك المصاعب تتمثل في خللٍ في عمل برنامج مركز البرمجيات kpackagekit، و هو البرنامج الخاص بالتعامل مع البرامج المُنَصَّبة علي الجهاز و تلك التي يمكن تنصيبها install، من حيث التنصيب و الحذف و التحديث. لكن الغريب أنه بدأ يتصرف بطريقةٍ غريبةٍ جداً نتيجةً لعدم استطاعته فتح ملفٍ فيه معلومات حزم البرمجيات المختلفة علي الجهاز ! و بعد عدة محاولاتٍ لي معه أدركت أن الأمل في معالجة الخلل في النظام الحالي صعبٌ جداً، و إن كان متاحاً فسيستغرق وقتاً و جهداً كبيرين في البحث عنه ثم في تطبيقه.
و لما لم يكن عندي وقتٌ أو بالٌ رائقٌ لهذه السخافات فقد قررت أن أستعمل توزيعة ubuntu !
أعرف أن نفراً كبيراً منكم يشد شعر رأسه في غيظٍ لأنني انتقدت ubuntu بشدة في الموضوع قبل السابق، و لكن الواقع فرض عليَّ هذا الاختيار؛ فبعد المحاولات الفاشلة لمعالجة الخلل في ملف بيانات الباقات (أو هذا ما أحسبه) قررت تغيير التوزيعة نهائياً و العمل علي توزيعةٍ مستقرة، بحيث أنه متي أصبح لدي بعض الفراغ فسأقوم باتخاذ القرار الحاسم في هذه المسألة من بين الاختيارات المتاحة (و هي: العودة للويندوز، استخدام توزيعة قنو/لينوكس بها واجهة الـKDE و التضحية بالاستقرار كما كنت قد قررت قديماً، استخدام توزيعةٍ بواجهةٍ أخري غير الـKDE مع التضحية بفارق القوة و الجمال كما أفعل الآن).
و لذلك قمت بتنصيب توزيعة ubuntu (لأنها أحدث توزيعةٍ لدي).

و لكني قمت بإحداث كثيرٍ من التغييرات و الإضافات لها، حيث قمت بتنصيب برامج عدة كنت قد تعودت عليها من استخدامي لتوزيعة kubuntu، و هي برامج:
  • متصفح الملفات dolphin
  • مشغل الصوتيات و المرئيات Smplayer (قبل أن أعتاد علي استخدام banshee الموجود في ubuntu)
  • قارئ ملفات الـpdf الخفيف okular
  • مستعرض الصور Gwenview
و قد أسميت هذا المزيج من واجهة الـunity و برامج من الـkde بالـk-nity  ^_^، و هو الإسم الذي يوضح أن الـunity هي الغالبة و لم آخذ من الـKDE إلا أشياء قليلة جداً.

و الانطباعات الأولي لديَّ عن التوزيعة بعد فترةٍ بسيطةٍ من استعمالها هي كما يلي:
  • التوزيعة مستقرةٌ بالفعل، و هذا ما يدعوني للتمسك بها حالياً بشدة؛ فكما قلت سابقاً لا وقت لدي لانهيارات الـKDE و مشاكلها التي يبدو أنها بلا نهاية.
  • البرامج المرفقة بالتوزيعة ضعيفةٌ جداً بالمقارنة مع البرامج المرفقة بالتوزيعات التي تستخدم واجهة الـKDE، و أوضح الأمثلة علي الفرق: المقارنة بين متصفحي الملفات dolphin و nautilus الخاصين بالـKDE و الـunity علي الترتيب.
    و حتي لا يُجنُِّ المرء بسبب هذا فلا مهرب من تنصيب البرمجيات "الحقيقية" و استبدالها بالأخري شديدة الضعف كما فعلتُ تماماً.
  • إمكانات الواجهة من الناحية الجمالية لا تُقارن حتي بتلك الخاصة بالويندوز !؛ و الغريب أنك تجد من ينافح عن جمال هذه الواجهة و يعتبرها أجمل من الـKDE ذاتها ! و هذا يذكرك بالحكمة القائلة (لولا اختلاف الأذواق لبارت السلع)، أو بالحكمة المصرية العامية (كل فُولة و لها كَيَّال) ^_^

المضحك أنني بعد تنصيب الـdolphin حدثت معي بعض المشاكل مثل مشكلة أيقونات الـnautilus التي تختفي أحياناً:

أظن أن هذه المشكلة تحدث بسبب وجود متصفحي ملفات علي ذات الجهاز و كل واحدٍ منهما ينتمي لواجهةٍ مختلفة (و بالتالي مكتباتٍ مختلفة)، و قد جعلني هذا أُدرك أن الـKDE لها لعنةٌ معينةٌ لا يمكنها أن تترك من يتعامل حتي مع برنامجٍ واحدٍ من برامجها ^_^

ماذا سيحدث بعد هذا؟ و كيف ستسير الأمور بيني و بين القنو/لينوكس فيما بعد؟
حقيقةً لا أعلم؛ فأنا الآن أقوم بمحاولة التركيز علي النجاح في واحدةٍ من أهم محطات حياتي، فلو حدث ما أريده في هذه المرحلة سأتحول حرفياً إلي مليونير (حقاً و صدقاً)، و ساعتها سأقوم علي الفور بشراء أقوي جهاز ماكنتوش macintosh شخصي و أكتفي بنظام الماك الأسد mac OS lion لأنهي هذه المأساة و أعيش في هناء.

و حتي ذلك الحين: دعواتكم لي بالتوفيق ^_^

الثلاثاء، 27 ديسمبر 2011

نقد نموذج لغة الـPython للأصناف classes و الدوال functions.

على الرغم من أن لغة الـPython تمثل بالنسبة لى لغةً من أفضل اللغات (بل أفضلها علي الإطلاق) من حيث شكل البرنامج المكتوب بها، إلا أنها تحتوى على قراراتٍ تصميميةٍ أجد أنه من الواجب الرد عليها؛ لأنها تمثل قراراتٍ سيئةٍ بما فيه الكفاية لمن كانت له قناعاتٌ تصميميةٌ كقناعاتى.
و من أوضح هذه القرارات الغريبة هو نظرة اللغة إلى الأصناف classes و الدوال functions؛ حيث أن هذه النظرة الغريبة ترى فى الأصناف ما يشبه الدوال، و ترى فى الدوال ما يشبه الأصناف !، فنرى أن الأصناف فى الـPython عبارةٌ عن حاويةٍ لمجموعةٍ من الأوامر المتتابعة التى تُنفذ بشكلٍ متتالٍ واحداً تلو الآخر، و أن المكونات الداخلية للأصناف مثل الدوال و المُشَيِّدَات constructors و خلافها ما هى إلا عباراتٌ تنفيذيةٌ بدورها، و يعنى هذا أنه يمكننى أن أقوم بكتابة عبارات اسناد قيمٍ و استدعاءاتٍ لإجراءاتٍ ما داخل صلب الصنف و ليس داخل مشيداته أو دواله، و مثالٌ على هذا (كودٌ للتوضيح فقط):
حيث يتم فى البداية تعريف دالة تسمى func1، ثم تم استخدامها لإسناد قيمةٍ إلى متغيرٍ يسمى A، ثم تلى ذلك تعريف دالةٍ أخرى تسمى func2.
و تكتمل الصورة حينما نعلم أنه يمكننا فى الـPython تعريف دالةٍ داخل دالةٍ أخرى، و استخدامها عن طريق كتابة اسم الدالة الحاوية لها و إتباعها بقوسى دالةٍ نكتب فيهما المعاملات الممررة للدالة الداخلية. و تُعْرف الدوال الحاوية بالاسم closures.
و مثالٌ على هذا:
و بالنظر إلى صفات الأصناف و الدوال فى الـPython سنرى أن لكليهما الصفات التالية:
  1. اسم الدالة  و اسم أى كائنٍ من الصنف هما مؤشران يشيران للدالة و الكائن، أى أنه يمكن تغيير الدالة أو الكائن الذى يشير إليه الاسم. مثل البرنامج التالي:
حيث أنه فى الأمر قبل الأخير جعلنا الاسم (log) يشير إلى كود الدالة (exp)، بينما جعلنا الاسم (exp) يشير إلى كود الدالة (log). و النتيجة التالية لاستدعاء الاسمين قبل التبديل و بعده تدل على أثر التبديل و نجاحه:
  1. كلاهما يمثل كتلةً من الأوامر التى تُنَفَّذ بشكلٍ تتابعى.
  2. كلاهما له القدرة على احتواء تعريفاتٍ لأصنافٍ داخله، أى أنه يمكن للدالة أن تحتوى على تعريف صنفٍ من الأصناف داخلها لتعود و تستخدمه بصورةٍ طَبْعيةٍ كما يحدث فى حالة الأصناف المتفرعة فى باقى لغات البرمجة.
  1. كلاهما له القدرة على احتواء دوالٍ داخليةٍ يتم استدعاؤها عند الحاجة إليها عن طريق اسم المكون الحاوى لها. مع فارقٍ: أن الدوال تحتوى داخلها دالةً داخليةً واحدةً فقط بينما يمكن للصنف تعديد الدوال، و كذلك فإن الدوال التى فى الصنف يتم استدعاؤها باسمها بينما تُستدعى الدوال الداخلية باسم المتغير الذى استدعى دالتها الحاوية. 
    مثال1:
    مثال2:
و من الصفات السابقة نرى أن هناك تقريبٌ لا معنى له بين صفات مكونين برمجيين يجب إبقاء كل منهما منفصلاً عن الآخر، و عدم إثارة البلبلة التى لا داعى لها بجعل كل منهما يحمل شيئاً من صفات الآخر بشكل لا يحقق أى أهدافٍ فى حقيقة الأمر.
فالدوال هى فى الأصل كتلةٌ من الأوامر التى تُنَفَّذ بشكلٍ تتابعىٍ بحيث يتم استدعاؤها عند الحاجة إليها فيوفر وجودها تكرار الأكواد و مساحة البرنامج النصية و يزيد القدرة على اكتشاف الأخطاء و السرعة فى ذلك و غيرها من العوامل الأخرى، أما الأصناف ففى الأصل لم تنشأ إلا لتكون حاويةً تجمع بين مجموعةٍ من المتغيرات و مجموعةٍ من الدوال التى تعمل عليها، و عن طريق الاستنساخ instantiating من الأصل يتم الاستفادة من كود الصنف أقوى استفادة، عن طريق عزل المحتويات الداخلية للكائنات عن المبرمج النهائى و غيرها من الفوائد، فما معنى وجود دوالٍ تحوى دوالاً أخرى داخلها ؟! أو صنفٍ يحوى أوامر تُنفذ بشكلٍ متسلسلٍ و كأنها كتلةُ أوامرٍ فى صلب دالةٍ من الدوال !
و ما الفائدة التى ستعود علينا من ذلك المزج و التقريب الغريبين؟، و أى ضررٍ سيعود علينا عند التفريق بينهما كما تفعل بقية اللغات؟.

الأحد، 25 ديسمبر 2011

كلماتٌ ليست كالكلمات


    المطور: م. محمد سامي
    متأثرة بـ: python و lisp
    نظام التشغيل :WINDOWS و GNU/linux 
    موقع اللغة:
    http://www.kalimat-lang.com 
    بريد المبرمج:
    samy2004 @ gmail.com 
    مدونة المبرمج:
     http://iamsamy.blogspot.com/ 
    مواصفات أخرى:
    يقول م. محمد سامي عن اللغة:
كلمات لغةٌٌ برمجيةٌ عربيةٌ لتعليم الأطفال البرمجة وقد راعينا فيها سهولة التعلم وقابلية البرامج للقراءة.
اللغة تشمل امكانات جاهزة للرسم وتحريك الصور على الشاشة، وبها أيضا امكانية التعامل مع لوحة المفاتيح والماوس. كما تأتي في بيئة تطوير متكاملة (IDE) ليسهل بها كتابة وتنفيذ البرمجيات.
ربما تكون كلمات لغة للأطفال لكنها ليست لعبة، هذه لغة حقيقية باوصاف مألوفة للمبرمجين المحترفين:
    • Object-oriented programming
    • Dynamic typing
    • Garbage collection
    • عمل ملفات تنفيذية exe (انظر قائمة برنامج-> عمل ملف تنفيذي)
ولعلّها تكون بإذن الله جزءاً من نهضةٍ علميّةٍ في أمتنا.

ميزات لغة كلمات:
بدايةً: تعد لغة كلمات أرقي لغات البرمجة العربية الحالية علي الإطلاق، فهي بحقٍ تُعد لغة برمجةٍ بكل ما تحمل هذه الكلمة من معاني، و لكلمات الميزات التالية:
  1. كاملة الهيكل، يعني أنها لا ينقصها مكونٌ من المكونات الأساسية التي يجب توفرها في أي لغة برمجة تستخدم عملياً، مثل:
    • التعامل مع المتغيرات.
    • معاملات حسابية و منطقية logic and arithmetic operators
    • الجمل الشرطية.
    • الجمل التكرارية.
    • الدوال functions.
    • أوامر إدخال و إخراج للتعامل مع الشاشة console.
    • أوامر للتعامل مع الملفات.
    • المكونات المركبة:
      1. المصفوفات arrays
      2. القواميس dicts
  2. تحتوي علي مكتبةٍ تجريبيةٍ بسيطة، و لها الإمكانيات التالية:
    • التعامل مع الملفات.
    • الإدخال و الإخراج من/علي الشاشة.
    • أوامر رسومية:
      1. أمر ارسم.خط
      2. أمر ارسم.مستطيل
      3. أمر ارسم.دائرة
      4. أمر ارسم.نقطة
    • أوامر التعامل مع الصور (الأطياف حسب تعبير اللغة):
      1. حمل.طيف
      2. ارسم.طيف / في
      3. اخف.طيف
      4. اظهر.طيف
    • أوامر التعامل مع الحوادث المدعومة في اللغة، و هي:
      1. حوادث الماوس
      2. حوادث لوحة المفاتيح
      3. حوادث الأطياف
    • إمكانيات برمجة الواجهات الرسومية.
  3. لها ميزاتٌ متقدمةٌ للغاية عن لغات البرمجة البسيطة، مثل:
    • دعم البرمجة الكائنية oop بشكلٍ جيد، ففيها:
      1. تعريف الفصائل (تكافئ الـclasses).
      2. الوراثة inheritance
    • إمكانية تجميع الأكواد المرغوب في إعادة استعمالها في وحدات.
       
    • قويةٌ في جزئية الأحداث و معالجتها events and events handling
    • تدعم تنفيذ أكثر من عمليةٍ في نفس الوقت (شيئٌ يشبه في تأثيره تعدد خيوط التنفيذ multithreading).
و للمزيد من التفاصيل و الأمثلة يمكنكم زيارة موقع اللغة.


عيوب لغة كلمات:
و لكن علي الرغم من كل تلك الميزات التي لها، إلا أن كلمات لها عيوبٌ تجعلها لا ترضيني علي الإطلاق، و منها:
  1. اللغة من نوع اللغات ذات التنويع المتغير dynamically typed، و هذا النوع لايصلح لكتابة البرامج التي تحتاج إلي سرعاتٍ فائقةٍ في التنفيذ، و كذلك يساعد في الوقوع في أخطاء التكويد المنطقية لأن اللغة لا تقيد المتغير بنوع بياناتٍ معين (يرجي مراجعة هذه النقطة في نقد لغة السوبرنوفا).
  2. اللغة تحتوي علي مكونين في غاية التشابه هما:
    • الإجراء.
    • الدالة.
      و كان يجب ألا تضم اللغة مكونين متشابهين كهذين علي الإطلاق؛ حيث أن هذا لا داعي له منطقياً، بل و يسبب تشابهُّما الشديد إلي البلبلة عند المبتدئين و سنري مثالاً لهذا عند التحدث عن العيب رقم 5، و كان من الأفضل ضم هذين المكونين في مكونٍ واحدٍ أشمل و أقوي من كليهما (و كان يمكن لكلمات أن تحتوي علي الإجراءات فقط، و لكن مع الاهتمام بأن تأخذ الإجراءات كل جوانب القوة التي تُغْني عن كل مثيلاتها).
  3. اللغة تحتوي علي مكوني:
    • المصفوفات arrays
    • القواميس dicts
      و كان بالإمكان ضم هذين المكونين في مكونٍ واحد، و هذا سيسهل علي المبتدئين كثيراً لأنه يضم المكونات المتشابهة التكوين و الوظيفة في مكونٍ واحدٍ أشمل (هذه نقطة نقدٍ فرعية لكنها موجودةٌ بالفعل).
  4. الدوال و الإجراءات في كلمات ضعيفة البنية؛ فهي:
    • تعيد خرجاً واحداً فقط (في حالة الدالة، أما الإجراءات فلا يفترض أن تعيد مخرجاتٍ من الأصل).
    • لا يمكن إعطاء قيمٍٍ ابتدائيةٍ لمدخلات الدالة أو الإجراء، و هو الأمر الذي كان بإمكانه تيسير العمل بها بشدة و خاصةً في المشاريع الكبيرة.
  5. الفصائل في كلمات ثرثارة؛ فلكي تُعَّرِّف محتويات فصيلةٍ ما فيجب عليك كتابة كلامٍ كثير، و هو علي الرغم من كونه أقل مما هو عليه في حالة لغات مثل الـEiffel إلا أنه أكبر من المعتاد في اللغات الأخري (مثل لغة الـpython، و هي اللغة التي تأثرت بها كلمات بشدة).
    مثال1:
    مثال2:
  6. تحتوي كلمات علي أوامر "علامة" و "اذهب إلى"، و اللذين يكافئان "Goto" في اللغات الإنجليزية، و أنا أرفض هذين الأمرين لأنه من الممكن الاستغناء عنهما و استخدام مكوناتٍ أخري لتؤدي عملهما (الحلقات التكرارية و الجمل الشرطية)، و كذلك فهما يسببان الإرتباك في الكود عند استعمالهما بغزارة (يرجي مراجعة ترجمتي لخطاب Goto statement considered harmeful للبروفيسور ديجكسترا، و الذي أرسله للنشر فى مجلة (Communications of the ACM, Vol. 11, No. 3, March 1968, pp. 147-148).
  7. تعبير الحلقات التكرارية ضعيفٌ للغاية، حيث لا يتيح تغيير مقدار الخطوة في العملية إلا بقيمة زيادةٍ مقدارها 1 (و قد نبه م. محمد سامي إلي أنه ينوي تدارك هذه الجزئية في الإصدارات القادمة بإذن الله عز و جل).
  8. المكتبة حتي الآن مبنيةٌ داخل المفسر نفسه، و ليست قائمةً بذاتها و ليست مكتوبةً بلغة كلمات نفسها بل بلغة الـ++C مع مكتبة الـQT.
  9. لا يوجد مترجمٌ قويٌ للغة حتي الآن، و كل ما يوجد هو مفسرٌ يتيح لنا استخدام بعض مكونات مكتبة الـQT، و هذا أمرٌ مرفوضٌ لأننا نحتاج إلي كتابة المكتبة الخاصة باللغة كاملةً بها نفسها ليتسني لنا نقل هذا الجزء من العلم البرمجي إلي العربية. و لكن المشكلة أنه لا يمكن كتابة مكتبة كلمات بها نفسها كما سيلي في العيب العاشر.
  10. لا يمكن كتابة أوامرٍ بلغة التجميع assembly في برنامج كلمات، و هذا يجعلها غير قادرةٍ علي:
    • إنتاج مكتبتها باستخدامها هي نفسها.
    • إنتاج برامجٍ تعمل علي المتحكمات الميكروئية microcontrollers
    • كتابة البرمجيات الأخري التي نحتاج فيها إلي التعامل مع الذاكرة مباشرةً، مثل:
      1. أنظمة التشغيل.
      2. المترجمات compilers.
      3. المفسرات interpreters.
  11. الوحدات في كلمات تتيح لنا إنشاء إجراءاتٍ و دوالٍ حرة (أي لا يلزم أن تكون مكتوبةً في فصيلةٍ ما)، و هو ما يجعلنا نعاني من مساوئ نموذج البرمجة الإجرائية في المشاريع الكبيرة، و هذه الصفة تناقض مبدأ الأمن الذي نريده في لغة البرمجة القوية.
  12. اللغة لم تستقر في تصميمها بعد، و لم توضع لها خطةٌ توضح حجمها النهائي المتوقع حتي الآن، ونحن نري بالفعل أن اللغة يزيد حجمها يوماً بعد يوم.
  13. ليس فيها تعبيرٌ لمعالجة الاستثناءات exception handling.
  14. الوصول إلي مكونات الفصيلة غير مُوَحَّد الشكل، فنحن نصل إلي المتغير الداخلي للكائن عن طريق كتابة اسمه ثم كتابة اسم الكائن بعده، مثال:
    حيث م هو كائن object فيه ثلاث متغيراتٍ هي: اسم، سن، عنوان.
    أما الإجراءات و الدوال فيجب أن يكتب اسم الكائن أولاً، ثم نتبعه بعلامة : ثم اسم الإجراء أو الدالة. مثال:
    حيث ق هو الكائن، و اضف هو الإجراء أو الدالة.
  1. لا تحتوي علي مكونٍ هامٍ للغاية هو التعدادات enumerations 
  2. لا تحتوي علي فكرة الـتفويض delegating (الموجود في لغاتٍ مثل الـ#C).


    نهايةً: فكلمات علي الرغم من نقدي لها و العيوب التي أراها فيها (و بعضها ليس عيباً كبيراً كما رأيتم)، فيمكنني أن أقول ثانيةً أنها أفضل اللغات البرمجية العربية الحالية علي الإطلاق، و أنها نواةٌ جيدةٌ للغاية للغة برمجةٍ احترافيةٍ من الطراز الأول، و لا أملك حالياً إلا الدعاء لمصممها بكل التوفيق في مسعاه.

الثلاثاء، 20 ديسمبر 2011

أيها القنو/لينوكس: صبراً فسوف أدبرك :'(

كأن هذا ما ينقصني في هذه الأيام العصيبة !
فوجئت منذ فترةٍ قريبةٍ ببرنامج kpackagekit (و هو مركز البرمجيات في توزيعة kubuntu) يتصرف بشكلٍ غريب؛ فحينما أفتحه لا يقدم لي أسماء الحزم الموجودة في المستودعات لأختار منها ما أريد تنصيبه !
و الأغرب أنني حينما أحاول أن أبحث عن التحديثات المتاحة للنظام يخرج لي هذه الرسالة:
و بالتزامن مع هذا أصبحت رسالة التنبيه إلي وجود ترقيةٍ جديدةٍ للنظام تظهر لي دائماً و بصفةٍ دورية طالما حاسوبي يعمل !

و نظراً لانشغالي الشديد في هذه الأيام، و نظراً كذلك لما تمر به مصر من أزمةٍ عنيفةٍ تضغط علي أعصابي بشدة، فإنني آثرت ألا أبحث في هذا الأمر الآن، و يمكنني أن أصدع رأسي به فيما بعد. و قلت لنفسي و أنا أنخرط فيما هو أهم:
إن كثيراً من المرح ينتظرك في الأيام القادمة يا فتي ^_^
و اليوم حاولت أن أبحث عن حلٍ لهذه المشكلة فوجدت الحديث عنها قليلاً (أو ربما لم أبحث كثيراً)، و الحل الذي وجدته كان أن أكتب الأمر التالي في سطر الأوامر:
sudo apt-get install --reinstall kpackagekit
بحيث يتم تنصيب برنامج kpackagekit من البداية، و لكن سطر الأوامر أخرج لي رسالة الخطأ التالية:
و حينما حاولت التحايل و تنصيب برنامج مدير الحزم synaptic علي أساس أنه سيُمَكِّنُنِي من أداء نفس المهام و ربما لا يكون لمشكلة kpackagekit تأثيرٌ عليه، و ذلك باستخدام الأمر:
sudo apt-get install synaptic
فإن رسالة الخطأ التالية ظهرت لي:

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

أيها القنو/لينوكس: صبراً فسوف أدبرك :'(