الجمعة، 27 أبريل 2012

دليل الملتمس إلى استخدام الماوس بالg4c

يوجد function واحدة اسمها register_mouse_proc، يمكن بها التعامل مع الماوس بأي طريقة في مكتبة g4c. هذه الدالة تأخذ function أخرى وتخزنها داخلياً، وحين يحدث أي حدث مرتبط بالماوس (تحريكها، ضغط زر، رفع اليد من على زر) يقوم نظام g4c بمناداة الـfunction التي تم تسجيلها.

وظيفتك إذاً كمبرمج ان تفعل الآتي:

1- تعرف دالة جديدة تقوم بدور mouse proc
2- تقوم بتسجيل هذه الدالة في g4c عن طريق اعطاء اسمها (بدون الاقواس) إلى register_mouse_proc
3- تكتب بداخل الـmouseProc الكود التي تريد ان تحدث عند أي حدث للماوس.

الدالة التي تكتبها يمكن ان تأخذ أي اسم، لكن عدد الparameters وانواعها والreturn value يجب ان تطابق الآتي:

int myMouseProc(int x, int y, bool leftButton, bool rightButton, void *)

لاحظ ان تحريك الماوس، الكليك، ...الخ كلهم يتم التعامل معهم عن طريق هذه الدالة. x و y  يدلان دائماً على مكان المؤشر وقت الحدث، leftButton تدل إن كان الزر الأيسر مضغوطا في تلك اللحظة ام مرفوعاً، ويناظره rightButton للزر الأيسر، وآخر parameter غير مستخدم. الآن بعض الامثلة...

كيف اتعامل مع الكليك؟ مثلاً هذا البرنامج يعد الكليكات بالزر الأيسر:

#include "g4c.h"

bool oldLeftButton = false;
int numClicks = 0;

int mouseProc(int x, int y, bool leftButton, bool rightButton, void *)
{
     if(oldLeftButton == false && leftButton == true)
    {
                   numClicks++;
    }
    oldLeftButton = leftButton;
    return 0;
}

void main( )
{
     register_mouse_proc(mouseProc).
}

هذا البرنامج جزءان: اول جزء يخزن دائماً القيمة القديمة لـ leftButton لأننا نريد ان نقارن القيمة القديمة بالجديدة.

الجزء الثاني يقارن قيمة leftButton الحالية بقيمتها القديمة. لو كانت الحالية true والقديمة false إذاً فقد حصلت عملية كليك (لو كانت اثنان true وراء بعضهما مثلاً فمعنى ذلك تحريك الماوس والزر مضغوط..لو اثنان false وراء بعضهما يكون تحريك والزر مرفوع...وهكذا).

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

هذا البرنامج يعمل، لكن الكليك "ساذجة" قليلاً لأنها تحدث مع ضغط الزر فوراً. الكليك الحقيقية تحدث عند ضغط الزر ثم رفعه في فترة قصيرة وبدون تحريك مؤشر الماوس...لكن الكود الموجودة تنفع لمعظم الاهداف (لعبة XO مثلاً). وهكذا..يمكنك اختراع التعامل الذي تريده مع الماوس عن طريق التعامل مع الmouseProc.

الخميس، 26 أبريل 2012

An educational tower of programming features

I've been working on an educational programming language for children called Kalimat. One of the ideas about its design is "different concepts for different levels".

Some languages are quite easy to learn, like 80s Basic, while others try to still be easy but add structure or discipline. There's this famous Dijkstra quote (probably made in jest) about Basic ruining children's minds beyond all repair.

Well, Kalimat goes the other way by assuming "all repair" is possible, even a good thing: it starts with a language very similar to QBasic; a child can write interesting programs using only global variables, If conditions, and goto. They can learn with flowcharts if it benefits them, and they can use graphics routines.

We can call this "Level 1". Gradually, these primitive features are shed in favor of more advanced, more abstract features.

Kalimat is Arabic-based, but I'll use a hypothetical English version for the example. This is the typical 'guess the number' game:

n = random(20)
label begin
read "Guess the number:", #g
if g > n :
    print "too high!"
    goto begin
else if g < n :
    print "too low!"
    goto begin
else
    print "good job!"
done

The benefit of this model is that almost everything is visible. The child doesn't need to know the abstractions of procedure calls, or keep in their head the semantics of such calls when thinking about what to do. Commands are executed, sometimes execution jumps. Variables store numbers and sentences, and that's more or less it. Now let's move stuff on the screen or write short quiz programs.

If the child outgrows the kind of programs this model allows, they can learn looping with for and while, and further learn procedure calls. Procedures are separate from functions: this allows the teacher to talks about procedures as "taking some lines of code and giving them a name", and then enter the realm of local variables and parameter passing, and finally talk about "defining our own functions" similar to built-in functions like sin, cos, or random. Let's call that level 2.

Level 3 is OOP. While OOP is now all about abstraction, there's some bit of "concreteness" left: There is no implicit "this" or "self" reference, and like, say, Python this reference is explicit. We also borrow the "send a message" metaphor from Smalltalk. An object can respond to a message or reply to it. Mirroring procedures and functions (I admit this part looks clumsy, needs experimentation to see if it turns to actually make the teaching easier).


class Point:
    has x, y
    responds to draw( )
end

responseOf Point p to draw( ):
    drawPixel (x of p, y of p)
end 

You've probably noticed the usage of cues from natural language to make reading programs flow more naturally. We are not trying to emulate COBOL or SQL; but we believe such cues in the right dosage could help with teaching and conversations about the code. I intend for Kalimat to have something of a canonical reading form, that is when reading code aloud, there is a known way to voice expressions, definitions, ...etc

Anyway, I like the result in the code snippet:  "the response of a point P to 'draw!' is to invoke drawPixel at the x and y of P".

How about other levels? Now that the child's programming knowledge has matured, they can learn more: like for example concurrency. Kalimat uses the CSP model. First we have the launch command that takes a procedure invocation and runs it separately. It's easy to take a program that draws an animated ball and transform it into 50 concurrently moving balls, with the simple addition of a loop and a launch statement.

To coordinate between processes, we have channels and their usual operations: send, receive, and select. Those same channels are also used for the GUI library; in my opinion this simplifies GUI programming in many situations. For example to create a program where the user draws lines you could do:

while true:
    receive p1 from mouseClickChannel( )
    receive p2 from mouseClickChannel( )
    drawLine (x of p1, y of p1)-(x of p2, y of p2)
loop

The flow of execution matches the flow of user actions, no need to separate program state, and in larger programs the need for some design patterns is minimized.

Other than concurrency, Kalimat has (explicit) tail-call elimination for any ambitious teacher who wants to go into functional directions, and currently I'm working an a language-hosted PEG parsing, for people who want the children to create e.g NLP user interfaces, text-adventure games, or whatever they fancy. Kalimat is all about teaching thinking, computer science, and the fun of programming.

I did the design of Kalimat on intuition and from memories from my childhood days of programming, but I've recently found out about Piaget's well-know theory of child intellectual development stages. I'm not so sure about this, since I'm far from being a development psychologist, but there might be some fit between Kalimat's primary, abstraction-free, levels and the operational model of early childhood learning. This might be able to explain the exploding success of 80s Basic among children and allow us to take advantage of some of its characteristics.

Kalimat is open source, hosted on http://code.google.com/p/kalimat

It is Arabic-based, but I hope to have an English version for better discussion and experimentation with the global programming education community, if anyone turns to be interested.

I once made a buggy, half complete English release (here's a screenshot of it). I don't want to publicly release it at this stage, but I'd be happy to give it to anyone who requests. My email ID is samy2004 on Gmail.

حزمة معلومات مكثفة عن برنامج د.ابو الفتوح

هذه تجميعة مني لبعض الوسائل التي يمكنك استخدامها (لو كنت مؤيداً لد. ابو الفتوح) في تعريف الآخرين به.

لن اقول حتى تسويق - انا ارى ان برنامجه يسوق نفسه اصلاً - لكن لو يعرف به الناس.

أولاً: المشاريع القومية والخبراء

اكبر مزايا برنامج د. ابو الفتوح انه ليس برنامجه الشخصي بقدر ما هو مشروع مشترك بين عشرات الخبراء والمفكرين. تقديراً لدور هؤلاء الخبراء كان هناك مؤتمر خصيصاً لهم يناقشون مشاريعهم ويعرضوها.

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




(بالمناسبة، لو نفسك تشوف المشاريع كلها، وهي اكثر بكثير من هؤلاء، الفيديو الكامل هنا: http://www.youtube.com/watch?v=pJkqxBYZaTs
)

بعد كدة ده البرنامج الرئاسي كاملاً بصورة PDF (نسخة المناقشة المجتمعية). حتى اسم النسخة يوحي بنوع شخصية المرشح الذي نتحدث عنه http://www.mediafire.com/?bc96l5ysu7dx8f2

دي حتة عاجباني، برضه فيديو لمدة دقائق، عن جزء من البرنامج الانتخابي لحل عجز الموازنة، من الخبير الاقتصادي سامر عطا الله احد خبراء البرنامج: http://www.youtube.com/watch?v=DKpR6DrVgUM

وده ملخص في صفحة واحدة عشان اللي انتباهه قصير او اللي بيقول اشمعنى مرشح الحرية والعدالة عامل كدة :)) 

وهذه الوعود الرئاسية التي قدمها، بناء على التنسيق مع الخبراء الذين معه:

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

الأربعاء، 25 أبريل 2012

شوف اللي ينفعك

كيف اذاكر؟ كيف اقرأ؟ كيف أتعلم؟
هل اعمل في الاكاديميا ام القطاع الخاص؟
هل اتخصص في مجال معين واحترفه، ام اعرف في كل شيء؟

توجد ردود تقليدية على هذه الأمور. مثلاً الرد التقليدي في موضوع المذاكرة يكون شيء مثل الآتي:

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

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

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

إنه التنوع يا سادة

لكن الناصحون ينسون كلمة اسمها diversity. ليس كل الناس يفكرون بنفس الطريقة (ليس لديهم نفس الsoftware على رأي التفكير الحوسبي)، وليست كل البيئات مثل بعضها. القطاع الخاص في Microsoft غير Google غير Makesense. الاكاديميا في MIT غير جامعة النيل. هناك اهداف في الحياة تحتاج لتخصص واهداف يضرها التخصص.

وانا مختلف عن الصورة التي يتوقعها الناس (كفى اتهاماً لي بالاستعلاء، "مختلف" غير "افضل"). ربما جزء من رسالتي في الحياة ان انبه الناس لموضوع الـdiversity هذا.. مهلاً يا أخي وانت تنصح! نصيحتك غالباً لن تنطبق علي! فكر في الظروف قبل ان تتكلم!

حتة نرجسية برمجية

كيف ابرمج؟ حين كنت اعمل في لغة كلمات كانت طريقتي هي اربع ايام من التفكير ويوم من التكويد. اما التفكير فكان يجري في دماغي بينما الف وادور في البيت: لا استخدم UML، لا diagrams، لا شيء. ثم حين اكود يكون الحل شبه محدد في دماغي فاجد الكود تكتب نفسها إلا في مواقف معينة يكون الحل المفترض مخالفاً للواقع العملي؛ وقتها نعود لمرحلة التفكير.

لكن من عدم الحكمة ان اصنع من هذه الطريقة methodology جديدة اسميها اسماً خلاباً - مثلاً طريقة 4+1 ، واسوقها على انها الحل النموذجي للمشاريع البرمجية مثل الـagile وما سبقها..الطريقة ببساطة نفعت معي في مشروع معين. لا يوجد اي سبب علمي لأن اقول انها ستنفع لو تعممت. هي بالتأكيد تنفع مع آخرين، لكن مع الآخرين؟ هذا أمر مختلف.

أين الأساس العلمي لهذه النصائح؟

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

وددت لو كان اصحاب كتب التنمية البشرية اياها يقدمون مراجعاً عن مصادر النصائح المذكورة في كتبهم. لابد لمؤلفي هذه الكتب ان يعاملوا القاريء على قدم المساواة. حتى لو تريد تبسيط المعلومات للقاريء العادي، لماذا لا تترك ملاحق/هوامش تقول "هذا مبني على نظرية فلان للعالم فلان المنشورة سنة كذا في كتاب كذا"؟؟

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

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

عودة إلى النرجسية

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

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

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

تخصص ام لا تخصص؟

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

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

او تخيل التفكير الحوسبي مثلاً. إن كان هناك عكس لكلمة "تخصص" فهو غالباً هذا.

هل معنى هذا انه لا فائدة من النصح؟

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

بعد كل ما قلته - صدق او لا تصدق - انا مؤمن انه هناك مفاهيم ثابتة يمكن النصح بها :)

مثلاً: اهم نصيحة اقولها لمن يذاكر هي انك لم تذاكر حقاً بمجرد انك شعرت بالفهم؛ لابد من موقف اختبار تتأكد فيه انك فهمت حقاً. لو كانت المادة نظرية فلابد من حل اسئلة والتأكد من انك كتبت الحل الصحيح. لو كانت المادة برمجية فاكتب كود عن الذي درسته ولا تترك الـIDE إلا والكود تعمل بصورة صحيحة. النفس خداعة جداً ولو قلت "انا خلاص فهمت" فـ 99.999% ان هذا ليس صحيحاً.

ايضاً المذاكرة أولاً بأول مهمة. في افضل فترات حياتي دراسياً (الفرقة الاولى بالكلية) كنت لا اترك الاسبوع يمر بدون (1) مذاكرة المحاضرات (2) حل الاسئلة. هذا جعل الحياة سهلة، والمذاكرة ليست هماً. كانت فترة طيبة في الحياة.

ايضا في موضوع التخصص..نصيحتي ان تجرب اشياء كثيرة حتى تعرف ما تحب وما لا تحب. لقد جربت الgraphics ثم game programming ثم AI حتى وصلت اخيراً لما احببت وهو علم لغات البرمجة programming language theory، وبعد ان ظننت نفسي استقررت فإذا بي اجد التفكير الحوسبي وعلم النفس التربوي..وهي امور مازلت احاول الدخول فيها إلا ان بعض من جوانبها مازال مرتبطاً بطريقة او بأخرى بلغات البرمجة وتصميمها.

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

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

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

ارسطو وصدام والثورة المصرية

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

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

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

كانت هناك خلافات بين افلاطون وارسطو عن السياسة ونظم الحكم. كنت اقرأ مقالاً في هذا الموضوع ثم رأيت في افتتاحيته هذه المقولة:

So first fundamental difference between Plato and Aristotle: the first thinks the difference as inherent to humanity, the second thinks equality. This starting point radiates the rest of their political thought.

تقول ان اول اختلاف بين افلاطون وارسطو ليس عن طبيعة الدولة بل عن طبيعة الانسان..يميل افلاطون للتركيز على الاختلافات بين الناس كصفة جذرية بهم، بينما يميل ارسطو للمساواة بينهم. هذا الاختلاف يؤثر بعد ذلك في افكارهم السياسية.

طب واحنا مالنا؟؟ فكر في هذه المقولات التي قد سمعتها في مصر قبل وبعد الثورة:
  • احنا شعب ابن ^%$#^ ما يلمناش الا الكرباج
  • حانتخب شفيق/عمر سليمان عشان راجل يعرف يلم البلد دي
  • ما ينفعش اتنحى، كدة حاسيب مصر للاخوان
  • الشعب المصري ليس مستعداً للديموقراطية. انها سوف تأتي، لكن متى؟؟؟
  • نطالب المجلس العسكري بإعلان دستوري بضع مباديء فوق دستورية!
  • ينبغي للمرأة من الإخوان أن تفضل الزواج من شخص داخل الجماعة
  • البرادعي خسارة في بلد مثل مصر
  • حازموووون
هل تعرف ما الشيء المشترك بين كل هذه النقاط؟ كل واحدة منهم تقسم مصر إلى فئات اعلى وفئات اقل..وللفئة الأعلى امتيازات عن الاشخاص العاديين.

هل ترى ان مصر لا امل فيها لأن الناس جهلة متخلفون ينساقون وراء الشعارات الدينية؟ هل ترى مؤامرة امريكية لن يخرجنا منها إلا البطل الهمام؟ هل ترى مصر مثل الطفل الذي يتنازع عليه ابواه - مبارك والاخوان - بدون ان يكون له اختيار في مصيره؟

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


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

ثم يأتي السؤال: وهل من الواقعية ان نعتبر الناس متساوون؟ أليس فيهم الطيب والشرير، الذكي والغبي، المتحضر والهمجي؟ لماذا ينبغي ان نعيش في تمثيلية ان كل الناس هم امامير قطاقيط فتافيت؟

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

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

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

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

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

المشكلة - مرة اخرى - ان هذا النظام لم يقس على فرص متكافئة. ماذا عن الذين ولدوا في غنى فتعلموا افضل تعليم، واخذوا مالاً من ابائهم لكي يفتحوا شركات. وتحملوا بسهولة الخسارة في اول شركتين فتحوهم حتى تعلموا حسن الإدارة؟ هل نقارن هؤلاء مع الذين ولدوا في فقر مدقع؟

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

الثلاثاء، 17 أبريل 2012

قالوا البرمجة صعبة

احيانا اتحدث عن تعليم الاطفال البرمجة فيقولون: اطفال؟؟ برمجة؟؟

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

احيانا اشعر ان الموضوع جزء كبير منه نفسي. انه لو عرضت عليهم البرمجة في ظروف اخرى كانوا تعلموها فوراً وبكل سلاسة. ما سر هذا الشعور الغريب؟ سأقول لك كيف كنت ابرمج سنة 1991. في تلك الفترة كانت الماوس شيء من الرفاهية، وماذا يصنع الاطفال حين يبرمجون الالعاب؟ لابد من طريقة لرسم الاشكال المتحركة على الشاشة (Sprites). من حس الحظ ان كتب البرمجة كانت تقدم الحل..


ملخص الطريقة:
  • ارسم الشكل في ورقة مربعات 8×8
  • حول كل صف في الرسمة إلى binary
  • حول الارقام إلى hexadecimal باستخدام الجدول المرفق
  • اصنع string مكون من ثمان حروف، كل حرف له ASCII code يمثلها الرقم الhex
  • حول هذا الstring إلى sprite عن طريق الدالة (..)$sprite
نعم يا سيدي، كان الاطفال في سن 12 سنة - ومنهم كاتب هذه السطور - يرسمون على الشاشة بالاكواد الستعشرية.

في تلك الأيام ذهبت مرة إلى امي وقلت لها "تيجي اكلمك عن طرق تمثيل الاعداد في الكمبيوتر...تعرفي عن الbinary؟"
امي: في تكوين الجنين فيه حاجة اسمها الbinary division بتاع الخلايا (امي طبيبة).
انا: لأ دي حاجة ثانية..انتي عارفة في النظام العشري فيه احاد وعشرات ومئات؟ (احضر ورقة وقلماً وابدأ ارسم)
امي (في صوت تربوي حنون): انت مهتم بالكمبيوتر يا محمد؟ طب ايه رأيك لما نرجع مصر ناخذ كورس كمبيوتر؟

لا احد يقدرني ابداً :]

لم اكن فلتة. كان هناك الاف الاطفال المبرمجين في الوطن العربي وخارجه. اشتريت مرة مجلة برمجة للاطفال اسمها ميكرو، وكانوا يتحدثون عن ماوس من ماركة معينة في product review..كانت معها بعض البرامج منها...محرر للاشباح..

تقول المجلة: "لقد انتهى عصر رسم الاشكال الشبحية بواسطة الاكواد الستعشرية؛ الآن يمكنك فتح البرنامج والتكتكة بالفارة في النقطة التي تريد الرسم فيها."

إنه التقدم يا سادة! إنه التقدم!

ويقول لك البرمجة صعبة..ركزوا يا جماعة البرمجة مش صعبة ولا حاجة :)

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

محوران واربع اصناف

هناك محوران قد نصنف بها الناس:

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

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

concept-driven مقابل pragmatic: هذه مقابلة بين الشخص الذي يحكم سلوكه مجموعة من المفاهيم لابد وأن يسير عليها. مثلا كلما فعل شيء يسأل "هل تصرفي ديموقراطي" أو "هل تصرفي متفق مع مباديء الرأسمالية" أو"...الاشتراكية"؛ الخ. يقابل ذلك الشخص البراجماتي الذي يسأل "هل هذا سيحقق لي اهدافي؟ هل هذا في عداد الممكن؟".

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

وهذا بيت القصيد من هذا المقال: اني لا ارى تناقضاً بين أن يكون الشخص يسعى للإصلاح والتغيير والوصول لأفضل الحالات، وبين أن يكون عملياً يعرف ما ينبغي عمله وكيف يحصل على ما يريد (بلا تعديات اخلاقية). اريد ان اقول ان ما اسميه idealist و concept-driven هما شيئان لا شيئاً واحداً.

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

فماذا فعل عمرو بن العاص؟ يبدو انه كان بذكاءه المعروف قد خمن محتوى الخطاب؛ فلم يفتحه حتى وصل لداخل الحدود المصرية؛ ثم فتحه.

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

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

ولكن أعتبر هذه "الإيات" نظريات ظهرت في القرن التاسع عشر، ولا ينبغي السير عليها حرفياً كمباديء. إنها في افضل الاحوال نظريات تقريبية. يمكن الاستفادة منها لكن لا داع لتبنيها كما هي.

ثم ننظر للشارع السياسي: بعد انتهاء الثورة بقليل في 2011 كان هناك خلافات كثيرة حول شكل الدستور، شكل الدولة رئاسية ام برلمانية، وخلافات ايديولوجية كثيرة انستنا جانب براجماتي مهم جداً: اعضاء النظام القديم مازالوا يحكمون!

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

ثم نجد مثلاً هذه الأيام من يرفض قانون العزل السياسي بحجة انه مفصل لشخص واحد (عمر سليمان). انا شخصيا ارى القانون ضروريا ولو لم يرشح عمر سليمان نفسه اصلاً لكن.....ما المانع من قانون مفصل على شخص واحد؟؟ لو كان القانون اسمه الرسمي "قانون منع عمر سليمان من الترشح لأنه قاتل، غير انه حيضيع البلد لو اترشح وفاز" فأنا مؤيد له.

لكن التخلي عن المفاهيم/الconcepts لابد ان يكون بحساب وحذر..هناك فرق بين "كسر القاعدة في الحالات الخاصة" وبين "تجاهل القاعدة تماما". وقتها سنجد انفسنا نكذب، ونتلاعب، ونفصّل عشرات القوانين لاشخاص معينين بمناسبة وبدون مناسبة...لهذا اكتسبت البراجماتية سمعة سيئة كأنها صفة للمستغلين عديمي الاخلاق بينما هي ليست كذلك.

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

السبت، 14 أبريل 2012

لعبة الطيور السعيدة بواسطة مكتبة g4c

صنعت منذ مدة مكتبة اسمها g4c لبرمجة الالعاب. هذا درس سريع فيها. تحتاج إلى Visual C++ لتجرب ويمكنك تحميل المكتبة نفسها هنا:


سوف نصنع اليوم لعبة happy bird..البعض يحب الطيور الغاضبة لكننا نسمع دائما نصائح على غرار "كن ايجابيا"، "تفاءل" لذلك لن نقلد هؤلاء :)

تجهيز البرنامج


أولاً، خذ نسخة من الdirectory المسمى g4c empty project وسمها بإسم مشروعك. هذه هي الطريقة الرسمية لعمل مشروع جديد.

ثانياً، افتح المشروع (اسمه ينتهي بـ .sln) في الفجوال سي++.

ثالثاً: اذهب إلى مربع solution explorer في يسار الشاشة، أو اختر view -> solution explorer، افتح جزء source files، واختر empty.cpp

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

الرسومات


ارسم طائراً وتفاحة وضعهما في ملفين بإسم bird.bmp و apple.bmp وخزنهما في مكان سهل الوصول اليه مثل c:\img

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

وضع الشخصيات على الشاشة


يوجد في g4c مفهوم الsprites (الأشكال الطيفية)؛ وهي صور يمكن تحريكها على الشاشة تمثل شخصيات الالعاب (طائرة، كرة، ثائر، ...). يوجد لديك 30 sprite في البرنامج ارقامهم من 0 إلى 29. لتحميل صورة في احدهم تستخدم الدالة load_sprite.
هذه الدالة تأخذ (1) اسم الملف الذي يحتوي الصورة (2) رقم الsprite المطلوب تحميل الصورة فيه.
void main()
{
 load_sprite("c:/img/bird.bmp", 0);
 load_sprite("c:/img/apple.bmp", 1);
}
لكننا لم نرسم هذه الأطياف بعد! لنفعل ذلك نستخدم الدالة put_sprite، وهي تأخذ رقم الشكل الطيفي وقيم x,y الخاصة بالنقطة التي سيوضع فيها. (x من اليسار، y من الأعلى).
void main()
{
 //write your program ;)
 load_sprite("c:/img/bird.bmp", 0);
 load_sprite("c:/img/apple.bmp", 1);

 int x = rand() % 640;
 int y = rand() % 480;

 put_sprite(0, x, y);
 put_sprite(1, 150, 150);
}


هنا اخترنا قيمة عشوائية من صفر إلى 633 للمتغير x (عن طريق عملية mod)، ومثلها للy من 0 إلى 479 (لأن الشاشة دائما 640×480). ثم نادينا put_sprite لنضع الطيف رقم صفر (الطائر) في المكان العشوائي، بينما التفاحة دائما في المكان 150، 150.

تحريك الطائر


لكي نحرك الطائر سنصنع حلقة متكررة كالآتي:

استمر في الآتي:
اقرأ المفتاح
لو المفتاح المضغوط يمين، حرك الطائر لليمين
لو المفتاح المضغوط يسار، حرك الطائر لليسار

لكي نقرأ المفتاح نستخدم الدالة inkey، وهي تعيد -1 لو لم يكن هناك مفتاح مضغوطا لحظة ندائها، أو تعيد كود لو كان زر مضغوط. ما هي الأكواد؟ هي ثوابت في الويندوز (رقم لكل مفتاح) تجدها هنا

حسناً إذاً...
void main()
{
 load_sprite("c:/img/bird.bmp", 0);
 load_sprite("c:/img/apple.bmp", 1);

 int x = rand() % 640;
 int y = rand() % 480;

 put_sprite(0, x, y);
 put_sprite(1, 150, 150);
 while(true)
 {
  int k = inkey();
  switch(k)
  {
  case VK_UP:
   y -= 3;
   break;
  case VK_DOWN:
   y += 3;
   break;
  case VK_LEFT:
   x -= 3;
   break;
  case VK_RIGHT:
   x += 3;
   break;
  }
  put_sprite(0, x, y);
 }
}
الثوابت VK_... هي الأكواد التي حدثتك عنها. لاحظ ان تغيير قيم الx, y لا تكفي! يجب أن آمر البرنامج ان يعيد رسم الطيف في المكان x,y بواسطة الدالة put_sprite

الآن لو قمنا بتشغيل البرنامج يمكننا تحريك الطائر بالأسهم.
التصادم

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

يعني لو قلت مثلا
register_sprite_proc(myFunc);


فسوف يقوم الg4c - وليس انت - باستدعاء myFunc في حالة أي تلامس لاشكال sprite أثناء تنفيذ البرنامج. لابد لهذه الدالة ان يكون لها مواصفات محددة:
  • Can have any name
  • Return value always of type int
  • Parameters always of types (int, int, void *)
القيمة من نوع * void يمكن تجاهلها، أما الparameters من نوع int, int فهي ارقام الsprites المتصادمة. يعني لو اثناء تشغيل البرنامج تلامس الاطياف 3، 22 فسوف يتم استدعاء هذه الدالة بحيث يكون اول اثنان من الparameters هما [3، 22] أو [22، 3].

لكننا في لعبتنا لن نحتاج لفحص هذه القيم لأنه في حالة تلامس اطياف فليس لدينا اصلا سوى الطائر والتفاحة!
ها هي الكود الجديدة، لاحظ الاجزاء باللون الأحمر!
int myFunc(int s1, int s2, void *)
{
// حنكتب هنا ايه اللي المفروض يحصل لما الطائر يوصل للتفاحة
 return 0;
}

void main()
{
 //write your program ;)
 load_sprite("c:/img/bird.bmp", 0);
 load_sprite("c:/img/apple.bmp", 1);

 register_sprite_proc(myFunc);

 int x = rand() % 640;
 int y = rand() % 480;

 put_sprite(0, x, y);
 put_sprite(1, 150, 150);
 while(true)
 {
  int k = inkey();
  switch(k)
  {
  case VK_UP:
   y -= 3;
   break;
  case VK_DOWN:
   y += 3;
   break;
  case VK_LEFT:
   x -= 3;
   break;
  case VK_RIGHT:
   x += 3;
   break;
  }
  put_sprite(0, x, y);
 }
}
ماذا سيحدث في الدالة myFunc؟ نريد ان نخبر المستخدم انه فاز في اللعبة. لكي نعرض رسالة على الشاشة لابد من استخدام دالة text_out، وهي تأخذ string + مكان x, y الذي سيظهر فيه الكلام. نعدل الدالة myFucn ونترك باقي البرنامج كما هو


int myFunc(int s1, int s2, void *)
{
 text_out("You won!!", 5, 5);
 return 0;
}
ربما تريد أيضاً قراءة دليل الملتمس إلى استخدام الماوس.

الخميس، 12 أبريل 2012

لولا

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

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

قطفات من برنامج د.ابو الفتوح [بصورة مبسطة]

الديموقراطية التشاركية

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

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

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

[المرجع: صفحة 13، البرنامج الانتخابي للتحميل من هنا]

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

غير ان كل حاجة كبيرة وصغيرة تبقى بالانتخاب. العمدة، رئيس الجامعة، رئيس الحي. عشان ما يجيش واحد الناس كلها مش طايقاه وهو قاعد على قلبهم. يا يتعدل يا يمشي!

مكافحة الفساد

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

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

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

[المرجع: صفحة 17]

النهضة الاقتصادية

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

اول حاجة التوزيع العادل للثروات: مصر بلد غنية. شوف ملاعب الجولف ومارينا والفنادق والحفلات وانت تصدق. المشكلة ان فيه ناس بيستفيدو من البلد ومواردها وايديها العاملة ومايرجعوش حق للناس، مثلاً لأن الضرائب على الشركات كلها زي بعضها، مش فارقة الشركة ام مليون والا ام مليار. لأ عاوزين يبقى فيه ضرائب تصاعدية لأن الشركة الصغيرة ممكن تنضر لو دفعت نسبة معينة، بس الشركة اللي قدها 100 مرة مش فارقة معاها اصلاً. ده غير طبعا اللي بيهربوا من الضرايب واللي بياخذوا فلوس البلد برشاوي والكلام ده -- لازم يكون فيه تصرف معاهم.[صفحة 22، 23]

تاني حاجة يبقى اقتصاد انتاجي. ما ينفعش كل ما تحصل حاجة نقول لك السياحة..السياحة..القناة..القناة..، لازم نعمل زي اي دولة محترمة ونصدر وننتج. طب نبتدي ازاي كدة؟ على الاقل ان الدولة تاخذ الموضوع جد، واما تيجي تمول مشاريع تمول اللي يتصدر ويبيع اول حاجة [صفحة 22] ولما ييجوا الاجانب يبنوا مصانع عندنا ما ينفعش يكسبوا واحنا نكسب وخلاص، لازم يكون فيه نقل تكنولوجيا [صفحة 26] -- الصين اصلا دلوقتي تقدر تصنع لنفسها الحاجات اللي كانت بتصنعها لأمريكا، ونشوف الحاجات اللي بتكسب قوي زي برامج الكمبيوتر زي ما الهند عملت ونخلي الدولة تشجعها قوي زي ما الهند شجعتها وجابت منها مليارات. غير كدة نخلي الصناعة في في الأرياف مش بس يعيشوا على الزراعة، بحيث بدل ما تبيع محصولك بالطن ويادوبك تكسب حاجة بالعافية، لأ تحوله لمنتجات صناعية الأول وتكسب منه اكثر بكثير وتشغل البلد معاك [صفحة 27].

المصريون في الخارج

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

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

ولما نعرف المصريين برة توزيعهم عامل ازاي نقدر نكلم الخبراء والباحثين ونعرف نربطهم مع الجامعات هنا، ونعرف نخليهم يعلموا ولاد البلد ويخترعوا لها.[صفحة 40]

هذه مجرد عينة

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

البرنامج الانتخابي للتحميل من هنا