مغامرات برمجية

رحلة داخل عقل مبرمج مجنون

تعديل ما لا يمكن تعديله باستخدام Extension Methods

نّشر في: 2012/10/30
تعليقات: لا تعليقات

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

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

أحدها كان الإجراء GetAllReports التابع للكلاس ReportDAL والذي يعطيني جميع التقارير قي سنة معينة. المشكلة كانت تكمن في أن هناك عملية تتكرر كثيراً وهي تصفية الناتح كثر بنوع التقرير. العملية ليست صعبة. سطرين أو ثلاثة باستخدام Linq كان كفيلاً بهذا. ولكن هذا الكود بدأ يتكرر بكثرة في أنحاء البرنامج، لذا أصبح من اللازم أن يصبح هذا الكود الجديد هو الآخر جزئاً من الـDAL. ولكن الكود لا يمكن تعديله (دون دفع نقود).

الحل الكلاسيكي كان أن نطور كلاي جديد يرث الـClass القديم ويضيف الدالة الجديدة. ولكن هذا مزعج حيث أنه علي تعديل البرنامج كله ليستخدم الكلاس الجديد. هنا تأتي فائدة الـExtension Methods.

(اقرأ المزيد …)

Post to Twitter

تصميم قواعد بيانات التقارير فائقة السرعة

نّشر في: 2012/10/08
تعليقات: 2 تعليق


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

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

هناك عدة حلول سريعة، يعرفها معظمنا. وضع الاستعلام داخل Stored Procedure مثلاً، للاستفادة من سرعتها. إضافة index مناسبة للجداول التي يتم الاستعلام منها. وطبعاَ تحسين أداء الاستعلام بالتدقيق في الاستخدام الصحيح لعمليات Join وGroup وغيرها من العمليات المكلفة (إلقاء نظرة على الـexecution plan الخاصة بالاستعلام مقيد جداً).

ولكن أحياناً كثيرة كل ما سبق لا ينجح في تسريع الاستعلام بشكل مقبول. بالذات عندما يكون لدينا كم هائل من البيانات التي يجب أن نقوم بعمليات Join وGroup عليها.

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

(اقرأ المزيد …)

Post to Twitter

هام: سرقة أكثر من 6.1 مليون كلمة سر من LinkedIn

نّشر في: 2012/06/06
تصنيفات: أخبار تقنية
وسوم: ,
تعليقات: 2 تعليق

ظهر ملف نصي في أحد منتديات الهاكنغ الروسية يحتوي على أكثر من 6.1 مليون كلمة سر مشفرة بطريقة SHA-1 Hashing من دون أسماء مستخدمين. القائمة حقيقية. هناك العديد من مستخدمي LinkedIn (بما فيهم أنا) وجدوا كلمات سرهم موجودة في هذه القائمة. يمكنكم الحصول على القائمة من هذا الرابط:

http://www.mediafire.com/?n307hutksjstow3

كيف تبحث عن كلمة سرك في الملف:

  1. حول كلمة سرك إلى Hash باستخدام SHA-1. يمكنك استخدام هذا الموقع. سيصبح لديك فيمة مثل 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
  2. افتح القائمة بمحرر نصوص (أنا أستخدم ‎Notepad+‎+‎) لكن لا تبحث عن قيمة الـhash كاملة. احذف الحروف الخمسة الأولى. باستخدام المثال السابق سنبحث عن 1e4c9b93f3f0682250b6cf8331b7ee68fd8

(اقرأ المزيد …)

Post to Twitter

Light Table – أداة تطوير كود بشكل مختلف

نّشر في: 2012/05/15
تصنيفات: أخبار تقنية
وسوم: ,
تعليقات: 2 تعليق

أدوات تطوير الكود (أو IDE) كثيرة جداً هذه الأيام. من البالغة البساطة مثل Notepad++ إلى الأكثر تعقيداً مثل Visual Studio وEclipse. لكنها كلها في النهاية لها مبدأ مشترك: التعامل مع الكود على أنه مجموعة من الملفات. ولكن هذه مجرد طريقة التخزين. بينما عندما تنظر إلى الكود من وجهة نظر برمجية بحتة، ستجد أن الكود في الواقع هو مجموعة من الدوال والكلاسات وما إلى ذلك. ورغم أن العادة جرت على أن يكون كل كلاس في ملف منفصل، تبقى هذه ناحية تنظيمية بحتة تعتمد على المبرمج. وماذا عن الدوال؟ تقسيمها إلى ملفات منفصلة موضوع شائك هو الآخر. من هذا المنطلق قام مبرمج يدعى Chris Granger بطرح فكرة مشروع IDE جديد سماه Light Table، تكون وحدة الكود ليست تخزينية الاتجاه بل برمجية. و هنا فيديو عن المشروع:

(اقرأ المزيد …)

Post to Twitter

مشروع: تطبيق Ray Tracing باستخدام C‎#‎ – الحلقة 3 – الظلال والانعكاسات

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

 

Post to Twitter

استبدال Java بـC‎#‎ في كود نظام Android

نّشر في: 2012/05/03
تصنيفات: أخبار تقنية
وسوم: , , , ,
تعليقات: 4 تعليق

Android in C#

قبل بضعة أيام أعلنت شركة Xamarin أنها نجحت في استبدال محرك Dalvik (الذي يعمل بـJava) بمحرك Mono (الذي يعمل بـC‎#‎) في نظام تشغيل 4.0 Android للأجهزة المحمولة. الخبر من مدونة الشركة.

Xamarin هم الفريق وراء Mono، النسخة المتعددة المنصات من Microsoft .NET. أحد منتجاتهم هي Mono for Android الذي يسمح لك ببرمجة تطبيقات الـAndroid باستخدام الدوت نت (هناك نسخة لأجهزة iOS أيضاً). وقاموا بهذا الاستبدال كتجربة لاكتشاف فروقات الأداء بين Mono و Dalvik. والنتائج مثيرة جداً للاهتمام!

(اقرأ المزيد …)

Post to Twitter

مشروع: تطبيق Ray Tracing باستخدام C‎#‎ – الحلقة 2 – الإضاءة والتظليل


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

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

(اقرأ المزيد …)

Post to Twitter

مشروع: تطبيق Ray Tracing باستخدام C‎#‎ – الحلقة 1 – الأساسيات البحتة

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

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

(اقرأ المزيد …)

Post to Twitter

المزيد من الكورسات المجانية على الويب

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

(اقرأ المزيد …)

Post to Twitter

لماذا أكره Java و ‎C‎+‎+‎ و ‎C‎#‎ (كلغات تعليمية)

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

رغم أنني تركت مقاعد الدراسة منذ أيام كان رجال الكهف يصارعون الديناصورات من أجل حفنة دراهم، إلا أنني أحب من وقت لآخر متابعة ما يجري في الجامعات وتطور التعليم الحاسوبي بها. وهناك توجه مقلق نحو اعتماد لغات Java و ‎C‎+‎+‎ و ‎C‎#‎ كلغات تعليمية. أنا لا أنقص من قدر هذه اللغات الجليلة والمخضرمة، ولكنني أسلط الضوء على ما أراه غير مناسباً لها.

(اقرأ المزيد …)

Post to Twitter

page 1 of 5 »

مرحباً , تاريخ اليوم هو الثلاثاء, 2014/09/16