مدونة مؤيد

غيّر العالم ... أو العب بعيداً

تحليل لجائزة شبايك لأفضل برنامج لدعم العربية ضمن حزمة أدوبي

لعلك قد شاهدت إعلان رءوف شبايك عن "جائزة الخمسمائة + 1200 دولار" لأفضل برنامج يدعم اللغة العربية في مدونته، إن لم تكن قد شاهدته فقم بزيارته لأخذ فكرة عن الموضوع. في البداية أردت عمل برنامج يحقق تلك الشروط ولكني ألغيت الأمر بعد أن وجدت أن هناك بالفعل من قام به، فلا داعي لأعيد كتابة برنامج يقوم بنفس الوظيفة. البرنامج الذي أراد شبايك كتابة محاكي له هو برنامج قديم جداً يدعى "الرسام العربي"، وهو وبرنامج قديم آخر يدعى "الوسيط" يعتمدان فكرة تحويل الكلام العربي إلى رموز، ففي البرنامج الذي لا يدعم العربية ولا يدعم نصوص الـUnicode ولا الكتابة من اليمين إلى اليسار تظهر هذه الرموز عند استخدام خطوط Fonts خاصة بتلك البرامج بشكل كلام عربي سليم. السلبية الكبيرة لكلا البرنامجين هي أنك محتاج إلى استعمال خطوط خاصة بهما، مما يفرض قيوداً كبيرة، أضف إلى ذلك السعر المبالغ فيه لبرنامج "الرسام العربي" (وهو ما دفع شبايك لإعلان المسابقة على كل حال!). هناك نقطة هامة علينا أن نلاحظها هي أن البرامج المعاصرة جميعها رغم أنها لا تدعم اللغة العربية إلا أنها تدعم رموز وخطوط الـUnicode، وبالتالي فإن النصوص العربية - نتيجة عدم دعم تلك البرامج للغة العربية - تظهر مقلوبة ومنفصلة، فنحن إذاً أمام مشكلة بسيطة هي قلب النص العربي قبل نسخة إلى تلك البرامج مما سيجعله يظهر واضحاً ودون الحاجة لاستخدام خطوط خاصة. هذه الفكرة الأخيرة هي التي يعتمد عليها البرنامج الذي أرسله لي شخص لا أعرفه والذي كتبه من يدعى "حسن عارف الجودي" والمبني باستخدام Python 2.5 (وهو إصدار صدر عام 2006 من اللغة)، لا أعرف إن كان من القانوني بالنسبة لتلك المسابقة أن يطلع المتسابقون على الكود المصدري لبرامج بعضهم قبل انتهاء موعد المسابقة، ولكني سأفترض أن ذلك غير مسموح به (حسب قوانين معظم المسابقات البرمجية) وأتجنب وضع الكود هنا... تعليق أخير وصغير على المسابقة بحد ذاتها، للمسابقة فكرة رائعة حقاً، ففي المجتمع التقني العربي نلاحظ قحط شديد في البرامج المفتوحة المصدر أو البرامج التي يساهم فيها العديد من البرمجين، ما يحتاجه المبرمجون العرب ليعملوا على مثل هذه المشاريع المشتركة\الحرة\المفتوحة المصدر هو تحفيز صغير، كان التحفيز هنا مادياً، ولا مانع من أن يكون غير مادي في مشاريع أخرى، أرجو أن تكون هذه المسابقة وأمثالها مما يشعل الفتيل لانتشار واسع في المشاريع العربية البرمجية. تحديث : تم أمس الإعلان عن الفائزين في المسابقة، حيث تم اختيار أربع فائزين، الفائز بالمركز الأول (1000 دولار) هو محمد حجازي من سورية، ويتقاسم الفائزين بالمراكز التالية بقية الجائزة والبالغة 900 دولار. ما سرني هو أن ثلاثة من الفائزين الأربعة (بمن فيهم الفائز بالمركز الأول) هم من سورية. بالتوفيق لجميع الفائزين، وحظاً أوفر للذين لم يحالفهم الحظ، وجزى الله الأخ شبايك خيراً على هذه المساهمة.  

أفضل الخلاصات (Feeds) للمبرمجين ومطوري البرمجيات

بعد بحث طويل عن مدونات برمجية لأتابعها باستخدام قارئ الخلاصات الذي أستخدمه (FeedDemon) على اعتبار أنني أحظى بعطلة طويلة (إذن سأعود للتدوين!) وجدت العديد من المدونات التي تستحق الإضافة، *أغلبها* ملخص في قائمة يسميها صاحبها أفضل مئتي مدونة للمطورين : Top 200 Blogs for Developers، وهي قائمة جيدة جداً إن أردت رأيي، لاحظ أن لها توجه لا بأس به نحو ذكر المدونات التي تتحدث عن Agile، كما تذكر لك صفحة Twitter الخاصة بأصحاب المدونات. شخصياً أضيف للقائمة مدونة Scott Guthrie والتي استغربت عدم وجودها في قائمة "أفضل 200 مدونة" تلك، رغم أنها - أي مدونة سكوت - أفضل من كثير من المدونات الموجودة في تلك القائمة. لاحظ أنك ستجد تلك المدونة مفيدة ومثيرة للاهتمام في حال كنت مهتم بتقنيات مايكروسوفت (كسيلفرلايت، ASP.NET، وغيرها) *فقط*.

ما الجديد في #C

في البداية أعترف أنني مهمل فيما يتعلق بالتدوين، لقد مضى وقت طويل منذ أن كتبت آخر مرة، ولكنني سأقول لك - صادقاً - أنني مشغول بالدراسة وهذا هو السبب. في الحقيقة لم أكن أنوي أن أكتب أي شيء، ولكني حاولت تسجيل الدخول في أحد المواقع فطلب مني استعمال أحد حسابات OpenID فقمت بتسجيل الدخول إلى حساب مدونتي عند Wordpress باعتباره OpenID صالح ففكرت أنه ربما يمكنني كتابة شيء ما في حال زار أحد هذه المدونة. سأكتفي إذاً بوضع بعض الروابط المفيدة المتعلقة بالإصدار القادم من #C، أي C# 4.0 : مستقبل #C : صفحة من MSDN يتحدث عن الميزات الجديدة في C# 4.0 (وتوفر تحميل مستند يلخص هذه الميزات) والتي يمكن تلخصها بثلاث نقاط سريعة : جعل اللغة أكثر ديناميكية : عن طريق دعم برمجة الأصناف الديناميكية والتعامل مع اللغات الديناميكية كلغة روبي. التعامل مع عناصر COM بمرونة. تسهيل التعامل مع الـ..، الـ...، إحم، في الحقيقة نسيت كيف تترجم إلى العربية، باختصار تسهيل التعامل مع الـParameters عن طريق دعم الـParameters الاختيارية ودعم تمرير الـParameters باستخدام اسمها بدلاً من الترتيب المرتبة وفقه في تعريف الإجراء (Method) الذي تقوم باستدعائه. كما يظهر بموضوح في هذا الإصدار من اللغة محاولة مايكروسوفت تضييق الهوة بين لغتي #C و VB عن طريق محاولة التقريب بينهما من حيث الميزات مع المحافظة على الاختلاف بالمظهر العام فقط (كشكل الكود مثلاً). 10-4 : عروض فيديو قصيرة تعرضها القناة التاسعة التابعة لـMSDN وتظهر فيها الميزات الجديدة في NET 4.0. و Visual Studio 2010 وهي مسلية ومفيدة جداً، أنصحك بمشاهدتها. هذا هو كل ما لدي الآن، أستودعكم الله.

تم الانتقال إلى #C بنجاح

منذ أن بدأت باستخدام دوت نيت منذ عدة سنوات كانت لغة فيجوال بيسك دوت نيت المفضلة لدي (فقد كنت أبرمج بفيجوال بيسك 6 قبل ظهور الدوت نيت) و رغم ذلك، كان Syntax لغة #C مألوفاً لدي، كنت أستطيع أن أكتب و أقرأ كود #C بدون مشاكل، و لكن كمبرمج فيجوال بيسك دوت نيت، أي لم أكن أستغل الميزات الموجودة في #C و الناقصة في فيجوال بيسك دوت نيت، فهناك الكثير من الميزات، أذكر منها : unsafe code, static classes, auto-implemented properties, partial interfaces, anonymous methods ، و غيرها... و لكن ما الفائدة إذاً إن لم أكن أستغل تلك الميزات؟ ربما هناك فائدة هي القدرة على التعامل مع أمثلة و مقالات #C و كذلك مع مبرمجيها، و لكنها فائدة محدودة. و أخيراً و قبل عدة أسابيع قررت الانتقال *بشكل نهائي* إلى #C، قمت بقراءة بعض الكتب و المقالات فعرفت الفروق بين #C و VB.NET و عرفت ما تمتاز به #C على VB.NET و عرفت الميزات الجديدة في C# 3.0، قمت بقراءة العديد و العديد من الأمثلة و كتابة بعض الكودات بنفسي باستخدام كل ميزات اللغة حتى أصبحت معتاداً عليها تماماً. يمكنني القول أخيراً أنني إن أردت إنشاء برنامج ما فسأقوم بذلك باستخدام #C بسهولة أكبر من VB.NET، رائع! طبعاً لابد من شكر أستاذنا وسام مرة أخرى، فقد شجعني أكثر من مرة على القيام بهذه الخطوة حتى فعلتها أخيراً :)

كيف تكون المبرمج الأفضل

كتبت التالي في موقع الشبكة العربية لمطوري الألعاب و أعيد كتابته هنا إن لم تكن قد قرأته : قرأت اليوم في أحد الموقع مقالة يقول كاتبها أن هناك العشرات و العشرات من المقالات التي تعطيك نصائح لتتعلم البرمجة و تطور خبرتك فيها من جميع النواحي، فهناك نصائح لكتابة كود أفضل، نصائح للتعامل بشكل أفضل مع الزبائن، نصائح تعلمك تنظيم المشاريع و غيرها، و قد أراد جمع كل تلك النصائح في صفحة واحدة، فوضع واحد و تسعين نصيحة مختصرة مع رابط لصفحة تشرح كل نصيحة بالتفصيل. يبدو أن الصفحة الأصلية قد تعطلت لسبب ما، و لكني وجدت نسخة عن الصفحة الأصلية. هناك الكثير من الروابط اللطيفة، فمثلاً الرابط الثاني في الصفحة "How to be a Programmer: A Short, Comprehensive, and Personal Summary" يحوي وحده عشرات النصائح، و هناك الموضوع  المضحك "Signs that you are a bad programmer" و هو يقدم لك العديد من النصائح عن طريق مساعدتك في تقييم مستواك البرمجي (هل أنت مبرمج متوسط، سيء، أم من الأفضل أن تبحث عن مستقبلك في مهنة أخرى) فمثلاً إن لم تستطتع التأكد من ناتج الكود التالي بعد النظرة الأولى فمستقبلك سيكون أكثر إشراقاً في حال عملت سباكاً! a = 5 b = 10 a = b print a

الملفات موجودة بالفعل، NET Compact Framework Cabs.

حاولت تشغيل أحد البرامج على جهاز ويندوز موبايل 5 الذي أستعمله فوجدته يطلب NET Compact Framework 3.5.، بحثت عنه على الإنترنت لأقوم بتحميله فوجدت أن حجم التحميل 33 ميغابايت و هو حجم كبير جداً لأحمله باستخدام خط الإنترنت الديال-آب الذي أستعلمه. السبب في كبر حجم الملف هو أنه يحوي ملفات الـCab لمختلف أنظمة التشغيل و لمختلف أنواع المعالجات و هو ما لن أحتاجه بالطبع، كنت أتمنى أن أستطيع تحميل ملف Cab وحيد لويندوز موبايل 5 بمعالج ARMV4I و بحجم صغير و انتهى الأمر. ما الحل إذن؟ فكرت في Visual Studio 2008، بما أنه يقدم ميزة تطوير البرامج لهذا النظام فلا شك أنه يوفر الملفات الضرورية لتشغيل هذه البرامج على هذا النظام، قمت بالبحث في مجلدات البرنامج، و فعلاً وجدت الملفات كلها في المسار التالي : C:\Program Files\Microsoft.NET\SDK\CompactFramework وجدت في هذا المجلد مجلدين آخرين، الأول و اسمه v2.0 و فيه مجلد آخر اسمه WindowsCE يحوي المجلدين wce400 و wce500 و هما يحويان ملفات NETCF 2.0. لأنواع الأنظمة المختلفة. و أما الثاني و هو v3.5 فهو يحوي في المجلد WindowsCE ملفات NETCF 3.5. لأنواع الأنظمة المختلفة أيضاً. أرجو أن تفيدك هذه المعلومة إن واجهت نفس المشكلة التي واجهتها.

GamerTag؟ هه؟

أثناء تصفح سريع لمنتديات XNA لاحظت أن أحدهم سأل سؤالاً يستحق الإجابة عليه، و باعتبار أن هذه المرة الأولى التي أستعمل فيها هذه المنتديات فقد توقعت أن تتطلب تسجيلاً ما و لكني توقعت أن يكون بسيطاً كعادة مواقع مايكروسوفت التي تستخدم خدمة مايكروسوفت الموحدة Passport، ضغطت على زر Sign In فتفاجأت أن الموقع يطلب "Xbox Live Gamertag"، ماذا؟ هل إن استعملت XNA لبرمجة ألعاب الكمبيوتر عليَّ أن أسجل في موقع Xbox؟ لم أجد بداً من التوجه إلى الرابط الذي وضعوه لأحصل على هذا الـGamertag، واجهت متاعب كبيرة و لم أستطع الوصول إلى صفحة التسجيل، كل مرة أحاول الدخول إلى صفحة التسجيل لأجد نفسي في صفحة للألعاب، يا سلام! بحث في الإنترنت عن طريقة للتسجيل في هذا الموقع العظيم، فوجدت الحل في أحد المنتديات، توجهت مرة أخرى إلى الرابط الذي وضعه هذا المنتدى لأجد نفسي في صفحة تسجيل حقيقة هذه المرة، هل تنتظر مايكروسوفت منّا الضياع في هذه المتاهات للتسجيل في هذا الموقع؟ بعد هذه المعركة حاولت التسجيل لأجد أن خانة تاريخ الميلاد غير قابلة للتعديل و لأجد أن موقع إكس-بوكس يمنعني من التسجيل. لماذا؟ إنك دون السن المطلوب يا بني. عفواً؟ دون السن المطلوب من أجل ماذا؟ من أجل أن أساعد مبرمجي XNA؟ دخلت إلى موقع الـProfile الخاص بمايكروسوفت لأعدل تاريخ ميلادي لأجد أن التعديل غير ممكن أيضاً، عدت فقرأت في ذلك المنتدى الرائع حلاً ذكياً، ادخل إلى موقع هوتميل و قم بتعديل تاريخ ميلادك من هناك، قمت بتعديله مرة أخرى ليكتشف موقع Xboxالذكي أنني قمت بتغيير تاريخ ميلادي الآن، قمت بإزالة الـCookies فلم يعرف الموقع الذكي شيئاً، و في النهاية حصلت على الـGamerTag! أي شرف عظيم هذا؟! يبدو أن الأمر أصعب من الحصول على جنسية للسكن على عطارد! مايكروسوفت! لا تجعلوا مواقعكم عقبة أمام المتطوعين ليساعدوا مجتمعاتكم، كونوا أكثر ذكاءً!

تعلم XNA بسهولة و مجاناً، برمج ألعابك الخاصة بدون أن تعرف أي شيء!

أراني أحد الأصدقاء سلسلة تعليم فيديو من بضعة ساعات تضعك في أول الطريق للبدأ ببرمجة ألعابك الخاصة و هي لا تتطلب أي معرفة سابقة من أي نوع، تعلمك السلسلة XNA و #C في نفس الوقت و من البداية و بأسلوب بسيط و سهل. إن كنت لا تعرف ما هي منصة XNA فهي ببساطة منصة برمجية مجانية و سهلة تستخدم لتطوير ألعاب الكمبيوتر و الـXBox360 عن طريق اللغات المدارة Managed Languages و أبرزها #C و VB.NET فهي تبرمَج باستخدام لغات برمجة سهلة أيضاً. إن كنت مهتماً فقم بتحميل سلسلة الفيديو مجاناً، و بالمناسبة أحجام ملفات الفيديو صغيرة لدرجة أنك تستطيع تحميلها باستخدام اتصال إنترنت "ديال آب"!

كل شيء عن LINQ

تعجبني جداً هذه الصفحات التي تقوم بتجميع كل الروابط المهمة عن موضوع ما في مكان واحد، و هذا ما فعله Charlie Calvert في مدونته عندما كتب تدوينة Links to LINQ، و هي تدوينة تتحدث باستمرار ليكتب فيها عن آخر الروابط المهمة في مجال LINQ، ما يلفت النظر بشكل خاص قسم LINQ Providers و الذي يقدم العشرات من هذه الـProviders في عدد من الاختصاصات (المواقع الضخمة، أنظمة قواعد البيانات الشهيرة، ...) و بالطبع دعم لينك في لغات برمجة أخرى كـPHP.

مشروع وادي الملوك، كن في اللعبة!

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