الجمعة، 12 أغسطس 2011

مفاتيح للنهضة

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

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


[من مقدمة كتاب "حضارة الوسط: نحو أصولية جديدة" للدكتور رفيق حبيب]

وذلك أنا لا نعلم شيئاً يبتغيه الناظم بنظمه غير أن ينظر في وجوه كل باب وفروقه‏.‏فينظر في الخبر إلى الوجوه التي تراها في قولك‏:‏ "زيد منطلق" و "زيد ينطلق" و"ينطلق زيد" و"منطلق زيد" و"زيد المنطلق" و"المنطلق زيد" و"زيد هو المنطلق" و"زيد هو منطلق‏".‏

وفي الشرط والجزاء إلى الوجوه التي تراها في قولك‏:‏ "إن تخرج أخرج" و"إن خرجتَ خرجتُ" و"إن تخرج فأنا خارج" و"أنا خارج إن خرجت" و"أنا إن خرجت خارج‏".‏

وفي الحال إلى الوجوه التي تراها في قولك‏:‏ "جاءني زيد مسرعاً" و"جاءني يسرع" و"جاءني وهو مسرع" (أو هو يسرع) و"جاءني قد أسرع" و"جاءني وقد أسرع‏".‏

فيعرف لكل من ذلك موضعه ويجيء به حيث ينبغي له‏.‏

[من كتاب "دلائل الإعجاز"، للعالم عبد القاهر الجرجاني]


Oppenheimer's way of working with his research students was also original. His group consisted of 8 or 10 graduate students and about half a dozen postdoctoral fellows. He met the group once a day in his office. A little before the appointed time, the members straggled in and and disposed themselves on the tables and about the walls.

Oppenheimer came in and discussed with one after another the status of the student's research problem while the others listened and offered comments. All were exposed to a broad range of topics. Oppenheimer was interested in everything; one subject after another was introduced and coexisted with all the others. In an afternoon they might discuss electrodynamics, cosmic rays, astrophysics and nuclear physics.

[.....] For each problem that interested him, Oppenheimer would select a student or postdoc to work out the details.

[from "Black holes and time warps" by Kip S. Thorne"]

الخميس، 11 أغسطس 2011

كلمات: استدعاء إجراءات سي

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

لا ينبغي تغيير مفسر اللغة كل مرة يُحتاج فيها لإضافة إمكانية، لذلك كان لابد من تغيير هذا الوضع...

[ملاحظة هامة: لن تعمل هذه الأمثلة إلا على إصدار اغسطس 2011 أو أحدث. يمكنك تحميل أحدث إصدارة من هنا أو هنا].

كل اللغات المعروفة تقريباً فيها إمكانية التعامل مع الدوال الخارجية (Foreign function interface) أو FFI، وهذا في أغلب الأحيان يساوي إمكانية للتعامل مع مكتبات الربط DLL المكتوبة بالسي. هذه الإمكانية الآن موجودة في كلمات أيضاً. مثال بسيط على هذا؛ دالة MessageBox:
مكتبة "user32.dll" :

دالة رسالة برمز "MessageBoxW" ( مشير.سي،
نص.سي،
نص.سي،
صحيح32.سي ) صحيح32.سي
نهاية
م = رسالة ( 0 ، "هذه العملية سوف تدمر كل شيء!!"،
"هل أنت متأكد؟" ، 3 )

هذه أول مرة نرى فيها Type declarations في كلمات! نحن لا نستخدمها إلا في حالة الـFFI لكن من يدري؟ قد نراها مستقبلاً في أدوار أخرى...

لاحظ في المثال السابق أن نوع القيمة القيمة الراجعة من الدالة (وهو صحيح32.سي) مكتوب في آخر السطر المعرفة فيه الدالة نفسها. ماذا لو كنا نريد استدعاء void function؟ في تلك الحالة نعرف إجراء بدلا من دالة ولا نذكر القيمة الراجعة.

قبل أن نكمل هذا مرجع سريع لأنواع البيانات المستخدمة في التعامل مع إجراءات السي:
النوع في لغة سي
النوع في كلمات
int
صحيح32.سي
float
طفوي.سي
long
طويل.سي
double
مزدوج.سي
char
حرفي.سي
char *
نص.آسكي.سي
wchar_t *
نص.سي
void *
مشير.سي

لاحظ أن نص.آسكي.سي يعمل مع الحروف الانجليزية، بينما نص.سي يقبل حروف اليونيكود - ومنها الحروف العربية، والموضوع يعتمد بالطبع على نوع البيانات الذي تقبله الدالة: مثلاً في ويندوز الدالة MessageBoxA تستخدم آسكي بينما MessageBoxW تستخدم يونيكود.

ها هنا مثال آخر، لكن هذه المرة على نسخة كلمات على لينكس، يوضح استخدام دالة getenv:
مكتبة "libc.so.6" :

دالة بيئة برمز "getenv" ( نص.آسكي.سي ) نص.آسكي.سي
نهاية
م = بيئة ( "PATH" )
اطبع م
يحاول مفسر كلمات التصرف "بعقل" قدر الإمكان، فمثلاً قام بتحويل النص المقدم للدالة من يونيكود (وهو الصيغة الداخلية لكل نصوص كلمات) إلى آسكي قبل استدعاء الدالة. نفس الشيء يحدث لو كانت الدالة تريد قيمة عدد حقيقي وأرسل لها مثلاً عدد صحيح.

ماذا عن الدوال التي تأخد قيماً أعقد من integer أو نص؟ تعال نتخيل أن لدينا مكتبة DLL فيها دالة اسمها TestPoint تأخذ عاملاً بهذا الشكل:
struct POINT
{
long x; long y;
};

لا يمكن في تلك الحالة الاكتفاء بإرسال كائن بفصيلة مصنوعة بكلمات، لأن المفسر سيعجز عن معرفة طريقة نقل (أو تسيير، marshalling) كل بيان من كلمات إلى مكانه الصحيح في الذاكرة لتتمكن دالة السي من استخدامه.

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

له س تسييره طويل.سي
له ص تسييره طويل.سي
نهاية

مكتبة "simple_dll.dll" :
دالة اختبر.نقطة برمز "TestPoint" ( نقطة ) صحيح32.سي
نهاية

ن = نقطة جديد
س ن = 130
ص ن = 180
ذ = اختبر.نقطة ( ن )
اطبع ذ
هنا فصيلة نقطة هي فصيلة عادية جدا، فقط أضفنا معلومات عن كيفية استخدام قيم س، ص عند ارسال نقطة لدالة سي. يمكننا - إن أردنا - أن نضيف المزيد من الfields أو الmethods لفصيلتنا، ولكن عند تقديمها لدالة سي لن يتم التعامل إلا مع البيانات المعرف لها "تسيير".

هيا نكتب الآن مثالاً أطول يستخدم Windows API. سوف نكتب برنامجاً يرسم مستطيلاً أسوداً في منتصف الشاشة - في منتصف الشاشة الحقيقية وليس نافذة كلمات.

أولاً نكتب هذا البرنامج بلغة سي ثم "نترجمه" خطوة خطوة:
HDC dc = GetDC(0); // Retrieve device context of whole screen
HBRUSH brush = GetStockObject(BLACK_BRUSH);
RECT r;
r.left = 800;
r.top = 600;
r.right = 1000;
r.bottom = 700;
FillRect(dc, &r, brush);

يستخدم البرنامج هنا ثلاث دوال سي: GetDC، GetStockObject، FillRect

ويستخدم أيضاً نوع بيانات جديد هو RECT. فلنعرفه أولاً:
فصيلة مستطيل :

له يسار تسييره طويل.سي
له قمة تسييره طويل.سي
له يمين تسييره طويل.سي
له قاع تسييره طويل.سي
نهاية
الآن نعرف الدوال المطلوبة:
مكتبة "user32.dll" :

دالة مجال.رسم برمز "GetDC" ( مشير.سي ) مشير.سي
    دالة املأ.مستطيل برمز "FillRect" ( مشير.سي ، مشير ( مستطيل ) ، مشير.سي ) صحيح32.سي

نهاية

مكتبة "gdi32.dll" :
دالة عنصر.رسم.جاهز برمز "GetStockObject" ( صحيح32.سي ) مشير.سي
نهاية
لاحظ أننا في الدالة FillRect لا نرسل مستطيلاً، بل نرسل مشير pointer إلى مستطيل..وحين استدعينا الدالة في السي لم نرسل المستطيل r بل أرسلنا عنوانه في الذاكرة r&..سينعكس هذا على كود كلمات أيضاً.

لاحظ أيضاً أننا في الأنواع تحت صنف HANDLE مثل HDC أو HBRSUH نستخدم مشير.سي

(تسيير..مشير..لقد صارت اللغة سياسية أكثر من اللازم. الإصدارة القادمة لابد من أمر اسمه أجندة لتكتمل الصورة)

الآن نكتب برنامجنا:
ط = مستطيل جديد

يسار ط = 800
قمة ط = 600
يمين ط = 1000
قاع ط = 700

م = مجال.رسم ( 0 )
الفرشاة = عنصر.رسم.جاهز ( 4 )
املأ.مستطيل ( م ، عنوان ( ط ) ، الفرشاة )
عند تنفيذ البرنامج سوف يظهر مستطيل أسود على الشاشة. قد لا يظهر المستطيل كاملاً لو تقاطع مع نافذة البرنامج، لأن تلك النافذة ترسم نفسها باستمرار.

ليس أكثر عرض شيق في العالم، كما أن إمكانية FFI في صورتها الحالية لم تكتمل، ومليئة بالأخطاء، وتسبب memory leaks مثل المصفاة...لكن الكود، حتى في تلك الصورة، تثبت أننا نسير في الطريق الصحيح: لقد بدأت لغة كلمات تقترب من اللغات الإحترافية. من يدري ماذا يمكن أن يُعمل بها الآن..ربما يضيف أحد مكتبة تستخدم OpenGL.

أو ربما تتصل بقواعد بيانات. أو يصمم بها برامج شبكية. لا أدري - لقد صار الباب مفتوحاً لغيري الآن :)

الاثنين، 1 أغسطس 2011

أنت والمغالطات المنطقية

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

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

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

الآن نأتي للكتالوج...

اسم المغالطة: Ad-hominem
الاسم العربي: هجوم تجاه الشخص لا الحجة

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

كيف تتصرف: نبه الطرف الآخر أنه بهجومه الشخصي عليك يحاول أن يفلت من الرد على حجتك، واطلب منه رداً محدداً على كلامك

اسم المغالطة: Strawman argument
الاسم العربي: استبدال حجة أسهل

هذه أيضاً ذائعة هذه الأيام؛ أن تفسر كلام خصمك تفسيراً ليس بالضبط ما قصده لكن شيئاً له علاقة ما بما قاله، ويكون شيء أسهل بكثير في الرد. مثلاً:

يقول طرف من الأطراف "أنا مع الحكم الإسلامي"
فيرد الطرف الآخر "هل تريد ولاية الفقيه مثل إيران؟؟؟؟"

الطرف الأول لم يقل هذا مطلقاً، لكن الطرف الثاني أراد أن يرد على شيء يسهل الرد عليه، ففسر كلام الأول تفسيراً مخطئاً بهدف التيسير على نفسه.

اسمها بالانجليزية "مغالطة رجل القش" تشبيها بشخص خاف من مواجهة رجل حقيقي فصنع رجلاً ضعيفا من القش وهزمه :)

كيف تتصرف: قل "كلامي لا يُستدلّ منه بالضرورة ما تقول، أنت فسرت كلامي بشكل خاطيء، وغيرت الموضوع إلى نقطة كذا بدلاً من معنى كلامي الأصلي".

اسم المغالطة: Non-sequiter
الاسم العربي: لا يتبع

هنا يقول المتحدث أنه هناك معلومة حقيقية (أ) ثم يستنتج منها نتيجة (ب)، مع أن ب ليست بالضرورة نتيجة منطقية تتبع أ

مثلاً:
- هناك تأخير في محاكمة مبارك، ومعنى ذلك أن المجلس العسكري متواطيء مع مبارك نفسه
- فلان سافر إلى أمريكا ويعمل في شركة أمريكية، إذاً هو عميل أمريكي
- تم تعيين فلان في لجنة كذا وهو من الإخوان المسلمين، إذاً المجلس العسكري متواطيء مع الإخوان

...وهكذا

اسم المغالطة: False dilemma
الاسم العربي: الاختيارات المزيفة، الزنقة الإجبارية

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

مثلاً:
- "لماذا لم ترشح فلاناً؟ هل تريدها دولة علمانية؟"
- "كيف تترك الإسلاميين يفعلون ما يريدون؟ هل تريدها دولة كهنوتية؟"
- "لماذا تعارض إمساك أحمد شفيق بمنصب رئيس الوزراء؟ ألا تعلم أن البديل هو الفوضى؟"

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

اسم المغالطة: Appeal to emotions
الاسم العربي: اللجوء للعاطفة، التماس عاطفي

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

اسم المغالطة: "Fallacy fallacy" (لا أعرف إن كان هذا اسماً رسمياً/دارجاً أم لا)
الاسم العربي: مغالطة "كلامك فيه مغالطة، إذن أنت على خطأ"

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

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

هذه كانت عينة من المغالطات المنطقية. ربما أستطيع أن أقدم المزيد من النماذج في مقال مستقبليّ.

الجمعة، 29 يوليو 2011

حاسبات للقرن الواحد والعشرين

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

تقليل العدد

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

لذلك فأنا أرى أن دفعة صغيرة من خمسين أو مائة مبرمج يتم انتقاؤهم بحرص ويتعلمون جيداً قد تقوم بدور في السوق مثل مئات المبرمجين في الصورة الحالية للكلية.

- هؤلاء قد يرفعون مستوى الشركات التي سيعملون فيها ويطورون اسلوبها
- هؤلاء قد يتعين منهم الأساتذة الذين يرفعون مستوى التعليم والبحث العلمي
- هؤلاء قد يفتحون الشركات ويغيرون من شكل الاقتصاد

في رأيي أنه على إدارة الكلية أن تفكر في هذه النقطة جيداً وتفعل كل ما تستطيع مع المجلس الأعلى للجامعات لتقلل العدد قدر المستطاع.

صورة الكلية أمام المجتمع

مشكلة كلية الحاسبات أنه من الصعب تعريفها لدى الشخص العادي: الطبيب يعالج، المهندس يبني، ماذا يفعل المبرمج؟ لهذا يأتي كل شخص بنظريته الخاصة [المبرمج يستخدم فوتوشوب، المبرمج يبيع هارد ديسكات، المبرمج يجلس أمام الفيسبوك...الخ].

المشكلة الثانية أن الكلية لا توجد لها قصص نجاح معلنة بما يكفي (أقصد أن لها قصص نجاح كثيرة لكن المعلن منها قليل) هذا يؤدي للحوار الآتي:
  • فلان دخل هندسة بترول وتوظف في شركة باشو للبترول بمرتب 10،000 جنيه! لماذا لا تصبح مثله؟
  • فلانة دخلت طب وفتح لها أبوها عيادة، أنت لست أقل من ذلك وأنا أدخر لك ثمن العيادة من الآن!

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

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

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

[لم أقصد انتقاد صاحب المشروع في هندسة أو شيء من هذا، المشروع محترم لكن كلامي هنا عن المستوى العلمي لكليتي أنا]

لدينا مشاريع تتعامل مع اللغة العربية، لغات برمجة جديدة، مشاريع روبوت، مشاريع علمية، لكن المجتمع لا يعرف. ويظنون البلد متخلّفة :(

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

أريد أن يصير اسم حاسبات مرتبطاً بالاختراع، هذا هو التعريف الذي أريده في ذهن المجتمع.

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

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

لدينا من الخريجين في شركة مايكروسوفت بالولايات المتحدة وكندا حتى لتظن انه هناك فرع من الكلية هناك، لمَ لا يعرف أحد شيئاً عنهم؟

ماذا عن الخريجين الذين قد أسسوا شركات؟

هناك ألف شيء آخر يمكن عمله، مثل FAQ عن الكلية تتداول الأسئلة الشائعة عن سوق العمل والنقابة والمعاهد...الخ. فكرت أصلاً في جعل هذه الوثيقة في صورة قصص مصورة comics لكي تغري الناس بقراءتها. من يبحث يجد ألف فكرة.

[تعقيب: قد أتبعت كلامي بعمل وبدأت خطوة صغيرة في هذا الاتجاه.]

العامل البشري

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

كفاءات عالية + بيئة إدارية مشجعة = مؤسسة ناجحة.

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

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

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

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

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

الثلاثاء، 26 يوليو 2011

لغة كلمات: مرجع كامل أخيراً!

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

الملف الذي استخدمته في العرض متاح للتحميل بأن تضغط هنا وهو في صيغة PDF

الأربعاء، 20 يوليو 2011

بيب! بيب! بيب!


Kalimat calling the Windows API! (This is work in progress)

GP Ideas: 1- Sketchcode

Concept

Let users write programs by sketching; either using paper+scanner or using a tablet computer.

More info

I have an incomplete design of a sketch-based programming language that combines text and graphics elements. Data structures like linked lists or trees would be expressed by their familiar sketch notations, while functions would resemble their familiar text representation enriched by some additional notation gained from using a pen.

I can show my designs to interested teams, but I won't post pictures here on my blog for obvious reasons :)

The project will have two major subsystems and 3 major stages. The subsystems are
(a) Sketch recognizer
(b) Code generator [or interpreter].

The stages are
(a) Language design
(b) Implementing sketch recognizer
(c) Implementing code generation

Stages (b) and (c) could probably be done in parallel assuming a complete language specification was made beforehand.

I cannot officially supervises the project of course, but I am prepared to participate in the design of the full language.

Challenges and risks

The first challenge is in the design of a language that is usable for the sketch medium and expressive enough to represent complex programs without cluttering the area with complex, unclear sketches.

The second is the usual risk of pattern-based projects: The accuracy of recognition, choice of training algorithms, and so on.

Techniques needed

Patterns recognition, image processing, possibly compilers

Notes

This is related to my technology vision of Awraq

الخميس، 7 يوليو 2011

قوائم متسلسلة في كلمات

تريد أن تحل مسألة ACM بكلمات؟ سوف تحتاج بضعة أشياء، منها القوائم المتسلسلة Linked lists. هيا نبدأ في عملها - أول ما نحتاجه هو فصيلة class يعبر عن حلقة في السلسلة. ما يكافيء node في لغات البرمجة الأجنبية :)
فصيلة حلقة :
له بيان
له سابق، تالي
نهاية
هنا لا نعرف methods في فصيلتنا، فقط نعرف مجالات للبيانات data fields.
بالمرة هيا نعرف فصيلة القائمة:
فصيلة قائمة :
له أول ، آخر
نهاية
قبل أن نتابع علينا أن نعرف بعض المعلومات عن الكائنات في لغة كلمات:
  • لإنشاء كائن object من فصيلة معينة نكتب اسم الفصيلة يليه كلمة جديد مثل م = موظف جديد
  • للوصول إلى field نكتب اسمه قبل الكائن، أي أن س مركز النقطة في كلمات يكافيء point.center.x في اللغات التقليدية
  • الثابت لاشيء يعادل null في اللغات المماثلة للJava أو #C.
الآن نريد أن نضيف إمكانيات الإضافة والمسح من القائمة. هنا ستكون الفصيلة قائمة أكثر من مجرد حاوٍ للبيانات، سوف نضيف إليها methods. قبل أن نضيفها يجب أولاً أن نعرف كيف نستدعيها!

تخيل أن فصيلة القائمة لديها method اسمها اضف(...)، سوف نستدعيها هكذا:

ق : اضف(12)

هذا يكافيء lst.add(12) //add to list في اللغات الأخرى. وهو في كلمات اسمه إرسال رسالة إلى الكائن، والكود التي ستتفذ ستكون استجابة لهذه الرسالة. مثل ال++C لابد أن نعرف الاستجابة على جزئين: نعلن عنها داخل الفصيلة ونكتب تفاصيلها خارج الفصيلة.

أولاً الإعلان:
فصيلة قائمة :
له أول ، آخر
-- هنا أعلننا عن الاستجابة
يستجيب ل: اضف ( عنصر )
نهاية
ثانياً التفصيل:
استجابة قائمة ق ل: اضف ( عنصر ) :
-- سوف نكتب التنفيذ هنا
نهاية
هنا نعرف method جديدة عن طريق كلمة استجابة. لابد أن نعطي اسماً للكائن متلقي الرسالة هو هنا ق (في اللغات التقليدية يكون الاسم اوتوماتيكيا this ، لكن هنا لابد من إعطاء اسم).

لاحظ كيف أن الكلام يبدو طبيعياً جداً... استجابة قائمة ق لـ"أضف عنصر" هو افعل كذا كذا..نهاية. هذا لأن كلمات لغة برمجة تستمد جمالها من جمال اللغة العربية™

الآن يمككنا أن نكتب الكود أخيراً:
استجابة قائمة ق ل: اضف ( العنصر ) :
ح = حلقة جديد
بيان ح = العنصر

إذا أول ق = لاشيء :
أول ق = ح
        آخر ق = ح
    وإلا :
تالي آخر ق = ح
        سابق ح = آخر ق
        آخر ق = ح
    تم
نهاية
أنظروا! استطيع كتابة كود الإضافة إلى قائمة!! سنترك كود المسح كتمرين للطالب :)

كلمة استجابة في كلمات، مثل كلمة إجراء، تعبر عن void function, void method. ماذا لو أردنا عمل شيء يعود بقيمة؟ هنا بدلاً من استخدام كلمة استجابة سوف نستخدم كلمة رد.
فصيلة قائمة :
له أول ، آخر
يستجيب ل: اضف ( عنصر )
-- هنا عرفنا رداً جديداً
يرد على عددهم ( )
نهاية
ثم نكتب تنفيذ الرد:
رد قائمة ق على عددهم ( ) :
إذا أول ق = لاشيء :
ارجع ب: 0
    وإلا :
النتيجة = 0
       أ = أول ق
طالما ليس أ = لاشيء :
النتيجة = النتيجة + 1
           أ = تالي أ
       تابع
ارجع ب: النتيجة
    تم
نهاية
الآن..نستطيع اختبار البرنامج:
الوجبات = قائمة جديد
الوجبات : اضف ( "شاورمة" )
الوجبات : اضف ( "مجبوس" )
الوجبات : اضف ( "فول وطعمية" )

اطبع الوجبات : عددهم ( )
قد يهم محبي النحو سبب تسميتنا للرد بإسم عددهم ؛ هذا يجعل التعبير كله يأخذ صورة بدل الجزء من الكل/بدل الاشتمال في اللغة العربية. هل تذكر في المدرسة "أعجبني الخروف صوفه"؟ نحن هنا نقول "اطبع الوجبات عددهم" :)

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

فصيلة قائمة :
له أول ، آخر
يستجيب ل: اضف ( عنصر )
يرد على عددهم ( )
نهاية

رد قائمة ق على عددهم ( ) :
إذا أول ق = لاشيء :
ارجع ب: 0
وإلا :
النتيجة = 0
أ = أول ق
طالما ليس أ = لاشيء :
النتيجة = النتيجة + 1
أ = تالي أ
تابع
ارجع ب: النتيجة
تم
نهاية

استجابة قائمة ق ل: اضف ( العنصر ) :
ح = حلقة جديد
بيان ح = العنصر

إذا أول ق = لاشيء :
أول ق = ح
آخر ق = ح
وإلا :
تالي آخر ق = ح
سابق ح = آخر ق
آخر ق = ح
تم
نهاية

الوجبات = قائمة جديد
الوجبات : اضف ( "شاورمة" )
الوجبات : اضف ( "مجبوس" )
الوجبات : اضف ( "فول وطعمية" )

اطبع الوجبات : عددهم ( )

فلتكن أشياء حقيقية

من يريد ألا تصبح مملاً عليه ألا يجعل تفكيره يقتصر على الأشياء المجردة؛ بل يفكر في أشياء حقيقية.

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

لكنك تقول أن المال والمنصب أشياء حقيقية وليست مجردة: المال يستطيع أن يبتاع سيارات وبيوت وكتب وآيس كريم...حتى السرير المريح يستطيع المال أن يشتريه، أليس هذا مذهلاً؟؟؟

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

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

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

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

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

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

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

هذه أشياء حقيقية