السبت، 16 يونيو 2012

اكتب برامجك الخاصة

 اكتب برامجك الخاصة


كنتُ في بدية الأمر أحب أن أكون عالم رياضياتٍ أو فلك ! و لكني ما إن ولجت عالم الحوسبة و أحسست بجماله حتي أصابتني حمي الحوسبة :)
صرت في أكلي و شربي و نومي حاسوبياً، و صرت أنظر للحاسوب علي أنه لعبةٌ جميلةٌ يمكنني أن أجعلها تسليني بآلاف الطرق، و أن تساعدني في القيام بالأعمال المرهقة الطويلة المملة التي أحتاج للقيام بها. و هي ذات النظرة التي ينظرها لينوس تورفالدز إليه، و أظن أنها نظرة كل هاكرٍ hacker حقيقي.


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

فوائد ذلك:
  • الإحساس بمتعة البرمجة و أنها جزءٌ من الاستمتاع الشخصي لا العمل فقط.
  • زيادة المهارة بكثرة الممارسة.
  • الإحاطة بمجالاتٍ لم يتم التطرق إليها في العمل.
  • ربما: اختبار لغات برمجةٍ جديدة.
  • نشر تلك البرمجيات و مناقشتها مع الآخرين يرفع مستوي المبرمج و سقف طموحه و رؤيته.
  • ربما: تتحول البرامج الشخصية البسيطة إلي مشاريعٍ ضخمةٍ فيما بعد، بكل ما يحمل هذا من معاني.
من أمثة البرامج التي صنعتُها لنفسي ما يلي:
  • برنامج الفهرست:
    و هو برنامجٌ صغيرٌ يجعل قائمة (إرسال إلي send to) في الويندوز شبيهةٌ بتلك الخاصة بواجهة الـKDE. و كذا يمدد قائمة (المفضلة favourite) لتشمل الأماكن التي يريدها المستخدم و تفرعاتها كذلك إن أراد.
  • برنامج لتغيير أرقام الهاتف:
    حيث في الفترة الأخيرة في مصر تم زيادة أرقام الهواتف المحمولة لتصبح 11 رقماً بدلاً من 10 أرقام، و لأن الأرقام عندي كثيرةٌ جداً علي هاتفي و لن يمكنني تغييرها يدوياً بسهولة: فقد كتبت برنامجاً بسيطاً لتغيير الأرقام حسب القواعد المعلنة لذلك. لكني بكل أسف اكتشفت أنه لا يمكنني استعمال ذلك البرنامج لأنني لا أعلم كيف يمكنني الوصول إلي الموارد الداخلية للهواتف المحمولة ! و لا يمكنني أن أقتطع وقتاً أكبر مما تم اقتطاعه بالفعل للبرنامج بسبب انشغالي الشديد بمشروعي الأضخم (البرمجة بإبداع).
  • برنامج محاكي الماتلاب:
    و قد كان في بداية الأمر جزءاً من الدراسة ليس إلا، ثم فيما بعد استولي عليَّ الحماس لتطويره أكثر و أكثر بحيث صار الأمر شخصياً تماماً، بل إن هذا البرنامج هو ما جعلني أحسم القرار بخصوص مستقبلي و المجال الذي أريد التخصص فيه.
  • التطبيق الأول في مشروع (البرمجة بإبداع)، و الذي يحتوي علي ما يزيد علي الخمسٍ و عشرين ألف سطرٍ حتي الآن (بلغة الجافا)، و هو أهم و أجمل و أعقد ما عملت فيه علي الإطلاق حتي الآن (أسأل الله تعالي أن ينفع به).

الاثنين، 11 يونيو 2012

خدمة تحديث لبرنامج الفهرست

بنك الأفكار الخاص:

خدمة تحديث في برنامج الفهرست


برنامج الفهرست * (الذي قمتُ ببرمجته منذ فترةٍ طويلةٍ ثم اضطررت للتخلي عنه لانتقالي إلي نظام القنو/لينوكس) يعاني من قصورٍ شديدٍ في آلية عمله حتي الآن؛ حيث أنك حينما تصنع فهرساً معيناً باستخدامه ثم تقوم بعد ذلك بـ:
  • إنشاء مجلدٍ جديد، أو: 
  • حذف مجلدٍ قديمٍ، أو: 
  • تغيير اسم مجلدٍ موجود.
فإنه لا يشعر بأيٍ من ذلك علي الإطلاق و يظل محتفظاً بنفس بنية الفهرس الذي صنعه عند تشغيلك إياه، و لتحديث الفهرس ينبغي عليك أن تعيد تشغيل البرنامج مرةً أخري ليلغي كل ما فات و يقوم بعمل الفهرس من جديد.
صحيحٌ أنه يمكنك أن توفر العناء عن طريق اختيار جزءٍ صغيرٍ من شجرة الفهرس (الجزء الذي حدث فيه التغيير) لكن تظل الحاجة الدائمة لإعادة تشغيله ليُحَدِّث الفهرس القديم !
لذلك كنتُ قد فكرتُ قديماً في عمل خدمة service تقوم بمتابعة المجلدات التي قمنا بضمها للفهرس حينما صنعناه، و حينما يتم إجراء أي تغييرٍ (بالإنشاء أو الحذف أو التعديل) تقوم هذه الخدمة بتطبيق ذلك التغيير علي مكانه الملائم له من الفهرس.
لكن انتقالي المفاجئ لنظام اللينوكس منعني من إكمال هذه النقطة، و لذا أقترح علي من يرغب في التكملة أن يفعل مشكوراً.

 
--------------------------------------------------
* رابط المقال الذي أتحدث فيه عن البرنامج بإجمال:
 http://afkar-abo-eyas.blogspot.com/2011/11/blog-post_25.html




الأحد، 10 يونيو 2012

بنك أفكار خاص

بنك أفكارٍ خاص


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

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

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







الأحد، 3 يونيو 2012

أكثر من لغة، و أكثر من بيئةٍ متكاملة.

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

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


و تنقسم اللغات من حيث قوة تعلمي لها إلي عدة فئاتٍ هي:
  • اللغات التي أتقنتها بشكلٍ كبيرٍ جداً، مثل الـ++C و الـjava و الـ#C و VB.NET و إن كنت طبعاً لم أتقن جميع مكوناتها و قواعدها. مع إتقان جزءٍ جيدٍ من مكتباتها القياسية، و ربما مكتباتٍ أخري ذات أغراضٍ خاصة (مثل مكتبة الـOpenCV في حالة لغة الـ++C و مكتبة الـXNA مع لغة الـ#C).
  • اللغات التي أتقنت قواعدها و لكني لم أتعلم مكتبتها القياسية بشكلٍ مماثلٍ نظراً لضيق الوقت و تأجيلي لهذه الخطوة إلي مرحلة تعلم المناهج المختلفة لتصميم المكتبات البرمجية و العلاقة بينها و بين تصميم اللغات ذاتها. و هذا حدث مع لغاتٍ مثل الـpython و الـobject pascal و matlab.
  • اللغات التي تعلمت كثيراً من نحوها syntax و لكن ليس علي نفس مستوي لغات النوع الأول، و كذلك فلم أتعلم مكتبتها القياسية. و منها ruby و fortran90  و shell script (إن اعتبرنا الأخيرة لغة برمجة كاملة).
  • اللغات التي أعلم بعض الأشياء عنها و بعض قراراتها التصميمية، و لكني لم أتعمق فيها مطلقاً، مثل الـeiffel و الـGo و الـobjective C و ربما غيرهن. 
و كذلك كنت لكل لغةٍ من تلك اللغات أُنَصِّب بيئة برمجةٍ متكاملة لها علي حاسوبي لتجربتها قدر الاستطاعة؛ حتي يتسني الاحتكاك العملي لي بها فأدرك نقاط القوة و الضعف فيها عن تجربة واقعية. و كذلك لمعرفة الفروقات بين بيئات البرمجة المتكاملة و التي يعد بناؤها جزءاً هاماً للغاية من هندسة البرمجيات المُساعَدَة حاسوبياً CASE - computer aided software engineering، و لمعرفة تأثير القرارات التصميمية للغة البرمجة علي كيفية عمل و بناء بيئة البرمجة المتكاملة الخاصة بها.
و من ضمن هذه البيئات ما يلي:
  • netbeans
  • monodevelop
  • eric
  • lazarus
  • octave
  • code blocks
  • Gambas
و أعترف أنني لم تتسن لي الفرصة لتجربة أيٍ منها تجربةً حقيقيةً قويةً، إلا بيئة الـNetbeans التي استقر قراري علي استخدامها أثناء البرمجة بالـjava.
     و الجميل أنني بحمد الله تعالي تعودت منذ صغري علي التلخيص الجيد لكل ما أتعلمه، بل و كنت أتسابق في تلخيص الكتب العلمية مع صديقي: ياسين أحمد سعيد، و أدي هذا إلي أنني لم أتعلم شيئاً في حياتي له قيمةٌ إلا و دونت ما تعلمته فيه. و لم يكن تعلمي لهذه اللغات شاذاً عن هذه القاعدة، فاستطعت تكوين تلخيصاتٍ جميلةٍ للغات النوع: الأول و الثاني و الثالث، و هي التي تتكون منها موسوعة الألسن التي تحدثت عنها مسبقاً.


    الآن: ما الغرض من حديثي عن هذه الأمور الشخصية ؟
    بمنتهي البساطة أنا أريد أن أوضح عملياً بعض النقاط التي تخفي علي الكثيرين بكل أسف:
    • الوقوف علي مسافةٍ واحدةٍ من كل الأذواق و المشارب و التقنيات المختلفة التي توجد داخل نطاق تخصصنا، و من ثم دراستها جميعها (أو ما تيسر منها إن كان الكل أو الأغلبية أكبر من اللازم)، و بعد الدراسة المتفهمة الجيدة يمكننا أن ننحاز إلي تقنيةٍ ما علي أنها التي نعتقد فيها القرب أكثر ما يُمكن من الصواب.
      و الحرص علي عدم التبعية و البعد التقليد الأعمي؛ فهناك أناسٌ تعودوا أن يسلموا قيادتهم إلي أحد الهيئات أو المؤسسات أو الشركات علي اعتبار أنها الأفضل تقنياً "دائما" و مهما كان قرارها في فرعٍ من الفروع !.
      فالتقليد و إن كان يُتقبل من بعض الناس فإنه في الأصل مذمومٌ للمتخصصين كل الذم، و ما من متخصصٍ تعصب لمُنتجٍ (بفتح التاء و كسرها) دون الاستناد إلي دليلٍ و برهانٍ لانحيازه إلا كان هذا قدحاً في عقلانيته و قدرته علي اتباع المنهج العلمي من الأساس.
    • الشجاعة في النقد عند وجود مناط الانتقاد، فعلي الرغم من أن هناك من لن يتقبل نقدك للتقنية التي يحبها مهما كانت منطقية النقد أو دوافعه، إلا أنه لا يُمكنك أن تسمح لمثل هذا أن يكبلك و أن يمنعك من استبعاد ما يجب استبعاده أو قبول ما يجب قبوله؛ فعامةًَ أي رأيٍ تقتنع به سيكون هناك من يُعارضك فيه أشد المعارضة، و ربما يري أنك وقحٌ و جاهل !
    • زيادة القاعدة المعرفية قدر الإمكان؛ فمثل هذا الازدياد قادرٌ علي توسيع آفاق تفكير صاحبه جداً، و يجعله قادراً علي الانتباه (نظراً للنظرة الشاملة التي يمتلكها) إلي ما قد يخفي علي الكثيرين و إن كانوا أكثر منه فضلاً و ذكاءاً.
    • التجريب العلمي و المعايشة أمران مهمان للغاية؛ فبإمكانهما أن يهدما كل ما بناه الواحد منا من أفكارٍ نظريةٍ و تحويلها في نظره إلي غبارٍ تذروه الرياح.
      و كلما كان مجال التجريب قريباً من الأصول التي نبني عليها آراءنا و فرعياتنا كلما كانت فائدة التجريب أوضح و أقوي (و ربما أكثر صدمة).

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



    الثلاثاء، 29 مايو 2012

    صراع الكتاب الورقي و الإليكتروني: نموذجٌ للحروب الوهمية

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

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

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

    الأربعاء، 23 مايو 2012

    أماروك يشغل المرئيات !

    يعتبر برنامج أماروك amarok هو مُشَغِّل الصوتيات المعتمد في واجهة الـKDE بينما يعتبر برنامج dragon player هو المشغل المعتمد للمرئيات videos، إلا أنني فوجئت في آخر تنصيبٍ للـKDE علي حاسوبي أن مشغل أماروك يستطيع تشغيل و عرض الملفات المرئية بشكلٍ جميل !
    و لست أدري هل هذه ميزةٌ جديدةٌ فيه أم أنها موجودةٌ منذ فترة، لكن الغريب في الأمر هو وجود برنامج dragon player بينما يستطيع أماروك القيام بأعماله ذاتها !
    إلا أني وجدت أن أماروك لا يستطيع تشغيل كل أنواع المرئيات، فهناك ملفات مرئية سجلتها و أنا طالبٌ في باكالوريوس هندسة كشرحٍ بسيطٍ لبرنامجٍ مكتوب بالـ#C، و امتداده هو avi حينما حاولت تشغيلها بأماروك كان الصوت يعمل بينما لا تظهر الصورة، رغم أن الملفات سليمة و تعمل صوتاً و صورةً علي بقية برامج المرئيات !
    لكن بغض النظر عن هذه النقطة فبالمقارنة بين مُشَغِّلات المرئيات التي استعملتها حتي الآن فإن لأماروك ميزةٌ قوية جداً عن جميعها، هي أنه مُدمجٌ في الواجهة نفسها و يُعتبر جزءاً منها، و هذا معناه أن التحكم به سهلٌ جداً و في غاية السلاسة باستخدام أزرار التحكم في الصوتيات في لوحة المفاتيح. و كذا فهو مُدمجٌ مع الواجهة بحيث يتم تنصيبه بمجرد تنصيب الواجهة نفسها.
    بالطبع فإن هذه المميزات لها شأنها و قوتها عند مستخدمي الـKDE، بينما مستخدمي الواجهات الأخري لهم خياراتهم التي تتساوي (أو ربما تزيد) في القوة مع أماروك، مثل برنامج Banshee في الـunity و الذي جربته من قبل و أعجبني جداً.
    في النهاية: هل يُغني أماروك عن بقية برامج المرئيات (علي سبيل المثال smplayer) ؟
    أظن أنه بالنسبة لي فالإجابة المبدئية هي: نعم.

    الجمعة، 18 مايو 2012

    kubuntu 12.04 LTS

    قمتُ في الأيام الأخيرة بتنصيب الإصدارة 12.04 طويلة الدعم LTS من توزيعة kubuntu، و لا أخفي أنني كنتُ قلقاً جداً من ناحية كونها مستقرةً أم لا، و خاصةً أنني لم أكن لأضحي بتوزيعةٍ مستقرةٍ أبداً و خاصةً في هذه الأيام الحرجة عندي.
    لكن بحمد الله تعالي وجدت أنها مستقرةٌ بشكل جميل، و كالعادة زاد يقيني بأن الـKDE هي الأرقي و الأقوي و الأجمل، و ما دامت مستقرةً لا تعرضني لمواقف سخيفة فإني من أشد المتحمسين لها و المحبين لاستخدامها.
    و كما فعلتُ في المرة السابقة: فقد جعلت شكل الواجهة netbook لعمليته الشديدة، كما أنني حاولت في هذه الأيام التعامل بكثافة مع متصفح الشبكة rekonq الذي يُعد جزءاً من الـKDE بدلاً من firefox لخفة الأول و للتعرف علي تقنياتٍ أخري غير التي اعتدت عليها.



    و لكن الأمر الذي يضايقني أن الشبكة عندي ضعيفةٌ جداً، فأنا أعتمد علي usb modem من شركة (اتصالات)، و السرعة عندي في أشد حالاتها عنفواناً تصل إلي ~ 10 كب/ث !!!
    و لما اتصلت بخدمة العملاء ثم الدعم الفني قالوا لي ربما يكون السبب في عدم دعم الـlinux لها بشكلٍ جيد ! و ليس أمامي إلا الصبر علي أن أري في الأمر ما يستحقه بعد مرور هذه الفترة التي احتاج للتركيز فيها قدر الاستطاعة علي مشروع البرمجة بإبداع.
    المهم: أنني أصبحت أستخدم برنامج Turpial كعميلٍ لحسابي علي موقع twitter للتغلب علي مشكلة ضعف الشبكة الشديد، و هو برنامجٌ متميزٌ بشدة، و مكتوبٌ بلغة الـpython.  

    و كنتُ قد جربت استخدام الـwidget الخاصة بـtwitter في الـKDE إلا أنها كانت ضعيفة المستوي للغاية ! و هي ثاني شيءٍ لم يعجبني في الـKDE و تركته لضعفه، حيث أن أول شيءٍ كان برنامج dragon player لتشغيل المرئيات و الذي استبدلت به برنامج Smplayer.

    الخميس، 10 مايو 2012

    كيف أحببت مجال بناء المترجمات compilers.

    كيف أحببتُ مجال بناء المُتَرْجِمَات compilers

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


    الحقيقة أن هناك أموراً كثيرةً زرعت في قلبي هذا الحب زرعاً، منها:
    • أن هذا المجال يُعد من أصول علم الحوسبة؛ فلغة البرمجة هي الأداة التي يُحّوِّل بها المبرمج أفكاره النظرية إلي واقعٍ فعلي، و كلما كانت تلك اللغة أقوي كلما أصبح باستطاعته التفرغ أكثر و أكثر في تطوير أفكاره و طرق حله للمشكلات.
      و قد شرحتُ من قبل أنني أحب دائماً تحصيل علوم الأصول في كل العلوم التي أدرسها، و لذلك أحسست أنني سأجد ذاتي في هذا المجال دون غيره.
    • حبي للاعتماد علي نفسي؛ فمبرمج المترجمات في نظري هو الشخص الوحيد الذي يمكنه أن يأخذ منك معالجاً بمفرده ثم يعيده إليك بعد عامٍ واحدٍ و معه مترجم compiler و نظام تشغيل و مكتبة تطوير لذلك المعالج :)
    • تعايشي مع المشروعات الحرة و المفتوحة المصدر التي بنسبةٍ كبيرة تكون متعلقةً بما يحتاجه المبرمجون في عملهم، من مترجماتٍ و مفسراتٍ و مكتباتٍ و بيئات تطوير متكاملة. و إعجابي الكبير برموز تلك المجتمعات بمختلف مشروعاتها. مما أثر فِيَّ بقوةٍ و جعلني أحس في عقلي الباطن أن هذا هو العلم الحقيقي و أن هذا هو سمت المبرمجين المتمرسين أصحاب الحل و العقد :)
    • واقعةٌ عمليةٌ حدثت معي أيام الدراسة الجامعية، حيث في باكالوريوس هندسة طلبت منا معيدةٌ في الكلية أن نكتب برنامجاً لمُحاكاة برنامج الماتلاب matlab، و كان المطلوب شيئاً بسيطاً: أن يتمكن المُحاكِي من تنفيذ العمليات الحسابية الأساسية، و التعرف علي أسماء المتغيرات و إسناد القيم لها، و استخدام تلك القيم فيما بعد في إجراء العمليات الحسابية.
      و كالعادة لأن الموضوع يتعلق بالبرمجة استولي علي تفكيري بشكلٍ كبير، فكنت أنهي مذاكرتي لأتفرغ للعمل عليه و تطويره رويداً رويداً، و نظراً ﻷني استخدمت لغة الـ#C و بيئة الـVisual Studio لكتابة البرنامج فقد كان الأمر ممتعاً بحق.
      و رغم أنني نفذت ما كان مطلوباً منا في أيامٍ قليلة إلا أنني لم أتوقف عن تطوير البرنامج، فأخذت أزيد من قدراته علي محاكاة الماتلاب و اكتشاف الأخطاء النحوية syntax errors لأوامر المستخدم !
      و لكن قدر الله عز و جل أن تدخل فترة امتحاناتٍ (أظنها كانت امتحانات أعمال سنة) فكففت مضطراً عن العمل علي تطوير البرنامج أكثر من تلك المرحلة، و لكن كان قد زرع في قلبي حب المجال بشكلٍ لا يمكن تجاهله أبداً. و بعدها قررت أنني لن أجد نفسي في الحقيقة إلا في هذا التخصص مهما كانت غرابته عند الناس.

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

    السبت، 5 مايو 2012

    KDE كمان و كمان ^_^

    أعلم أنكم تقولون أن الكيل قد طفح، و أن الأمور زادت عن حدها، و أنني أتحول بمرور الأيام إلي وغدٍ لا خلاق له يستمتع بتعذيبكم بحكاياتٍ لا تهمكم عن علاقته الغريبة بواجهة الـKDE. و لكنني أجد في نفسي الجرأة الكافية لأقول لكم أن هذه هي الحياة بمساراتها الغريبة و لا يمكنني أن أسيطر عليها أو أجعلها تتخذ السمت الذي أرسمه لها، لذا فقد قررت أن أقص عليكم اليوم أحدث حلقات سلسلة "وائل و القنو/لينوكس" ^_^
    جديدنا اليوم أنني بعد العودة من سفري القصير (سأتحدث عنه فيما بعد بعون الله تعالي) قررت أن أحاول محاولةً أخري في سبيل العودة إلي واجهة الـKDE الغالية؛ ذلك أنني قد جربت التعايش مع واجهة الـUnity الخاصة بتوزيعة Ubuntu قدر الاستطاعة و لفترةٍ طويلة، إلا أنني لم أستطع بتاتاً الانسجام معها، و قد حاولت بحقٍ أن أقنع نفسي بها و أن أنظر إلي مزاياها (إذ أنني حاولت العثور تلك المزايا في البداية). و لكني بعد تلك الفترة من محاولة التعايش و الحب أدركت أننا لن ننسجم مع بعضنا البعض مهما حاولت، و لذا قررت ذلك القرار المفزع: محاولة العودة إلي الـKDE مرةً أخري.
    و ما إن قررت ذلك حتي فكرت في الكيفية التي يمكنني بها التغلب علي ضعف استقرارها (و هو السبب الذي جعلني أفر منها فراري من المجذوم)، فرأيت أن الحلول لا تعدو أحد حلين، هما:
    • تنصيب توزيعةٍ أخري غير kubuntu مثل توزيعة chakra؛ فربما يكون سبب عدم الاستقرار الذي عانيت منه أن فريق تطوير التوزيعة الأولي لا يهتم بها بصورةٍ جيدة، و كذلك فقد نصحني الأخ محمد سرحان بها في تعليقاته علي المدونات السابقة لي عن هذا الموضوع.
    • تنصيب واجهة الـKDE مع واجهة الـunity علي نفس التوزيعة الحالية؛ فبهذا لا أضطر إلي إعادة الإعدادات التي طبقتها علي هذا التنصيب الحالي للنظام مرةً أخري بكل ما في هذا من عناءٍ شديد، و كذا فسأكون قادراً علي حذف الـKDE في حالة عودتها إلي سلوك عدم الاستقرار و بدون أن أخسر النظام المُنَصَّب حالياً.
    و بعد إعمال الفكر في هذين الحلين: وجدت أن الحل الثاني هو الأفضل، قتوكلت علي الله تعالي و نصبت الـKDE من خلال مركز برمجيات ubuntu.
    و بعد أن تم التنصيب أخذت أضبط إعدادات الـKDE، فجعلتها هذه المرة علي هيئة واجهة الـnetbook الذي يشبه واجهات الأجهزة المحمولة من حواسيب لوحية كالآيباد ipad، و القالاكسي تاب Galaxy tab، و الغريب أنني بعد فترةٍ بسيطة من استخدامه و جدت أنه أجمل و أفضل بكثيرٍ من الشكل العادي !
    لكن الأغرب أنني بعد فترةٍ من الاستخدام لاحظت عدم ظهور أي رسائل أخطاء علي الإطلاق علي العكس من معاناتي السابقة ! 
    بل يعمل الجهاز بشكلٍ رائعٍ سلسٍ بحمد الله تعالي، و حتي الآن و بعد مضي أكثر من شهرٍ علي استعمالي للتنصيب الجديد من الـKDE لم يحدث له أي انهيارٍ علي الإطلاق، بل و لم يحدث لها تجمد freezing إلا بنفس معدل الـunity نفسها !

    ما السبب ؟
    بحقٍ لا أدري، فهل يكون السبب أنهم اهتموا بها و أصلحوا كل العلل التي فيها ؟ 
    أو أن الإصدارة القديمة لم تكن متوافقةً جيداً مع عتادي الصلب بينما الجديدة متوافقةٌ جيداً ؟
    الله أدري و أعلم، لكن المهم الآن أنني أستمتع باستخدام الواجهة التي أؤمن أنها الأجمل و الأقوي و الأفضل من بين أسطح المكتب التي استعملتها بلا منافس.
    فالحمد الله تعالي كثيراً ^_^

    الخميس، 3 مايو 2012

    لينوس تورفالدز

    (لِينُوس تُورفالدز) هو مؤسس مشروع نواة اللينوكس linux kernel و المدير الفني (إن جاز هذا التعبير) للمشروع. و هو هاكر متميزٌ جداً؛ ليس فقط ببراعته و عناده و ثقته الشديدة في نفسه، بل أيضاً بغرابة آرائه و مصادمتها في بعض الأحيان لما يهواه الكل و يحبونه.
    و قد أعجبت بـ (لينوس) عند بداية تعرفي عليه و ذلك في المرحلة التي تلت معرفتي لنظام الـقنو/لينوكس GNU/Linux، و بدأت أشاهد الفيديوهات المتناثرة له علي الشبكة و هو يتحدث عن مواضيع مختلفة لا يربط بينها إلا حديثه عن نواة اللينوكس في الغالب.
    و بدأ إعجابي به يتزايد حتي وصل لمرحلة أنني صرت أبحث عن فيديوهاته القليلة علي الشبكة كما يبحث العاشق عن صور محبوبته ! و صار من الواضح أنني رغم اختلافي الشديد معه في أغلب آرائه، إلا أنني صرت أتأثر به بشدة حتي في طريقة الحديث و أسلوب المناقشة !!!
    و حينما فكرت في أسباب هذا التأثر الشديد (رغم ما سأورده بعد قليل من الاختلافات الفكرية بيننا) وجدت أن منها ما يلي:
    • الرجل له كاريزما عالية جداً، بحيث لا يمكنك إلا أن تقع أسير تلك الثقة الكاسحة في النفس، و قد يؤدي هذا إلي تأثيرٍ عكسيٍ جداً من حيث أن المشاهد له قد يكرهه إلي أقصي الحدود بسبب هذه الثقة في النفس التي قد يسميها الكثيرون غروراً واضحاً (و قد يكونوا مصيبين).
    • (لينوس) من الشخصيات التي تعتمد علي ذاتها بشكلٍ فائق، و أنا بطبيعتي أحب هذا النوع من الشخصيات بسبب نشأتي و قناعاتي الذاتية.
      و من أبرز الأمور التي تجسد هذه الاعتمادية علي الذات مشروعه الأكبر و هو (نواة اللينوكس)، فظروف إنشاء هذا المشروع كانت رغبة الفتي (لينوس) حينما كان طالباً جامعياً في الحصول علي نظام تشغيلٍ علي حاسوبه الشخصي يماثل ذلك الذي يوجد عل أجهزة الجامعة التي يعمل عليها، و هكذا قرر كتابة ذلك النظام من الصفر (و إن كان الموضوع أكثر تفصيلاً من هذا بالتأكيد) !
    • نشأة (لينوس) و علاقته المبكرة و الغريبة بالحاسوب و التي كنت أتمني أن أحظي بمثلها؛ فقد بدأت هذه العلاقة في سن العاشرة تقريباً، و كان من أبرز ملامحها أن (لينوس) كان يكتب كل برامجه (أو أغلبها) بنفسه لأن حاسوبه الشخصي لم يكن له برامج في السوق الفنلندية ! و هكذا اعتاد (لينوس) الاعتماد علي نفسه تماماً في هذا الشأن.
      و الأغرب أنه برمج بكل الوسائل المعروفة، بدءاً من لغة الآلة machine code و انتهاءاٍ بلغة الـC ! و قد صعقت حينما سمعته يؤكد أنه في مرحلةٍ من المراحل لم يكن يعرف معني المُجَمِّع assembler و كان من المعتاد له أن يكتب برامجه بالكود الستعشري hexadecimal !

    أما الاختلافات في الآراء بيني و بين (لينوس) فهي كثيرة، و منها:
    • حبه البالغ للغة الـC و كرهي البالغ لها.
    • كرهه البالغ للغة الجافا و آلتها الوهمية JVM و حبي (غير الشديد) لَلُّغة و (الشديد) للآلة الوهمية.
    • طريقته في مهاجمة المخالفين له في الرأي، و هي عنيفةٌ جداً و تؤدي إلي الكراهية الشديدة، و قد كنت قد تأثرت به (و كذلك بأسلوب الإمام بن حزم رحمة الله عليه) لفترةٍ من الفترات، و لكني أحمد الله تعالي أنني عدت عن ذلك و أصبحت أحاول قدر الإمكان الحديث بحياديةٍ و اعتدال.
    • حبه المبالغ فيه (و يشترك معه كثيرٌ من المبرمجين  المخضرمين) لسطر الأوامر command line، و ابتعادهم عن التقنيات الحديثة التي تسهل البرمجة بشدة، و لكني أصبحت لا الومه علي هذا كثيراً؛ فظروف نشأته تجعل سطر الاوامر منتهي الرفاهية بالنسبة له (هلموا: لقد كان الرجل يبرمج بالأصفار و الآحاد ^_^)
    • كرهه للمُنَقِّحَات debuggers !!!
      و ربما يكون قد غير وجهة نظره هذه (لأنني سمعته يقول هذا في فيديو قديم له)، و لكن حتي لو كان لا يزال يكره المنقحات فظروف نشأته أيضاً تجعلنا نغض الطرف عن هذا نوعاً ما.