من سوق الخضرة إلى سوق البرمجة

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


 

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

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

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

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

Advertisements

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

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 لم اسمها لغة برمجة بعد حتى تكتمل، استثنيت المعلومات  التقنية في التدوينة لتسهيل القراءة، يمكن طرح المعلومات التقنية في التعليقات.

استمر في القراءة

نظرية التطور

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

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

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

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

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

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

الفيروسات

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

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

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

طبعا الاستاذ بدلأ من ان يناقشني سألني: في اي كلية انت، قلت: سنة اولى تجارة.

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

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

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

القصة حقيقية 100% و لايوجد زيادة فيها.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

اول تطبيق اندرويد لي آلة حاسبة للمحاسبين

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

استغرق معي اسبوع لتصميم الشاشة و 4 ايام لنقل الخوارزمية من الباسكال إلى الجافا مع الكثير من المساعدة من غوغل stackoverflow.com  و قناة IRC ##java

التصميم على Eclipse Juno و كتابة المصدر ايضا.

التطبيق رفعته على aptoide.com و المصدر على github.com

تجربتي مع miniEdit

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

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

و بسبب حاجتي لمحرر نصوص مع تفلية Debug بدأت مشروع LightPHPEdit قمت بوضعه على السورس فورغ، المحرر على صغره كلفني شغل النسخة الأولية منه شهر و نصف عمل متواصل، كلمة عمل متواصل في ذلك الوقت كان يعني أكثر من  5 ساعات في اليوم.
كان علي ان أضع Syntax الخاص بال PHP الذي يدمج صيغ HTML معه عند فتح <? و اغلاقها، و طبعا لم تكن متوفرة في المكونات الجاهزه، قمت بانشاء واحد يرتبط مع SynEdit و يأخذ تنسيقات متعددة تبعا للنوع المحدد مثلا <?xml  طبعا لم ابرمج الـ xml بعد و لكن وضعت القواعد لها بحيث استطيع اضافة اي نوع جديد، كان يخطر على بالي مثلا <?pascal 😀
ايضا كان علي ان اضع برتوكول التخاطب مع xdebug و هو اضافة لل php و عليه التخاطب معه عبر TCP، المسألة ليست سهلة فهو MultiThread لأن التفلية يجب أن تكون في الخلفية عند التوقف عند breakpoints.
بالاضافة لوضع محرك رئيسي للمحرر بحيث يترابط الجميع على طبقات و تكون معزولة عن الواجهة، انا اعمل دائما بهذه الطريقة، احب ان اجعل الواجهة لا تحوي الكثير من الكود.

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

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

الآن مع العلل البسيطة اعتقد ان المحرر جاهز للنشر وهو موجود على الـ github باسم miniEdit، مع اني استعمله منذ أول يوم ولادة له كملف تنفيذي، لانني استطع التجاوز عن العلل التي فيه دون أن اعيب على من صنعه 😛

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