1. شرارات لإنتاج لغة برمجة

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

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

    القرش

    مع تقدمي في مجال البرمجة انتقلت إلى لغة التجميع (لغة الآلة) و منها استطعت قراءة البيوس Bios للجهاز و قراءة طريقة عمل لغة البرمجة Basic على نفس الجهاز، مع قراءتي لها كانت تخطر على بالي أفكار أكثر (ماذا لو كان) و (ماذا لو عملنا كذا) و هكذا وجدت نفسي بدأت بكتابة لغة برمجة جديدة تختلف عن البيسك و إن كانت أول الأمر متخلفة جدا عنها.

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

    كانت مجرد بداية و انتهت فورا عندما تعرفت على الاجهزة الأحدث و اكتشفت كماً هائلا من لغات البرمجة الموجودة مسبقاً لم أعرفها من قبل و لكن “القرش” كان سببا في اختياري لغة البرمجة التي تناسبني، عندما كان الخيار بين الـ Pascal و الـ C استقر رأي على لغة Pascal، و هكذا صار “القرش” الشرارة الاولى للرغبة في صنع لغة برمجة  وفي  اختيار لغة برمجة.

    التعريب

    مع دخول الانترنت اصبح الاطلاع على عمل الآخرين أسهل و خاصة مع المصادر المفتوحة، وقع ذلك الوقت بين يدينا أنا و صديقي في العمل(1) مصدراً للغة بيسك مكتوب بلغة الدلفي، كانت قراءة المصدر سهلة و بسيطة بحيث لمعت لنا فكرة تعريبها من باب المتعة، قمنا فقط باستبدال الكلمات الانكليزية إلى كلمات عربية و حرصنا على استخدام كلمات لا تحتاج إلى همزة أو تنوين مثل Print إلى “اطبع” بدون همزة، أو If إلى “اذا” و Then إلى “اذن” لتفريقها عن “إذا“، كان الهدف هو التبسيط ليس إلا.

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

    فكرة تعدد اللغات البشرية و التحويل بينها ضمن لغة برمجية واحدة عبر ترجمتها Compile اولا ثم عمل Decompile، ادى إلى وجوب الاحتفاظ بالملاحظات ايضا، و لكن لن نستطيع ترجمة الملاحظات إذ ستبقى باللغة الاصلية التي كُتبت بها.

    هذا الاسلوب يتطلب الاستغناء عن اكبر قدر ممكن من الكتابة البشرية، مثل procedure و function و void و var أو حتى if، عندها بدأت بوضع القواعد عبر المزج بين لغة Pascal و C و لغات برمجية أخرى التي غالباً مشتقة من صيغ اللغة C.

    البحث

    منذ ذلك الوقت كل عدة اشهر ابحث عن هذه اللغة، ادعو ربي أن يقوم أحد المبرمجين الخارقين بكتابة ما يشبه ما ارغب به، و بنفس الوقت أضع لها شروط القبول بالنسبة لي، أول ما أنظر اليه هل يوجد void او function او var، إذا كانت موجودة في اللغة التي أقرأ عنها فستسقط من حساباتي.

    تلك اللغة البرمجية التي في دماغي في بداية الامر أطلقت عليها اسم nop_code، ثم قررت إعطاءها اسما عربيا، هو ترجمتي لكلمة script لأني إذا كنت من سيصنعها فستكون مكتوبة بلغة باسكال و ستكون حتما لغة script كما هو الحال في php و اللغات المشابهة، اخترت اسم “سرد” أو “sard” كترجمة لكلمة script و في نفس الوقت بعيدة عن اللفظ الثقيل للقاريء الاجنبي.

    التحدي

    عند تعلمي لبرمجة اندرويد كان لابد لي من استعمال لغة جافا، صادفني مشاكل بفهم ال scope فيها وهو مختلف عن اسلوب اللغات Pascal و ال C.

    دخلت إلى مجتمعهم عبر المحادثة Chat، فسألني احد المبرمجين اذا كانت اعجبتني لغة الجافا، فاخبرته بـ “لا”، اخبرته طالما وجدت “void” فهي لن تعجبني، و دخلنا في ذلك النقاش بأن هذا الامر غير ممكن منطقيا، كانت الاشكالية بالنسبة له هو التعارض بتفسير Parsing النص، و بما اني قادم من الباسكال لا من السي (وهذا ما اخبرته) فكان اعتقادي باننا اذا وضعنا تعريف المتحول او التابع (الدالة) بعد اسم المتحول و ليس قبلها فسوف تُحل المشكلة.

    طبعا لم اجادل كثيرا إذ تعلمت مع الزمن “ما حك جلدك مثل ظفرك” اي انني لا استطيع اثبات اي شي إلا بيدي وأن اقبل التحدي.

    الآلة الحاسبة

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

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

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

    الماضي

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

    أخيرا

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

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

    More…


  2. افكار فاشلة لمختبر ألكترونيات للصغار

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

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

    قديماً

    مختبر قديم

    مختبر قديم، الصورة من ebay

    بالنسبة لي بدأت حياتي في الألكترونيات من هدية قدمت لي عندما نجحت إلى الصف السابع، (كنت حوالي 12 سنة)، علبة خشبية تحوي مختبر مشاريع، و هي لوحة بلاستيكية متوضع عليها راصورات (زنبلك) مرصوصة و كل اثنين منها موصول بقطعة ألكترونية مرسوم شكل الرمز للقطعة الالكترونية  بينها، شي شبيه لما في الصورة و هي مأخوذة من موقع EBay للقطع القديمة، فهي ليست لي.

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

    من أهداني إياها (رحمه الله) أهداني معها كتاب تعليم القطع  الالكترونية يحوي 200 دارة بسيطة ليست تابعة للمختبر، منه أخذت اسماء القطع و بدأت تجميعها في صغري. قمت برد جميله فيما بعد  بإهداء قطع إلكترونية عبارة عن كاوي و مقياس الجهد (آفو) و لوحة BreadBoard و مجموعة من القطع الألكترونية و كتاب  و غيرها كمجموعة كاملة جديدة لأكثر من واحد من اقاربي.

    حديثا

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

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

    التماسيح (مريعة)

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

    الكباسات (مقبولة)

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

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

    تعديل: وجدت ان اسم الكباسة بالانكليزي Snap Button و بالبحث وجدت هذه اللوحات للاطفال أيضا و شكلها جيد، و يمكن تطبيقها بسهولة، لذلك قمت بتعديل الفكرة من (فاشلة إلى مقبولة) على أن ارجع لفكرة الكباسات في تدوينة ثانية تكون التجربة فيها ناجحة إن شاء الله.
    http://www.snapcircuits.net

    المشبك (فكرة فاشلة)

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

    الفكرة عمليا فشلت فشل ذريع.

    المجس (فكرة فاشلة جزئيا)

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

    في الصورة صورة المجس قبل و بعد تركيبه.

    استعمالات المجس

    استعمالات المجس

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

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

    استعمالات المجس

    علبة بضاريات AA مع مفتاح و باقي القطع

    سماعة

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

    علبة السماعة

    الشكل النهائي للعلبة مع مدخل أنثى للمجس.

    لوحة الاختبار بريدبورد (ايضا فاشلة)

    mini-bread-boardلوحة الاختبار BreadBoard مشهورة جدا، عندي منها منذ ان كنت صغيراً، و لكن ما كنت لافرط فيها و أضعها بين أيدي أولادي.

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

    هذا النوع من اللوحات يحتاج إلى كتاب مرفق عليك شرائه من المكتبة، عندي الكتاب القديم الذي استعملته وانا صغير، لكني اكتشفت ان القطع التي فيه (الترانزستورات والـدارات المتكاملة ICs) لم تعد متوفرة في السوق، بالبحث على الانترنت وجدت هذا الموقع 200 Transistor Circuits فيه الكثير من الدارات البسيطة و عناصرها أغلبها متوفرة.

    حقيبة لوحات الاختبار

    حقيبة لوحات الاختبار

    ميكانو

    حقيبة ميكانو

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

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

    مع-ميكانو

    محرك مفكوك من لعبة مكسرة ركب مع قطعة ميكانو

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


  3. ذكرى: أول خطوة لي في عالم البرمجة

    أول حاسب اشتريته كان حاسب ZX Spectrum عام 1968 كان عمري 15 تقريبا.

    sinclair-invoice

    و أول سطر كتبته عند اول تشغيل لم يكن سطرا برمجيا لأني كنت اظن انه مثل الآلة الحاسبة يكفي ان اكتب 10+10 ليظهر الناتج لكنه لم يستجب و اعطاني عطلا كما في الصورة.sinclair1010

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

    كانت PRINT اول تعليمة تعلمتها تشبه اول كلمة تسمعها من طفلك، و مازال لها نفس الوقع كلما قراتها.

    اول لغة برمجة تعلمتها كانت BASIC و بعدها بسنة تعلمت لغة الآلة Z80 و كتبت لها بلغة التجميع Assembly.


  4. الهدف هو تبادل الفائدة.

    لو كان وردبريس يقيس مقدار فائدة القرّاء للمدونات لكنت نشرتها، و اهم سبب لي للتدوين هو نشر الفائدة مقابل الفائدة التي اتلقائها من مدونات أخرى و مقالات اجدها على الانترنيت، كنوع من رد الجميل و ألا اكون انانيا.

    و كل عام و انتم بخير


  5. تربية الاطفال: نجوم وإكسات

    StarsAndXesهذه التدوينة تعقيب على تدوينة اخي “معتز” تعليم اﻷطفال في البيت بكل الوسائل

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

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

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

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

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

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

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

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

    عليكم عدم التراجع امام  الضغوطات مهما كانت، و اترك الباقي لخيالكم 🙂


  6. الصورة الشخصية

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

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

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

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

    avatar1

    avatar2

    الصور ملتقطة بعدسة سوني اريكسون X1 تم تصغيرها و قطع ما لايخص الموضوع للخصوصية.


  7. نظرية التطور

    apple-timelineالقرن الماضي

    حدثت هذه القصة في القرن الماضي تقريبا قبل عشرين سنة عندما دخلت الجامعة، كلية التجارة، و على وجه التقريب عام 1991 عندما كانت اجهزة الحاسب (الكومبيوتر) PC ذات شاشات خضراء و ربما مونوكروم، و عندما لم يكن هنالك هارديسك كانت مجموعة من الاقراص المرنة و المرنة جدا من القياس الكبير.
    مكتبة الأسد بما اني كنت طالبا في كلية التجارة و لم يكن لدي جهاز كومبيوتر من النوع الغالي، و بعد ان فهمت كل شي في جهازي الصغير سنكلير، من البيسك إلى لغة الآلة إلى المقاطعات interrupts و هذه كانت آخر شيء تعلمته فيه و لم يكن بعدها شي ممكن ان تتعلمه, قررت الذهاب إلى “مكتبة الاسد” التي فيها جهازي كومبيوتر للطالاب، فهي مكتبة عمومبة ضخمة جدا في وسط المدينة، اضخم مما تتصور، كانت رائعة فيها كل الكتب التي تريدها، و كان في قبو المكتبة أجهزة كومبيوتر “صخر” و اثنين من الاجهزة ال PC واحد بشاشة خضراء XT و الثاني بشاشة ابيض و اسود AT، بدون قرص صلب و كنا نحتال على الذاكرة حتى نستطيع وضع نظام دوس DOS فيها و تشغيل بيئات البرمجة منها Turbo C و Turbo Pascal و البعض يقوم بتشغيل DBASE وهو لقواعد البيانات مثل الأكسس.
    كان يحق للطالب ساعتين للجلوس امام الجهاز، و بما اني لم اكن من المحظوظين لم يكن لدي فرصة للجلوس إلا نادرا، ساعتين كانت تكفي لتطبيق كل الخوارزميات التي اكتبها طوال اليوم في مخي، و احيان كنت اجلس إلى جانب احدهم مراقبا مايفعل، إلى ان يضيق نفسه مني فيترك الجهاز لأحصل على ربع ساعة منه و ربع ساعة من الذي يأتي بعده، استطيع في نصف ساعة ان اجرب الكثير، الذي كان يزعجني هو كلما حصلت على المقعد احسست بحاجة شديدة لدخول الحمام فتجدني اكتب الخوارزمية في حالة رقص على المقعد، طبعا لا تضحكو استمرت حالة نفسية عندي إلى الآن ما إن اجلس إلى الحاسب حتى احس بهذا الشعور، كانت هذه الطريقة جيدة لعلاج الامساك المزمن عندي.

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

    الفيروسات

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

    القصة حقيقية 100% و لايوجد زيادة فيها، و لكن لم  اكتبها في مدونة لأنه منذ ذلك الوقت تركت النقاش في هذه الامور حفظا لكرامتي.


  8. أخلاقيات البرامج التعاونية (المفتوحة المصدر)

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

    و بما أني من جماعة البرامجة التعاونية فاني اطرح بعض أخلاقها هنا.

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

  9. بائع التفاح…المضروب

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

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

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

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

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

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

    الصورة حديثة بكاميرا جوال سوني اريكسون x1.


  10. التفرد، أنا و لا احد غيري

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

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

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

    النتيجة اني قمت برفض البرنامج الميسطر نهائيا و رفض العمل عليه.

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

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

    عندما انتلقت إلى برمجة الويب، صدمت بنفس الموضوع.
    كنت ابني FrameWork مكتبة تؤمن لي اتصال بقواعد بيانات وعمل عناصر تحكم ويب على PHP و لكن بسبب ضغط العمل و ضعفي في ناحية ال JS(هذا كمثال اي ان المشروع يحتاج لأكثر من مبرمج و لا استطيع عمله لوحدي) اضطررت أن اوقف المشروع.
    قررت الانتقال لاستعمال FrameWork جاهز فوجدت عدة اطارات قوية على الانترنيت لكن صدمت بنفس الصدمة، أن الاطار يقوم بافتراض انه الاطار الوحيد الذي يعمل على المضيف Host، قمت باسقاط جميع الاطارات حتى عدت لنقطة الصفر.

    و الامثلة تتوالى، مثلا NodeJS الذي تعرفت عليه البارحة وهو محرك او بيئة تشغيل جافا سكريبت على المخدم، لكنه يفترض انه هو مخدم الويب على السيرفر و لا يعمل مثل ما تعمل لغات الويب الأخرى PHP, Python أو مثل اللغات C++, Pascal كاضافة لمخدم الويب مثلا Apache.

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

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