أهم أقسام المدونة

الصفحات

الجمعة، 25 يونيو 2021

تطبيع فواصل الأسطر

 تطبيع فواصل الأسطر Normalizing Line Terminator قبل تهويش النص Hashing:

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

Assert.AreEqual(GetHash(result.Output), "66C5600E6E58ABAD535095743307BBA6")

حيث إن result.Output هي النتيجة التي حصلنا عليها من مولد الكود، وقد أرسلناها إلى الدالة GetHash لتطبيق خوارزمية MD5 عليها، ومن ثم نتأكد أن بصمة الملف تساوي 66C5600E6E58ABAD535095743307BBA6.

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

فحينما أرسلت الكود إلى GitHub قام بتحويل نهايات السطور من الرمزين VBCrLf (\r\n في سي شارب) إلى vbLf (\n في سي شارب)، وهذا غير النص الناتج من مولد الكود!.. لا أدري هل حدث هذا التغيير عند رفع ملفات الكود أم عند قيامي بتعديل كود ملف الاختبار يدويا في موقع جيتهاب باستخدام النسخ والإلصاق في صفحة التعديل.. أيا يكن، ولتجنب مثل هذه المشاكل مستقبلا، يجب علينا تطبيع قيم النصوص في مشاريع الاختبار قبل إجراء أي مقارنة، باستدعاء وسيلة الاستبدال التالية:

Replace(vbCrLf, vblf)

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

تحذير:

خوارزمية MD5 غير آمنة لتهويش كلمات المرور، لكنها مناسبة للحصول على بصمة (قيمة تأكيدية Checksum) للنصوص والملفات للتأكد من عدم حدوث تغيير بها.. ويمكنك استخدام خوارزمية SHA-2 لتهويش كلمات السر.

 

الخميس، 24 يونيو 2021

Test Project & NnuGet

 إنشاء مشروع اختبار Test Project وحزمة توزيع NuGet لمشروع مولد السجلات Record Generator

 اللمسات الأخيرة على مشروع مولد السجلات المرجعية Records في فيجوال بيزيك  باستخدام مولدات الكود Source Generators:

  تطوير صيغة كود السجل باستخدام مفهوم Syntax Lowering.

 إنشاء مشاريع اختبار NUnit Test Projects واستخدامها لتتبع أخطاء مشروع مولد الكود.

 إنشاء حزمة توزيع NuGet لمولد السجلات المرجعية بسهولة من خلال بمجرد ضبط خصائصها في ملف المشروع vbproj.

Roslyn

للمحترفين: استخدام Roslyn لتحليل صياغة الأكواد Syntax Parsing في مشاريع مولدات الكود Code Generators

روزلين Roslyn هو  مترجم كود سي شارب وفيجيوال بيزيك، وبإمكانك استخدامه لفعل أشياء مدهشة.. دعونا نأخذ فكرة بسيطة عنه، ونتعرف على أهم أربع مكونات له وهي SyntaxFactory، SyntaxTree, Compilation, SemanticModel ونرى كيف استخدمتها عمليا لكتابة مولد السجلات Record Generator.

الثلاثاء، 22 يونيو 2021

موكب المومياوات 9

  موكب المومياوات: 9- متعلمون بلا علم.. كيف نبني مستقبل أوطاننا؟

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

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

وهل حل هذا التخلف العلمي، تدريس الهيروغلوفية والفرنسية والصينية في المدارس؟

الأربعاء، 16 يونيو 2021

مولدات الكود Source Generators

استخدام مولدات الكود Source Generators لإنشاء سجل مرجعي Record في VB.NET:

مولدات الكود Source Generators هي ميزة جديدة أضيفت إلى سي شارب وفيجوال بيزيك دوت نت منذ التحديث 16.9 لفيجوال ستديو، وهي تتيح لك فعل الكثير من الأشياء المدهشة التي لم تكن تحلم بها من قبل... وسنرى في الفيديو مثالا قويا على هذا، وهو تعريف كود خاص لإنتاج Record في فيجوال بيزيك، بإمكانيات تتفوق على مثيله في سي شارب، وسأشرح لك في الفيديو كيف استخدمت الأدوات التي يقدمها لنا مترجم Roslyn مثل شجرة الصياغة SyntaxTree ومصنع الأكواد SyntaxFactory لتحيل الصيغة الخاصة التي استخدمتها لتعريف السجل المرجعي، وهو ما يفتح الباب أمامنا لإضافة صياغات جديدة للغة VB.NET بكل سهولة ويسر!

شاهد الفيديو :

وقد حللت في الجزء الثاني من الفيديو مشكلة تحميل الحزم البرمجية NuGets، وشرحت كيف حللت مشكلة إرسال القيمة Nothing إلى المعاملات الاختيارية Optional parameters:

وفي الجزء ثالث شرحت مولد كود آخر وظيفته إنتاج المؤشرات الثنائية Flags لإنتاج فئة تقدم كل الدوال اللازمة لإجراء العمليات الثنائية الهامة Bitwise Operations على قيم المؤشر بكل سهولة:



الاثنين، 14 يونيو 2021

موكب المومياوات 8

 موكب المومياوات: 8- اسمه حر وليس حورس!! أمثلة لتزييف نطق أسماء الفراعنة والآلهة المصرية القديمة!

ما الهدف من تدريس النقش المقدس (أو ما يسمونه الهيروغلوفية باللغة الإغريقية) في التعليم الابتدائي في مصر بدءا من العام القادم؟.. وهل نطقها الحالي صحيح، أم أنه في أغلبه نطق يوناني؟

هل النصوص المكتوبة في أي لغة تدل دلالة تامة على نطقها؟

أمثلة لألفاظ عربية في أسماء الفراعنة وأسماء مدنهم وأسماء معبوداتهم!

ما الفائدة من تعليم الفرنسية والصينية والهيروغلوفية في المدارس بينما المدارس فاشلة في تعليم العلوم التجريبية؟