السبت، أكتوبر 30، 2010

الشفافية المرجعية في البرمجة الوظيفية Referential transparency in functional programming

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
من أهم مميزات البرمجة الوظيفية functional programming ما يسمى بالشفافية المرجعية Referential transparency.
لفهم الشفافية المرجعية فينبغي علينا أن نستوعب مفهوما آخر يسمي التأثير أو التأثر الجانبي side effect للبرنامج, و أي برنامج يتفاعل مع العالم الخارجي, كأن يستقبل بيانات من المستخدم, أو يكتب بيانات في ملف, أو يغير في بعض البيانات التي هي مشاع بين أجزاء البرنامج الأخرى (و التي بدورها تمثل حالة state البرنامج الكلي) ...إلخ, فيعتبر له تأثير أو تأثر جانبي.
يمكن اعتبار البرنامج أو العبارة البرمجية expression ذو شفافية مرجعية إذا أمكن استبداله يقيمته من غير أن تتغير النتيجة النهائية, أو بعبارة أخرى إذا أعطَى نفس المخرجات عندما تُعطى له نفس المدخلات. مثال: العملية الرياضية (5 * 5) يمكن استبدالها بـ (25) من غير "تأثير جانبي" على البرنامج, فهي ذات شفافية مرجعية, أما إذا كان لدينا برنامج جزئي function - و ليكن اسمه GetInput(), يأخذ بيانات من المستخدم ليعرض النتيجة بناء على ما أدخله المستخدم, فهذا البرنامج ليس له شفافية مرجعية لأنه عند إعطائه نفس المدخلات (في حالتنا هذه لا شيء) نحصل على نتائج مختلفة تتبع ما أدخله المستخدم؛ فالبرنامج في هذه الحالة له "تأثر جانبي".
لم أفهم بالضبط سبب تسمية هذا المفهوم بالشفافية المرجعية, لكن أخمن أن السبب هو أن البرنامج متى استُدعي من أي مكان سيعطي نفس النتيجة طالما أخذ نفس المدخلات, فالمرجع هنا (البرنامج) فيه شفافية, و لا يتأثر يمن استدعاه... ليتنا نطبق هذا المفهوم في حياتنا السياسية :)
و السلام...

الخميس، أكتوبر 28، 2010

ترجمة كتاب 97 مسألة ينبغي أن يعرفها كل مبرمج 97 things every programmer should know--1


* مقدمة
بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...

فكتاب 97 مسألة ينبغي أن يعرفها كل مبرمج فيه فوائد متفرقة, على طريقة صيد الخاطر, كتبها مبرمجون كثر. و من مراجعات الكتاب على موقع أمازون بدى لي أن الكتاب جيد , و يفيد أكثر المبرمجين المبتدئين.
و الجميل في الكتاب أنه يمكن قراءته كاملا من على موقعه, و الأجمل أن هناك مسائل أخرى - على نفس الموقع أيضا - فيها زيادة فائدة, و ليست مطبوعة في الكتاب.
فأحببت أن أترجم الكتاب (و إن شئت فاعتبره تلخيصا أيضا) لكن بالطبع أتصرف في الترجمة و لا أتقيد فيها بالحَرْفية ...و لا حول و لا قوة إلا بالله.
و الآن, مع المسألة الأولى...

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

الأربعاء، أكتوبر 27، 2010

البرمجة الثنائية Pair Programming

* مقدمة
بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
فالبرمجة الثنائية Pair Programming هي أن يجلس اثنان من المبرمجين على حاسب واحد ليكتبا برنامجا واحدا: أما أحدهما - و هو القائد driver - فيكتب البرنامج و أما الأخر - و هو المراجع أو المراقب observer - فيدقق فيما يُكتب و يتابع سير العمل. و يتبادل المبرمجان القيادة و المراجعة فيما بينهما من حين لآخر.
و البرمجة الثنائية هي إحدي الطرق المستخدمة في تطوير البرمجيات السريعة أو المرنة Agile Software Development و أحد أهم تطبيقات البرمجة القصوى Extreme programming في هندسة البرمجيات.

* إحصاءات [1]
  • أظهرت دراسة سنة 1998 أن البرمجة الثنائية تقلل وقت البرمجة بنسبة 40% بينما تزيد مجهود المبرمجين بنسبة 60%.
  • دراسة أخرى سنة 2000 أن البرمجة الثنائية تؤدي إلى تحسن في دقة البرنامج correctness و خلوه من الأخطاء و الثغرات البرمجية bugs بنسبة 15%, و كذلك أظهرت أن وقت البرمجة يقل بنسبة 20% إلى 40%, لكن في نفس الوقت تؤدي البرمجة الثنائية إلى زيادة في المجهود المبذول بنسبة 15% إلى 60%!
  • أظهرت دراسة ثالثة سنة 2006 أن البرمجة الثائية نسبة إلى البرمجة الفردية تؤدي إلى تحسن ملحوظ في الإنتاجية إذا كان كلا المبرمجين مبتدئين. أما إذا كان كلا المبرمجين محترفين فإن هناك تحسن و لكن ليس بذات النسبة العالية.
  • أظهرت دراسة رابعة سنة 2007 أن البرامج المعقدة تتحسن جودتها بنسبة 48% بتطبيق البرمجة الثنائية, و لكن لا يتأثر وقت الإنتاج. بينما البرامج البسيطة يقل وقت إنتاجها بنسبة 20% عند تطبيق البرمجة الثنائية و لكن لا يحدث تحسن ملحوظ في دقة البرنامج correctness.
  • أظهرت دراسة خامسة سنة 2008 أن البرمجة الثنائية تظهر فائدتها القصوى عند تصميم البرامج (يعني التصميم الهندسي و ليس التصميم الفني)
  • و في سنة 2007 أظهرت بعض التجارب أنه حتى بتطبيق أسلوب البرمجة الثنائية لا يمكن تنفيذ برامج دقيقة و رخيصة بسرعة؛ فالبرامج المعقدة تتطلب دائما مجهودا أكثر, و تنفيذ برامج بسيطة بسرعة دائما يؤثر على دقة و جودة هذه البرامج. و خلاصة هذه التجارب أن البرمجة الثنائية ليست دائمة هي الحل الأفضل لكل مشكلات البرمجة.

* المميزات
  • البرامج الناتجة عند تطبيق أسلوب البرمجة الثنائية تُنفذ أسرع. و تكون أقصر, و أبسط, و أجود من ناحية التصميم الهندسي, و أكثر تنظيما مما يسهل تعديلها أو إصلاحها لاحقا, و تحتوي على أخطاء أو ثغرات برمجية bugs أقل, من نظيراتها الناتجة عن البرمجة الفردية.
  • تتيح البرمجة الثنائية نقل الخبرات (سواء خبرات البرمجة العامة أو الخاصة بالبرنامج نفسه) بين المبرمجين.
  • يمكن تطبيق البرمجة الثنائية بصورة خفيفة, حيث يمر كل مبرمج في فريق العمل على كل زملائه واحدا تلو الآخر ليعملا سويا بالطريقة الثنائية؛ و هذه الطريقة تفيد في نقل معلومات و خبرات الفريق بين بعضهم بعضا, و تقلل من تأثير ترك أحد المبرمجين للفريق.
  • البرمجة الثنائية تساعد كلا المبرمجَين في التركيز و عدم تضييع وقت العمل. كما أن الناس عادة لا تقاطع من يظنون أنهم مجتمعون للعمل (كما في حالتنا حيث يجتمع اثنان من المبرمجين للعمل سويا) إلا للضرورة.

* العيوب
  • بالرغم من أن البرمجة الثنائية تقلل من وقت تنفيذ البرنامج, إلا أنه بجمع وقتي المبرمجَين تكون محصلة الوقت المستغرق أعلى مما لو نفذ البرنامج مبرمج واحد. و هذا بالطبع بعني أن المجهود المبذول أكثر.

* متى تستخدمها؟
  • عندما يكون البرنامج معقدا أو غير واضح المعالم أو يستلزم الكثير من الإبداع, فيتوقع تحسن في النتائج عند تطبيق البرمجة الثنائية.
  • عند إدخال مبرمج جديد في الفريق, تكون هذه الطريقة مفيدة جدا في تسريع توافق فهم العضو الجديد للبرنامج و لطريقة عمل و تنظيم الفريق.

* متى تتجنبها؟
  • عندما يكون البرنامج بسيطا و واضح المعالم لكلا المبرمجين, فإن تطبيق البرمجة الثنائية يؤدي إلى انخفاض في إنتاجية المبرمجين.
* نصائح
  • قبل البدء, لا بد من تحديد هدف واضح يمكن إنهاؤه خلال ساعة أو ساعتين. و يفضل كتابته و كتابة الخطوط العريضة لتحقيقه.
  • إذا كنت القائد (الذي يكتب على لوحة المفاتيح) فركز فيما تكتبه, و لا تشتت ذهنك, و اعتمد على زميلك المراجع في تدقيق ما تكتب. و لا تأخذ تعليقاته بمحمل شخصي, فالأخطاء و تصويبها طبيعة في البرمجة و لا تدل على نقص قدرات المبرمج.
  • إذا كنت المراجع, فانتبه جيدا لما يكتبه زميلك, و حاول اكتشاف الأخطاء أو التغرات البرمجية bugs, و فكر في كيفية تبسيط و تحسين البرنامج. و لا تقاطع زميلك القائد كلما عنّ لك شيء - حتى لا تفقده تركيزه, بل دونه في ورقة, فإذا ما انتهي زميلك مما يكتب (على الأقل السطر الذي هو فيه), فأخبره عما عنّ لك. و ترفق بزميلك و لا تتهكم عليه إن بدا لك خطأ فيما يكتب. و تذكر أخيرا أن دور زميلك القائد ليس كتابة ما تمليه عليه حرفيا, فأخبره عما تريد و لا تشغل بالك بتفاصيل تحقيقه, فزميلك القائد مبرمج أيضا!
  • تناقشا كثيرا حول الأفكار و البدائل و الثغرات المحتملة و كل ما من شأنه تحسين و تبسيط البرنامج. و يتبع حسنَ الكلام حسنُ الاستماع؛ فلا تنشغل عن زميلك - بالأكل مثلا - و هو يتحدث, بل أنصت جيدا لما يقول.
  • إذا تاه أحدكما من الآخر فلم يعد يدري ما يحدث, فتوقفا ثم تأكدا أنكما تقفان على أرض واحدة (يعني عدتما لفهم بعضكما ثانية) ثم استكملا.
  • في بعض الأحيان يكون من الأسهل أن يكتب المراجع جزءا في البرنامج بنفسه بدلا من أن يشرح وجهة نظره لزميله القائد ثم يقوم القائد بالكتابة, و لا بأس بذلك, بل يفضل أن يتبادل الزميلان الأدوار(القيادة و المراجعة) كل نصف ساعة أو ساعة مثلا؛ و بذلك لا يُرهق المراجع من كثرة التركيز, و لا يمل القائد من كثرة الكتابة.
  • المبرمج الأقل علما بالبرنامج أو بلغة البرمجة (أو الأقل خبرة على العموم) يكون قائدا(يكتب على لوحة المفاتيح) أكثر من كونه مراجعا, فالمرء يتعلم من أصابعه أكثر مما يتعلم من عينيه!

* مصادر استفدت منها في كتابة هذه المقالة (مرتبة حسب الأهمية)
---------------------------------------
[1] ملحوظة: النسب المقاسة بين وقت و مجهود مبرمج واحد أو اثنين لتنفيذ نفس البرنامج. و التغير في النسب تابع لتعقيد البرامج و خبرة المبرمجين.

الجمعة، سبتمبر 17، 2010

قصيدة كاميليا شحاتة...الشيخ حامد العلي

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

الأربعاء، يوليو 14، 2010

آفاق البرمجة


بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
فمنذ أن بدأت العمل في البرمجة منذ بضع سنين, ما مر بي يوم إلا و يفتح علىّ فيه ربي من علوم البرمجة شيئا جديدا و هو الفتاح العليم.
و مرت بي الأيام على هذه الحال حتى ظننت أني على شيء, و ما كدّر علي هذا الظن إلا أمران:
  • الأول: أني ما قابلت مبرمجا هو أقل مني في الخبرة أو في الكفاءة إلا و تعلمت منه شيئا جديدا لم أكن أعرفه من قبل!
  • و الثاني: أني قلت لنفسي ذات يوم: هلم نرُوز (نختبر) ما لديّ من علم, بالإجابة على أسئلة المبرمجين, فيممت وجهي إلى موقع شهير هو "ستاك أوفر فلو stackoverflow " و اشتركت فيه بالفعل, و بدأت أتابع الأسئلة التي ترِد إلى الموقع و أجيب عما أعرفه منها. و ما هي إلا أيام قلائل حتى أدركت أن "فوق كل دي علم عليم" و صار لسان حالي كما قال الشافعي:
كلما أدبني الدهر أراني نقص عقلي .... وإذا ما ازددت علماً زادني علماً بجهلي
فلما هممت باستدراك ما فاتني من علوم البرمجة, كان لزاما علىّ أن أحدد أولا "آفاق" هذه العلوم, ثم أحدد ثانيا ما الذي ينقصني منها, ثم أبدأ في تعلمها تباعا... و الله المستعان.
أما الخطوة الأولى - و هي تحديد آفاق البرمجة - فهي ما أحببت أن أشارككم فيه في هذه المقالة...فهيّا....
1- لكي يتعلم المرء البرمجة, فأول ما يبدأ به هو تعلم لغة برمجة مثل السي C أو السي بلس بلس C++ أو السي شارب C# و الجافا Java...إلخ, فأي هذه اللغات تتعلم؟ أجبت عن هذا السؤال من قبل, فليراجَع.
2- أي لغة برمجة - فيما أعلم - يصحبها برمجيات معدة سلفا لكي يستخدمها المبرمج فتوفر عليه الكثير من الوقت, و هذه البرمجيات تسمى مكتبات libraries, أو هياكل Frameworks. و من أمثلة ذلك مكتبة السي القياسية C Standard Library و هيكل الدوت نت .NET Framework
3- يمكنك كتابة البرنامج بأدوات بسيطة مثل النوتباد Notepad ثم إتباع ذلك باستخدام أدوات أخرى تحوّل نصوص البرامج إلى برامج فعلية, لكن هناك برمجيات قوية تسهل عليك كثيرا مراحل إنتاج البرنامج بداية من كتابته و وصولا إلى برنامج التشغيل النهائي Executable. هذه البرمجيات تسمى بيئات التطوير المتكاملة Integrated Development Environments. و من أمثلتها الشهيرة فيجوال ستوديو Visual Studio و إكلبسEclipse.
4- أي برنامج ستعمله, سيكون فيه بيانات أو معلومات تحتاج إلى تصنيف يسهل استخدامها و معالجتها. أما كيفية التصنيف المثلى للبيانات و المعلومات, فهذه يهتم بها علم "هياكل البيانات Data structures". أما الشق الثاني - هو معالجة البيانات, فهذا ما يهتم به علم الخوارزمات Algorithms. هذا العلم يشرح لك أفضل الخطوات اللازمة لترتيب البياناتSorting , و كيفية البحث فيهاSearching, و كيفية ضغطهاCompression, و كيفية تشفيرهاEncryption...إلخ.و يضع لك معاييرالترجيح بين الطرق المختلفة لحل نفس المشكلة. لكن ما هي الخطوات اللازمة لمعالجة البيانات بطريقة أخرى غير التي ذكرِت؟ هذا ما يهتم به علم آخر هو "كيفية تصميم الخوارزمات Algorithms design
5- كل ما ذكر في النقطة السابقة عن تصنيف البيانات و معالجتها, إنما قصدت به عمل ذلك في ذاكرة الحاسب, يعني أثناء فترة عمل البرنامج. أما أن يكون لديك بيانات و معلومات كثيرة جدا و تحتاج أن تحتفظ بها في مكان ما و تسترجعها بعد ذلك كما تشاء, فيبدو أنك تتحدث عما يسمى "قواعد البيانات Databases", و أشهر الأساليب المتبعة نظم إدارة قواعد البيانات Database Management Systems أسلوب قواعد البيانات العلائقية Relational Databases, و هذه باختصار تقول لك ضع البيانات في جداول Tables و حدد العلاقات بين هذه الجداول Relations بما يسهل لك معالجتها و استرجاعها فيما بعد. هناك برامج إدارة قواعد بيانت كثيرة, أشهرها أكسس Access لقواعد البيانات الصغيرة, و مايسيكويل MySQL لقواعد البيانات المتوسطة, و سيكويل سيرفر SQL Server و أوراكل Oracle لقواعد البيانات الكبيرة. و لكي تتعامل مع قواعد البيانات ستحتاج إلى لغة خاصة تسمى إس كيو إل SQL, و كذلك ستحتاج إلى معرفة الأساليب العلمية لتصميم قواعد البيانات العلائقية Relational Database design principles.
6- أفضل ما توصل إليه المبرمجون في طرق البرمجة: البرمجة الكائنية المنحى Object Oriented Programming, و هذه باختصار طريقة تنظيمية تسهل إعادة استخدام البرمجيات التي أعددتها من قبل و تسهل المحافظة على تماسك البيانات إلى حد بعيد. و لكي ترى أمثلة فعلية لكيفية تطبيق هذه الطريقة, يمكنك الاستعانة بعلم نماذج التصميم Design patterns, و هذا يعطيك نماذج استرشادية تعينك في تصميم برامجك.
7- يرتبط بالنقطة السابقة علم التحليل و التصميم الكائني المنحى Object Oriented Analysis and Design, و هذا باختصار يسهل لك تحليل مدخلات البرنامج و وظائفه ثم تصميم البرنامج بطريقة تسهل برمجته بالأسلوب الكائني المنحى.
8- لأن الصورة قد تفيد أكثر من الكلام و الكتابة, فقد ابتكر المبرمجون أشكالا ثمثل أجزاء البرامج و تفاعلاتها مما يسهل فهم البرنامج من غير الولوج في تفاصيل نصوصه البرمجية source code, و هذه الأشكال لها ارتباط وثيق بالبرمجة الكائنية المنحى Object Oriented Programming. فجمعوا كل هذه الأشكال من بعضهم البعض و صاغوها في إطار واحد أسموه لغة التصميم الموحدة Unified Modeling Language (UML).
9- إنتاج البرامج يمر بمراحل متعددة بدءا من تحديد وظائف البرنامج requirements . و مرورا بتصميمه design و برمجته development و اختباره testing و في النهاية تشغيله deployment و صيانته maintenance (أعلم أني أغفلت بعض الأشياء هنا للاختصار) و كل مرحلة من هذه المراحل تعتبر فنا قائما بذاته و ألُفت فيها الكتب الكبار, و كلها تندرج تحت علم هندسة البرمجيات Software Engineering. لكن ما أحب أن أشير إليه هنا أن هناك طرقا متبعة في إدارة عملية إنتاج البرامج, أشهرها الطريقة التقليدية Waterfall model و هذه تقول لك لا تدخل في مرحلة قبل أن تنهي التي سبقتها, و الطرق المرنة Agile و هذه تقول لك امزج بين هذه المراحل بما يحقق لك المرونة الكافية لتدارك التغيرات التي تطرأ على وظائف البرنامج.
10- عندما يكون برنامجك صغيرا نسبيا أو يعمل مع عدة حاسبات قليلة متصلة ببعضها, فغالبا سيكفيك ما ذكرت لك آنفا, و في هذه الحالة أنت تطور برامج تسمى "برمجيات سطح المكتب Desktop applications. لأنها تعمل على الحاسبات الشخصية كبرامج قائمة بذاته. و أشهر لغات البرمجة المستخدمة في مثل هذه البرامج: السي شارب C# لبرامج الويندوز Windows. و الجافا Java للبرامج التي تعمل على عدة نظم تشغيل.و هذه النوعية من البرمجيات آخذة في التآكل, راجع ما كتبته من قبل عن اتجاهات البرمجة في للعام 2010.
11- عندما تحتاج إلى برنامج يعمل على حاسبات تبعد عن بعضها آلاف الأميال, و لا يربط بينها رابط, فحتما ستتوجه لطريقة أخرى في عمل البرنامج, هذه الطريقة هي برمجيات الويب Web applications و خدمات الويب Web services, و من الصيحات الآن أيضا ما يسمى بالحوسبة السحابية Cloud computing. و باختصار, عمل مثل هذه البرامج يحتاج إلى البرمجة على جهتين:
  • الجهة الأولى جهة المستخدم, يعني عمل برامج تعمل داخل متصفح الإنترنت Internet browser و هذه تسمى البرمجة جهة العميل Client side scripting. و من أشهر لغات البرمجة المستخدمة في هذه الجهة: إتش تي إم إل HTML, و السي إس إس CSS, و الجافا سكربت Javacript. (قد تجوزت شيئا ما في اعتبار كل هذه اللغات لغات برمجة, فليراجع لزاما ما كتبت من قبل عن لغات البرمجة المكتملة و معيار تورنغ).و هذه الجهة تعتبر واجهة استخدام للبرنامج الفعلى الذي يوجد في الجهة الثانية و التي تسمى بالبرمجة جهة الخادم Server side scripting . و من أشهر اللغات المستخدمة في هذه الجهة إيه إس بي دوت نت ASP.NET بفروعها المختلفة, و البي إتش بي PHP و الروبي مع الريلز Ruby On Rails. و يرتبط ببرمجة الويب تقنيات أخرى مثل الإكس إم إل XML و توابعها و هي مستخدمة في نقل البيانات بين البرنامج و المتصفح,. كذلك هناك تقنيات تيسر عمل برمجيات للويب لتبدو و كأنها برمجيات سطح المكتب التي ذكرتها في النقطة السابقة, و هذه تسمى برمجيات الإنترنت الغنية Rich Internet Applications(RIA) مثل تقنيات الأجاكس Ajax و الفلاش Flash و السيلفرلايت SilverLight
12- من فوائد برمجيات الويب أنها يمكن استخدامها على معدات غير الحاسبات الشخصية PC, و أعني تحديدا الهواتف الجوالة, و هذه الجوالات لها نوع آخر من البرمجة - و إن كانت تتبع نفس الأساليب التي ذكرتها آنفا- لكن يحسن بنا أن نعرج عليها بشيء من التفصيل لأهميتها في هذا العصر. أقول: أهم المتصارعين في حلبة برمجيات الجوالات: شركة أبل Apple و جوالها آي فون iPhone, و هذا يُبرمج عليه بلغة أوجكتف سي ObjectiveC,و شركة غوغل Google و نظامها أندرويد Android, و هذا يُبرمج عليه بالجافا Java. و شركة نوكيا Nokia و نظامها سيمبيان Symbian و هذا يُبرمج عليه بالسي بلس بلس C++. و شركة مايكروسوفت Microsoft و نظامها ويندوز موبايل Windows Mobile و هذا يبرمج عليه بلغات الدوت نت .NET,....إلخ.
13- المعدات التي تطالها البرمجة ربما تكون أصغر من الجوالات, مثل الشرائح الإلكترونية electronic chips الصغيرة جدا التي توجد في السيارات مثلا, و هذه عادة ما تُبرمج بالسي C. بل تطال البرمجة ما هو أصغر من ذلك,: الكروت الذكيةSmart cards مثل شرائح الجوال و بطاقات الائتمان ...إلخ و هذه عادة ما تبرمج بالجافا Java.

أحسب أني أطلت عليكم, و لو استرسلت في الحديث عن آفاق البرمجة أكثر من ذلك لاحتاج الأمر منى إلى طول وقت و منكم إلى طول صبر, لكني أكتفي بهذا القدر ففيه دلالة على الأبعاد الحقيقة للبرمجة... و الله المستعان.

الثلاثاء، يونيو 22، 2010

الخديوي عباس الأول- رحمه الله-

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
فمن الذين شُوهت صورهم في تاريخنا: الخديوي عباس الأول-رحمه الله- فقد وُصف عصره بأنه رجعية و نعت شخصه بالظلم و الطغيان...و كيل له الذم كيلا. و الحق أنه رجل صالح, و هذه ترجمة موجزة له - رحمه الله-
فهو عباس بن طوسون بن محمد علي, ثالث الولاة من أسرة محمد علي بمصر, ولد بجُدة, و نشأ بمصر, و تولى الحكم بعد وفاة عمه إبراهيم باشا في أواخر سنة 1264هـ, و كان شديد البغض للأوروبيين حذرا من دسائسهم, أنجد الترك العثمانيين بخمسة عشر ألف مقاتل في حربهم مع الروس, المعروفة, بحرب القرم...
و في أيامه نُفي السحرة و الدجالون و المشعوذون إلى السودان, و قد قتل بقصره في بنها سنة (1270 هـ, 1845م) - رحمه الله تعالى -.
و قد تربى تربية دينية شرقية, و عُرف عنه بغضه للفرنساويين, بلغ به الأمر إلى أن عمل على إيقاف إيفاد البعثات إلى فرنسا, و اتخذه الأوروبيون عموما - و لا سيما فرنسا - التي كانت تعرف بغضه لها - هدفا لسهامهم.
و لذلك يقول عنه بروكلمان: "إنه كان مسلما متعصبا يزدري التربية الأوروبية ازدراءا بعيدا" و يتهمه بأنه كان طاغية, و الحق أنه كان متدينا تقيا.
و مما يدل على تدينه أنه كان الوحيد من أولاد "محمد علي" الذي كان يتردد إلى المساجد في شهر رمضان لاستماع الدروس و المواعظ الدينية, و في أيامه لم يكن أحد يستطيع أن يسير في الشوارع وقت الصلاة و إلا تعرض لسياط "الشاويشية" الأتراك, جنود عباس, و فيما عدا عباسا كان أبناء "محمد علي" جميعا يميلون إلى أبيهم "محمد علي الكبير" و يتبعون سياسته في الحكم مائلين إلى الغرب. ا.هـ بتصرف نقلا عن "خواطر حول الوهابية" للشيخ محمد إسماعيل المقدم - حفظه الله-

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

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
قال الشيخ محمد بن إسماعيل المقدم - حفظه الله - في كتابه "خواطر حول الوهابية":
يقول الأستاذ محمد جلال كشك: (هناك نقطة نريد أن نتوقف عندها قليلا, و إن كان جميع المؤرخين قد تفادوها بحسن نية و براعة يحسدون عليهما..! ألا و هي موقف السعوديين من الغزو الفرنسي لمصر... لماذا لم يساعدوا الدولة العثمانية, أو الشعب المصري في مقاومته للاحتلال الفرنسي؟ و هذه هي أول حملة صليبية في العصر الحديث, و أول احتلال سافر من الاستعمار الأوروبي, و مقاومة باسلة من بلد عربي...هي مصر عُشٌّ العلماء كما يسميها الشيخ محمد بن عبد الوهاب...
لنبدأ بالحملة الفرنسية على مصر... التي دامت من عام 1798 إلى 1801, و في تلك الفترة كان الأشراف يشكلون حاجزا بين الدولة السعودية و المقاومة في مصر, و ذلك بسيطرتهم على الحجاز.
و لكن جماهير المسلمين في الجزيرة اشتركت على نحو بارز في دعم المقاومة المصرية للاحتلال الفرنسي رغم إرادة الأشراف, و رغم علاقتهم الطيبة مع الفرنسيين, ... قال هيرولد: "كان أرهب إمداد وصل للمماليك, هم المقاتلون القادمون من الحجاز, الذين عبروا البحر الأحمر بالألوف, و قد تبين أن كثيرا منهم من الحجاج المغاربة, ولكن أكثرهم - و أشدهم تعصبا بالطبع - عرب خُلّص من شبه الجزيرة").
يقول الأستاذ أحمد رائف في "الدولة السعودية":
(وقد رأيناهم - أي السعوديين - يدافعون مع المصريين ضد الفرنسيين إبان الحملة الفرنسية في سبيل الإسلام, و رأيناهم مرة أخرى على أسوار رشيد يدافعون ضد حملة فريزر الإنجليزية عام 1807م, حتى منعهم و غيرهم باشا مصر, و أفهمهم أن حق الحرب و القتال و الدفاع ليس مباحا لأي أحد, بل هو خالص للأتراك و الأرناؤوط...إلخ) . ا.هـ. نقلا عن "خواطر حول الوهابية.