الجمعة، 12 يونيو، 2015

مزايا و عيوب Windows 8.x (2- العيوب)


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

الأربعاء، 25 مارس، 2015

مزايا و عيوب Windows 8.x (1- المزايا)

 
مقدمة

من بين كل إصدارات نظام التشغيل Windows أظن أن نظام Windows 8 من أكثر الإصدارات إثارة للجدل (يشترك في المركز الأول مع Windows Vista من وجهة نظري)؛ فما بين رغبة Microsoft في بناء نظام تشغيل موحد يعمل علي مختلف أنواع الأجهزة، و ما بين رغبة المستخدمين القدامي في الحفاظ علي نفس الشكل بدون تغيير، و رغبة المستخدمين الجدد في شكل مختلف يتناسب مع الاحتياجات المعاصرة و تجربة الاستخدام المختلفة عن كل ما هو قديم، صارت الأمور عكس ما ترغب فيه Microsoft.
 
الغريب في الأمر أنني قديماً لم أكن أميل إلي أنظمة الـWindows و كنتُ أفضِّل (و لا زلتُ) توزيعة Kubuntu عليهن جميعاً، و أري أنها تعطيني كل ما أرغب فيه من حيث القوة و الجمال و التطبيقات الناضجة المدمجة، مع قوة الأساسيات التي ورثتها من كونها مبنية علي توزيعة Ubuntu بينما كان معظم الآخرين يميلون للـWindows  و ينفرون من الـGNU/linux إلا أقل القليل، ثم حينما خرج Windows 8 للنور سارت الأمور بشكل عكسي؛ حيث نفرت منه الأغلبية، بينما ملتُ أنا إليه و أحببتُه، ثم ازداد حبي له أكثر بكثير حينما استخدمتُ Windows 8.1 !.

الأربعاء، 4 فبراير، 2015

ابدأ التنقيح debugging باختبار الاحتمالات الأسهل في التحقق

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

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


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

السبت، 24 يناير، 2015

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

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

في البداية فإن من ضمن الاعتماديات التي أتحدث عنها (و النقطة التي سنركز عليها في هذا المقال) أن يكون برنامجك يستعين بمكتبات إضافية في عمله ليست من برمجة المطورين القائمين عليه، سواء أكانت تلك المكتبات مفتوحة المصدر أو مغلقة المصدر. كأن تريد إضافة ميزة الـOCR (اختصار لـOptical character recognition) إلي أحد برامجك، و لأن هذه ميزة معقدة للغاية، فبالتالي سيكون من الأفضل بكثير أن تستعين بمكتبة خارجية لتقوم بتلك العملية، مثل مكتبة tesseract-ocr، و هكذا يمكنك أن تركز جهدك كله علي الأمور التي يتميز بها برنامجك بدون الحاجة لبناء ما بناه الآخرون بالفعل، كما أنك بهذه الطريقة ستستفيد في المستقبل من التحسينات و الإصلاحات التي يطبقونها علي مكتبتهم بدون أي جهد من ناحيتك.
 
 

الجمعة، 23 يناير، 2015

هل كانت الـBasic هلي اللغة المدللة لـMicrosoft طوال تاريخها ؟

لغة الـBasic هي لغة برمجة غاية في القِدم تم تصميمها في عام 1964 علي يد "John Kemeny" و "Thomas Kurtz"، و اسمها اختصار لجملة "Beginner's All-purpose Symbolic Instruction Code" و التي تعني "الأكواد الرمزية عامة الأغراض للمبتدئين". و انتشرت بين المستخدمين لأجهزة الحواسيب الشخصية الأولي لأنها وفرت لهم آلية سهلة و يسيرة لبرمجة تلك الحواسيب، و كذلك تطوير مهارات التفكير البرمجي لديهم، رغم أن تلك اللغة لم تكن من حيث القواعد و الإمكانيات المتاحة لها فائقة القوة. ثم بدأت الشركات المختلفة بإضافة مميزاتها الخاصة إلي اللغة و إخراج إصدارات خاصة بها لأجهزة الحواسيب التي تنتجها. و كانت Microsoft من ضمن تلك الشركات التي تبنت لغة الـBasic و استغلتها لتجذب نحوها هواة البرمجة.

 

الاثنين، 12 يناير، 2015

عن فترة انقطاعي الأخيرة

السلام عليكم و رحمة الله

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

الأحد، 10 أغسطس، 2014

ميزات و عيوب الاعتماد علي آلة وهمية virtual machine في العمل

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

مرحباً Swift، ما الذي أخَّرك حتي الآن ؟!

 
في مؤتمر WWDC 2014 الصاخب الذي عقدته Apple في الأيام الماضية كان هناك العديد من المفاجآت، منهن أن نظام mac os x صار قريب الشكل من نظام iOS (و هو الأمر الذي لا أخفي كرهي الشديد له، و ربما أخصص مقالاً قادماً لانتقاد هذا الأمر و أوضح فيه مدي استيائي منه). و لكن كان هناك الكثير من الأمور التي أسعدتني، و علي رأسها كان خبر إطلاق Apple للغة برمجة جديدة تسمي swift ستعمل كبديل للغة Objective-C علي المدي البعيد. و في هذا المقال أنوي أن أكتب بعض الفقرات التي أوضح فيها وجهة نظري لتلك اللغة الجديدة.

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

هل يمكن لبرمجيات الـNet. أن تصير محمولة كبرمجيات الـjava ؟

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

C:\Windows\programfolder

بينما يكون علي أنظمة التشغيل شبيهة اليونكس unix-like (مثل توزيعات الـGNU\linux، و الـmac os x) كالتالي:

/usr/bin/programfolder
و هو ما يعني أنه يجب عليك لكي يكون برنامجك محمولاً portable أن تنتبه إلي مثل هذه الأمور جيداً، و أن تحتاط لها في أكواد البرنامج. و لكن بشكل عام فإن نفس الأكواد التي كتبتَها بالـjava ستعمل علي كل أنظمة التشغيل، و نفس ملفات الـjar (التي تمثل الملفات التنفيذية لبرامجك) ستعمل علي كل أنظمة التشغيل بلا مشاكل.

الـWindows فيه سم قاتل!… حقاً ؟!

 
 
 
قليل جداً من البرامج التي أستخدمها (أو أكون قد استخدمتُها) أثار إعجابي حتي تعلقتُ به عاطفياً، و لا أتذكر من تلك الفئة سوي الـVisual Studio و الـNetBeans و Kubuntu، ثم مؤخراً Windows 8 و تحديثاته. و أتذكر أنني كنتُ مع أحد أصدقائي في يوم من الأيام (حينما كنتُ في السنة قبل النهائية في الكلية) في أحد الحدائق، فأشار إلي مكعبات من القرميد مصفوفة علي شكل علامة المالانهاية في الرياضيات، فما كان مني إلا أن أشرق وجهي و قلتُ في سعادة “علامة الـVisual Studio” !، و لكم أن تتخيلوا إحساس ذلك الصديق ساعتها.
 
و نفس الأمر ينطبق علي توزيعة Kubuntu لسطح المكتب؛ حيث استخدمتُها لفترة طويلة و أثارت إعجابي إلي حد أن مجرد رؤية كلمة Kubuntu مكتوبةً في أي مكان يجعل قلبي يهفو ناحيتها. و لا زلتُ حتي اليوم أعتبرها أنضج التوزيعات المخصصة للمستخدمين العاديين؛ و السبب الرئيس وراء ذلك هو أنها تحوي كل البنية الأساسية التي ترثها من Ubuntu لكنها تضع واجهة الـKDE فوق كل ذلك، كبديل ممتاز لواجهة الـunity التي لا أحبها و أري أنها أضعف و أقل جمالاً (بالنسبة لي علي الأقل)، إذا ما قُورنت بالـKDE الغاية في النضج و الجمال و القابلية للتخصيص.